aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2006-06-27 05:55:01 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-06-27 20:32:47 -0400
commit0bafd214e4ba55dc1fb81a3031d0249292f1bc05 (patch)
tree754b3ad381078c57061515549642889b19aaf86d
parente74c69f46d93d29eea0ad8647863d1c6488f0f55 (diff)
[PATCH] rtmutex: Modify rtmutex-tester to test the setscheduler propagation
Make test suite setscheduler calls asynchronously. Remove the waits in the test cases and add a new testcase to verify the correctness of the setscheduler priority propagation. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--kernel/rtmutex-tester.c32
-rw-r--r--scripts/rt-tester/check-all.sh1
-rw-r--r--scripts/rt-tester/t2-l1-2rt-sameprio.tst2
-rw-r--r--scripts/rt-tester/t2-l1-pi.tst2
-rw-r--r--scripts/rt-tester/t2-l1-signal.tst2
-rw-r--r--scripts/rt-tester/t2-l2-2rt-deadlock.tst2
-rw-r--r--scripts/rt-tester/t3-l1-pi-1rt.tst3
-rw-r--r--scripts/rt-tester/t3-l1-pi-2rt.tst3
-rw-r--r--scripts/rt-tester/t3-l1-pi-3rt.tst3
-rw-r--r--scripts/rt-tester/t3-l1-pi-signal.tst3
-rw-r--r--scripts/rt-tester/t3-l1-pi-steal.tst3
-rw-r--r--scripts/rt-tester/t3-l2-pi.tst3
-rw-r--r--scripts/rt-tester/t4-l2-pi-deboost.tst4
-rw-r--r--scripts/rt-tester/t5-l4-pi-boost-deboost-setsched.tst183
-rw-r--r--scripts/rt-tester/t5-l4-pi-boost-deboost.tst5
15 files changed, 202 insertions, 49 deletions
diff --git a/kernel/rtmutex-tester.c b/kernel/rtmutex-tester.c
index fe211ba3a5b5..e82c2f848249 100644
--- a/kernel/rtmutex-tester.c
+++ b/kernel/rtmutex-tester.c
@@ -46,7 +46,7 @@ enum test_opcodes {
46 RTTEST_LOCKINTNOWAIT, /* 6 Lock interruptible no wait in wakeup, data = lockindex */ 46 RTTEST_LOCKINTNOWAIT, /* 6 Lock interruptible no wait in wakeup, data = lockindex */
47 RTTEST_LOCKCONT, /* 7 Continue locking after the wakeup delay */ 47 RTTEST_LOCKCONT, /* 7 Continue locking after the wakeup delay */
48 RTTEST_UNLOCK, /* 8 Unlock, data = lockindex */ 48 RTTEST_UNLOCK, /* 8 Unlock, data = lockindex */
49 RTTEST_LOCKBKL, /* 9 Lock BKL */ 49 RTTEST_LOCKBKL, /* 9 Lock BKL */
50 RTTEST_UNLOCKBKL, /* 10 Unlock BKL */ 50 RTTEST_UNLOCKBKL, /* 10 Unlock BKL */
51 RTTEST_SIGNAL, /* 11 Signal other test thread, data = thread id */ 51 RTTEST_SIGNAL, /* 11 Signal other test thread, data = thread id */
52 RTTEST_RESETEVENT = 98, /* 98 Reset event counter */ 52 RTTEST_RESETEVENT = 98, /* 98 Reset event counter */
@@ -55,7 +55,6 @@ enum test_opcodes {
55 55
56static int handle_op(struct test_thread_data *td, int lockwakeup) 56static int handle_op(struct test_thread_data *td, int lockwakeup)
57{ 57{
58 struct sched_param schedpar;
59 int i, id, ret = -EINVAL; 58 int i, id, ret = -EINVAL;
60 59
61 switch(td->opcode) { 60 switch(td->opcode) {
@@ -63,17 +62,6 @@ static int handle_op(struct test_thread_data *td, int lockwakeup)
63 case RTTEST_NOP: 62 case RTTEST_NOP:
64 return 0; 63 return 0;
65 64
66 case RTTEST_SCHEDOT:
67 schedpar.sched_priority = 0;
68 ret = sched_setscheduler(current, SCHED_NORMAL, &schedpar);
69 if (!ret)
70 set_user_nice(current, 0);
71 return ret;
72
73 case RTTEST_SCHEDRT:
74 schedpar.sched_priority = td->opdata;
75 return sched_setscheduler(current, SCHED_FIFO, &schedpar);
76
77 case RTTEST_LOCKCONT: 65 case RTTEST_LOCKCONT:
78 td->mutexes[td->opdata] = 1; 66 td->mutexes[td->opdata] = 1;
79 td->event = atomic_add_return(1, &rttest_event); 67 td->event = atomic_add_return(1, &rttest_event);
@@ -310,9 +298,10 @@ static int test_func(void *data)
310static ssize_t sysfs_test_command(struct sys_device *dev, const char *buf, 298static ssize_t sysfs_test_command(struct sys_device *dev, const char *buf,
311 size_t count) 299 size_t count)
312{ 300{
301 struct sched_param schedpar;
313 struct test_thread_data *td; 302 struct test_thread_data *td;
314 char cmdbuf[32]; 303 char cmdbuf[32];
315 int op, dat, tid; 304 int op, dat, tid, ret;
316 305
317 td = container_of(dev, struct test_thread_data, sysdev); 306 td = container_of(dev, struct test_thread_data, sysdev);
318 tid = td->sysdev.id; 307 tid = td->sysdev.id;
@@ -334,6 +323,21 @@ static ssize_t sysfs_test_command(struct sys_device *dev, const char *buf,
334 return -EINVAL; 323 return -EINVAL;
335 324
336 switch (op) { 325 switch (op) {
326 case RTTEST_SCHEDOT:
327 schedpar.sched_priority = 0;
328 ret = sched_setscheduler(threads[tid], SCHED_NORMAL, &schedpar);
329 if (ret)
330 return ret;
331 set_user_nice(current, 0);
332 break;
333
334 case RTTEST_SCHEDRT:
335 schedpar.sched_priority = dat;
336 ret = sched_setscheduler(threads[tid], SCHED_FIFO, &schedpar);
337 if (ret)
338 return ret;
339 break;
340
337 case RTTEST_SIGNAL: 341 case RTTEST_SIGNAL:
338 send_sig(SIGHUP, threads[tid], 0); 342 send_sig(SIGHUP, threads[tid], 0);
339 break; 343 break;
diff --git a/scripts/rt-tester/check-all.sh b/scripts/rt-tester/check-all.sh
index ac45c3e65a35..43098afe7431 100644
--- a/scripts/rt-tester/check-all.sh
+++ b/scripts/rt-tester/check-all.sh
@@ -18,4 +18,5 @@ testit t3-l1-pi-steal.tst
18testit t3-l2-pi.tst 18testit t3-l2-pi.tst
19testit t4-l2-pi-deboost.tst 19testit t4-l2-pi-deboost.tst
20testit t5-l4-pi-boost-deboost.tst 20testit t5-l4-pi-boost-deboost.tst
21testit t5-l4-pi-boost-deboost-setsched.tst
21 22
diff --git a/scripts/rt-tester/t2-l1-2rt-sameprio.tst b/scripts/rt-tester/t2-l1-2rt-sameprio.tst
index a2b6f2aae755..8821f27cc8be 100644
--- a/scripts/rt-tester/t2-l1-2rt-sameprio.tst
+++ b/scripts/rt-tester/t2-l1-2rt-sameprio.tst
@@ -57,9 +57,7 @@ W: opcodeeq: 0: 0
57 57
58# Set schedulers 58# Set schedulers
59C: schedfifo: 0: 80 59C: schedfifo: 0: 80
60W: opcodeeq: 0: 0
61C: schedfifo: 1: 80 60C: schedfifo: 1: 80
62W: opcodeeq: 1: 0
63 61
64# T0 lock L0 62# T0 lock L0
65C: locknowait: 0: 0 63C: locknowait: 0: 0
diff --git a/scripts/rt-tester/t2-l1-pi.tst b/scripts/rt-tester/t2-l1-pi.tst
index aa4c8940acd6..cde1f189a02b 100644
--- a/scripts/rt-tester/t2-l1-pi.tst
+++ b/scripts/rt-tester/t2-l1-pi.tst
@@ -57,9 +57,7 @@ W: opcodeeq: 0: 0
57 57
58# Set schedulers 58# Set schedulers
59C: schedother: 0: 0 59C: schedother: 0: 0
60W: opcodeeq: 0: 0
61C: schedfifo: 1: 80 60C: schedfifo: 1: 80
62W: opcodeeq: 1: 0
63 61
64# T0 lock L0 62# T0 lock L0
65C: locknowait: 0: 0 63C: locknowait: 0: 0
diff --git a/scripts/rt-tester/t2-l1-signal.tst b/scripts/rt-tester/t2-l1-signal.tst
index c47ba06af209..3ab0bfc49950 100644
--- a/scripts/rt-tester/t2-l1-signal.tst
+++ b/scripts/rt-tester/t2-l1-signal.tst
@@ -57,9 +57,7 @@ W: opcodeeq: 0: 0
57 57
58# Set schedulers 58# Set schedulers
59C: schedother: 0: 0 59C: schedother: 0: 0
60W: opcodeeq: 0: 0
61C: schedother: 1: 0 60C: schedother: 1: 0
62W: opcodeeq: 1: 0
63 61
64# T0 lock L0 62# T0 lock L0
65C: locknowait: 0: 0 63C: locknowait: 0: 0
diff --git a/scripts/rt-tester/t2-l2-2rt-deadlock.tst b/scripts/rt-tester/t2-l2-2rt-deadlock.tst
index 0cee476b206e..f4b5d5d6215f 100644
--- a/scripts/rt-tester/t2-l2-2rt-deadlock.tst
+++ b/scripts/rt-tester/t2-l2-2rt-deadlock.tst
@@ -57,9 +57,7 @@ W: opcodeeq: 0: 0
57 57
58# Set schedulers 58# Set schedulers
59C: schedfifo: 0: 80 59C: schedfifo: 0: 80
60W: opcodeeq: 0: 0
61C: schedfifo: 1: 80 60C: schedfifo: 1: 80
62W: opcodeeq: 1: 0
63 61
64# T0 lock L0 62# T0 lock L0
65C: locknowait: 0: 0 63C: locknowait: 0: 0
diff --git a/scripts/rt-tester/t3-l1-pi-1rt.tst b/scripts/rt-tester/t3-l1-pi-1rt.tst
index a5eaf7ed5d54..63440ca2cce9 100644
--- a/scripts/rt-tester/t3-l1-pi-1rt.tst
+++ b/scripts/rt-tester/t3-l1-pi-1rt.tst
@@ -57,11 +57,8 @@ W: opcodeeq: 0: 0
57 57
58# Set schedulers 58# Set schedulers
59C: schedother: 0: 0 59C: schedother: 0: 0
60W: opcodeeq: 0: 0
61C: schedother: 1: 0 60C: schedother: 1: 0
62W: opcodeeq: 1: 0
63C: schedfifo: 2: 82 61C: schedfifo: 2: 82
64W: opcodeeq: 2: 0
65 62
66# T0 lock L0 63# T0 lock L0
67C: locknowait: 0: 0 64C: locknowait: 0: 0
diff --git a/scripts/rt-tester/t3-l1-pi-2rt.tst b/scripts/rt-tester/t3-l1-pi-2rt.tst
index c622391a8afe..e5816fe67df3 100644
--- a/scripts/rt-tester/t3-l1-pi-2rt.tst
+++ b/scripts/rt-tester/t3-l1-pi-2rt.tst
@@ -57,11 +57,8 @@ W: opcodeeq: 0: 0
57 57
58# Set schedulers 58# Set schedulers
59C: schedother: 0: 0 59C: schedother: 0: 0
60W: opcodeeq: 0: 0
61C: schedfifo: 1: 81 60C: schedfifo: 1: 81
62W: opcodeeq: 1: 0
63C: schedfifo: 2: 82 61C: schedfifo: 2: 82
64W: opcodeeq: 2: 0
65 62
66# T0 lock L0 63# T0 lock L0
67C: locknowait: 0: 0 64C: locknowait: 0: 0
diff --git a/scripts/rt-tester/t3-l1-pi-3rt.tst b/scripts/rt-tester/t3-l1-pi-3rt.tst
index b5057fb13e09..718b82b5d3bb 100644
--- a/scripts/rt-tester/t3-l1-pi-3rt.tst
+++ b/scripts/rt-tester/t3-l1-pi-3rt.tst
@@ -57,11 +57,8 @@ W: opcodeeq: 0: 0
57 57
58# Set schedulers 58# Set schedulers
59C: schedfifo: 0: 80 59C: schedfifo: 0: 80
60W: opcodeeq: 0: 0
61C: schedfifo: 1: 81 60C: schedfifo: 1: 81
62W: opcodeeq: 1: 0
63C: schedfifo: 2: 82 61C: schedfifo: 2: 82
64W: opcodeeq: 2: 0
65 62
66# T0 lock L0 63# T0 lock L0
67C: locknowait: 0: 0 64C: locknowait: 0: 0
diff --git a/scripts/rt-tester/t3-l1-pi-signal.tst b/scripts/rt-tester/t3-l1-pi-signal.tst
index 3e427daa33ff..c6e213563498 100644
--- a/scripts/rt-tester/t3-l1-pi-signal.tst
+++ b/scripts/rt-tester/t3-l1-pi-signal.tst
@@ -55,11 +55,8 @@ W: opcodeeq: 0: 0
55 55
56# Set priorities 56# Set priorities
57C: schedother: 0: 0 57C: schedother: 0: 0
58W: opcodeeq: 0: 0
59C: schedfifo: 1: 80 58C: schedfifo: 1: 80
60W: opcodeeq: 1: 0
61C: schedfifo: 2: 81 59C: schedfifo: 2: 81
62W: opcodeeq: 2: 0
63 60
64# T0 lock L0 61# T0 lock L0
65C: lock: 0: 0 62C: lock: 0: 0
diff --git a/scripts/rt-tester/t3-l1-pi-steal.tst b/scripts/rt-tester/t3-l1-pi-steal.tst
index 72c24a9e4be4..f53749d59d79 100644
--- a/scripts/rt-tester/t3-l1-pi-steal.tst
+++ b/scripts/rt-tester/t3-l1-pi-steal.tst
@@ -57,11 +57,8 @@ W: opcodeeq: 0: 0
57 57
58# Set schedulers 58# Set schedulers
59C: schedother: 0: 0 59C: schedother: 0: 0
60W: opcodeeq: 0: 0
61C: schedfifo: 1: 80 60C: schedfifo: 1: 80
62W: opcodeeq: 1: 0
63C: schedfifo: 2: 81 61C: schedfifo: 2: 81
64W: opcodeeq: 2: 0
65 62
66# T0 lock L0 63# T0 lock L0
67C: lock: 0: 0 64C: lock: 0: 0
diff --git a/scripts/rt-tester/t3-l2-pi.tst b/scripts/rt-tester/t3-l2-pi.tst
index 2ba0dced48fa..cdc3e4fd7bac 100644
--- a/scripts/rt-tester/t3-l2-pi.tst
+++ b/scripts/rt-tester/t3-l2-pi.tst
@@ -57,11 +57,8 @@ W: opcodeeq: 0: 0
57 57
58# Set schedulers 58# Set schedulers
59C: schedother: 0: 0 59C: schedother: 0: 0
60W: opcodeeq: 0: 0
61C: schedother: 1: 0 60C: schedother: 1: 0
62W: opcodeeq: 1: 0
63C: schedfifo: 2: 82 61C: schedfifo: 2: 82
64W: opcodeeq: 2: 0
65 62
66# T0 lock L0 63# T0 lock L0
67C: locknowait: 0: 0 64C: locknowait: 0: 0
diff --git a/scripts/rt-tester/t4-l2-pi-deboost.tst b/scripts/rt-tester/t4-l2-pi-deboost.tst
index 01f1a80fa02a..baa14137f473 100644
--- a/scripts/rt-tester/t4-l2-pi-deboost.tst
+++ b/scripts/rt-tester/t4-l2-pi-deboost.tst
@@ -57,13 +57,9 @@ W: opcodeeq: 0: 0
57 57
58# Set schedulers 58# Set schedulers
59C: schedother: 0: 0 59C: schedother: 0: 0
60W: opcodeeq: 0: 0
61C: schedother: 1: 0 60C: schedother: 1: 0
62W: opcodeeq: 1: 0
63C: schedfifo: 2: 82 61C: schedfifo: 2: 82
64W: opcodeeq: 2: 0
65C: schedfifo: 3: 83 62C: schedfifo: 3: 83
66W: opcodeeq: 3: 0
67 63
68# T0 lock L0 64# T0 lock L0
69C: locknowait: 0: 0 65C: locknowait: 0: 0
diff --git a/scripts/rt-tester/t5-l4-pi-boost-deboost-setsched.tst b/scripts/rt-tester/t5-l4-pi-boost-deboost-setsched.tst
new file mode 100644
index 000000000000..e6ec0c81b54d
--- /dev/null
+++ b/scripts/rt-tester/t5-l4-pi-boost-deboost-setsched.tst
@@ -0,0 +1,183 @@
1#
2# rt-mutex test
3#
4# Op: C(ommand)/T(est)/W(ait)
5# | opcode
6# | | threadid: 0-7
7# | | | opcode argument
8# | | | |
9# C: lock: 0: 0
10#
11# Commands
12#
13# opcode opcode argument
14# schedother nice value
15# schedfifo priority
16# lock lock nr (0-7)
17# locknowait lock nr (0-7)
18# lockint lock nr (0-7)
19# lockintnowait lock nr (0-7)
20# lockcont lock nr (0-7)
21# unlock lock nr (0-7)
22# lockbkl lock nr (0-7)
23# unlockbkl lock nr (0-7)
24# signal thread to signal (0-7)
25# reset 0
26# resetevent 0
27#
28# Tests / Wait
29#
30# opcode opcode argument
31#
32# prioeq priority
33# priolt priority
34# priogt priority
35# nprioeq normal priority
36# npriolt normal priority
37# npriogt normal priority
38# locked lock nr (0-7)
39# blocked lock nr (0-7)
40# blockedwake lock nr (0-7)
41# unlocked lock nr (0-7)
42# lockedbkl dont care
43# blockedbkl dont care
44# unlockedbkl dont care
45# opcodeeq command opcode or number
46# opcodelt number
47# opcodegt number
48# eventeq number
49# eventgt number
50# eventlt number
51
52#
53# 5 threads 4 lock PI - modify priority of blocked threads
54#
55C: resetevent: 0: 0
56W: opcodeeq: 0: 0
57
58# Set schedulers
59C: schedother: 0: 0
60C: schedfifo: 1: 81
61C: schedfifo: 2: 82
62C: schedfifo: 3: 83
63C: schedfifo: 4: 84
64
65# T0 lock L0
66C: locknowait: 0: 0
67W: locked: 0: 0
68
69# T1 lock L1
70C: locknowait: 1: 1
71W: locked: 1: 1
72
73# T1 lock L0
74C: lockintnowait: 1: 0
75W: blocked: 1: 0
76T: prioeq: 0: 81
77
78# T2 lock L2
79C: locknowait: 2: 2
80W: locked: 2: 2
81
82# T2 lock L1
83C: lockintnowait: 2: 1
84W: blocked: 2: 1
85T: prioeq: 0: 82
86T: prioeq: 1: 82
87
88# T3 lock L3
89C: locknowait: 3: 3
90W: locked: 3: 3
91
92# T3 lock L2
93C: lockintnowait: 3: 2
94W: blocked: 3: 2
95T: prioeq: 0: 83
96T: prioeq: 1: 83
97T: prioeq: 2: 83
98
99# T4 lock L3
100C: lockintnowait: 4: 3
101W: blocked: 4: 3
102T: prioeq: 0: 84
103T: prioeq: 1: 84
104T: prioeq: 2: 84
105T: prioeq: 3: 84
106
107# Reduce prio of T4
108C: schedfifo: 4: 80
109T: prioeq: 0: 83
110T: prioeq: 1: 83
111T: prioeq: 2: 83
112T: prioeq: 3: 83
113T: prioeq: 4: 80
114
115# Increase prio of T4
116C: schedfifo: 4: 84
117T: prioeq: 0: 84
118T: prioeq: 1: 84
119T: prioeq: 2: 84
120T: prioeq: 3: 84
121T: prioeq: 4: 84
122
123# Reduce prio of T3
124C: schedfifo: 3: 80
125T: prioeq: 0: 84
126T: prioeq: 1: 84
127T: prioeq: 2: 84
128T: prioeq: 3: 84
129T: prioeq: 4: 84
130
131# Increase prio of T3
132C: schedfifo: 3: 85
133T: prioeq: 0: 85
134T: prioeq: 1: 85
135T: prioeq: 2: 85
136T: prioeq: 3: 85
137T: prioeq: 4: 84
138
139# Reduce prio of T3
140C: schedfifo: 3: 83
141T: prioeq: 0: 84
142T: prioeq: 1: 84
143T: prioeq: 2: 84
144T: prioeq: 3: 84
145T: prioeq: 4: 84
146
147# Signal T4
148C: signal: 4: 0
149W: unlocked: 4: 3
150T: prioeq: 0: 83
151T: prioeq: 1: 83
152T: prioeq: 2: 83
153T: prioeq: 3: 83
154
155# Signal T3
156C: signal: 3: 0
157W: unlocked: 3: 2
158T: prioeq: 0: 82
159T: prioeq: 1: 82
160T: prioeq: 2: 82
161
162# Signal T2
163C: signal: 2: 0
164W: unlocked: 2: 1
165T: prioeq: 0: 81
166T: prioeq: 1: 81
167
168# Signal T1
169C: signal: 1: 0
170W: unlocked: 1: 0
171T: priolt: 0: 1
172
173# Unlock and exit
174C: unlock: 3: 3
175C: unlock: 2: 2
176C: unlock: 1: 1
177C: unlock: 0: 0
178
179W: unlocked: 3: 3
180W: unlocked: 2: 2
181W: unlocked: 1: 1
182W: unlocked: 0: 0
183
diff --git a/scripts/rt-tester/t5-l4-pi-boost-deboost.tst b/scripts/rt-tester/t5-l4-pi-boost-deboost.tst
index efa0788c1189..ca64f8bbf4bc 100644
--- a/scripts/rt-tester/t5-l4-pi-boost-deboost.tst
+++ b/scripts/rt-tester/t5-l4-pi-boost-deboost.tst
@@ -57,15 +57,10 @@ W: opcodeeq: 0: 0
57 57
58# Set schedulers 58# Set schedulers
59C: schedother: 0: 0 59C: schedother: 0: 0
60W: opcodeeq: 0: 0
61C: schedfifo: 1: 81 60C: schedfifo: 1: 81
62W: opcodeeq: 1: 0
63C: schedfifo: 2: 82 61C: schedfifo: 2: 82
64W: opcodeeq: 2: 0
65C: schedfifo: 3: 83 62C: schedfifo: 3: 83
66W: opcodeeq: 3: 0
67C: schedfifo: 4: 84 63C: schedfifo: 4: 84
68W: opcodeeq: 4: 0
69 64
70# T0 lock L0 65# T0 lock L0
71C: locknowait: 0: 0 66C: locknowait: 0: 0