blob: 6ef01a83b24e971cfeef0149610eb97514d8248d [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001/* SPDX-License-Identifier: GPL-2.0 */
Namhyung Kim12864b32012-04-26 14:15:22 +09002#ifndef _PERF_TARGET_H
3#define _PERF_TARGET_H
4
5#include <stdbool.h>
6#include <sys/types.h>
7
Arnaldo Carvalho de Melo602ad872013-11-12 16:46:16 -03008struct target {
Namhyung Kim12864b32012-04-26 14:15:22 +09009 const char *pid;
10 const char *tid;
11 const char *cpu_list;
12 const char *uid_str;
13 uid_t uid;
14 bool system_wide;
Namhyung Kimd1cb9fc2012-05-16 18:45:49 +090015 bool uses_mmap;
Adrian Hunter3aa59392013-11-15 15:52:29 +020016 bool default_per_cpu;
17 bool per_thread;
Namhyung Kim12864b32012-04-26 14:15:22 +090018};
19
Arnaldo Carvalho de Melo602ad872013-11-12 16:46:16 -030020enum target_errno {
21 TARGET_ERRNO__SUCCESS = 0,
Namhyung Kim60bbdda2012-05-07 14:09:00 +090022
23 /*
24 * Choose an arbitrary negative big number not to clash with standard
25 * errno since SUS requires the errno has distinct positive values.
26 * See 'Issue 6' in the link below.
27 *
28 * http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html
29 */
Arnaldo Carvalho de Melo602ad872013-11-12 16:46:16 -030030 __TARGET_ERRNO__START = -10000,
Namhyung Kim60bbdda2012-05-07 14:09:00 +090031
Arnaldo Carvalho de Melo602ad872013-11-12 16:46:16 -030032 /* for target__validate() */
33 TARGET_ERRNO__PID_OVERRIDE_CPU = __TARGET_ERRNO__START,
34 TARGET_ERRNO__PID_OVERRIDE_UID,
35 TARGET_ERRNO__UID_OVERRIDE_CPU,
36 TARGET_ERRNO__PID_OVERRIDE_SYSTEM,
37 TARGET_ERRNO__UID_OVERRIDE_SYSTEM,
Adrian Hunter3aa59392013-11-15 15:52:29 +020038 TARGET_ERRNO__SYSTEM_OVERRIDE_THREAD,
Namhyung Kim60bbdda2012-05-07 14:09:00 +090039
Arnaldo Carvalho de Melo602ad872013-11-12 16:46:16 -030040 /* for target__parse_uid() */
41 TARGET_ERRNO__INVALID_UID,
42 TARGET_ERRNO__USER_NOT_FOUND,
Namhyung Kim60bbdda2012-05-07 14:09:00 +090043
Arnaldo Carvalho de Melo602ad872013-11-12 16:46:16 -030044 __TARGET_ERRNO__END,
Namhyung Kim60bbdda2012-05-07 14:09:00 +090045};
46
Arnaldo Carvalho de Melo602ad872013-11-12 16:46:16 -030047enum target_errno target__validate(struct target *target);
48enum target_errno target__parse_uid(struct target *target);
Namhyung Kim12864b32012-04-26 14:15:22 +090049
Arnaldo Carvalho de Melo602ad872013-11-12 16:46:16 -030050int target__strerror(struct target *target, int errnum, char *buf, size_t buflen);
Namhyung Kim16ad2ff2012-05-07 14:09:02 +090051
Arnaldo Carvalho de Melo602ad872013-11-12 16:46:16 -030052static inline bool target__has_task(struct target *target)
Namhyung Kimd67356e2012-05-07 14:09:03 +090053{
Namhyung Kimaa22dd42012-05-16 18:45:47 +090054 return target->tid || target->pid || target->uid_str;
Namhyung Kimd67356e2012-05-07 14:09:03 +090055}
56
Arnaldo Carvalho de Melo602ad872013-11-12 16:46:16 -030057static inline bool target__has_cpu(struct target *target)
Namhyung Kimd67356e2012-05-07 14:09:03 +090058{
Namhyung Kimaa22dd42012-05-16 18:45:47 +090059 return target->system_wide || target->cpu_list;
Namhyung Kimd67356e2012-05-07 14:09:03 +090060}
61
Arnaldo Carvalho de Melo602ad872013-11-12 16:46:16 -030062static inline bool target__none(struct target *target)
Namhyung Kimd67356e2012-05-07 14:09:03 +090063{
Arnaldo Carvalho de Melo602ad872013-11-12 16:46:16 -030064 return !target__has_task(target) && !target__has_cpu(target);
Namhyung Kimd67356e2012-05-07 14:09:03 +090065}
66
Jin Yao1d9f8d12017-12-05 22:03:10 +080067static inline bool target__has_per_thread(struct target *target)
68{
69 return target->system_wide && target->per_thread;
70}
71
Dongsheng Yang9c105fb2013-12-04 17:56:40 -050072static inline bool target__uses_dummy_map(struct target *target)
73{
74 bool use_dummy = false;
75
76 if (target->default_per_cpu)
77 use_dummy = target->per_thread ? true : false;
78 else if (target__has_task(target) ||
79 (!target__has_cpu(target) && !target->uses_mmap))
80 use_dummy = true;
Jin Yao1d9f8d12017-12-05 22:03:10 +080081 else if (target__has_per_thread(target))
82 use_dummy = true;
Dongsheng Yang9c105fb2013-12-04 17:56:40 -050083
84 return use_dummy;
85}
86
Namhyung Kim12864b32012-04-26 14:15:22 +090087#endif /* _PERF_TARGET_H */