1a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars/* 2a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * Copyright (c) Wipro Technologies Ltd, 2002. All Rights Reserved. 3a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * 4a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * This program is free software; you can redistribute it and/or modify it 5a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * under the terms of version 2 of the GNU General Public License as 6a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * published by the Free Software Foundation. 7a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * 8a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * This program is distributed in the hope that it would be useful, but 9a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * WITHOUT ANY WARRANTY; without even the implied warranty of 10a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * 12a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * 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. 15a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * 16a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars */ 17a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars/********************************************************** 184bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 19a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * TEST IDENTIFIER : sched_getparam02 204bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 21a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * EXECUTED BY : anyone 224bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 23a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * TEST TITLE : Get scheduling parametes for parent process 244bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 25a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * TEST CASE TOTAL : 1 264bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 27a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * AUTHOR : Saji Kumar.V.R <saji.kumar@wipro.com> 284bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 29a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * SIGNALS 30a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * Uses SIGUSR1 to pause before test if option set. 31a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * (See the parse_opts(3) man page). 32a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * 33a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * DESCRIPTION 34a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * Verifies functionality of sched_getparam() for a process other than 35a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * current process (ie, pid != 0). Here we get the scheduling parameters 36a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * for parent process. 374bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 38a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * Setup: 39a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * Setup signal handling. 40a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * Pause for SIGUSR1 if option specified. 414bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 42a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * Test: 43a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * Loop if the proper options are given. 44a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * fork a child 45a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * 46a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * CHILD: 47a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * Gets the scheduling parameters for parent process 48a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * If successfull, 49a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * TEST passed 50a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * else 51a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * TEST failed. 52a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * 53a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * PARENT: 54a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * wait for child to finish 554bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 56a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * Cleanup: 57a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * Print errno log and/or timing stats if options given 584bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 59a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * USAGE: <for command-line> 60a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * sched_getparam02 [-c n] [-e] [-i n] [-I x] [-P x] [-t] [-h] [-f] [-p] 61a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * where, -c n : Run n copies concurrently. 62a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * -e : Turn on errno logging. 63a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * -h : Show help screen 64a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * -f : Turn off functional testing 65a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * -i n : Execute test n times. 66a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * -I x : Execute test for x seconds. 67a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * -p : Pause for SIGUSR1 before starting 68a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * -P x : Pause for x seconds between iterations. 69a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * -t : Turn on syscall timing. 70a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * 71a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars ****************************************************************/ 72a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars 73a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars#include <errno.h> 74a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars#include <sched.h> 75a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars#include <sys/wait.h> 76a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars#include <stdlib.h> 77a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars#include "test.h" 78a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars 79a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plarsstatic void setup(); 80a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plarsstatic void cleanup(); 81a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars 82fdce7d5e2a219d201a2b0e3bab6b61b01ec1d716Cyril Hrubischar *TCID = "sched_getparam02"; 83fdce7d5e2a219d201a2b0e3bab6b61b01ec1d716Cyril Hrubisint TST_TOTAL = 1; 84a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars 85a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plarsstatic struct sched_param param; 86a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars 8756207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint main(int ac, char **av) 88a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars{ 89a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars 9089af32a63ce8a780ea39337339e14caae244b5a4Cyril Hrubis int lc; 91a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars int status; 92a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars pid_t child_pid; 93a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars 94d6d11d08678aac1ed2c370ea8e42e5f45aea07beCyril Hrubis tst_parse_opts(ac, av, NULL, NULL); 95a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars 96a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars setup(); 97a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars 98a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars for (lc = 0; TEST_LOOPING(lc); lc++) { 99a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars 100d59a659cd639ca2780b00049d102acd2a783d585Caspar Zhang tst_count = 0; 101bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak 10256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak switch (child_pid = FORK_OR_VFORK()) { 103a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars 104a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars case -1: 105a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars /* fork() failed */ 106a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars tst_resm(TFAIL, "fork() failed"); 107a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars continue; 108a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars 109a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars case 0: 110a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars /* Child */ 111a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars param.sched_priority = 100; 112a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars 1134bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak /* 114a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * Call sched_getparam(2) with pid = getppid() sothat 115a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * it will get the scheduling parameters for parent 116a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * process 117a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars */ 118a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars TEST(sched_getparam(getppid(), ¶m)); 119bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak 120a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars /* 12156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak * Check return code & priority. For normal process, 122a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * scheduling policy is SCHED_OTHER. For this 123a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * scheduling policy, only allowed priority value is 0. 124a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * So we should get 0 for priority value 125a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars */ 1260ae003ba8b1ab26b745ab5a17bb97af3b0e1c923Garrett Cooper if (TEST_RETURN == 0 && param.sched_priority == 0) 127a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars exit(0); 1280ae003ba8b1ab26b745ab5a17bb97af3b0e1c923Garrett Cooper else { 129a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars tst_resm(TWARN, "sched_getparam()" 130923b23ff1fd1b77bd895949f9a6b4508c6485f33subrata_modak "returned %ld, errno = %d : %s;" 131a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars " returned process priority value" 132a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars " is %d", TEST_RETURN, TEST_ERRNO, 133a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars strerror(TEST_ERRNO), 134a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars param.sched_priority); 135a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars exit(1); 136a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars } 137a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars 138a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars default: 139a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars /* Parent */ 140a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars if ((waitpid(child_pid, &status, 0)) < 0) { 141a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars tst_resm(TFAIL, "wait() failed"); 142a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars continue; 143a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars } 1440ae003ba8b1ab26b745ab5a17bb97af3b0e1c923Garrett Cooper if ((WIFEXITED(status)) && (WEXITSTATUS(status) == 0)) 145a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars tst_resm(TPASS, "Test Passed"); 1460ae003ba8b1ab26b745ab5a17bb97af3b0e1c923Garrett Cooper else 147a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars tst_resm(TFAIL, "Test Failed"); 148a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars } 149a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars 1502c28215423293e443469a07ae7011135d058b671Garrett Cooper } 151a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars 152a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars cleanup(); 153c89ea2b08d1f0281c3c34429d2028e10b3d6c1cbGarrett Cooper tst_exit(); 1542c28215423293e443469a07ae7011135d058b671Garrett Cooper} 155a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars 156a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars/* setup() - performs all ONE TIME setup for this test */ 157c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingervoid setup(void) 158a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars{ 1592c28215423293e443469a07ae7011135d058b671Garrett Cooper 160a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars tst_sig(FORK, DEF_HANDLER, cleanup); 161a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars 162a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars TEST_PAUSE; 163a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars 1642c28215423293e443469a07ae7011135d058b671Garrett Cooper} 165a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars 166a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars/* 167a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars *cleanup() - performs all ONE TIME cleanup for this test at 168a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars * completion or premature exit. 169a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars */ 170c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingervoid cleanup(void) 171a8b7bfe6de9b3fddbe1dc0e553b31b2fd5d00a67plars{ 172c89ea2b08d1f0281c3c34429d2028e10b3d6c1cbGarrett Cooper} 173