1*a325d9c4SApple OSS Distributions #include <darwintest.h>
2*a325d9c4SApple OSS Distributions #include <darwintest_utils.h>
3*a325d9c4SApple OSS Distributions #include <stdio.h>
4*a325d9c4SApple OSS Distributions #include <stdlib.h>
5*a325d9c4SApple OSS Distributions #include <stdbool.h>
6*a325d9c4SApple OSS Distributions #include <errno.h>
7*a325d9c4SApple OSS Distributions
8*a325d9c4SApple OSS Distributions T_GLOBAL_META(
9*a325d9c4SApple OSS Distributions T_META_RUN_CONCURRENTLY(false),
10*a325d9c4SApple OSS Distributions T_META_BOOTARGS_SET("enable_skstsct=1"),
11*a325d9c4SApple OSS Distributions T_META_CHECK_LEAKS(false),
12*a325d9c4SApple OSS Distributions T_META_ASROOT(true),
13*a325d9c4SApple OSS Distributions T_META_REQUIRES_SYSCTL_EQ("kern.hv_vmm_present", 0),
14*a325d9c4SApple OSS Distributions T_META_RADAR_COMPONENT_NAME("xnu"),
15*a325d9c4SApple OSS Distributions T_META_RADAR_COMPONENT_VERSION("scheduler"),
16*a325d9c4SApple OSS Distributions T_META_OWNER("ngamble")
17*a325d9c4SApple OSS Distributions );
18*a325d9c4SApple OSS Distributions
19*a325d9c4SApple OSS Distributions static void
print_cmd(char ** cmd)20*a325d9c4SApple OSS Distributions print_cmd(char **cmd)
21*a325d9c4SApple OSS Distributions {
22*a325d9c4SApple OSS Distributions char *s;
23*a325d9c4SApple OSS Distributions
24*a325d9c4SApple OSS Distributions while ((s = *cmd) != NULL) {
25*a325d9c4SApple OSS Distributions printf("%s ", s);
26*a325d9c4SApple OSS Distributions cmd++;
27*a325d9c4SApple OSS Distributions }
28*a325d9c4SApple OSS Distributions printf("\n");
29*a325d9c4SApple OSS Distributions }
30*a325d9c4SApple OSS Distributions
31*a325d9c4SApple OSS Distributions T_DECL(zn_rt, "Schedule 1 RT thread per performance core, and test max latency", T_META_ENABLED(!TARGET_OS_TV))
32*a325d9c4SApple OSS Distributions {
33*a325d9c4SApple OSS Distributions char *cmd[] = {"/AppleInternal/CoreOS/tests/xnu/zero-to-n/zn",
34*a325d9c4SApple OSS Distributions "0", "broadcast-single-sem", "realtime", "1000",
35*a325d9c4SApple OSS Distributions "--spin-time", "200000",
36*a325d9c4SApple OSS Distributions "--spin-all",
37*a325d9c4SApple OSS Distributions "--test-rt",
38*a325d9c4SApple OSS Distributions NULL};
39*a325d9c4SApple OSS Distributions print_cmd(cmd);
40*a325d9c4SApple OSS Distributions
41*a325d9c4SApple OSS Distributions pid_t test_pid;
42*a325d9c4SApple OSS Distributions int ret = dt_launch_tool(&test_pid, cmd, false, NULL, NULL);
43*a325d9c4SApple OSS Distributions if (ret) {
44*a325d9c4SApple OSS Distributions T_ASSERT_FAIL("dt_launch_tool() failed unexpectedly with errno %d", errno);
45*a325d9c4SApple OSS Distributions }
46*a325d9c4SApple OSS Distributions
47*a325d9c4SApple OSS Distributions int exitstatus;
48*a325d9c4SApple OSS Distributions dt_waitpid(test_pid, &exitstatus, NULL, 0);
49*a325d9c4SApple OSS Distributions if (exitstatus == 0) {
50*a325d9c4SApple OSS Distributions T_PASS("zn_rt");
51*a325d9c4SApple OSS Distributions } else if (exitstatus == 2) {
52*a325d9c4SApple OSS Distributions T_SKIP("zn_rt");
53*a325d9c4SApple OSS Distributions } else {
54*a325d9c4SApple OSS Distributions T_FAIL("zn_rt");
55*a325d9c4SApple OSS Distributions }
56*a325d9c4SApple OSS Distributions T_END;
57*a325d9c4SApple OSS Distributions }
58*a325d9c4SApple OSS Distributions
59*a325d9c4SApple OSS Distributions T_DECL(zn_rt_smt, "Schedule 1 RT thread per primary core, verify that the secondaries are idle iff the RT threads are running", T_META_ASROOT(true), T_META_ENABLED(TARGET_CPU_X86_64))
60*a325d9c4SApple OSS Distributions {
61*a325d9c4SApple OSS Distributions char *cmd[] = {"/AppleInternal/CoreOS/tests/xnu/zero-to-n/zn",
62*a325d9c4SApple OSS Distributions "0", "broadcast-single-sem", "realtime", "1000",
63*a325d9c4SApple OSS Distributions "--spin-time", "200000",
64*a325d9c4SApple OSS Distributions "--spin-all",
65*a325d9c4SApple OSS Distributions "--churn-pri", "4",
66*a325d9c4SApple OSS Distributions "--test-rt-smt",
67*a325d9c4SApple OSS Distributions "--intel-only",
68*a325d9c4SApple OSS Distributions NULL};
69*a325d9c4SApple OSS Distributions print_cmd(cmd);
70*a325d9c4SApple OSS Distributions
71*a325d9c4SApple OSS Distributions pid_t test_pid;
72*a325d9c4SApple OSS Distributions int ret = dt_launch_tool(&test_pid, cmd, false, NULL, NULL);
73*a325d9c4SApple OSS Distributions if (ret) {
74*a325d9c4SApple OSS Distributions T_ASSERT_FAIL("dt_launch_tool() failed unexpectedly with errno %d", errno);
75*a325d9c4SApple OSS Distributions }
76*a325d9c4SApple OSS Distributions
77*a325d9c4SApple OSS Distributions int exitstatus;
78*a325d9c4SApple OSS Distributions dt_waitpid(test_pid, &exitstatus, NULL, 0);
79*a325d9c4SApple OSS Distributions if (exitstatus == 0) {
80*a325d9c4SApple OSS Distributions T_PASS("zn_rt_smt");
81*a325d9c4SApple OSS Distributions } else if (exitstatus == 2) {
82*a325d9c4SApple OSS Distributions T_SKIP("zn_rt_smt");
83*a325d9c4SApple OSS Distributions } else {
84*a325d9c4SApple OSS Distributions T_FAIL("zn_rt_smt");
85*a325d9c4SApple OSS Distributions }
86*a325d9c4SApple OSS Distributions T_END;
87*a325d9c4SApple OSS Distributions }
88*a325d9c4SApple OSS Distributions
89*a325d9c4SApple OSS Distributions T_DECL(zn_rt_avoid0, "Schedule 1 RT thread per primary core except for CPU 0", T_META_ASROOT(true), T_META_ENABLED(TARGET_CPU_X86_64))
90*a325d9c4SApple OSS Distributions {
91*a325d9c4SApple OSS Distributions char *cmd[] = {"/AppleInternal/CoreOS/tests/xnu/zero-to-n/zn",
92*a325d9c4SApple OSS Distributions "0", "broadcast-single-sem", "realtime", "1000",
93*a325d9c4SApple OSS Distributions "--spin-time", "200000",
94*a325d9c4SApple OSS Distributions "--spin-all",
95*a325d9c4SApple OSS Distributions "--test-rt-avoid0",
96*a325d9c4SApple OSS Distributions "--intel-only",
97*a325d9c4SApple OSS Distributions NULL};
98*a325d9c4SApple OSS Distributions print_cmd(cmd);
99*a325d9c4SApple OSS Distributions
100*a325d9c4SApple OSS Distributions pid_t test_pid;
101*a325d9c4SApple OSS Distributions int ret = dt_launch_tool(&test_pid, cmd, false, NULL, NULL);
102*a325d9c4SApple OSS Distributions if (ret) {
103*a325d9c4SApple OSS Distributions T_ASSERT_FAIL("dt_launch_tool() failed unexpectedly with errno %d", errno);
104*a325d9c4SApple OSS Distributions }
105*a325d9c4SApple OSS Distributions
106*a325d9c4SApple OSS Distributions int exitstatus;
107*a325d9c4SApple OSS Distributions dt_waitpid(test_pid, &exitstatus, NULL, 0);
108*a325d9c4SApple OSS Distributions if (exitstatus == 0) {
109*a325d9c4SApple OSS Distributions T_PASS("zn_rt_avoid0");
110*a325d9c4SApple OSS Distributions } else if (exitstatus == 2) {
111*a325d9c4SApple OSS Distributions T_SKIP("zn_rt_avoid0");
112*a325d9c4SApple OSS Distributions } else {
113*a325d9c4SApple OSS Distributions T_FAIL("zn_rt_avoid0");
114*a325d9c4SApple OSS Distributions }
115*a325d9c4SApple OSS Distributions T_END;
116*a325d9c4SApple OSS Distributions }
117*a325d9c4SApple OSS Distributions
118*a325d9c4SApple OSS Distributions T_DECL(zn_rt_apt, "Emulate AVID Pro Tools with default latency deadlines", T_META_ENABLED(!TARGET_OS_TV))
119*a325d9c4SApple OSS Distributions {
120*a325d9c4SApple OSS Distributions char *cmd[] = {"/AppleInternal/CoreOS/tests/xnu/zero-to-n/zn",
121*a325d9c4SApple OSS Distributions "0", "chain", "realtime", "10000",
122*a325d9c4SApple OSS Distributions "--extra-thread-count", "-3",
123*a325d9c4SApple OSS Distributions "--spin-time", "200000",
124*a325d9c4SApple OSS Distributions "--spin-all",
125*a325d9c4SApple OSS Distributions "--churn-pri", "31", "--churn-random",
126*a325d9c4SApple OSS Distributions "--test-rt",
127*a325d9c4SApple OSS Distributions NULL};
128*a325d9c4SApple OSS Distributions print_cmd(cmd);
129*a325d9c4SApple OSS Distributions
130*a325d9c4SApple OSS Distributions pid_t test_pid;
131*a325d9c4SApple OSS Distributions int ret = dt_launch_tool(&test_pid, cmd, false, NULL, NULL);
132*a325d9c4SApple OSS Distributions if (ret) {
133*a325d9c4SApple OSS Distributions T_ASSERT_FAIL("dt_launch_tool() failed unexpectedly with errno %d", errno);
134*a325d9c4SApple OSS Distributions }
135*a325d9c4SApple OSS Distributions
136*a325d9c4SApple OSS Distributions int exitstatus;
137*a325d9c4SApple OSS Distributions dt_waitpid(test_pid, &exitstatus, NULL, 0);
138*a325d9c4SApple OSS Distributions if (exitstatus == 0) {
139*a325d9c4SApple OSS Distributions T_PASS("zn_rt_apt");
140*a325d9c4SApple OSS Distributions } else if (exitstatus == 2) {
141*a325d9c4SApple OSS Distributions T_SKIP("zn_rt_apt");
142*a325d9c4SApple OSS Distributions } else {
143*a325d9c4SApple OSS Distributions T_FAIL("zn_rt_apt");
144*a325d9c4SApple OSS Distributions }
145*a325d9c4SApple OSS Distributions T_END;
146*a325d9c4SApple OSS Distributions }
147*a325d9c4SApple OSS Distributions
148*a325d9c4SApple OSS Distributions T_DECL(zn_rt_apt_ll, "Emulate AVID Pro Tools with low latency deadlines")
149*a325d9c4SApple OSS Distributions {
150*a325d9c4SApple OSS Distributions char *cmd[] = {"/AppleInternal/CoreOS/tests/xnu/zero-to-n/zn",
151*a325d9c4SApple OSS Distributions "0", "chain", "realtime", "10000",
152*a325d9c4SApple OSS Distributions "--extra-thread-count", "-3",
153*a325d9c4SApple OSS Distributions "--spin-time", "200000",
154*a325d9c4SApple OSS Distributions "--spin-all",
155*a325d9c4SApple OSS Distributions "--churn-pri", "31", "--churn-random",
156*a325d9c4SApple OSS Distributions "--trace", "500000",
157*a325d9c4SApple OSS Distributions "--test-rt",
158*a325d9c4SApple OSS Distributions "--rt-ll",
159*a325d9c4SApple OSS Distributions NULL};
160*a325d9c4SApple OSS Distributions print_cmd(cmd);
161*a325d9c4SApple OSS Distributions
162*a325d9c4SApple OSS Distributions pid_t test_pid;
163*a325d9c4SApple OSS Distributions int ret = dt_launch_tool(&test_pid, cmd, false, NULL, NULL);
164*a325d9c4SApple OSS Distributions if (ret) {
165*a325d9c4SApple OSS Distributions T_ASSERT_FAIL("dt_launch_tool() failed unexpectedly with errno %d", errno);
166*a325d9c4SApple OSS Distributions }
167*a325d9c4SApple OSS Distributions
168*a325d9c4SApple OSS Distributions int exitstatus;
169*a325d9c4SApple OSS Distributions dt_waitpid(test_pid, &exitstatus, NULL, 0);
170*a325d9c4SApple OSS Distributions if (exitstatus == 0) {
171*a325d9c4SApple OSS Distributions T_PASS("zn_rt_apt_ll");
172*a325d9c4SApple OSS Distributions } else if (exitstatus == 2) {
173*a325d9c4SApple OSS Distributions T_SKIP("zn_rt_apt_ll");
174*a325d9c4SApple OSS Distributions } else {
175*a325d9c4SApple OSS Distributions T_FAIL("zn_rt_apt_ll");
176*a325d9c4SApple OSS Distributions }
177*a325d9c4SApple OSS Distributions T_END;
178*a325d9c4SApple OSS Distributions }
179