1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright (C) 2017 Hari Bathini, IBM Corporation 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifndef __PERF_NAMESPACES_H 8*4882a593Smuzhiyun #define __PERF_NAMESPACES_H 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #include <sys/types.h> 11*4882a593Smuzhiyun #include <linux/stddef.h> 12*4882a593Smuzhiyun #include <linux/perf_event.h> 13*4882a593Smuzhiyun #include <linux/refcount.h> 14*4882a593Smuzhiyun #include <linux/types.h> 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #ifndef HAVE_SETNS_SUPPORT 17*4882a593Smuzhiyun int setns(int fd, int nstype); 18*4882a593Smuzhiyun #endif 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun struct perf_record_namespaces; 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun struct namespaces { 23*4882a593Smuzhiyun struct list_head list; 24*4882a593Smuzhiyun u64 end_time; 25*4882a593Smuzhiyun struct perf_ns_link_info link_info[]; 26*4882a593Smuzhiyun }; 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun struct namespaces *namespaces__new(struct perf_record_namespaces *event); 29*4882a593Smuzhiyun void namespaces__free(struct namespaces *namespaces); 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun struct nsinfo { 32*4882a593Smuzhiyun pid_t pid; 33*4882a593Smuzhiyun pid_t tgid; 34*4882a593Smuzhiyun pid_t nstgid; 35*4882a593Smuzhiyun bool need_setns; 36*4882a593Smuzhiyun char *mntns_path; 37*4882a593Smuzhiyun refcount_t refcnt; 38*4882a593Smuzhiyun }; 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun struct nscookie { 41*4882a593Smuzhiyun int oldns; 42*4882a593Smuzhiyun int newns; 43*4882a593Smuzhiyun char *oldcwd; 44*4882a593Smuzhiyun }; 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun int nsinfo__init(struct nsinfo *nsi); 47*4882a593Smuzhiyun struct nsinfo *nsinfo__new(pid_t pid); 48*4882a593Smuzhiyun struct nsinfo *nsinfo__copy(struct nsinfo *nsi); 49*4882a593Smuzhiyun void nsinfo__delete(struct nsinfo *nsi); 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun struct nsinfo *nsinfo__get(struct nsinfo *nsi); 52*4882a593Smuzhiyun void nsinfo__put(struct nsinfo *nsi); 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun void nsinfo__mountns_enter(struct nsinfo *nsi, struct nscookie *nc); 55*4882a593Smuzhiyun void nsinfo__mountns_exit(struct nscookie *nc); 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun char *nsinfo__realpath(const char *path, struct nsinfo *nsi); 58*4882a593Smuzhiyun __nsinfo__zput(struct nsinfo ** nsip)59*4882a593Smuzhiyunstatic inline void __nsinfo__zput(struct nsinfo **nsip) 60*4882a593Smuzhiyun { 61*4882a593Smuzhiyun if (nsip) { 62*4882a593Smuzhiyun nsinfo__put(*nsip); 63*4882a593Smuzhiyun *nsip = NULL; 64*4882a593Smuzhiyun } 65*4882a593Smuzhiyun } 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun #define nsinfo__zput(nsi) __nsinfo__zput(&nsi) 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun const char *perf_ns__name(unsigned int id); 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun #endif /* __PERF_NAMESPACES_H */ 72