Lines Matching +full:proc +full:- +full:id

1 // SPDX-License-Identifier: GPL-2.0-only
33 const char *perf_ns__name(unsigned int id) in perf_ns__name() argument
35 if (id >= ARRAY_SIZE(perf_ns__names)) in perf_ns__name()
37 return perf_ns__names[id]; in perf_ns__name()
43 u64 link_info_size = ((event ? event->nr_namespaces : NR_NAMESPACES) * in namespaces__new()
50 namespaces->end_time = -1; in namespaces__new()
53 memcpy(namespaces->link_info, event->link_info, link_info_size); in namespaces__new()
73 int rv = -1; in nsinfo__init()
75 if (snprintf(oldns, PATH_MAX, "/proc/self/ns/mnt") >= PATH_MAX) in nsinfo__init()
78 if (asprintf(&newns, "/proc/%d/ns/mnt", nsi->pid) == -1) in nsinfo__init()
91 nsi->need_setns = true; in nsinfo__init()
92 nsi->mntns_path = newns; in nsinfo__init()
99 if (snprintf(spath, PATH_MAX, "/proc/%d/status", nsi->pid) >= PATH_MAX) in nsinfo__init()
106 while (getline(&statln, &linesz, f) != -1) { in nsinfo__init()
109 nsi->tgid = (pid_t)strtol(strrchr(statln, '\t'), in nsinfo__init()
111 nsi->nstgid = nsi->tgid; in nsinfo__init()
115 nsi->nstgid = (pid_t)strtol(strrchr(statln, '\t'), in nsinfo__init()
139 nsi->pid = pid; in nsinfo__new()
140 nsi->tgid = pid; in nsinfo__new()
141 nsi->nstgid = pid; in nsinfo__new()
142 nsi->need_setns = false; in nsinfo__new()
144 * at its proc information. In that case, save the pid but in nsinfo__new()
147 if (nsinfo__init(nsi) == -1) in nsinfo__new()
148 nsi->need_setns = false; in nsinfo__new()
150 refcount_set(&nsi->refcnt, 1); in nsinfo__new()
165 nnsi->pid = nsi->pid; in nsinfo__copy()
166 nnsi->tgid = nsi->tgid; in nsinfo__copy()
167 nnsi->nstgid = nsi->nstgid; in nsinfo__copy()
168 nnsi->need_setns = nsi->need_setns; in nsinfo__copy()
169 if (nsi->mntns_path) { in nsinfo__copy()
170 nnsi->mntns_path = strdup(nsi->mntns_path); in nsinfo__copy()
171 if (!nnsi->mntns_path) { in nsinfo__copy()
176 refcount_set(&nnsi->refcnt, 1); in nsinfo__copy()
184 zfree(&nsi->mntns_path); in nsinfo__delete()
191 refcount_inc(&nsi->refcnt); in nsinfo__get()
197 if (nsi && refcount_dec_and_test(&nsi->refcnt)) in nsinfo__put()
205 int oldns = -1; in nsinfo__mountns_enter()
206 int newns = -1; in nsinfo__mountns_enter()
212 nc->oldns = -1; in nsinfo__mountns_enter()
213 nc->newns = -1; in nsinfo__mountns_enter()
215 if (!nsi || !nsi->need_setns) in nsinfo__mountns_enter()
218 if (snprintf(curpath, PATH_MAX, "/proc/self/ns/mnt") >= PATH_MAX) in nsinfo__mountns_enter()
229 newns = open(nsi->mntns_path, O_RDONLY); in nsinfo__mountns_enter()
236 nc->oldcwd = oldcwd; in nsinfo__mountns_enter()
237 nc->oldns = oldns; in nsinfo__mountns_enter()
238 nc->newns = newns; in nsinfo__mountns_enter()
243 if (oldns > -1) in nsinfo__mountns_enter()
245 if (newns > -1) in nsinfo__mountns_enter()
251 if (nc == NULL || nc->oldns == -1 || nc->newns == -1 || !nc->oldcwd) in nsinfo__mountns_exit()
254 setns(nc->oldns, CLONE_NEWNS); in nsinfo__mountns_exit()
256 if (nc->oldcwd) { in nsinfo__mountns_exit()
257 WARN_ON_ONCE(chdir(nc->oldcwd)); in nsinfo__mountns_exit()
258 zfree(&nc->oldcwd); in nsinfo__mountns_exit()
261 if (nc->oldns > -1) { in nsinfo__mountns_exit()
262 close(nc->oldns); in nsinfo__mountns_exit()
263 nc->oldns = -1; in nsinfo__mountns_exit()
266 if (nc->newns > -1) { in nsinfo__mountns_exit()
267 close(nc->newns); in nsinfo__mountns_exit()
268 nc->newns = -1; in nsinfo__mountns_exit()