diff options
-rw-r--r-- | util-linux/chrt.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/util-linux/chrt.c b/util-linux/chrt.c index 2712ea3e3..e7abd4f5a 100644 --- a/util-linux/chrt.c +++ b/util-linux/chrt.c | |||
@@ -17,13 +17,14 @@ | |||
17 | //kbuild:lib-$(CONFIG_CHRT) += chrt.o | 17 | //kbuild:lib-$(CONFIG_CHRT) += chrt.o |
18 | 18 | ||
19 | //usage:#define chrt_trivial_usage | 19 | //usage:#define chrt_trivial_usage |
20 | //usage: "[-prfom] [PRIO] [PID | PROG ARGS]" | 20 | //usage: "[-prfomb] [PRIO] [PID | PROG ARGS]" |
21 | //usage:#define chrt_full_usage "\n\n" | 21 | //usage:#define chrt_full_usage "\n\n" |
22 | //usage: "Change scheduling priority and class for a process\n" | 22 | //usage: "Change scheduling priority and class for a process\n" |
23 | //usage: "\n -p Operate on PID" | 23 | //usage: "\n -p Operate on PID" |
24 | //usage: "\n -r Set SCHED_RR class" | 24 | //usage: "\n -r Set SCHED_RR class" |
25 | //usage: "\n -f Set SCHED_FIFO class" | 25 | //usage: "\n -f Set SCHED_FIFO class" |
26 | //usage: "\n -o Set SCHED_OTHER class" | 26 | //usage: "\n -o Set SCHED_OTHER class" |
27 | //usage: "\n -b Set SCHED_BATCH class" | ||
27 | //usage: "\n -m Show min/max priorities" | 28 | //usage: "\n -m Show min/max priorities" |
28 | //usage: | 29 | //usage: |
29 | //usage:#define chrt_example_usage | 30 | //usage:#define chrt_example_usage |
@@ -40,11 +41,11 @@ static const struct { | |||
40 | } policies[] = { | 41 | } policies[] = { |
41 | {SCHED_OTHER, "SCHED_OTHER"}, | 42 | {SCHED_OTHER, "SCHED_OTHER"}, |
42 | {SCHED_FIFO, "SCHED_FIFO"}, | 43 | {SCHED_FIFO, "SCHED_FIFO"}, |
43 | {SCHED_RR, "SCHED_RR"} | 44 | {SCHED_RR, "SCHED_RR"}, |
45 | {SCHED_BATCH, "SCHED_BATCH"} | ||
44 | }; | 46 | }; |
45 | 47 | ||
46 | //TODO: add | 48 | //TODO: add |
47 | // -b, SCHED_BATCH | ||
48 | // -i, SCHED_IDLE | 49 | // -i, SCHED_IDLE |
49 | 50 | ||
50 | static void show_min_max(int pol) | 51 | static void show_min_max(int pol) |
@@ -64,6 +65,7 @@ static void show_min_max(int pol) | |||
64 | #define OPT_r (1<<2) | 65 | #define OPT_r (1<<2) |
65 | #define OPT_f (1<<3) | 66 | #define OPT_f (1<<3) |
66 | #define OPT_o (1<<4) | 67 | #define OPT_o (1<<4) |
68 | #define OPT_b (1<<5) | ||
67 | 69 | ||
68 | int chrt_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 70 | int chrt_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
69 | int chrt_main(int argc UNUSED_PARAM, char **argv) | 71 | int chrt_main(int argc UNUSED_PARAM, char **argv) |
@@ -77,11 +79,12 @@ int chrt_main(int argc UNUSED_PARAM, char **argv) | |||
77 | int policy = SCHED_RR; | 79 | int policy = SCHED_RR; |
78 | 80 | ||
79 | /* only one policy accepted */ | 81 | /* only one policy accepted */ |
80 | opt = getopt32(argv, "^+" "mprfo" "\0" "r--fo:f--ro:o--rf"); | 82 | opt = getopt32(argv, "^+" "mprfob" "\0" "r--fob:f--rob:o--rfb:b--rfo"); |
81 | if (opt & OPT_m) { /* print min/max and exit */ | 83 | if (opt & OPT_m) { /* print min/max and exit */ |
82 | show_min_max(SCHED_FIFO); | 84 | show_min_max(SCHED_FIFO); |
83 | show_min_max(SCHED_RR); | 85 | show_min_max(SCHED_RR); |
84 | show_min_max(SCHED_OTHER); | 86 | show_min_max(SCHED_OTHER); |
87 | show_min_max(SCHED_BATCH); | ||
85 | fflush_stdout_and_exit(EXIT_SUCCESS); | 88 | fflush_stdout_and_exit(EXIT_SUCCESS); |
86 | } | 89 | } |
87 | if (opt & OPT_r) | 90 | if (opt & OPT_r) |
@@ -90,6 +93,8 @@ int chrt_main(int argc UNUSED_PARAM, char **argv) | |||
90 | policy = SCHED_FIFO; | 93 | policy = SCHED_FIFO; |
91 | if (opt & OPT_o) | 94 | if (opt & OPT_o) |
92 | policy = SCHED_OTHER; | 95 | policy = SCHED_OTHER; |
96 | if (opt & OPT_b) | ||
97 | policy = SCHED_BATCH; | ||
93 | 98 | ||
94 | argv += optind; | 99 | argv += optind; |
95 | if (!argv[0]) | 100 | if (!argv[0]) |
@@ -136,7 +141,8 @@ int chrt_main(int argc UNUSED_PARAM, char **argv) | |||
136 | [...] SCHED_OTHER or SCHED_BATCH must be assigned static priority 0. | 141 | [...] SCHED_OTHER or SCHED_BATCH must be assigned static priority 0. |
137 | [...] SCHED_FIFO or SCHED_RR can have static priority in 1..99 range. | 142 | [...] SCHED_FIFO or SCHED_RR can have static priority in 1..99 range. |
138 | */ | 143 | */ |
139 | sp.sched_priority = xstrtou_range(priority, 0, policy != SCHED_OTHER ? 1 : 0, 99); | 144 | sp.sched_priority = xstrtou_range(priority, 0, |
145 | (policy != SCHED_OTHER && policy != SCHED_BATCH) ? 1 : 0, 99); | ||
140 | 146 | ||
141 | if (sched_setscheduler(pid, policy, &sp) < 0) | 147 | if (sched_setscheduler(pid, policy, &sp) < 0) |
142 | bb_perror_msg_and_die("can't %cet pid %d's policy", 's', (int)pid); | 148 | bb_perror_msg_and_die("can't %cet pid %d's policy", 's', (int)pid); |