diff options
author | Aurelien Jarno <aurelien@aurel32.net> | 2009-04-22 09:18:28 +0200 |
---|---|---|
committer | Karel Zak <kzak@redhat.com> | 2009-05-07 11:28:08 +0200 |
commit | b64279dab84373f060d589bdd519dbfa255adc58 (patch) | |
tree | e7db453544e78c702683d5195484f4ff26938283 /schedutils/chrt.c | |
parent | a43145e157467ca281264e6571f27c014957e5dc (diff) | |
download | util-linux-old-b64279dab84373f060d589bdd519dbfa255adc58.tar.gz |
chrt: don't assume SCHED_BATCH and SCHED_IDLE exist
SCHED_FIFO, SCHED_OTHER, SCHED_RR are part of POSIX 1003.1b Process
Scheduling, so it is correct to assume they always exists.
SCHED_BATCH and SCHED_IDLE are Linux specific, we should not assume
they exists.
Defining SCHED_BATCH and SCHED_IDLE to random values (ie the ones found
on Linux systems) is not an option as they may *collide* with the one of
other systems. For example on GNU/kFreeBSD we have:
#define SCHED_RR 3
and on Linux we have:
#define SCHED_BATCH 3
[kzak@redhat.com: - add "Linux specific" notes to chrt.1
- add a note about BATCH and PR conflict to
this commit message]
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'schedutils/chrt.c')
-rw-r--r-- | schedutils/chrt.c | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/schedutils/chrt.c b/schedutils/chrt.c index dcd05240..7d6bb2db 100644 --- a/schedutils/chrt.c +++ b/schedutils/chrt.c @@ -34,7 +34,7 @@ /* the SCHED_BATCH is supported since Linux 2.6.16 * -- temporary workaround for people with old glibc headers */ -#ifndef SCHED_BATCH +#if defined (__linux__) && !defined(SCHED_BATCH) # define SCHED_BATCH 3 #endif @@ -42,7 +42,7 @@ * commit id 0e6aca43e08a62a48d6770e9a159dbec167bf4c6 * -- temporary workaround for people with old glibc headers */ -#ifndef SCHED_IDLE +#if defined (__linux__) && !defined(SCHED_IDLE) # define SCHED_IDLE 5 #endif @@ -95,15 +95,19 @@ static void show_rt_info(const char *what, pid_t pid) case SCHED_FIFO: printf("SCHED_FIFO\n"); break; +#ifdef SCHED_IDLE case SCHED_IDLE: printf("SCHED_IDLE\n"); break; +#endif case SCHED_RR: printf("SCHED_RR\n"); break; +#ifdef SCHED_BATCH case SCHED_BATCH: printf("SCHED_BATCH\n"); break; +#endif default: printf(_("unknown\n")); } @@ -119,8 +123,21 @@ static void show_min_max(void) { int i; int policies[] = { SCHED_OTHER, SCHED_FIFO, SCHED_RR, - SCHED_BATCH, SCHED_IDLE }; - const char *names[] = { "OTHER", "FIFO", "RR", "BATCH", "IDLE" }; +#ifdef SCHED_BATCH + SCHED_BATCH, +#endif +#ifdef SCHED_IDLE + SCHED_IDLE, +#endif + }; + const char *names[] = { "OTHER", "FIFO", "RR", +#ifdef SCHED_BATCH + "BATCH", +#endif +#ifdef SCHED_IDLE + "IDLE", +#endif + }; for (i = 0; i < ARRAY_SIZE(policies); i++) { int max = sched_get_priority_max(policies[i]); @@ -164,13 +181,17 @@ int main(int argc, char *argv[]) switch (i) { case 'b': +#ifdef SCHED_BATCH policy = SCHED_BATCH; +#endif break; case 'f': policy = SCHED_FIFO; break; case 'i': +#ifdef SCHED_IDLE policy = SCHED_IDLE; +#endif break; case 'm': show_min_max(); |