cregit-Linux how code gets into the kernel

Release 4.10 tools/perf/util/target.c

Directory: tools/perf/util
/*
 * 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 <string.h>



enum target_errno target__validate(struct target *target) { enum target_errno ret = TARGET_ERRNO__SUCCESS; if (target->pid) target->tid = target->pid; /* CPU and PID are mutually exclusive */ if (target->tid && target->cpu_list) { target->cpu_list = NULL; if (ret == TARGET_ERRNO__SUCCESS) ret = TARGET_ERRNO__PID_OVERRIDE_CPU; } /* UID and PID are mutually exclusive */ if (target->tid && target->uid_str) { target->uid_str = NULL; if (ret == TARGET_ERRNO__SUCCESS) ret = TARGET_ERRNO__PID_OVERRIDE_UID; } /* UID and CPU are mutually exclusive */ if (target->uid_str && target->cpu_list) { target->cpu_list = NULL; if (ret == TARGET_ERRNO__SUCCESS) ret = TARGET_ERRNO__UID_OVERRIDE_CPU; } /* 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_SYSTEM; } /* UID and SYSTEM are mutually exclusive */ if (target->uid_str && target->system_wide) { target->system_wide = false; if (ret == TARGET_ERRNO__SUCCESS) ret = TARGET_ERRNO__UID_OVERRIDE_SYSTEM; } /* THREAD and SYSTEM/CPU are mutually exclusive */ if (target->per_thread && (target->system_wide || target->cpu_list)) { target->per_thread = false; if (ret == TARGET_ERRNO__SUCCESS) ret = TARGET_ERRNO__SYSTEM_OVERRIDE_THREAD; } return ret; }

Contributors

PersonTokensPropCommitsCommitProp
namhyung kimnamhyung kim16476.64%250.00%
adrian hunteradrian hunter3516.36%125.00%
arnaldo carvalho de meloarnaldo carvalho de melo157.01%125.00%
Total214100.00%4100.00%


enum target_errno target__parse_uid(struct target *target) { struct passwd pwd, *result; char buf[1024]; const char *str = target->uid_str; target->uid = UINT_MAX; if (str == NULL) return TARGET_ERRNO__SUCCESS; /* Try user name first */ getpwnam_r(str, &pwd, buf, sizeof(buf), &result); if (result == NULL) { /* * The user name not found. Maybe it's a UID number. */ char *endptr; int uid = strtol(str, &endptr, 10); if (*endptr != '\0') return TARGET_ERRNO__INVALID_UID; getpwuid_r(uid, &pwd, buf, sizeof(buf), &result); if (result == NULL) return TARGET_ERRNO__USER_NOT_FOUND; } target->uid = result->pw_uid; return TARGET_ERRNO__SUCCESS; }

Contributors

PersonTokensPropCommitsCommitProp
namhyung kimnamhyung kim13495.04%150.00%
arnaldo carvalho de meloarnaldo carvalho de melo74.96%150.00%
Total141100.00%2100.00%

/* * This must have a same ordering as the enum target_errno. */ 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", };
int target__strerror(struct target *target, int errnum, char *buf, size_t buflen) { int idx; const char *msg; BUG_ON(buflen == 0); if (errnum >= 0) { str_error_r(errnum, buf, buflen); return 0; } if (errnum < __TARGET_ERRNO__START || errnum >= __TARGET_ERRNO__END) return -1; idx = errnum - __TARGET_ERRNO__START; msg = target__error_str[idx]; switch (errnum) { case TARGET_ERRNO__PID_OVERRIDE_CPU ... TARGET_ERRNO__SYSTEM_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; } return 0; }

Contributors

PersonTokensPropCommitsCommitProp
namhyung kimnamhyung kim11487.02%233.33%
arnaldo carvalho de meloarnaldo carvalho de melo107.63%233.33%
kirill a. shutemovkirill a. shutemov64.58%116.67%
adrian hunteradrian hunter10.76%116.67%
Total131100.00%6100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
namhyung kimnamhyung kim44784.66%550.00%
adrian hunteradrian hunter387.20%110.00%
arnaldo carvalho de meloarnaldo carvalho de melo377.01%330.00%
kirill a. shutemovkirill a. shutemov61.14%110.00%
Total528100.00%10100.00%
Directory: tools/perf/util
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.