Messages in this thread | | | Subject | Re: [PATCH] perf tools: intel-pt: fix endless record after being terminated | From | Adrian Hunter <> | Date | Mon, 13 Jan 2020 16:47:18 +0200 |
| |
On 2/01/20 9:42 am, Wei Li wrote: > In __cmd_record(), when receiving SIGINT(ctrl + c), a done flag will > be set and the event list will be disabled by evlist__disable() once. > > While in auxtrace_record.read_finish(), the related events will be > enabled again, if they are continuous, the recording seems to be endless. > > If the intel_pt event is disabled, we don't enable it again here. > > Before the patch: > huawei@huawei-2288H-V5:~/linux-5.5-rc4/tools/perf$ ./perf record -e \ > intel_pt//u -p 46803 > ^C^C^C^C^C^C > > After the patch: > huawei@huawei-2288H-V5:~/linux-5.5-rc4/tools/perf$ ./perf record -e \ > intel_pt//u -p 48591 > ^C[ perf record: Woken up 0 times to write data ] > Warning: > AUX data lost 504 times out of 4816! > > [ perf record: Captured and wrote 2024.405 MB perf.data ] > > Signed-off-by: Wei Li <liwei391@huawei.com>
All ->read_finish() implementations seem the same, so can we make a common helper auxtrace_read_finish() and set all .read_finish = to that.
> --- > tools/perf/arch/x86/util/intel-pt.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/tools/perf/arch/x86/util/intel-pt.c b/tools/perf/arch/x86/util/intel-pt.c > index 20df442fdf36..1e96afcd8646 100644 > --- a/tools/perf/arch/x86/util/intel-pt.c > +++ b/tools/perf/arch/x86/util/intel-pt.c > @@ -1173,9 +1173,13 @@ static int intel_pt_read_finish(struct auxtrace_record *itr, int idx) > struct evsel *evsel; > > evlist__for_each_entry(ptr->evlist, evsel) { > - if (evsel->core.attr.type == ptr->intel_pt_pmu->type) > - return perf_evlist__enable_event_idx(ptr->evlist, evsel, > - idx); > + if (evsel->core.attr.type == ptr->intel_pt_pmu->type) { > + if (evsel->disabled) > + return 0; > + else > + return perf_evlist__enable_event_idx( > + ptr->evlist, evsel, idx); > + } > } > return -EINVAL; > } >
| |