From: Aurelien Jarno Date: Wed, 22 Apr 2009 07:18:28 +0000 (+0200) Subject: chrt: don't assume SCHED_BATCH and SCHED_IDLE exist X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1253662647f4b8a68062b420f2dad5c11a8a3c85;p=util-linux 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 Signed-off-by: Karel Zak --- diff --git a/schedutils/chrt.1 b/schedutils/chrt.1 index 83b3dbb0..06c58b47 100644 --- a/schedutils/chrt.1 +++ b/schedutils/chrt.1 @@ -63,6 +63,7 @@ operate on an existing PID and do not launch a new task .B -b, --batch set scheduling policy to .BR SCHED_BATCH +(Linux specific) .TP .B -f, --fifo set scheduling policy to @@ -71,6 +72,7 @@ set scheduling policy to .B -i, --idle set schedulng policy to .BR SCHED_IDLE +(Linux specific) .TP .B -m, --max show minimum and maximum valid priorities, then exit 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();