#ifndef _GNU_SOURCE # define _GNU_SOURCE #endif #include #include #include #include #include #include #include #include #include #include "proc.h" #include "die.h" void cpu_affinity(int cpu) { int ret; cpu_set_t cpu_bitmask; CPU_ZERO(&cpu_bitmask); CPU_SET(cpu, &cpu_bitmask); ret = sched_setaffinity(getpid(), sizeof(cpu_bitmask), &cpu_bitmask); if (ret) panic("Can't set this cpu affinity!\n"); } int set_proc_prio(int priority) { int ret = setpriority(PRIO_PROCESS, getpid(), priority); if (ret) panic("Can't set nice val to %i!\n", priority); return 0; } int set_sched_status(int policy, int priority) { int ret, min_prio, max_prio; struct sched_param sp; max_prio = sched_get_priority_max(policy); min_prio = sched_get_priority_min(policy); if (max_prio == -1 || min_prio == -1) printf("Cannot determine scheduler prio limits!\n"); else if (priority < min_prio) priority = min_prio; else if (priority > max_prio) priority = max_prio; memset(&sp, 0, sizeof(sp)); sp.sched_priority = priority; ret = sched_setscheduler(getpid(), policy, &sp); if (ret) { printf("Cannot set scheduler policy!\n"); return -EINVAL; } ret = sched_setparam(getpid(), &sp); if (ret) { printf("Cannot set scheduler prio!\n"); return -EINVAL; } return 0; } ssize_t proc_get_cmdline(unsigned int pid, char *cmdline, size_t len) { ssize_t ret; char path[1024]; snprintf(path, sizeof(path), "/proc/%u/exe", pid); ret = readlink(path, cmdline, len - 1); if (ret < 0) cmdline[0] = '\0'; else cmdline[ret] = '\0'; return ret; } static int match_pid_by_inode(pid_t pid, ino_t ino) { struct dirent *ent; char path[1024]; DIR *dir; if (snprintf(path, sizeof(path), "/proc/%u/fd", pid) == -1) panic("giant process name! %u\n", pid); dir = opendir(path); if (!dir) return -1; while ((ent = readdir(dir))) { struct stat statbuf; if (snprintf(path, sizeof(path), "/proc/%u/fd/%s", pid, ent->d_name) < 0) continue; if (stat(path, &statbuf) < 0) continue; if (S_ISSOCK(statbuf.st_mode) && ino == statbuf.st_ino) { closedir(dir); return 0; } } closedir(dir); return -1; } int proc_find_by_inode(ino_t ino, char *cmdline, size_t len, pid_t *pid) { struct dirent *ent; DIR *dir; if (ino <= 0) { cmdline[0] = '\0'; return 0; } dir = opendir("/proc"); if (!dir) panic("Cannot open /proc: %s\n", strerror(errno)); while ((ent = readdir(dir))) { int ret; char *end; const char *name = ent->d_name; pid_t cur_pid = strtoul(name, &end, 10); /* not a PID */ if (cur_pid == 0 && end == name) continue; ret = match_pid_by_inode(cur_pid, ino); if (!ret) { ret = proc_get_cmdline(cur_pid, cmdline, len); if (ret < 0) panic("Failed to get process cmdline: %s\n", strerror(errno)); closedir(dir); *pid = cur_pid; return ret; } } closedir(dir); return -1; } int proc_exec(const char *proc, char *const argv[]) { int status; pid_t pid; pid = fork(); if (pid < 0) { perror("fork"); return -1; } else if (pid == 0) { if (execvp(proc, argv) < 0) fprintf(stderr, "Failed to exec: %s\n", proc); _exit(1); } if (waitpid(pid, &status, 0) < 0) { perror("waitpid"); return -2; } if (!WIFEXITED(status)) return -WEXITSTATUS(status); return 0; } bool proc_exists(pid_t pid) { struct stat statbuf; char path[1024]; if (snprintf(path, sizeof(path), "/proc/%u", pid) < 0) return false; return stat(path, &statbuf) == 0; } name='dt' onchange='this.form.submit();'>
authorLinus Torvalds <torvalds@linux-foundation.org>2016-12-12 21:58:13 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2016-12-12 21:58:13 -0800
commite7aa8c2eb11ba69b1b69099c3c7bd6be3087b0ba (patch)
treef63906f41699c8e38af9d12b063e2ceab0286ef2 /Documentation/smsc_ece1099.txt
parente34bac726d27056081d0250c0e173e4b155aa340 (diff)
parent868c97a846a73e937d835b09b8c885a69df50ec8 (diff)
Merge tag 'docs-4.10' of git://git.lwn.net/linuxHEADmaster
Pull documentation update from Jonathan Corbet: "These are the documentation changes for 4.10. It's another busy cycle for the docs tree, as the sphinx conversion continues. Highlights include: - Further work on PDF output, which remains a bit of a pain but should be more solid now. - Five more DocBook template files converted to Sphinx. Only 27 to go... Lots of plain-text files have also been converted and integrated. - Images in binary formats have been replaced with more source-friendly versions. - Various bits of organizational work, including the renaming of various files discussed at the kernel summit. - New documentation for the device_link mechanism. ... and, of course, lots of typo fixes and small updates" * tag 'docs-4.10' of git://git.lwn.net/linux: (193 commits) dma-buf: Extract dma-buf.rst Update Documentation/00-INDEX docs: 00-INDEX: document directories/files with no docs docs: 00-INDEX: remove non-existing entries docs: 00-INDEX: add missing entries for documentation files/dirs docs: 00-INDEX: consolidate process/ and admin-guide/ description scripts: add a script to check if Documentation/00-INDEX is sane Docs: change sh -> awk in REPORTING-BUGS Documentation/core-api/device_link: Add initial documentation core-api: remove an unexpected unident ppc/idle: Add documentation for powersave=off Doc: Correct typo, "Introdution" => "Introduction" Documentation/atomic_ops.txt: convert to ReST markup Documentation/local_ops.txt: convert to ReST markup Documentation/assoc_array.txt: convert to ReST markup docs-rst: parse-headers.pl: cleanup the documentation docs-rst: fix media cleandocs target docs-rst: media/Makefile: reorganize the rules docs-rst: media: build SVG from graphviz files docs-rst: replace bayer.png by a SVG image ...
Diffstat (limited to 'Documentation/smsc_ece1099.txt')