Re: [PATCH v2 4/4] perf arm-spe: Support hardware-based PID tracing
From: Namhyung Kim <namhyung@kernel.org>
Date: 2021-11-11 07:59:20
Also in:
linux-perf-users, lkml
Hi Leo, On Wed, Nov 10, 2021 at 11:41 PM Leo Yan [off-list ref] wrote:
On Wed, Nov 10, 2021 at 11:28:48PM -0800, Namhyung Kim wrote: [...]quoted
quoted
+static void arm_spe_set_pid_tid_cpu(struct arm_spe *spe, + struct auxtrace_queue *queue) +{ + struct arm_spe_queue *speq = queue->priv; + pid_t tid; + + tid = machine__get_current_tid(spe->machine, speq->cpu); + if (tid != -1) { + speq->tid = tid; + thread__zput(speq->thread); + } else + speq->tid = queue->tid; + + if ((!speq->thread) && (speq->tid != -1)) { + speq->thread = machine__find_thread(spe->machine, -1, + speq->tid); + } + + if (speq->thread) { + speq->pid = speq->thread->pid_; + if (queue->cpu == -1) + speq->cpu = speq->thread->cpu; + } +} + +static int arm_spe_set_tid(struct arm_spe_queue *speq, pid_t tid) +{ + struct arm_spe *spe = speq->spe; + int err = machine__set_current_tid(spe->machine, speq->cpu, tid, tid);I think we should pass -1 as pid as we don't know the real pid.AFAICT, I observe one case for machine__set_current_tid() returning error is 'speq->cpu' is -1 (this is the case for per-thread tracing). In this case, if pass '-1' for pid/tid, it still will return failure. So here should return the error as it is. Am I missing anything?
I'm not saying about the error. It's about thread status. In the machine__set_current_tid(), it calls machine__findnew_thread() with given pid and tid. I suspect it can set pid to a wrong value if the thread has no pid value at the moment. Thanks, Namhyung _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel