Messages in this thread | | | Date | Fri, 19 Jun 2015 13:11:18 -0300 | From | Arnaldo Carvalho de Melo <> | Subject | Re: [PATCH V6 15/17] perf tools: Intel BTS to always update thread stack trace number |
| |
Em Fri, May 29, 2015 at 04:33:43PM +0300, Adrian Hunter escreveu: > The enhanced thread stack is used by higher layers but still requires > the trace number. The trace number is used to distinguish discontinuous > sections of trace (for example from Snapshot mode or Sample mode), which > cause the thread stack to be flushed. > > Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> > --- > tools/perf/util/intel-bts.c | 18 ++++++++++++++---- > 1 file changed, 14 insertions(+), 4 deletions(-) > > diff --git a/tools/perf/util/intel-bts.c b/tools/perf/util/intel-bts.c > index b068860..cd7bde3 100644 > --- a/tools/perf/util/intel-bts.c > +++ b/tools/perf/util/intel-bts.c > @@ -27,6 +27,8 @@ > #include "machine.h" > #include "session.h" > #include "util.h" > +#include "thread.h" > +#include "thread-stack.h" > #include "debug.h" > #include "tsc.h" > #include "auxtrace.h" > @@ -443,19 +445,22 @@ static int intel_bts_process_buffer(struct intel_bts_queue *btsq, > > static int intel_bts_process_queue(struct intel_bts_queue *btsq, u64 *timestamp) > { > - struct auxtrace_buffer *buffer = btsq->buffer; > + struct auxtrace_buffer *buffer = btsq->buffer, *old_buffer = buffer; > struct auxtrace_queue *queue; > + struct thread *thread; > int err; > > if (btsq->done) > return 1; > > if (btsq->pid == -1) { > - struct thread *thread; > - > - thread = machine__find_thread(btsq->bts->machine, -1, btsq->tid); > + thread = machine__find_thread(btsq->bts->machine, -1, > + btsq->tid); > if (thread) > btsq->pid = thread->pid_; > + } else { > + thread = machine__findnew_thread(btsq->bts->machine, btsq->pid, > + btsq->tid);
Humm, so what will be done with the reference count you got from machine__findnew_thread()? You have to drop it when you're done with using this thread.
> } > > queue = &btsq->bts->queues.queue_array[btsq->queue_nr]; > @@ -485,6 +490,11 @@ static int intel_bts_process_queue(struct intel_bts_queue *btsq, u64 *timestamp) > intel_bts_do_fix_overlap(queue, buffer)) > return -ENOMEM; > > + if (!btsq->bts->synth_opts.callchain && thread && > + (!old_buffer || btsq->bts->sampling_mode || > + (btsq->bts->snapshot_mode && !buffer->consecutive))) > + thread_stack__set_trace_nr(thread, buffer->buffer_nr + 1); > + > err = intel_bts_process_buffer(btsq, buffer); > > auxtrace_buffer__drop_data(buffer); > -- > 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in Please read the FAQ at http://www.tux.org/lkml/
| |