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(), &param));
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