static void request(test_context *ctx, task_id id, request_id req) { send_event(ctx, id, req); sync_with_helper(ctx); }
static void test(void) { test_context *ctx = &test_instance; rtems_status_code sc; ctx->tasks[M] = rtems_task_self(); start_task(ctx, A_1, worker, 1, SCHED_A); start_task(ctx, A_2_0, worker, 2, SCHED_A); start_task(ctx, A_2_1, worker, 2, SCHED_A); start_task(ctx, B_4, worker, 4, SCHED_B); start_task(ctx, B_5_0, worker, 5, SCHED_B); start_task(ctx, B_5_1, worker, 5, SCHED_B); start_task(ctx, H_A, helper, 3, SCHED_A); start_task(ctx, H_B, helper, 6, SCHED_B); sc = rtems_semaphore_create( rtems_build_name(' ', 'M', 'T', 'X'), 1, RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_INHERIT_PRIORITY, 0, &ctx->mtx ); rtems_test_assert(sc == RTEMS_SUCCESSFUL); obtain(ctx); request(ctx, A_1, REQ_MTX_OBTAIN); check_generations(ctx, NONE, NONE); assert_prio(ctx, M, 1); release(ctx); check_generations(ctx, A_1, NONE); assert_prio(ctx, M, 3); request(ctx, A_1, REQ_MTX_RELEASE); check_generations(ctx, A_1, NONE); obtain(ctx); request(ctx, A_2_0, REQ_MTX_OBTAIN); request(ctx, A_1, REQ_MTX_OBTAIN); request(ctx, A_2_1, REQ_MTX_OBTAIN); check_generations(ctx, NONE, NONE); assert_prio(ctx, M, 1); release(ctx); check_generations(ctx, A_1, NONE); assert_prio(ctx, M, 3); assert_prio(ctx, A_1, 1); request(ctx, A_1, REQ_MTX_RELEASE); check_generations(ctx, A_1, A_2_0); request(ctx, A_2_0, REQ_MTX_RELEASE); check_generations(ctx, A_2_0, A_2_1); request(ctx, A_2_1, REQ_MTX_RELEASE); check_generations(ctx, A_2_1, NONE); obtain(ctx); request(ctx, B_5_0, REQ_MTX_OBTAIN); request(ctx, B_4, REQ_MTX_OBTAIN); request(ctx, B_5_1, REQ_MTX_OBTAIN); check_generations(ctx, NONE, NONE); assert_prio(ctx, M, 0); release(ctx); sync_with_helper(ctx); assert_prio(ctx, M, 3); check_generations(ctx, B_4, NONE); request(ctx, B_4, REQ_MTX_RELEASE); check_generations(ctx, B_4, B_5_0); request(ctx, B_5_0, REQ_MTX_RELEASE); check_generations(ctx, B_5_0, B_5_1); request(ctx, B_5_1, REQ_MTX_RELEASE); check_generations(ctx, B_5_1, NONE); obtain(ctx); request(ctx, A_2_0, REQ_MTX_OBTAIN); check_generations(ctx, NONE, NONE); assert_prio(ctx, M, 2); request(ctx, B_5_0, REQ_MTX_OBTAIN); check_generations(ctx, NONE, NONE); assert_prio(ctx, M, 0); request(ctx, B_5_1, REQ_MTX_OBTAIN); request(ctx, B_4, REQ_MTX_OBTAIN); request(ctx, A_2_1, REQ_MTX_OBTAIN); request(ctx, A_1, REQ_MTX_OBTAIN); check_generations(ctx, NONE, NONE); release(ctx); sync_with_helper(ctx); check_generations(ctx, A_1, NONE); assert_prio(ctx, M, 3); assert_prio(ctx, A_1, 0); request(ctx, A_1, REQ_MTX_RELEASE); check_generations(ctx, A_1, B_4); assert_prio(ctx, A_1, 1); assert_prio(ctx, B_4, 0); request(ctx, B_4, REQ_MTX_RELEASE); check_generations(ctx, B_4, A_2_0); assert_prio(ctx, B_4, 4); assert_prio(ctx, A_2_0, 0); request(ctx, A_2_0, REQ_MTX_RELEASE); check_generations(ctx, A_2_0, B_5_0); assert_prio(ctx, A_2_0, 2); assert_prio(ctx, B_5_0, 0); request(ctx, B_5_0, REQ_MTX_RELEASE); check_generations(ctx, B_5_0, A_2_1); assert_prio(ctx, B_5_0, 5); assert_prio(ctx, A_2_1, 0); request(ctx, A_2_1, REQ_MTX_RELEASE); check_generations(ctx, A_2_1, B_5_1); assert_prio(ctx, A_2_1, 2); assert_prio(ctx, B_5_1, 5); request(ctx, B_5_1, REQ_MTX_RELEASE); check_generations(ctx, B_5_1, NONE); assert_prio(ctx, B_5_1, 5); }