diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-02-07 07:46:38 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-02-07 08:48:18 +0100 |
commit | fbd08066af13beda4abdb25717f66d0a943fc5c8 (patch) | |
tree | 9a340717ad21c96a5272902e23017d12605836ac /testsuites/smptests/smpmutex01 | |
parent | bsps/arm: Fix generic timer frequency (diff) | |
download | rtems-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/smpmutex01')
-rw-r--r-- | testsuites/smptests/smpmutex01/init.c | 63 |
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); |