18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * 48c2ecf20Sopenharmony_ci * Copyright (C) 2017 Hari Bathini, IBM Corporation 58c2ecf20Sopenharmony_ci */ 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#ifndef __PERF_NAMESPACES_H 88c2ecf20Sopenharmony_ci#define __PERF_NAMESPACES_H 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#include <sys/types.h> 118c2ecf20Sopenharmony_ci#include <linux/stddef.h> 128c2ecf20Sopenharmony_ci#include <linux/perf_event.h> 138c2ecf20Sopenharmony_ci#include <linux/refcount.h> 148c2ecf20Sopenharmony_ci#include <linux/types.h> 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci#ifndef HAVE_SETNS_SUPPORT 178c2ecf20Sopenharmony_ciint setns(int fd, int nstype); 188c2ecf20Sopenharmony_ci#endif 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_cistruct perf_record_namespaces; 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_cistruct namespaces { 238c2ecf20Sopenharmony_ci struct list_head list; 248c2ecf20Sopenharmony_ci u64 end_time; 258c2ecf20Sopenharmony_ci struct perf_ns_link_info link_info[]; 268c2ecf20Sopenharmony_ci}; 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_cistruct namespaces *namespaces__new(struct perf_record_namespaces *event); 298c2ecf20Sopenharmony_civoid namespaces__free(struct namespaces *namespaces); 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_cistruct nsinfo { 328c2ecf20Sopenharmony_ci pid_t pid; 338c2ecf20Sopenharmony_ci pid_t tgid; 348c2ecf20Sopenharmony_ci pid_t nstgid; 358c2ecf20Sopenharmony_ci bool need_setns; 368c2ecf20Sopenharmony_ci char *mntns_path; 378c2ecf20Sopenharmony_ci refcount_t refcnt; 388c2ecf20Sopenharmony_ci}; 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_cistruct nscookie { 418c2ecf20Sopenharmony_ci int oldns; 428c2ecf20Sopenharmony_ci int newns; 438c2ecf20Sopenharmony_ci char *oldcwd; 448c2ecf20Sopenharmony_ci}; 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_ciint nsinfo__init(struct nsinfo *nsi); 478c2ecf20Sopenharmony_cistruct nsinfo *nsinfo__new(pid_t pid); 488c2ecf20Sopenharmony_cistruct nsinfo *nsinfo__copy(struct nsinfo *nsi); 498c2ecf20Sopenharmony_civoid nsinfo__delete(struct nsinfo *nsi); 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_cistruct nsinfo *nsinfo__get(struct nsinfo *nsi); 528c2ecf20Sopenharmony_civoid nsinfo__put(struct nsinfo *nsi); 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_civoid nsinfo__mountns_enter(struct nsinfo *nsi, struct nscookie *nc); 558c2ecf20Sopenharmony_civoid nsinfo__mountns_exit(struct nscookie *nc); 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_cichar *nsinfo__realpath(const char *path, struct nsinfo *nsi); 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_cistatic inline void __nsinfo__zput(struct nsinfo **nsip) 608c2ecf20Sopenharmony_ci{ 618c2ecf20Sopenharmony_ci if (nsip) { 628c2ecf20Sopenharmony_ci nsinfo__put(*nsip); 638c2ecf20Sopenharmony_ci *nsip = NULL; 648c2ecf20Sopenharmony_ci } 658c2ecf20Sopenharmony_ci} 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_ci#define nsinfo__zput(nsi) __nsinfo__zput(&nsi) 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ciconst char *perf_ns__name(unsigned int id); 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_ci#endif /* __PERF_NAMESPACES_H */ 72