mirror of
https://github.com/torvalds/linux.git
synced 2024-12-08 03:52:16 +00:00
bf2e710b3c
If a process is in a mountns and has symbols in /tmp/perf-<pid>.map, look first in the namespace using the tgid for the pidns that the process might be in. If the map isn't found there, try looking in the mountns where perf is running, and use the tgid that's appropriate for perf's pid namespace. If all else fails, use the original pid. This allows us to locate a symbol map file in the mount namespace, if it was generated there. However, we also try the tool's /tmp in case it's there instead. Signed-off-by: Krister Johansen <kjlx@templeofstupid.com> Tested-by: Brendan Gregg <brendan.d.gregg@gmail.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas-Mich Richter <tmricht@linux.vnet.ibm.com> Link: http://lkml.kernel.org/r/1499305693-1599-3-git-send-email-kjlx@templeofstupid.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
63 lines
1.3 KiB
C
63 lines
1.3 KiB
C
/*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License, version 2, as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* Copyright (C) 2017 Hari Bathini, IBM Corporation
|
|
*/
|
|
|
|
#ifndef __PERF_NAMESPACES_H
|
|
#define __PERF_NAMESPACES_H
|
|
|
|
#include "../perf.h"
|
|
#include <linux/list.h>
|
|
#include <linux/refcount.h>
|
|
|
|
struct namespaces_event;
|
|
|
|
struct namespaces {
|
|
struct list_head list;
|
|
u64 end_time;
|
|
struct perf_ns_link_info link_info[];
|
|
};
|
|
|
|
struct namespaces *namespaces__new(struct namespaces_event *event);
|
|
void namespaces__free(struct namespaces *namespaces);
|
|
|
|
struct nsinfo {
|
|
pid_t pid;
|
|
pid_t tgid;
|
|
pid_t nstgid;
|
|
bool need_setns;
|
|
char *mntns_path;
|
|
refcount_t refcnt;
|
|
};
|
|
|
|
struct nscookie {
|
|
int oldns;
|
|
int newns;
|
|
};
|
|
|
|
int nsinfo__init(struct nsinfo *nsi);
|
|
struct nsinfo *nsinfo__new(pid_t pid);
|
|
struct nsinfo *nsinfo__copy(struct nsinfo *nsi);
|
|
void nsinfo__delete(struct nsinfo *nsi);
|
|
|
|
struct nsinfo *nsinfo__get(struct nsinfo *nsi);
|
|
void nsinfo__put(struct nsinfo *nsi);
|
|
|
|
void nsinfo__mountns_enter(struct nsinfo *nsi, struct nscookie *nc);
|
|
void nsinfo__mountns_exit(struct nscookie *nc);
|
|
|
|
static inline void __nsinfo__zput(struct nsinfo **nsip)
|
|
{
|
|
if (nsip) {
|
|
nsinfo__put(*nsip);
|
|
*nsip = NULL;
|
|
}
|
|
}
|
|
|
|
#define nsinfo__zput(nsi) __nsinfo__zput(&nsi)
|
|
|
|
#endif /* __PERF_NAMESPACES_H */
|