1d13d74bbf207c2d01598c6fef092a75b93b07c71vapier/* 2d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * Copyright (c) Wipro Technologies Ltd, 2002. All Rights Reserved. 3d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * 4d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * This program is free software; you can redistribute it and/or modify it 5d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * under the terms of version 2 of the GNU General Public License as 6d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * published by the Free Software Foundation. 7d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * 8d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * This program is distributed in the hope that it would be useful, but 9d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * WITHOUT ANY WARRANTY; without even the implied warranty of 10d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * 12d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * You should have received a copy of the GNU General Public License along 13fed9641096e27f79a0f2d9adfe9839dd8d11dc0fWanlong Gao * with this program; if not, write the Free Software Foundation, Inc., 14fed9641096e27f79a0f2d9adfe9839dd8d11dc0fWanlong Gao * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 15d13d74bbf207c2d01598c6fef092a75b93b07c71vapier */ 16d13d74bbf207c2d01598c6fef092a75b93b07c71vapier/********************************************************** 174bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 18d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * TEST IDENTIFIER : sched_setparam02 194bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 20d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * EXECUTED BY : root / superuser 214bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 22d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * TEST TITLE : Checks functionality for sched_setparam(2) 234bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 24d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * TEST CASE TOTAL : 1 254bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 26d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * AUTHOR : Saji Kumar.V.R <saji.kumar@wipro.com> 274bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 28d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * SIGNALS 29d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * Uses SIGUSR1 to pause before test if option set. 30d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * (See the parse_opts(3) man page). 31d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * 32d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * DESCRIPTION 33d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * This test changes the scheduling priority for current process 34d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * and verifies it by calling sched_getparam(). 354bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 36d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * Setup: 37d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * Setup signal handling. 38d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * Pause for SIGUSR1 if option specified. 39d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * Change scheduling policy to SCHED_FIFO 404bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 41d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * Test: 42d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * Loop if the proper options are given. 43d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * Execute system call 44d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * If scheduling priority is set properly, 45d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * TEST passed 46d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * else 47d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * TEST failed 484bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 49d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * Cleanup: 50d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * Print errno log and/or timing stats if options given 514bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 52d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * USAGE: <for command-line> 53d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * sched_setparam02 [-c n] [-e] [-i n] [-I x] [-P x] [-t] [-h] [-f] [-p] 54d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * where, -c n : Run n copies concurrently. 55d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * -e : Turn on errno logging. 56d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * -h : Show help screen 57d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * -f : Turn off functional testing 58d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * -i n : Execute test n times. 59d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * -I x : Execute test for x seconds. 60d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * -p : Pause for SIGUSR1 before starting 61d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * -P x : Pause for x seconds between iterations. 62d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * -t : Turn on syscall timing. 63d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * 64d13d74bbf207c2d01598c6fef092a75b93b07c71vapier ****************************************************************/ 65d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 66d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <errno.h> 67d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <sched.h> 68d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include "test.h" 69d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 70d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#define FIFO_OR_RR_PRIO 5 71d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#define OTHER_PRIO 0 72d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 73d13d74bbf207c2d01598c6fef092a75b93b07c71vapierstatic void setup(); 74d13d74bbf207c2d01598c6fef092a75b93b07c71vapierstatic void cleanup(); 75d13d74bbf207c2d01598c6fef092a75b93b07c71vapierstatic int verify_priority(int); 76d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 77fdce7d5e2a219d201a2b0e3bab6b61b01ec1d716Cyril Hrubischar *TCID = "sched_setparam02"; 78d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 79d13d74bbf207c2d01598c6fef092a75b93b07c71vapierstatic struct sched_param param; 80d13d74bbf207c2d01598c6fef092a75b93b07c71vapierstatic struct sched_param param1 = { 1 }; 81d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 82d13d74bbf207c2d01598c6fef092a75b93b07c71vapierstatic struct test_cases_t { 83d13d74bbf207c2d01598c6fef092a75b93b07c71vapier char *desc; 84d13d74bbf207c2d01598c6fef092a75b93b07c71vapier int policy; 85d13d74bbf207c2d01598c6fef092a75b93b07c71vapier int priority; 86d13d74bbf207c2d01598c6fef092a75b93b07c71vapier} testcases[] = { 8756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak { 8856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak "Test with policy SCHED_FIFO", SCHED_FIFO, FIFO_OR_RR_PRIO}, { 8956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak "Test with policy SCHED_RR", SCHED_RR, FIFO_OR_RR_PRIO}, { 9056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak "Test with SCHED_OTHER", SCHED_OTHER, OTHER_PRIO} 91d13d74bbf207c2d01598c6fef092a75b93b07c71vapier}; 92d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 93d13d74bbf207c2d01598c6fef092a75b93b07c71vapierint TST_TOTAL = sizeof(testcases) / sizeof(testcases[0]); 94d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 9556207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint main(int ac, char **av) 96d13d74bbf207c2d01598c6fef092a75b93b07c71vapier{ 97d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 9889af32a63ce8a780ea39337339e14caae244b5a4Cyril Hrubis int lc, i; 99d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 100d6d11d08678aac1ed2c370ea8e42e5f45aea07beCyril Hrubis tst_parse_opts(ac, av, NULL, NULL); 101d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 102d13d74bbf207c2d01598c6fef092a75b93b07c71vapier setup(); 103d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 104d13d74bbf207c2d01598c6fef092a75b93b07c71vapier for (lc = 0; TEST_LOOPING(lc); lc++) { 105d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 106d59a659cd639ca2780b00049d102acd2a783d585Caspar Zhang tst_count = 0; 10756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak 108d13d74bbf207c2d01598c6fef092a75b93b07c71vapier for (i = 0; i < TST_TOTAL; ++i) { 109d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 110d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (i == 2) { 111d13d74bbf207c2d01598c6fef092a75b93b07c71vapier param1.sched_priority = 0; 11256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak } else { 113d13d74bbf207c2d01598c6fef092a75b93b07c71vapier param1.sched_priority = 1; 114d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 115d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if ((sched_setscheduler(0, testcases[i].policy, 116d13d74bbf207c2d01598c6fef092a75b93b07c71vapier ¶m1)) == -1) { 117d13d74bbf207c2d01598c6fef092a75b93b07c71vapier tst_brkm(TBROK, cleanup, "sched_setscheduler()" 11856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak " failed"); 119d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 120d13d74bbf207c2d01598c6fef092a75b93b07c71vapier param.sched_priority = testcases[i].priority; 1214bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak /* 122d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * Call sched_setparam(2) with pid=0 sothat it will 123d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * set the scheduling parameters for the calling process 124d13d74bbf207c2d01598c6fef092a75b93b07c71vapier */ 125d13d74bbf207c2d01598c6fef092a75b93b07c71vapier TEST(sched_setparam(0, ¶m)); 126d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 127d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if ((TEST_RETURN == 0) && (verify_priority(i))) { 128d13d74bbf207c2d01598c6fef092a75b93b07c71vapier tst_resm(TPASS, "%s Passed", testcases[i].desc); 129d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 130354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_resm(TFAIL | TTERRNO, 131354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s Failed. sched_setparam()" 132354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao " returned %ld", testcases[i].desc, 133354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao TEST_RETURN); 134d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 135d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 1362c28215423293e443469a07ae7011135d058b671Garrett Cooper } 137d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 138d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* cleanup and exit */ 139d13d74bbf207c2d01598c6fef092a75b93b07c71vapier cleanup(); 140d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 14153740500924f6439623a8ac256b5be2d6c59ed1fGarrett Cooper tst_exit(); 142d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 1432c28215423293e443469a07ae7011135d058b671Garrett Cooper} 144d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 145d13d74bbf207c2d01598c6fef092a75b93b07c71vapier/* setup() - performs all ONE TIME setup for this test */ 146c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingervoid setup(void) 147d13d74bbf207c2d01598c6fef092a75b93b07c71vapier{ 1482c28215423293e443469a07ae7011135d058b671Garrett Cooper 149d13d74bbf207c2d01598c6fef092a75b93b07c71vapier tst_sig(NOFORK, DEF_HANDLER, cleanup); 150d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 151d13d74bbf207c2d01598c6fef092a75b93b07c71vapier TEST_PAUSE; 152d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 1532c28215423293e443469a07ae7011135d058b671Garrett Cooper} 154d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 155d13d74bbf207c2d01598c6fef092a75b93b07c71vapier/* 156d13d74bbf207c2d01598c6fef092a75b93b07c71vapier *cleanup() - performs all ONE TIME cleanup for this test at 157d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * completion or premature exit. 158d13d74bbf207c2d01598c6fef092a75b93b07c71vapier */ 159c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingervoid cleanup(void) 160d13d74bbf207c2d01598c6fef092a75b93b07c71vapier{ 1612c28215423293e443469a07ae7011135d058b671Garrett Cooper} 162d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 163d13d74bbf207c2d01598c6fef092a75b93b07c71vapier/* 164d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * verify_priority() - This function checks whether the priority is 165d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * set correctly 166d13d74bbf207c2d01598c6fef092a75b93b07c71vapier */ 16756207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint verify_priority(int i) 168d13d74bbf207c2d01598c6fef092a75b93b07c71vapier{ 169d13d74bbf207c2d01598c6fef092a75b93b07c71vapier struct sched_param p; 170d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 171d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if ((sched_getparam(0, &p)) == 0) { 172d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (p.sched_priority == testcases[i].priority) { 173d13d74bbf207c2d01598c6fef092a75b93b07c71vapier return 1; 174d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 175d13d74bbf207c2d01598c6fef092a75b93b07c71vapier tst_resm(TWARN, "sched_getparam() returned priority" 17656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak " value as %d", p.sched_priority); 177d13d74bbf207c2d01598c6fef092a75b93b07c71vapier return 0; 178d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 179d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 180d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 181d13d74bbf207c2d01598c6fef092a75b93b07c71vapier tst_resm(TWARN, "sched_getparam() failed"); 182d13d74bbf207c2d01598c6fef092a75b93b07c71vapier return 0; 183ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 184