mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
perf intel-pt: Fix FUP packet state
commit 401136bb084fd021acd9f8c51b52fe0a25e326b2 upstream. While walking code towards a FUP ip, the packet state is INTEL_PT_STATE_FUP or INTEL_PT_STATE_FUP_NO_TIP. That was mishandled resulting in the state becoming INTEL_PT_STATE_IN_SYNC prematurely. The result was an occasional lost EXSTOP event. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Reviewed-by: Andi Kleen <ak@linux.intel.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: stable@vger.kernel.org Link: http://lore.kernel.org/lkml/20200710151104.15137-2-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
b8e3a27c37
commit
f3513136ff
@ -1129,6 +1129,7 @@ static int intel_pt_walk_fup(struct intel_pt_decoder *decoder)
|
||||
return 0;
|
||||
if (err == -EAGAIN ||
|
||||
intel_pt_fup_with_nlip(decoder, &intel_pt_insn, ip, err)) {
|
||||
decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
|
||||
if (intel_pt_fup_event(decoder))
|
||||
return 0;
|
||||
return -EAGAIN;
|
||||
@ -1780,17 +1781,13 @@ next:
|
||||
}
|
||||
if (decoder->set_fup_mwait)
|
||||
no_tip = true;
|
||||
if (no_tip)
|
||||
decoder->pkt_state = INTEL_PT_STATE_FUP_NO_TIP;
|
||||
else
|
||||
decoder->pkt_state = INTEL_PT_STATE_FUP;
|
||||
err = intel_pt_walk_fup(decoder);
|
||||
if (err != -EAGAIN) {
|
||||
if (err)
|
||||
return err;
|
||||
if (no_tip)
|
||||
decoder->pkt_state =
|
||||
INTEL_PT_STATE_FUP_NO_TIP;
|
||||
else
|
||||
decoder->pkt_state = INTEL_PT_STATE_FUP;
|
||||
return 0;
|
||||
}
|
||||
if (err != -EAGAIN)
|
||||
return err;
|
||||
if (no_tip) {
|
||||
no_tip = false;
|
||||
break;
|
||||
@ -2375,15 +2372,11 @@ const struct intel_pt_state *intel_pt_decode(struct intel_pt_decoder *decoder)
|
||||
err = intel_pt_walk_tip(decoder);
|
||||
break;
|
||||
case INTEL_PT_STATE_FUP:
|
||||
decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
|
||||
err = intel_pt_walk_fup(decoder);
|
||||
if (err == -EAGAIN)
|
||||
err = intel_pt_walk_fup_tip(decoder);
|
||||
else if (!err)
|
||||
decoder->pkt_state = INTEL_PT_STATE_FUP;
|
||||
break;
|
||||
case INTEL_PT_STATE_FUP_NO_TIP:
|
||||
decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
|
||||
err = intel_pt_walk_fup(decoder);
|
||||
if (err == -EAGAIN)
|
||||
err = intel_pt_walk_trace(decoder);
|
||||
|
Loading…
x
Reference in New Issue
Block a user