diff options
Diffstat (limited to 'tools/perf/util/target.c')
| -rw-r--r-- | tools/perf/util/target.c | 70 |
1 files changed, 30 insertions, 40 deletions
diff --git a/tools/perf/util/target.c b/tools/perf/util/target.c index 21c4d9b23c24..8cf71bea295a 100644 --- a/tools/perf/util/target.c +++ b/tools/perf/util/target.c @@ -1,18 +1,18 @@ +// SPDX-License-Identifier: GPL-2.0-only /* * Helper functions for handling target threads/cpus * * Copyright (C) 2012, LG Electronics, Namhyung Kim <namhyung.kim@lge.com> - * - * Released under the GPL v2. */ #include "target.h" -#include "util.h" -#include "debug.h" #include <pwd.h> +#include <stdio.h> +#include <stdlib.h> #include <string.h> - +#include <linux/kernel.h> +#include <linux/string.h> enum target_errno target__validate(struct target *target) { @@ -28,32 +28,32 @@ enum target_errno target__validate(struct target *target) ret = TARGET_ERRNO__PID_OVERRIDE_CPU; } - /* UID and PID are mutually exclusive */ - if (target->tid && target->uid_str) { - target->uid_str = NULL; + /* PID and SYSTEM are mutually exclusive */ + if (target->tid && target->system_wide) { + target->system_wide = false; if (ret == TARGET_ERRNO__SUCCESS) - ret = TARGET_ERRNO__PID_OVERRIDE_UID; + ret = TARGET_ERRNO__PID_OVERRIDE_SYSTEM; } - /* UID and CPU are mutually exclusive */ - if (target->uid_str && target->cpu_list) { + /* BPF and CPU are mutually exclusive */ + if (target->bpf_str && target->cpu_list) { target->cpu_list = NULL; if (ret == TARGET_ERRNO__SUCCESS) - ret = TARGET_ERRNO__UID_OVERRIDE_CPU; + ret = TARGET_ERRNO__BPF_OVERRIDE_CPU; } - /* PID and SYSTEM are mutually exclusive */ - if (target->tid && target->system_wide) { - target->system_wide = false; + /* BPF and PID/TID are mutually exclusive */ + if (target->bpf_str && target->tid) { + target->tid = NULL; if (ret == TARGET_ERRNO__SUCCESS) - ret = TARGET_ERRNO__PID_OVERRIDE_SYSTEM; + ret = TARGET_ERRNO__BPF_OVERRIDE_PID; } - /* UID and SYSTEM are mutually exclusive */ - if (target->uid_str && target->system_wide) { - target->system_wide = false; + /* BPF and THREADS are mutually exclusive */ + if (target->bpf_str && target->per_thread) { + target->per_thread = false; if (ret == TARGET_ERRNO__SUCCESS) - ret = TARGET_ERRNO__UID_OVERRIDE_SYSTEM; + ret = TARGET_ERRNO__BPF_OVERRIDE_THREAD; } /* THREAD and SYSTEM/CPU are mutually exclusive */ @@ -66,15 +66,13 @@ enum target_errno target__validate(struct target *target) return ret; } -enum target_errno target__parse_uid(struct target *target) +uid_t parse_uid(const char *str) { struct passwd pwd, *result; char buf[1024]; - const char *str = target->uid_str; - target->uid = UINT_MAX; if (str == NULL) - return TARGET_ERRNO__SUCCESS; + return UINT_MAX; /* Try user name first */ getpwnam_r(str, &pwd, buf, sizeof(buf), &result); @@ -87,16 +85,15 @@ enum target_errno target__parse_uid(struct target *target) int uid = strtol(str, &endptr, 10); if (*endptr != '\0') - return TARGET_ERRNO__INVALID_UID; + return UINT_MAX; getpwuid_r(uid, &pwd, buf, sizeof(buf), &result); if (result == NULL) - return TARGET_ERRNO__USER_NOT_FOUND; + return UINT_MAX; } - target->uid = result->pw_uid; - return TARGET_ERRNO__SUCCESS; + return result->pw_uid; } /* @@ -104,16 +101,14 @@ enum target_errno target__parse_uid(struct target *target) */ static const char *target__error_str[] = { "PID/TID switch overriding CPU", - "PID/TID switch overriding UID", - "UID switch overriding CPU", "PID/TID switch overriding SYSTEM", - "UID switch overriding SYSTEM", "SYSTEM/CPU switch overriding PER-THREAD", - "Invalid User: %s", - "Problems obtaining information for user %s", + "BPF switch overriding CPU", + "BPF switch overriding PID/TID", + "BPF switch overriding THREAD", }; -int target__strerror(struct target *target, int errnum, +int target__strerror(struct target *target __maybe_unused, int errnum, char *buf, size_t buflen) { int idx; @@ -134,15 +129,10 @@ int target__strerror(struct target *target, int errnum, switch (errnum) { case TARGET_ERRNO__PID_OVERRIDE_CPU ... - TARGET_ERRNO__SYSTEM_OVERRIDE_THREAD: + TARGET_ERRNO__BPF_OVERRIDE_THREAD: snprintf(buf, buflen, "%s", msg); break; - case TARGET_ERRNO__INVALID_UID: - case TARGET_ERRNO__USER_NOT_FOUND: - snprintf(buf, buflen, msg, target->uid_str); - break; - default: /* cannot reach here */ break; |
