summaryrefslogtreecommitdiffstats
path: root/testsuites/smptests
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2019-02-07 07:46:38 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2019-02-07 08:48:18 +0100
commitfbd08066af13beda4abdb25717f66d0a943fc5c8 (patch)
tree9a340717ad21c96a5272902e23017d12605836ac /testsuites/smptests
parentbsps/arm: Fix generic timer frequency (diff)
downloadrtems-fbd08066af13beda4abdb25717f66d0a943fc5c8.tar.bz2
score: Fix plain priority thread queues (SMP)
We must add/remove the priority queue to the FIFO of priority queues.
Diffstat (limited to 'testsuites/smptests')
-rw-r--r--testsuites/smptests/smpmutex01/init.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/testsuites/smptests/smpmutex01/init.c b/testsuites/smptests/smpmutex01/init.c
index 37f3bf1e50..09ee496247 100644
--- a/testsuites/smptests/smpmutex01/init.c
+++ b/testsuites/smptests/smpmutex01/init.c
@@ -687,6 +687,67 @@ static void test_mixed_queue_two_scheduler_instances_sem_only(test_context *ctx)
sem_release(ctx);
}
+static void test_two_scheduler_instances_sem_with_inheritance(test_context *ctx)
+{
+ sem_obtain(ctx);
+
+ request(ctx, B_4, REQ_MTX_OBTAIN);
+ check_generations(ctx, B_4, NONE);
+ assert_prio_by_scheduler(ctx, B_4, SCHED_A, PRIO_NONE);
+ assert_prio_by_scheduler(ctx, B_4, SCHED_B, 4);
+
+ request(ctx, B_4, REQ_SEM_OBTAIN_RELEASE);
+ check_generations(ctx, NONE, NONE);
+
+ request(ctx, A_1, REQ_MTX_OBTAIN);
+ check_generations(ctx, NONE, NONE);
+ assert_prio_by_scheduler(ctx, B_4, SCHED_A, 1);
+ assert_prio_by_scheduler(ctx, B_4, SCHED_B, 4);
+
+ sem_release(ctx);
+ sync_with_helper(ctx);
+ check_generations(ctx, B_4, NONE);
+
+ request(ctx, B_4, REQ_MTX_RELEASE);
+ check_generations(ctx, B_4, A_1);
+ assert_prio_by_scheduler(ctx, B_4, SCHED_A, PRIO_NONE);
+ assert_prio_by_scheduler(ctx, B_4, SCHED_B, 4);
+
+ request(ctx, A_1, REQ_MTX_RELEASE);
+ check_generations(ctx, A_1, NONE);
+}
+
+static void test_two_scheduler_instances_sem_with_inheritance_timeout(test_context *ctx)
+{
+ sem_obtain(ctx);
+
+ request(ctx, B_4, REQ_MTX_OBTAIN);
+ check_generations(ctx, B_4, NONE);
+ assert_prio_by_scheduler(ctx, B_4, SCHED_A, PRIO_NONE);
+ assert_prio_by_scheduler(ctx, B_4, SCHED_B, 4);
+
+ request(ctx, B_4, REQ_SEM_OBTAIN_RELEASE);
+ check_generations(ctx, NONE, NONE);
+
+ request(ctx, A_1, REQ_MTX_OBTAIN_TIMEOUT);
+ check_generations(ctx, NONE, NONE);
+ assert_prio_by_scheduler(ctx, B_4, SCHED_A, 1);
+ assert_prio_by_scheduler(ctx, B_4, SCHED_B, 4);
+ wait();
+ check_generations(ctx, A_1, NONE);
+ assert_prio_by_scheduler(ctx, B_4, SCHED_A, PRIO_NONE);
+ assert_prio_by_scheduler(ctx, B_4, SCHED_B, 4);
+
+ sem_release(ctx);
+ sync_with_helper(ctx);
+ check_generations(ctx, B_4, NONE);
+
+ request(ctx, B_4, REQ_MTX_RELEASE);
+ check_generations(ctx, B_4, NONE);
+ assert_prio_by_scheduler(ctx, B_4, SCHED_A, PRIO_NONE);
+ assert_prio_by_scheduler(ctx, B_4, SCHED_B, 4);
+}
+
static void test_simple_inheritance_two_scheduler_instances(test_context *ctx)
{
obtain(ctx);
@@ -1010,6 +1071,8 @@ static void test(test_context *ctx)
test_dequeue_order_one_scheduler_instance(ctx);
test_mixed_queue_two_scheduler_instances(ctx);
test_mixed_queue_two_scheduler_instances_sem_only(ctx);
+ test_two_scheduler_instances_sem_with_inheritance(ctx);
+ test_two_scheduler_instances_sem_with_inheritance_timeout(ctx);
test_simple_inheritance_two_scheduler_instances(ctx);
test_nested_inheritance_two_scheduler_instances(ctx);
test_dequeue_order_two_scheduler_instances(ctx);