xref: /aosp_15_r20/external/strace/tests-m32/sched_xetattr.c (revision cf84ac9a129d8ea9952db616b4e9b904c4bdde56)
1*cf84ac9aSAndroid Build Coastguard Worker /*
2*cf84ac9aSAndroid Build Coastguard Worker  * Copyright (c) 2015-2017 Dmitry V. Levin <[email protected]>
3*cf84ac9aSAndroid Build Coastguard Worker  * Copyright (c) 2015-2018 The strace developers.
4*cf84ac9aSAndroid Build Coastguard Worker  * All rights reserved.
5*cf84ac9aSAndroid Build Coastguard Worker  *
6*cf84ac9aSAndroid Build Coastguard Worker  * Redistribution and use in source and binary forms, with or without
7*cf84ac9aSAndroid Build Coastguard Worker  * modification, are permitted provided that the following conditions
8*cf84ac9aSAndroid Build Coastguard Worker  * are met:
9*cf84ac9aSAndroid Build Coastguard Worker  * 1. Redistributions of source code must retain the above copyright
10*cf84ac9aSAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer.
11*cf84ac9aSAndroid Build Coastguard Worker  * 2. Redistributions in binary form must reproduce the above copyright
12*cf84ac9aSAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer in the
13*cf84ac9aSAndroid Build Coastguard Worker  *    documentation and/or other materials provided with the distribution.
14*cf84ac9aSAndroid Build Coastguard Worker  * 3. The name of the author may not be used to endorse or promote products
15*cf84ac9aSAndroid Build Coastguard Worker  *    derived from this software without specific prior written permission.
16*cf84ac9aSAndroid Build Coastguard Worker  *
17*cf84ac9aSAndroid Build Coastguard Worker  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18*cf84ac9aSAndroid Build Coastguard Worker  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19*cf84ac9aSAndroid Build Coastguard Worker  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20*cf84ac9aSAndroid Build Coastguard Worker  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21*cf84ac9aSAndroid Build Coastguard Worker  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22*cf84ac9aSAndroid Build Coastguard Worker  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23*cf84ac9aSAndroid Build Coastguard Worker  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24*cf84ac9aSAndroid Build Coastguard Worker  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25*cf84ac9aSAndroid Build Coastguard Worker  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26*cf84ac9aSAndroid Build Coastguard Worker  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27*cf84ac9aSAndroid Build Coastguard Worker  */
28*cf84ac9aSAndroid Build Coastguard Worker 
29*cf84ac9aSAndroid Build Coastguard Worker #include "tests.h"
30*cf84ac9aSAndroid Build Coastguard Worker #include <asm/unistd.h>
31*cf84ac9aSAndroid Build Coastguard Worker 
32*cf84ac9aSAndroid Build Coastguard Worker #if defined __NR_sched_getattr && defined __NR_sched_setattr
33*cf84ac9aSAndroid Build Coastguard Worker 
34*cf84ac9aSAndroid Build Coastguard Worker # include <inttypes.h>
35*cf84ac9aSAndroid Build Coastguard Worker # include <stdio.h>
36*cf84ac9aSAndroid Build Coastguard Worker # include <sched.h>
37*cf84ac9aSAndroid Build Coastguard Worker # include <unistd.h>
38*cf84ac9aSAndroid Build Coastguard Worker # include "sched_attr.h"
39*cf84ac9aSAndroid Build Coastguard Worker # include "xlat.h"
40*cf84ac9aSAndroid Build Coastguard Worker # include "xlat/schedulers.h"
41*cf84ac9aSAndroid Build Coastguard Worker 
42*cf84ac9aSAndroid Build Coastguard Worker static const char *errstr;
43*cf84ac9aSAndroid Build Coastguard Worker 
44*cf84ac9aSAndroid Build Coastguard Worker static long
sys_sched_getattr(kernel_ulong_t pid,kernel_ulong_t attr,kernel_ulong_t size,kernel_ulong_t flags)45*cf84ac9aSAndroid Build Coastguard Worker sys_sched_getattr(kernel_ulong_t pid, kernel_ulong_t attr,
46*cf84ac9aSAndroid Build Coastguard Worker 		  kernel_ulong_t size, kernel_ulong_t flags)
47*cf84ac9aSAndroid Build Coastguard Worker {
48*cf84ac9aSAndroid Build Coastguard Worker 	long rc = syscall(__NR_sched_getattr, pid, attr, size, flags);
49*cf84ac9aSAndroid Build Coastguard Worker 	errstr = sprintrc(rc);
50*cf84ac9aSAndroid Build Coastguard Worker 	return rc;
51*cf84ac9aSAndroid Build Coastguard Worker }
52*cf84ac9aSAndroid Build Coastguard Worker 
53*cf84ac9aSAndroid Build Coastguard Worker static long
sys_sched_setattr(kernel_ulong_t pid,kernel_ulong_t attr,kernel_ulong_t flags)54*cf84ac9aSAndroid Build Coastguard Worker sys_sched_setattr(kernel_ulong_t pid, kernel_ulong_t attr, kernel_ulong_t flags)
55*cf84ac9aSAndroid Build Coastguard Worker {
56*cf84ac9aSAndroid Build Coastguard Worker 	long rc = syscall(__NR_sched_setattr, pid, attr, flags);
57*cf84ac9aSAndroid Build Coastguard Worker 	errstr = sprintrc(rc);
58*cf84ac9aSAndroid Build Coastguard Worker 	return rc;
59*cf84ac9aSAndroid Build Coastguard Worker }
60*cf84ac9aSAndroid Build Coastguard Worker 
61*cf84ac9aSAndroid Build Coastguard Worker int
main(void)62*cf84ac9aSAndroid Build Coastguard Worker main(void)
63*cf84ac9aSAndroid Build Coastguard Worker {
64*cf84ac9aSAndroid Build Coastguard Worker 	static const kernel_ulong_t bogus_pid =
65*cf84ac9aSAndroid Build Coastguard Worker 		(kernel_ulong_t) 0xdefacedfacefeedULL;
66*cf84ac9aSAndroid Build Coastguard Worker 	static const kernel_ulong_t bogus_size =
67*cf84ac9aSAndroid Build Coastguard Worker 		(kernel_ulong_t) 0xdefacedcafef00dULL;
68*cf84ac9aSAndroid Build Coastguard Worker 	static const kernel_ulong_t bogus_flags =
69*cf84ac9aSAndroid Build Coastguard Worker 		(kernel_ulong_t) 0xdefaceddeadc0deULL;
70*cf84ac9aSAndroid Build Coastguard Worker 
71*cf84ac9aSAndroid Build Coastguard Worker 	TAIL_ALLOC_OBJECT_CONST_PTR(struct sched_attr, attr);
72*cf84ac9aSAndroid Build Coastguard Worker 	TAIL_ALLOC_OBJECT_CONST_PTR(unsigned int, psize);
73*cf84ac9aSAndroid Build Coastguard Worker 	void *const efault = attr + 1;
74*cf84ac9aSAndroid Build Coastguard Worker 
75*cf84ac9aSAndroid Build Coastguard Worker 	sys_sched_getattr(0, 0, 0, 0);
76*cf84ac9aSAndroid Build Coastguard Worker 	printf("sched_getattr(0, NULL, 0, 0) = %s\n", errstr);
77*cf84ac9aSAndroid Build Coastguard Worker 
78*cf84ac9aSAndroid Build Coastguard Worker 	sys_sched_getattr(0, (unsigned long) attr, 0, 0);
79*cf84ac9aSAndroid Build Coastguard Worker 	printf("sched_getattr(0, %p, 0, 0) = %s\n", attr, errstr);
80*cf84ac9aSAndroid Build Coastguard Worker 
81*cf84ac9aSAndroid Build Coastguard Worker 	sys_sched_getattr(bogus_pid, 0, 0, 0);
82*cf84ac9aSAndroid Build Coastguard Worker 	printf("sched_getattr(%d, NULL, 0, 0) = %s\n", (int) bogus_pid, errstr);
83*cf84ac9aSAndroid Build Coastguard Worker 
84*cf84ac9aSAndroid Build Coastguard Worker 	sys_sched_getattr(-1U, (unsigned long) attr, bogus_size, bogus_flags);
85*cf84ac9aSAndroid Build Coastguard Worker 	printf("sched_getattr(-1, %p, %s%u, %u) = %s\n",
86*cf84ac9aSAndroid Build Coastguard Worker 	       attr,
87*cf84ac9aSAndroid Build Coastguard Worker # if defined __arm64__ || defined __aarch64__
88*cf84ac9aSAndroid Build Coastguard Worker 	       "0xdefaced<<32|",
89*cf84ac9aSAndroid Build Coastguard Worker # else
90*cf84ac9aSAndroid Build Coastguard Worker 	       "",
91*cf84ac9aSAndroid Build Coastguard Worker # endif
92*cf84ac9aSAndroid Build Coastguard Worker 	       (unsigned) bogus_size, (unsigned) bogus_flags, errstr);
93*cf84ac9aSAndroid Build Coastguard Worker 
94*cf84ac9aSAndroid Build Coastguard Worker 	sys_sched_getattr(0, (unsigned long) efault, sizeof(*attr), 0);
95*cf84ac9aSAndroid Build Coastguard Worker 	printf("sched_getattr(0, %p, %u, 0) = %s\n",
96*cf84ac9aSAndroid Build Coastguard Worker 	       efault, (unsigned) sizeof(*attr), errstr);
97*cf84ac9aSAndroid Build Coastguard Worker 
98*cf84ac9aSAndroid Build Coastguard Worker 	if (sys_sched_getattr(0, (unsigned long) attr, sizeof(*attr), 0))
99*cf84ac9aSAndroid Build Coastguard Worker 		perror_msg_and_skip("sched_getattr");
100*cf84ac9aSAndroid Build Coastguard Worker 	printf("sched_getattr(0, {size=%u, sched_policy=", attr->size);
101*cf84ac9aSAndroid Build Coastguard Worker 	printxval(schedulers, attr->sched_policy, NULL);
102*cf84ac9aSAndroid Build Coastguard Worker 	printf(", sched_flags=%s, sched_nice=%d, sched_priority=%u"
103*cf84ac9aSAndroid Build Coastguard Worker 	       ", sched_runtime=%" PRIu64 ", sched_deadline=%" PRIu64
104*cf84ac9aSAndroid Build Coastguard Worker 	       ", sched_period=%" PRIu64 "}, %u, 0) = 0\n",
105*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_flags ? "SCHED_FLAG_RESET_ON_FORK" : "0",
106*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_nice,
107*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_priority,
108*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_runtime,
109*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_deadline,
110*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_period,
111*cf84ac9aSAndroid Build Coastguard Worker 	       (unsigned) sizeof(*attr));
112*cf84ac9aSAndroid Build Coastguard Worker 
113*cf84ac9aSAndroid Build Coastguard Worker # if defined __arm64__ || defined __aarch64__
114*cf84ac9aSAndroid Build Coastguard Worker 	long rc =
115*cf84ac9aSAndroid Build Coastguard Worker # endif
116*cf84ac9aSAndroid Build Coastguard Worker 	sys_sched_getattr(F8ILL_KULONG_MASK, (unsigned long) attr,
117*cf84ac9aSAndroid Build Coastguard Worker 			  F8ILL_KULONG_MASK | sizeof(*attr), F8ILL_KULONG_MASK);
118*cf84ac9aSAndroid Build Coastguard Worker # if defined __arm64__ || defined __aarch64__
119*cf84ac9aSAndroid Build Coastguard Worker 	if (rc) {
120*cf84ac9aSAndroid Build Coastguard Worker 		printf("sched_getattr(0, %p, 0xffffffff<<32|%u, 0) = %s\n",
121*cf84ac9aSAndroid Build Coastguard Worker 		       attr, (unsigned) sizeof(*attr), errstr);
122*cf84ac9aSAndroid Build Coastguard Worker 	} else
123*cf84ac9aSAndroid Build Coastguard Worker # endif
124*cf84ac9aSAndroid Build Coastguard Worker 	{
125*cf84ac9aSAndroid Build Coastguard Worker 		printf("sched_getattr(0, {size=%u, sched_policy=", attr->size);
126*cf84ac9aSAndroid Build Coastguard Worker 		printxval(schedulers, attr->sched_policy, NULL);
127*cf84ac9aSAndroid Build Coastguard Worker 		printf(", sched_flags=%s, sched_nice=%d, sched_priority=%u"
128*cf84ac9aSAndroid Build Coastguard Worker 		       ", sched_runtime=%" PRIu64 ", sched_deadline=%" PRIu64
129*cf84ac9aSAndroid Build Coastguard Worker 		       ", sched_period=%" PRIu64 "}, %u, 0) = 0\n",
130*cf84ac9aSAndroid Build Coastguard Worker 		       attr->sched_flags ? "SCHED_FLAG_RESET_ON_FORK" : "0",
131*cf84ac9aSAndroid Build Coastguard Worker 		       attr->sched_nice,
132*cf84ac9aSAndroid Build Coastguard Worker 		       attr->sched_priority,
133*cf84ac9aSAndroid Build Coastguard Worker 		       attr->sched_runtime,
134*cf84ac9aSAndroid Build Coastguard Worker 		       attr->sched_deadline,
135*cf84ac9aSAndroid Build Coastguard Worker 		       attr->sched_period,
136*cf84ac9aSAndroid Build Coastguard Worker 		       (unsigned) sizeof(*attr));
137*cf84ac9aSAndroid Build Coastguard Worker 	}
138*cf84ac9aSAndroid Build Coastguard Worker 
139*cf84ac9aSAndroid Build Coastguard Worker 	sys_sched_setattr(bogus_pid, 0, 0);
140*cf84ac9aSAndroid Build Coastguard Worker 	printf("sched_setattr(%d, NULL, 0) = %s\n", (int) bogus_pid, errstr);
141*cf84ac9aSAndroid Build Coastguard Worker 
142*cf84ac9aSAndroid Build Coastguard Worker 	attr->sched_flags |= 1;
143*cf84ac9aSAndroid Build Coastguard Worker 
144*cf84ac9aSAndroid Build Coastguard Worker 	if (sys_sched_setattr(0, (unsigned long) attr, 0))
145*cf84ac9aSAndroid Build Coastguard Worker 		perror_msg_and_skip("sched_setattr");
146*cf84ac9aSAndroid Build Coastguard Worker 	printf("sched_setattr(0, {size=%u, sched_policy=", attr->size);
147*cf84ac9aSAndroid Build Coastguard Worker 	printxval(schedulers, attr->sched_policy, NULL);
148*cf84ac9aSAndroid Build Coastguard Worker 	printf(", sched_flags=%s, sched_nice=%d, sched_priority=%u"
149*cf84ac9aSAndroid Build Coastguard Worker 	       ", sched_runtime=%" PRIu64 ", sched_deadline=%" PRIu64
150*cf84ac9aSAndroid Build Coastguard Worker 	       ", sched_period=%" PRIu64 "}, 0) = 0\n",
151*cf84ac9aSAndroid Build Coastguard Worker 	       "SCHED_FLAG_RESET_ON_FORK",
152*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_nice,
153*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_priority,
154*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_runtime,
155*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_deadline,
156*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_period);
157*cf84ac9aSAndroid Build Coastguard Worker 
158*cf84ac9aSAndroid Build Coastguard Worker 	sys_sched_setattr(F8ILL_KULONG_MASK, (unsigned long) attr,
159*cf84ac9aSAndroid Build Coastguard Worker 			  F8ILL_KULONG_MASK);
160*cf84ac9aSAndroid Build Coastguard Worker 	printf("sched_setattr(0, {size=%u, sched_policy=", attr->size);
161*cf84ac9aSAndroid Build Coastguard Worker 	printxval(schedulers, attr->sched_policy, NULL);
162*cf84ac9aSAndroid Build Coastguard Worker 	printf(", sched_flags=%s, sched_nice=%d, sched_priority=%u"
163*cf84ac9aSAndroid Build Coastguard Worker 	       ", sched_runtime=%" PRIu64 ", sched_deadline=%" PRIu64
164*cf84ac9aSAndroid Build Coastguard Worker 	       ", sched_period=%" PRIu64 "}, 0) = 0\n",
165*cf84ac9aSAndroid Build Coastguard Worker 	       "SCHED_FLAG_RESET_ON_FORK",
166*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_nice,
167*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_priority,
168*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_runtime,
169*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_deadline,
170*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_period);
171*cf84ac9aSAndroid Build Coastguard Worker 
172*cf84ac9aSAndroid Build Coastguard Worker 	*psize = attr->size;
173*cf84ac9aSAndroid Build Coastguard Worker 
174*cf84ac9aSAndroid Build Coastguard Worker 	sys_sched_setattr(0, (unsigned long) psize, 0);
175*cf84ac9aSAndroid Build Coastguard Worker 	printf("sched_setattr(0, %p, 0) = %s\n", psize, errstr);
176*cf84ac9aSAndroid Build Coastguard Worker 
177*cf84ac9aSAndroid Build Coastguard Worker 	attr->size = 0;
178*cf84ac9aSAndroid Build Coastguard Worker 
179*cf84ac9aSAndroid Build Coastguard Worker 	sys_sched_setattr(0, (unsigned long) attr, 0);
180*cf84ac9aSAndroid Build Coastguard Worker 	printf("sched_setattr(0, {size=%u, sched_policy=", attr->size);
181*cf84ac9aSAndroid Build Coastguard Worker 	printxval(schedulers, attr->sched_policy, NULL);
182*cf84ac9aSAndroid Build Coastguard Worker 	printf(", sched_flags=%s, sched_nice=%d, sched_priority=%u"
183*cf84ac9aSAndroid Build Coastguard Worker 	       ", sched_runtime=%" PRIu64 ", sched_deadline=%" PRIu64
184*cf84ac9aSAndroid Build Coastguard Worker 	       ", sched_period=%" PRIu64 "}, 0) = 0\n",
185*cf84ac9aSAndroid Build Coastguard Worker 	       "SCHED_FLAG_RESET_ON_FORK",
186*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_nice,
187*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_priority,
188*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_runtime,
189*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_deadline,
190*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_period);
191*cf84ac9aSAndroid Build Coastguard Worker 
192*cf84ac9aSAndroid Build Coastguard Worker 	attr->size = 1;
193*cf84ac9aSAndroid Build Coastguard Worker 
194*cf84ac9aSAndroid Build Coastguard Worker 	sys_sched_setattr(0, (unsigned long) attr, 0);
195*cf84ac9aSAndroid Build Coastguard Worker 	printf("sched_setattr(0, {size=%u} => {size=%u}, 0) = %s\n",
196*cf84ac9aSAndroid Build Coastguard Worker 	       1, attr->size, errstr);
197*cf84ac9aSAndroid Build Coastguard Worker 
198*cf84ac9aSAndroid Build Coastguard Worker 	attr->size = SCHED_ATTR_MIN_SIZE - 1;
199*cf84ac9aSAndroid Build Coastguard Worker 
200*cf84ac9aSAndroid Build Coastguard Worker 	sys_sched_setattr(0, (unsigned long) attr, 0);
201*cf84ac9aSAndroid Build Coastguard Worker 	printf("sched_setattr(0, {size=%u} => {size=%u}, 0) = %s\n",
202*cf84ac9aSAndroid Build Coastguard Worker 	       SCHED_ATTR_MIN_SIZE - 1, attr->size, errstr);
203*cf84ac9aSAndroid Build Coastguard Worker 
204*cf84ac9aSAndroid Build Coastguard Worker 	attr->size = 0x90807060;
205*cf84ac9aSAndroid Build Coastguard Worker 	attr->sched_policy = 0xca7faced;
206*cf84ac9aSAndroid Build Coastguard Worker 	attr->sched_flags = 0xbadc0ded1057da78ULL;
207*cf84ac9aSAndroid Build Coastguard Worker 	attr->sched_nice = 0xafbfcfdf;
208*cf84ac9aSAndroid Build Coastguard Worker 	attr->sched_priority = 0xb8c8d8e8;
209*cf84ac9aSAndroid Build Coastguard Worker 	attr->sched_runtime = 0xbadcaffedeadf157ULL;
210*cf84ac9aSAndroid Build Coastguard Worker 	attr->sched_deadline = 0xc0de70a57badac75ULL;
211*cf84ac9aSAndroid Build Coastguard Worker 	attr->sched_period = 0xded1ca7edda7aca7ULL;
212*cf84ac9aSAndroid Build Coastguard Worker 
213*cf84ac9aSAndroid Build Coastguard Worker 	sys_sched_setattr(bogus_pid, (unsigned long) attr, bogus_flags);
214*cf84ac9aSAndroid Build Coastguard Worker 	printf("sched_setattr(%d, {size=%u, sched_policy=%#x /* SCHED_??? */, "
215*cf84ac9aSAndroid Build Coastguard Worker 	       "sched_flags=%#" PRIx64 " /* SCHED_FLAG_??? */, "
216*cf84ac9aSAndroid Build Coastguard Worker 	       "sched_nice=%d, sched_priority=%u, sched_runtime=%" PRIu64 ", "
217*cf84ac9aSAndroid Build Coastguard Worker 	       "sched_deadline=%" PRIu64 ", sched_period=%" PRIu64 ", ...}, %u)"
218*cf84ac9aSAndroid Build Coastguard Worker 	       " = %s\n",
219*cf84ac9aSAndroid Build Coastguard Worker 	       (int) bogus_pid,
220*cf84ac9aSAndroid Build Coastguard Worker 	       attr->size,
221*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_policy,
222*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_flags,
223*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_nice,
224*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_priority,
225*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_runtime,
226*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_deadline,
227*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_period,
228*cf84ac9aSAndroid Build Coastguard Worker 	       (unsigned) bogus_flags, errstr);
229*cf84ac9aSAndroid Build Coastguard Worker 
230*cf84ac9aSAndroid Build Coastguard Worker 	if (F8ILL_KULONG_SUPPORTED) {
231*cf84ac9aSAndroid Build Coastguard Worker 		const kernel_ulong_t ill = f8ill_ptr_to_kulong(attr);
232*cf84ac9aSAndroid Build Coastguard Worker 
233*cf84ac9aSAndroid Build Coastguard Worker 		sys_sched_getattr(0, ill, sizeof(*attr), 0);
234*cf84ac9aSAndroid Build Coastguard Worker 		printf("sched_getattr(0, %#llx, %u, 0) = %s\n",
235*cf84ac9aSAndroid Build Coastguard Worker 		       (unsigned long long) ill, (unsigned) sizeof(*attr),
236*cf84ac9aSAndroid Build Coastguard Worker 		       errstr);
237*cf84ac9aSAndroid Build Coastguard Worker 
238*cf84ac9aSAndroid Build Coastguard Worker 		sys_sched_setattr(0, ill, 0);
239*cf84ac9aSAndroid Build Coastguard Worker 		printf("sched_setattr(0, %#llx, 0) = %s\n",
240*cf84ac9aSAndroid Build Coastguard Worker 		       (unsigned long long) ill, errstr);
241*cf84ac9aSAndroid Build Coastguard Worker 	}
242*cf84ac9aSAndroid Build Coastguard Worker 
243*cf84ac9aSAndroid Build Coastguard Worker 
244*cf84ac9aSAndroid Build Coastguard Worker 	attr->size = 0x90807060;
245*cf84ac9aSAndroid Build Coastguard Worker 	attr->sched_policy = 0xca7faced;
246*cf84ac9aSAndroid Build Coastguard Worker 	attr->sched_flags = 0xfULL;
247*cf84ac9aSAndroid Build Coastguard Worker 	attr->sched_nice = 0xafbfcfdf;
248*cf84ac9aSAndroid Build Coastguard Worker 	attr->sched_priority = 0xb8c8d8e8;
249*cf84ac9aSAndroid Build Coastguard Worker 	attr->sched_runtime = 0xbadcaffedeadf157ULL;
250*cf84ac9aSAndroid Build Coastguard Worker 	attr->sched_deadline = 0xc0de70a57badac75ULL;
251*cf84ac9aSAndroid Build Coastguard Worker 	attr->sched_period = 0xded1ca7edda7aca7ULL;
252*cf84ac9aSAndroid Build Coastguard Worker 
253*cf84ac9aSAndroid Build Coastguard Worker 	sys_sched_setattr(bogus_pid, (unsigned long) attr, bogus_flags);
254*cf84ac9aSAndroid Build Coastguard Worker 	printf("sched_setattr(%d, {size=%u, sched_policy=%#x /* SCHED_??? */, "
255*cf84ac9aSAndroid Build Coastguard Worker 	       "sched_flags=SCHED_FLAG_RESET_ON_FORK|SCHED_FLAG_RECLAIM|"
256*cf84ac9aSAndroid Build Coastguard Worker 	       "SCHED_FLAG_DL_OVERRUN|0x8, "
257*cf84ac9aSAndroid Build Coastguard Worker 	       "sched_nice=%d, sched_priority=%u, sched_runtime=%" PRIu64 ", "
258*cf84ac9aSAndroid Build Coastguard Worker 	       "sched_deadline=%" PRIu64 ", sched_period=%" PRIu64 ", ...}, %u)"
259*cf84ac9aSAndroid Build Coastguard Worker 	       " = %s\n",
260*cf84ac9aSAndroid Build Coastguard Worker 	       (int) bogus_pid,
261*cf84ac9aSAndroid Build Coastguard Worker 	       attr->size,
262*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_policy,
263*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_nice,
264*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_priority,
265*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_runtime,
266*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_deadline,
267*cf84ac9aSAndroid Build Coastguard Worker 	       attr->sched_period,
268*cf84ac9aSAndroid Build Coastguard Worker 	       (unsigned) bogus_flags, errstr);
269*cf84ac9aSAndroid Build Coastguard Worker 
270*cf84ac9aSAndroid Build Coastguard Worker 	if (F8ILL_KULONG_SUPPORTED) {
271*cf84ac9aSAndroid Build Coastguard Worker 		const kernel_ulong_t ill = f8ill_ptr_to_kulong(attr);
272*cf84ac9aSAndroid Build Coastguard Worker 
273*cf84ac9aSAndroid Build Coastguard Worker 		sys_sched_getattr(0, ill, sizeof(*attr), 0);
274*cf84ac9aSAndroid Build Coastguard Worker 		printf("sched_getattr(0, %#llx, %u, 0) = %s\n",
275*cf84ac9aSAndroid Build Coastguard Worker 		       (unsigned long long) ill, (unsigned) sizeof(*attr),
276*cf84ac9aSAndroid Build Coastguard Worker 		       errstr);
277*cf84ac9aSAndroid Build Coastguard Worker 
278*cf84ac9aSAndroid Build Coastguard Worker 		sys_sched_setattr(0, ill, 0);
279*cf84ac9aSAndroid Build Coastguard Worker 		printf("sched_setattr(0, %#llx, 0) = %s\n",
280*cf84ac9aSAndroid Build Coastguard Worker 		       (unsigned long long) ill, errstr);
281*cf84ac9aSAndroid Build Coastguard Worker 	}
282*cf84ac9aSAndroid Build Coastguard Worker 
283*cf84ac9aSAndroid Build Coastguard Worker 	puts("+++ exited with 0 +++");
284*cf84ac9aSAndroid Build Coastguard Worker 	return 0;
285*cf84ac9aSAndroid Build Coastguard Worker }
286*cf84ac9aSAndroid Build Coastguard Worker 
287*cf84ac9aSAndroid Build Coastguard Worker #else
288*cf84ac9aSAndroid Build Coastguard Worker 
289*cf84ac9aSAndroid Build Coastguard Worker SKIP_MAIN_UNDEFINED("__NR_sched_getattr && __NR_sched_setattr")
290*cf84ac9aSAndroid Build Coastguard Worker 
291*cf84ac9aSAndroid Build Coastguard Worker #endif
292