From 95332ed166b92343ed46f78f20474f8bd64d4707 Mon Sep 17 00:00:00 2001 From: martin Date: Mon, 25 Jun 2018 12:55:01 +0000 Subject: [PATCH] Additionally pull up following revision(s) (requested by maya in ticket #892): tests/lib/libc/gen/posix_spawn/t_spawnattr.c: revision 1.2,1.3 Don't use SCHED_OTHER. Fix broken test: we can't assume that the current schedule priority range will overlap with the requested scheduler range, so get the new scheduler range, and then try to find a different priority. If that fails (to find a different scheduling range), give up here. --- tests/lib/libc/gen/posix_spawn/t_spawnattr.c | 52 ++++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/tests/lib/libc/gen/posix_spawn/t_spawnattr.c b/tests/lib/libc/gen/posix_spawn/t_spawnattr.c index eb99c41345c0..2040e11e507a 100644 --- a/tests/lib/libc/gen/posix_spawn/t_spawnattr.c +++ b/tests/lib/libc/gen/posix_spawn/t_spawnattr.c @@ -1,4 +1,4 @@ -/* $NetBSD: t_spawnattr.c,v 1.1 2012/02/13 21:03:08 martin Exp $ */ +/* $NetBSD: t_spawnattr.c,v 1.1.34.1 2018/06/25 12:55:01 martin Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -45,37 +45,33 @@ #define MAX(a, b) (a) > (b) ? (a) : (b) #define MIN(a, b) (a) > (b) ? (b) : (a) -static int get_different_scheduler(void); -static int get_different_priority(void); - static int -get_different_scheduler() +get_different_scheduler(void) { - int scheduler, max, min, new; - - max = MAX(MAX(SCHED_FIFO, SCHED_OTHER), SCHED_RR); - min = MIN(MIN(SCHED_FIFO, SCHED_OTHER), SCHED_RR); + /* + * We don't want to use SCHED_OTHER because it does not have + * different priorities. + */ /* get current schedule policy */ - scheduler = sched_getscheduler(0); - - /* new scheduler */ - new = (scheduler + 1); - if (new > max) - new = min; - - return new; + switch (sched_getscheduler(0)) { + case SCHED_RR: + return SCHED_FIFO; + case SCHED_FIFO: + case SCHED_OTHER: + return SCHED_RR; + default: + abort(); + } } static int -get_different_priority() +get_different_priority(int scheduler) { - int scheduler, max, min, new, priority; + int min, max, new, priority; struct sched_param param; - /* get current schedule policy */ - scheduler = sched_getscheduler(0); - + /* Get the priority range for the new scheduler */ max = sched_get_priority_max(scheduler); min = sched_get_priority_min(scheduler); @@ -83,10 +79,13 @@ get_different_priority() priority = param.sched_priority; /* new schedule policy */ - new = (priority + 1); - if (new > max) - new = min; + for (new = min; new <= max; new++) + if (priority != new) + break; + ATF_REQUIRE_MSG(priority != new, "could not find different priority"); + printf("min %d max %d for scheduler %d, returning %d\n", + min, max, scheduler, new); return new; } @@ -119,8 +118,9 @@ ATF_TC_BODY(t_spawnattr, tc) posix_spawnattr_init(&attr); scheduler = get_different_scheduler(); - priority = get_different_priority(); + priority = get_different_priority(scheduler); sp.sched_priority = priority; + printf("using scheduler %d, priority %d\n", scheduler, priority); sigemptyset(&sig); sigaddset(&sig, SIGUSR1);