Esempio n. 1
0
static void request(test_context *ctx, task_id id, request_id req)
{
  send_event(ctx, id, req);
  sync_with_helper(ctx);
}
Esempio n. 2
0
File: init.c Progetto: ryoon/rtems
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);
}