Skip to content

Commit

Permalink
[PATCH] rtmutex: Modify rtmutex-tester to test the setscheduler propa…
Browse files Browse the repository at this point in the history
…gation

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 <[email protected]>
Signed-off-by: Ingo Molnar <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
KAGA-KOKO authored and Linus Torvalds committed Jun 28, 2006
1 parent e74c69f commit 0bafd21
Show file tree
Hide file tree
Showing 15 changed files with 202 additions and 49 deletions.
32 changes: 18 additions & 14 deletions kernel/rtmutex-tester.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ enum test_opcodes {
RTTEST_LOCKINTNOWAIT, /* 6 Lock interruptible no wait in wakeup, data = lockindex */
RTTEST_LOCKCONT, /* 7 Continue locking after the wakeup delay */
RTTEST_UNLOCK, /* 8 Unlock, data = lockindex */
RTTEST_LOCKBKL, /* 9 Lock BKL */
RTTEST_LOCKBKL, /* 9 Lock BKL */
RTTEST_UNLOCKBKL, /* 10 Unlock BKL */
RTTEST_SIGNAL, /* 11 Signal other test thread, data = thread id */
RTTEST_RESETEVENT = 98, /* 98 Reset event counter */
Expand All @@ -55,25 +55,13 @@ enum test_opcodes {

static int handle_op(struct test_thread_data *td, int lockwakeup)
{
struct sched_param schedpar;
int i, id, ret = -EINVAL;

switch(td->opcode) {

case RTTEST_NOP:
return 0;

case RTTEST_SCHEDOT:
schedpar.sched_priority = 0;
ret = sched_setscheduler(current, SCHED_NORMAL, &schedpar);
if (!ret)
set_user_nice(current, 0);
return ret;

case RTTEST_SCHEDRT:
schedpar.sched_priority = td->opdata;
return sched_setscheduler(current, SCHED_FIFO, &schedpar);

case RTTEST_LOCKCONT:
td->mutexes[td->opdata] = 1;
td->event = atomic_add_return(1, &rttest_event);
Expand Down Expand Up @@ -310,9 +298,10 @@ static int test_func(void *data)
static ssize_t sysfs_test_command(struct sys_device *dev, const char *buf,
size_t count)
{
struct sched_param schedpar;
struct test_thread_data *td;
char cmdbuf[32];
int op, dat, tid;
int op, dat, tid, ret;

td = container_of(dev, struct test_thread_data, sysdev);
tid = td->sysdev.id;
Expand All @@ -334,6 +323,21 @@ static ssize_t sysfs_test_command(struct sys_device *dev, const char *buf,
return -EINVAL;

switch (op) {
case RTTEST_SCHEDOT:
schedpar.sched_priority = 0;
ret = sched_setscheduler(threads[tid], SCHED_NORMAL, &schedpar);
if (ret)
return ret;
set_user_nice(current, 0);
break;

case RTTEST_SCHEDRT:
schedpar.sched_priority = dat;
ret = sched_setscheduler(threads[tid], SCHED_FIFO, &schedpar);
if (ret)
return ret;
break;

case RTTEST_SIGNAL:
send_sig(SIGHUP, threads[tid], 0);
break;
Expand Down
1 change: 1 addition & 0 deletions scripts/rt-tester/check-all.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@ testit t3-l1-pi-steal.tst
testit t3-l2-pi.tst
testit t4-l2-pi-deboost.tst
testit t5-l4-pi-boost-deboost.tst
testit t5-l4-pi-boost-deboost-setsched.tst

2 changes: 0 additions & 2 deletions scripts/rt-tester/t2-l1-2rt-sameprio.tst
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,7 @@ W: opcodeeq: 0: 0

# Set schedulers
C: schedfifo: 0: 80
W: opcodeeq: 0: 0
C: schedfifo: 1: 80
W: opcodeeq: 1: 0

# T0 lock L0
C: locknowait: 0: 0
Expand Down
2 changes: 0 additions & 2 deletions scripts/rt-tester/t2-l1-pi.tst
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,7 @@ W: opcodeeq: 0: 0

# Set schedulers
C: schedother: 0: 0
W: opcodeeq: 0: 0
C: schedfifo: 1: 80
W: opcodeeq: 1: 0

# T0 lock L0
C: locknowait: 0: 0
Expand Down
2 changes: 0 additions & 2 deletions scripts/rt-tester/t2-l1-signal.tst
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,7 @@ W: opcodeeq: 0: 0

# Set schedulers
C: schedother: 0: 0
W: opcodeeq: 0: 0
C: schedother: 1: 0
W: opcodeeq: 1: 0

# T0 lock L0
C: locknowait: 0: 0
Expand Down
2 changes: 0 additions & 2 deletions scripts/rt-tester/t2-l2-2rt-deadlock.tst
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,7 @@ W: opcodeeq: 0: 0

# Set schedulers
C: schedfifo: 0: 80
W: opcodeeq: 0: 0
C: schedfifo: 1: 80
W: opcodeeq: 1: 0

# T0 lock L0
C: locknowait: 0: 0
Expand Down
3 changes: 0 additions & 3 deletions scripts/rt-tester/t3-l1-pi-1rt.tst
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,8 @@ W: opcodeeq: 0: 0

# Set schedulers
C: schedother: 0: 0
W: opcodeeq: 0: 0
C: schedother: 1: 0
W: opcodeeq: 1: 0
C: schedfifo: 2: 82
W: opcodeeq: 2: 0

# T0 lock L0
C: locknowait: 0: 0
Expand Down
3 changes: 0 additions & 3 deletions scripts/rt-tester/t3-l1-pi-2rt.tst
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,8 @@ W: opcodeeq: 0: 0

# Set schedulers
C: schedother: 0: 0
W: opcodeeq: 0: 0
C: schedfifo: 1: 81
W: opcodeeq: 1: 0
C: schedfifo: 2: 82
W: opcodeeq: 2: 0

# T0 lock L0
C: locknowait: 0: 0
Expand Down
3 changes: 0 additions & 3 deletions scripts/rt-tester/t3-l1-pi-3rt.tst
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,8 @@ W: opcodeeq: 0: 0

# Set schedulers
C: schedfifo: 0: 80
W: opcodeeq: 0: 0
C: schedfifo: 1: 81
W: opcodeeq: 1: 0
C: schedfifo: 2: 82
W: opcodeeq: 2: 0

# T0 lock L0
C: locknowait: 0: 0
Expand Down
3 changes: 0 additions & 3 deletions scripts/rt-tester/t3-l1-pi-signal.tst
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,8 @@ W: opcodeeq: 0: 0

# Set priorities
C: schedother: 0: 0
W: opcodeeq: 0: 0
C: schedfifo: 1: 80
W: opcodeeq: 1: 0
C: schedfifo: 2: 81
W: opcodeeq: 2: 0

# T0 lock L0
C: lock: 0: 0
Expand Down
3 changes: 0 additions & 3 deletions scripts/rt-tester/t3-l1-pi-steal.tst
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,8 @@ W: opcodeeq: 0: 0

# Set schedulers
C: schedother: 0: 0
W: opcodeeq: 0: 0
C: schedfifo: 1: 80
W: opcodeeq: 1: 0
C: schedfifo: 2: 81
W: opcodeeq: 2: 0

# T0 lock L0
C: lock: 0: 0
Expand Down
3 changes: 0 additions & 3 deletions scripts/rt-tester/t3-l2-pi.tst
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,8 @@ W: opcodeeq: 0: 0

# Set schedulers
C: schedother: 0: 0
W: opcodeeq: 0: 0
C: schedother: 1: 0
W: opcodeeq: 1: 0
C: schedfifo: 2: 82
W: opcodeeq: 2: 0

# T0 lock L0
C: locknowait: 0: 0
Expand Down
4 changes: 0 additions & 4 deletions scripts/rt-tester/t4-l2-pi-deboost.tst
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,9 @@ W: opcodeeq: 0: 0

# Set schedulers
C: schedother: 0: 0
W: opcodeeq: 0: 0
C: schedother: 1: 0
W: opcodeeq: 1: 0
C: schedfifo: 2: 82
W: opcodeeq: 2: 0
C: schedfifo: 3: 83
W: opcodeeq: 3: 0

# T0 lock L0
C: locknowait: 0: 0
Expand Down
183 changes: 183 additions & 0 deletions scripts/rt-tester/t5-l4-pi-boost-deboost-setsched.tst
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
#
# rt-mutex test
#
# Op: C(ommand)/T(est)/W(ait)
# | opcode
# | | threadid: 0-7
# | | | opcode argument
# | | | |
# C: lock: 0: 0
#
# Commands
#
# opcode opcode argument
# schedother nice value
# schedfifo priority
# lock lock nr (0-7)
# locknowait lock nr (0-7)
# lockint lock nr (0-7)
# lockintnowait lock nr (0-7)
# lockcont lock nr (0-7)
# unlock lock nr (0-7)
# lockbkl lock nr (0-7)
# unlockbkl lock nr (0-7)
# signal thread to signal (0-7)
# reset 0
# resetevent 0
#
# Tests / Wait
#
# opcode opcode argument
#
# prioeq priority
# priolt priority
# priogt priority
# nprioeq normal priority
# npriolt normal priority
# npriogt normal priority
# locked lock nr (0-7)
# blocked lock nr (0-7)
# blockedwake lock nr (0-7)
# unlocked lock nr (0-7)
# lockedbkl dont care
# blockedbkl dont care
# unlockedbkl dont care
# opcodeeq command opcode or number
# opcodelt number
# opcodegt number
# eventeq number
# eventgt number
# eventlt number

#
# 5 threads 4 lock PI - modify priority of blocked threads
#
C: resetevent: 0: 0
W: opcodeeq: 0: 0

# Set schedulers
C: schedother: 0: 0
C: schedfifo: 1: 81
C: schedfifo: 2: 82
C: schedfifo: 3: 83
C: schedfifo: 4: 84

# T0 lock L0
C: locknowait: 0: 0
W: locked: 0: 0

# T1 lock L1
C: locknowait: 1: 1
W: locked: 1: 1

# T1 lock L0
C: lockintnowait: 1: 0
W: blocked: 1: 0
T: prioeq: 0: 81

# T2 lock L2
C: locknowait: 2: 2
W: locked: 2: 2

# T2 lock L1
C: lockintnowait: 2: 1
W: blocked: 2: 1
T: prioeq: 0: 82
T: prioeq: 1: 82

# T3 lock L3
C: locknowait: 3: 3
W: locked: 3: 3

# T3 lock L2
C: lockintnowait: 3: 2
W: blocked: 3: 2
T: prioeq: 0: 83
T: prioeq: 1: 83
T: prioeq: 2: 83

# T4 lock L3
C: lockintnowait: 4: 3
W: blocked: 4: 3
T: prioeq: 0: 84
T: prioeq: 1: 84
T: prioeq: 2: 84
T: prioeq: 3: 84

# Reduce prio of T4
C: schedfifo: 4: 80
T: prioeq: 0: 83
T: prioeq: 1: 83
T: prioeq: 2: 83
T: prioeq: 3: 83
T: prioeq: 4: 80

# Increase prio of T4
C: schedfifo: 4: 84
T: prioeq: 0: 84
T: prioeq: 1: 84
T: prioeq: 2: 84
T: prioeq: 3: 84
T: prioeq: 4: 84

# Reduce prio of T3
C: schedfifo: 3: 80
T: prioeq: 0: 84
T: prioeq: 1: 84
T: prioeq: 2: 84
T: prioeq: 3: 84
T: prioeq: 4: 84

# Increase prio of T3
C: schedfifo: 3: 85
T: prioeq: 0: 85
T: prioeq: 1: 85
T: prioeq: 2: 85
T: prioeq: 3: 85
T: prioeq: 4: 84

# Reduce prio of T3
C: schedfifo: 3: 83
T: prioeq: 0: 84
T: prioeq: 1: 84
T: prioeq: 2: 84
T: prioeq: 3: 84
T: prioeq: 4: 84

# Signal T4
C: signal: 4: 0
W: unlocked: 4: 3
T: prioeq: 0: 83
T: prioeq: 1: 83
T: prioeq: 2: 83
T: prioeq: 3: 83

# Signal T3
C: signal: 3: 0
W: unlocked: 3: 2
T: prioeq: 0: 82
T: prioeq: 1: 82
T: prioeq: 2: 82

# Signal T2
C: signal: 2: 0
W: unlocked: 2: 1
T: prioeq: 0: 81
T: prioeq: 1: 81

# Signal T1
C: signal: 1: 0
W: unlocked: 1: 0
T: priolt: 0: 1

# Unlock and exit
C: unlock: 3: 3
C: unlock: 2: 2
C: unlock: 1: 1
C: unlock: 0: 0

W: unlocked: 3: 3
W: unlocked: 2: 2
W: unlocked: 1: 1
W: unlocked: 0: 0

Loading

0 comments on commit 0bafd21

Please sign in to comment.