diff options
| author | Namhyung Kim <namhyung.kim@lge.com> | 2012-05-07 14:09:00 +0900 | 
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2012-05-07 16:46:35 -0300 | 
| commit | 60bbddaaa33865633efa2800702e3b02495a0e94 (patch) | |
| tree | 52c177c76c7c22a96e77c61d374e1ee52105e8a2 | |
| parent | 55261f46702cec96911a81aacfb3cba13434d304 (diff) | |
| download | olio-linux-3.10-60bbddaaa33865633efa2800702e3b02495a0e94.tar.xz olio-linux-3.10-60bbddaaa33865633efa2800702e3b02495a0e94.zip  | |
perf target: Introduce perf_target_errno
The perf_target_errno enumerations are used to indicate specific error
cases on perf target operations. It'd help libperf being a more generic
library.
Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
Suggested-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
Reviewed-by: David Ahern <dsahern@gmail.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1336367344-28071-4-git-send-email-namhyung.kim@lge.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
| -rw-r--r-- | tools/perf/util/target.c | 33 | ||||
| -rw-r--r-- | tools/perf/util/target.h | 25 | 
2 files changed, 46 insertions, 12 deletions
diff --git a/tools/perf/util/target.c b/tools/perf/util/target.c index 3fadf85dd7e..5c59dcfc8f8 100644 --- a/tools/perf/util/target.c +++ b/tools/perf/util/target.c @@ -10,36 +10,47 @@  #include "debug.h" -void perf_target__validate(struct perf_target *target) +enum perf_target_errno perf_target__validate(struct perf_target *target)  { +	enum perf_target_errno ret = PERF_ERRNO_TARGET__SUCCESS; +  	if (target->pid)  		target->tid = target->pid;  	/* CPU and PID are mutually exclusive */  	if (target->tid && target->cpu_list) { -		ui__warning("WARNING: PID switch overriding CPU\n"); -		sleep(1);  		target->cpu_list = NULL; +		if (ret == PERF_ERRNO_TARGET__SUCCESS) +			ret = PERF_ERRNO_TARGET__PID_OVERRIDE_CPU;  	}  	/* UID and PID are mutually exclusive */  	if (target->tid && target->uid_str) { -		ui__warning("PID/TID switch overriding UID\n"); -		sleep(1);  		target->uid_str = NULL; +		if (ret == PERF_ERRNO_TARGET__SUCCESS) +			ret = PERF_ERRNO_TARGET__PID_OVERRIDE_UID;  	}  	/* UID and CPU are mutually exclusive */  	if (target->uid_str && target->cpu_list) { -		ui__warning("UID switch overriding CPU\n"); -		sleep(1);  		target->cpu_list = NULL; +		if (ret == PERF_ERRNO_TARGET__SUCCESS) +			ret = PERF_ERRNO_TARGET__UID_OVERRIDE_CPU;  	} -	/* PID/UID and SYSTEM are mutually exclusive */ -	if ((target->tid || target->uid_str) && target->system_wide) { -		ui__warning("PID/TID/UID switch overriding CPU\n"); -		sleep(1); +	/* PID and SYSTEM are mutually exclusive */ +	if (target->tid && target->system_wide) {  		target->system_wide = false; +		if (ret == PERF_ERRNO_TARGET__SUCCESS) +			ret = PERF_ERRNO_TARGET__PID_OVERRIDE_SYSTEM;  	} + +	/* UID and SYSTEM are mutually exclusive */ +	if (target->uid_str && target->system_wide) { +		target->system_wide = false; +		if (ret == PERF_ERRNO_TARGET__SUCCESS) +			ret = PERF_ERRNO_TARGET__UID_OVERRIDE_SYSTEM; +	} + +	return ret;  } diff --git a/tools/perf/util/target.h b/tools/perf/util/target.h index 218291f921e..eb0d2101154 100644 --- a/tools/perf/util/target.h +++ b/tools/perf/util/target.h @@ -13,6 +13,29 @@ struct perf_target {  	bool	     system_wide;  }; -void perf_target__validate(struct perf_target *target); +enum perf_target_errno { +	PERF_ERRNO_TARGET__SUCCESS		= 0, + +	/* +	 * Choose an arbitrary negative big number not to clash with standard +	 * errno since SUS requires the errno has distinct positive values. +	 * See 'Issue 6' in the link below. +	 * +	 * http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html +	 */ +	__PERF_ERRNO_TARGET__START		= -10000, + + +	/* for perf_target__validate() */ +	PERF_ERRNO_TARGET__PID_OVERRIDE_CPU	= __PERF_ERRNO_TARGET__START, +	PERF_ERRNO_TARGET__PID_OVERRIDE_UID, +	PERF_ERRNO_TARGET__UID_OVERRIDE_CPU, +	PERF_ERRNO_TARGET__PID_OVERRIDE_SYSTEM, +	PERF_ERRNO_TARGET__UID_OVERRIDE_SYSTEM, + +	__PERF_ERRNO_TARGET__END, +}; + +enum perf_target_errno perf_target__validate(struct perf_target *target);  #endif /* _PERF_TARGET_H */  |