mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
perf thread: Add accessor functions for thread
Using accessors will make it easier to add reference count checking in later patches. Committer notes: thread->nsinfo wasn't wrapped as it is used together with nsinfo__zput(), where does a trick to set the field with a refcount being dropped to NULL, and that doesn't work well with using thread__nsinfo(thread), that loses the &thread->nsinfo pointer. When refcount checking is added to 'struct thread', later in this series, nsinfo__zput(RC_CHK_ACCESS(thread)->nsinfo) will be used to check the thread pointer. Signed-off-by: Ian Rogers <irogers@google.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Ali Saidi <alisaidi@amazon.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com> Cc: Brian Robbins <brianrob@linux.microsoft.com> Cc: Changbin Du <changbin.du@huawei.com> Cc: Dmitrii Dolgov <9erthalion6@gmail.com> Cc: Fangrui Song <maskray@google.com> Cc: German Gomez <german.gomez@arm.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Ivan Babrou <ivan@cloudflare.com> Cc: James Clark <james.clark@arm.com> Cc: Jing Zhang <renyu.zj@linux.alibaba.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: John Garry <john.g.garry@oracle.com> Cc: K Prateek Nayak <kprateek.nayak@amd.com> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Leo Yan <leo.yan@linaro.org> Cc: Liam Howlett <liam.howlett@oracle.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Miguel Ojeda <ojeda@kernel.org> Cc: Mike Leach <mike.leach@linaro.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ravi Bangoria <ravi.bangoria@amd.com> Cc: Sean Christopherson <seanjc@google.com> Cc: Steinar H. Gunderson <sesse@google.com> Cc: Suzuki Poulouse <suzuki.poulose@arm.com> Cc: Wenyu Liu <liuwenyu7@huawei.com> Cc: Will Deacon <will@kernel.org> Cc: Yang Jihong <yangjihong1@huawei.com> Cc: Ye Xingchen <ye.xingchen@zte.com.cn> Cc: Yuan Can <yuancan@huawei.com> Cc: coresight@lists.linaro.org Cc: linux-arm-kernel@lists.infradead.org Link: https://lore.kernel.org/r/20230608232823.4027869-4-irogers@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
7ee227f674
commit
ee84a3032b
@@ -1386,12 +1386,13 @@ static int thread__read_fd_path(struct thread *thread, int fd)
|
||||
struct stat st;
|
||||
int ret;
|
||||
|
||||
if (thread->pid_ == thread->tid) {
|
||||
if (thread__pid(thread) == thread__tid(thread)) {
|
||||
scnprintf(linkname, sizeof(linkname),
|
||||
"/proc/%d/fd/%d", thread->pid_, fd);
|
||||
"/proc/%d/fd/%d", thread__pid(thread), fd);
|
||||
} else {
|
||||
scnprintf(linkname, sizeof(linkname),
|
||||
"/proc/%d/task/%d/fd/%d", thread->pid_, thread->tid, fd);
|
||||
"/proc/%d/task/%d/fd/%d",
|
||||
thread__pid(thread), thread__tid(thread), fd);
|
||||
}
|
||||
|
||||
if (lstat(linkname, &st) < 0 || st.st_size + 1 > (off_t)sizeof(pathname))
|
||||
@@ -1559,7 +1560,7 @@ static size_t trace__fprintf_comm_tid(struct trace *trace, struct thread *thread
|
||||
if (trace->multiple_threads) {
|
||||
if (trace->show_comm)
|
||||
printed += fprintf(fp, "%.14s/", thread__comm_str(thread));
|
||||
printed += fprintf(fp, "%d ", thread->tid);
|
||||
printed += fprintf(fp, "%d ", thread__tid(thread));
|
||||
}
|
||||
|
||||
return printed;
|
||||
@@ -2205,7 +2206,8 @@ static void thread__update_stats(struct thread *thread, struct thread_trace *ttr
|
||||
memset(new_errnos + stats->max_errno, 0, (err - stats->max_errno) * sizeof(u32));
|
||||
} else {
|
||||
pr_debug("Not enough memory for errno stats for thread \"%s\"(%d/%d), results will be incomplete\n",
|
||||
thread__comm_str(thread), thread->pid_, thread->tid);
|
||||
thread__comm_str(thread), thread__pid(thread),
|
||||
thread__tid(thread));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2550,7 +2552,7 @@ errno_print: {
|
||||
|
||||
if (child != NULL) {
|
||||
fprintf(trace->output, "%ld", ret);
|
||||
if (child->comm_set)
|
||||
if (thread__comm_set(child))
|
||||
fprintf(trace->output, " (%s)", thread__comm_str(child));
|
||||
thread__put(child);
|
||||
}
|
||||
@@ -3616,14 +3618,16 @@ static int trace__set_filter_loop_pids(struct trace *trace)
|
||||
struct thread *thread = machine__find_thread(trace->host, pids[0], pids[0]);
|
||||
|
||||
while (thread && nr < ARRAY_SIZE(pids)) {
|
||||
struct thread *parent = machine__find_thread(trace->host, thread->ppid, thread->ppid);
|
||||
struct thread *parent = machine__find_thread(trace->host,
|
||||
thread__ppid(thread),
|
||||
thread__ppid(thread));
|
||||
|
||||
if (parent == NULL)
|
||||
break;
|
||||
|
||||
if (!strcmp(thread__comm_str(parent), "sshd") ||
|
||||
strstarts(thread__comm_str(parent), "gnome-terminal")) {
|
||||
pids[nr++] = parent->tid;
|
||||
pids[nr++] = thread__tid(parent);
|
||||
break;
|
||||
}
|
||||
thread = parent;
|
||||
@@ -4322,7 +4326,7 @@ static size_t trace__fprintf_thread(FILE *fp, struct thread *thread, struct trac
|
||||
|
||||
ratio = (double)ttrace->nr_events / trace->nr_events * 100.0;
|
||||
|
||||
printed += fprintf(fp, " %s (%d), ", thread__comm_str(thread), thread->tid);
|
||||
printed += fprintf(fp, " %s (%d), ", thread__comm_str(thread), thread__tid(thread));
|
||||
printed += fprintf(fp, "%lu events, ", ttrace->nr_events);
|
||||
printed += fprintf(fp, "%.1f%%", ratio);
|
||||
if (ttrace->pfmaj)
|
||||
@@ -4344,7 +4348,9 @@ static unsigned long thread__nr_events(struct thread_trace *ttrace)
|
||||
return ttrace ? ttrace->nr_events : 0;
|
||||
}
|
||||
|
||||
DEFINE_RESORT_RB(threads, (thread__nr_events(a->thread->priv) < thread__nr_events(b->thread->priv)),
|
||||
DEFINE_RESORT_RB(threads,
|
||||
(thread__nr_events(thread__priv(a->thread)) <
|
||||
thread__nr_events(thread__priv(b->thread))),
|
||||
struct thread *thread;
|
||||
)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user