From 7a8779feaa95b05fa2492a4b5a096afb6b5dc0a6 Mon Sep 17 00:00:00 2001 From: Bjoern Brandenburg Date: Mon, 27 Jul 2015 17:51:11 +0200 Subject: Tests: stress PCP, DPCP, DFLP, and SRP by intentionally migrating away Triggers a BUG_ON() in the old kernel. --- tests/locks.c | 57 ++++++++++++++------------------------- tests/pcp.c | 86 +++++++++++++++++++++-------------------------------------- 2 files changed, 50 insertions(+), 93 deletions(-) diff --git a/tests/locks.c b/tests/locks.c index be72b7c..4b9ac72 100644 --- a/tests/locks.c +++ b/tests/locks.c @@ -163,8 +163,6 @@ TESTCASE(srp_lock_mode_change, P_FP | PSN_EDF, { int fd, od; - int child, status; - struct rt_task params; init_rt_task_param(¶ms); params.cpu = 0; @@ -174,29 +172,22 @@ TESTCASE(srp_lock_mode_change, P_FP | PSN_EDF, SYSCALL( fd = open(".locks", O_RDONLY | O_CREAT, S_IRUSR) ); + params.priority = LITMUS_LOWEST_PRIORITY; + SYSCALL( set_rt_task_param(gettid(), ¶ms) ); + SYSCALL( be_migrate_to_cpu(params.cpu) ); + SYSCALL( task_mode(LITMUS_RT_TASK) ); - child = FORK_TASK( - params.priority = LITMUS_LOWEST_PRIORITY; - SYSCALL( set_rt_task_param(gettid(), ¶ms) ); - SYSCALL( be_migrate_to_cpu(params.cpu) ); - SYSCALL( task_mode(LITMUS_RT_TASK) ); - - SYSCALL( od = open_srp_sem(fd, 0) ); - - SYSCALL( litmus_lock(od) ); + SYSCALL( od = open_srp_sem(fd, 0) ); - SYSCALL( task_mode(BACKGROUND_TASK) ); + SYSCALL( litmus_lock(od) ); - SYSCALL( litmus_unlock(od) ); + SYSCALL( task_mode(BACKGROUND_TASK) ); - SYSCALL( od_close(od) ); + be_migrate_to_cpu(1); - exit(0); - ); + SYSCALL( litmus_unlock(od) ); - SYSCALL( waitpid(child, &status, 0) ); - ASSERT( WIFEXITED(status) ); - ASSERT( WEXITSTATUS(status) == 0 ); + SYSCALL( od_close(od) ); SYSCALL( close(fd) ); @@ -208,8 +199,6 @@ TESTCASE(dflp_lock_mode_change, P_FP, { int fd, od, cpu = 0; - int child, status; - struct rt_task params; init_rt_task_param(¶ms); params.cpu = 1; @@ -219,28 +208,22 @@ TESTCASE(dflp_lock_mode_change, P_FP, SYSCALL( fd = open(".locks", O_RDONLY | O_CREAT, S_IRUSR) ); - child = FORK_TASK( - params.priority = LITMUS_LOWEST_PRIORITY; - SYSCALL( set_rt_task_param(gettid(), ¶ms) ); - SYSCALL( be_migrate_to_cpu(params.cpu) ); - SYSCALL( task_mode(LITMUS_RT_TASK) ); - - SYSCALL( od = open_dflp_sem(fd, 0, cpu) ); + params.priority = LITMUS_LOWEST_PRIORITY; + SYSCALL( set_rt_task_param(gettid(), ¶ms) ); + SYSCALL( be_migrate_to_cpu(params.cpu) ); + SYSCALL( task_mode(LITMUS_RT_TASK) ); - SYSCALL( litmus_lock(od) ); + SYSCALL( od = open_dflp_sem(fd, 0, cpu) ); - SYSCALL( task_mode(BACKGROUND_TASK) ); + SYSCALL( litmus_lock(od) ); - SYSCALL( litmus_unlock(od) ); + SYSCALL( task_mode(BACKGROUND_TASK) ); - SYSCALL( od_close(od) ); + be_migrate_to_cpu(2); - exit(0); - ); + SYSCALL( litmus_unlock(od) ); - SYSCALL( waitpid(child, &status, 0) ); - ASSERT( WIFEXITED(status) ); - ASSERT( WEXITSTATUS(status) == 0 ); + SYSCALL( od_close(od) ); SYSCALL( close(fd) ); diff --git a/tests/pcp.c b/tests/pcp.c index 9c9b6f2..dda8dcf 100644 --- a/tests/pcp.c +++ b/tests/pcp.c @@ -468,8 +468,6 @@ TESTCASE(pcp_lock_mode_change, P_FP, { int fd, od, cpu = 0; - int child, status; - struct rt_task params; init_rt_task_param(¶ms); params.cpu = 0; @@ -479,29 +477,22 @@ TESTCASE(pcp_lock_mode_change, P_FP, SYSCALL( fd = open(".pcp_locks", O_RDONLY | O_CREAT, S_IRUSR) ); + params.priority = LITMUS_LOWEST_PRIORITY; + SYSCALL( set_rt_task_param(gettid(), ¶ms) ); + SYSCALL( be_migrate_to_cpu(params.cpu) ); + SYSCALL( task_mode(LITMUS_RT_TASK) ); - child = FORK_TASK( - params.priority = LITMUS_LOWEST_PRIORITY; - SYSCALL( set_rt_task_param(gettid(), ¶ms) ); - SYSCALL( be_migrate_to_cpu(params.cpu) ); - SYSCALL( task_mode(LITMUS_RT_TASK) ); - - SYSCALL( od = open_pcp_sem(fd, 0, cpu) ); - - SYSCALL( litmus_lock(od) ); + SYSCALL( od = open_pcp_sem(fd, 0, cpu) ); - SYSCALL( task_mode(BACKGROUND_TASK) ); + SYSCALL( litmus_lock(od) ); - SYSCALL( litmus_unlock(od) ); + SYSCALL( task_mode(BACKGROUND_TASK) ); - SYSCALL( od_close(od) ); + be_migrate_to_cpu(1); - exit(0); - ); + SYSCALL( litmus_unlock(od) ); - SYSCALL( waitpid(child, &status, 0) ); - ASSERT( WIFEXITED(status) ); - ASSERT( WEXITSTATUS(status) == 0 ); + SYSCALL( od_close(od) ); SYSCALL( close(fd) ); @@ -513,8 +504,6 @@ TESTCASE(mpcp_lock_mode_change, P_FP, { int fd, od; - int child, status; - struct rt_task params; init_rt_task_param(¶ms); params.cpu = 0; @@ -524,29 +513,22 @@ TESTCASE(mpcp_lock_mode_change, P_FP, SYSCALL( fd = open(".pcp_locks", O_RDONLY | O_CREAT, S_IRUSR) ); + params.priority = LITMUS_LOWEST_PRIORITY; + SYSCALL( set_rt_task_param(gettid(), ¶ms) ); + SYSCALL( be_migrate_to_cpu(params.cpu) ); + SYSCALL( task_mode(LITMUS_RT_TASK) ); - child = FORK_TASK( - params.priority = LITMUS_LOWEST_PRIORITY; - SYSCALL( set_rt_task_param(gettid(), ¶ms) ); - SYSCALL( be_migrate_to_cpu(params.cpu) ); - SYSCALL( task_mode(LITMUS_RT_TASK) ); - - SYSCALL( od = open_mpcp_sem(fd, 0) ); - - SYSCALL( litmus_lock(od) ); + SYSCALL( od = open_mpcp_sem(fd, 0) ); - SYSCALL( task_mode(BACKGROUND_TASK) ); + SYSCALL( litmus_lock(od) ); - SYSCALL( litmus_unlock(od) ); + SYSCALL( task_mode(BACKGROUND_TASK) ); - SYSCALL( od_close(od) ); + be_migrate_to_cpu(1); - exit(0); - ); + SYSCALL( litmus_unlock(od) ); - SYSCALL( waitpid(child, &status, 0) ); - ASSERT( WIFEXITED(status) ); - ASSERT( WEXITSTATUS(status) == 0 ); + SYSCALL( od_close(od) ); SYSCALL( close(fd) ); @@ -558,8 +540,6 @@ TESTCASE(dpcp_lock_mode_change, P_FP, { int fd, od, cpu = 0; - int child, status; - struct rt_task params; init_rt_task_param(¶ms); params.cpu = 1; @@ -570,28 +550,22 @@ TESTCASE(dpcp_lock_mode_change, P_FP, SYSCALL( fd = open(".pcp_locks", O_RDONLY | O_CREAT, S_IRUSR) ); - child = FORK_TASK( - params.priority = LITMUS_LOWEST_PRIORITY; - SYSCALL( set_rt_task_param(gettid(), ¶ms) ); - SYSCALL( be_migrate_to_cpu(params.cpu) ); - SYSCALL( task_mode(LITMUS_RT_TASK) ); - - SYSCALL( od = open_dpcp_sem(fd, 0, cpu) ); + params.priority = LITMUS_LOWEST_PRIORITY; + SYSCALL( set_rt_task_param(gettid(), ¶ms) ); + SYSCALL( be_migrate_to_cpu(params.cpu) ); + SYSCALL( task_mode(LITMUS_RT_TASK) ); - SYSCALL( litmus_lock(od) ); + SYSCALL( od = open_dpcp_sem(fd, 0, cpu) ); - SYSCALL( task_mode(BACKGROUND_TASK) ); + SYSCALL( litmus_lock(od) ); - SYSCALL( litmus_unlock(od) ); + SYSCALL( task_mode(BACKGROUND_TASK) ); - SYSCALL( od_close(od) ); + be_migrate_to_cpu(2); - exit(0); - ); + SYSCALL( litmus_unlock(od) ); - SYSCALL( waitpid(child, &status, 0) ); - ASSERT( WIFEXITED(status) ); - ASSERT( WEXITSTATUS(status) == 0 ); + SYSCALL( od_close(od) ); SYSCALL( close(fd) ); -- cgit v1.2.2