]> err.no Git - util-linux/commitdiff
chrt: don't assume SCHED_BATCH and SCHED_IDLE exist
authorAurelien Jarno <aurelien@aurel32.net>
Wed, 22 Apr 2009 07:18:28 +0000 (09:18 +0200)
committerKarel Zak <kzak@redhat.com>
Wed, 27 May 2009 08:22:32 +0000 (10:22 +0200)
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>
schedutils/chrt.1
schedutils/chrt.c

index 83b3dbb0c2423f7e671b3490a0b65ee64faf78c5..06c58b479470a9da525787a075521cae96ebbf20 100644 (file)
@@ -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
index dcd05240309a0f29f8cebbca560b9b670a6665ed..7d6bb2dbcb596e6e1e2c79e42ec47710510fd557 100644 (file)
@@ -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();