Ignore:
Timestamp:
Sep 3, 2015, 8:27:16 AM (4 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
master
Children:
e1769f27
Parents:
3995e6d
git-author:
Sebastian Huber <sebastian.huber@…> (09/03/15 08:27:16)
git-committer:
Sebastian Huber <sebastian.huber@…> (09/04/15 11:26:17)
Message:

score: Implement priority boosting

File:
1 edited

Legend:

Unmodified
Added
Removed
  • testsuites/smptests/smpmutex01/init.c

    r3995e6d rdafa5d88  
    2727#define PART_COUNT 2
    2828
    29 #define TASK_COUNT 8
     29#define TASK_COUNT 9
    3030
    3131typedef enum {
     
    4444  B_5_0,
    4545  B_5_1,
    46   H,
     46  H_A,
     47  H_B,
    4748  NONE
    4849} task_id;
     
    112113}
    113114
    114 static void sync_with_helper(test_context *ctx)
     115static void sync_with_helper_by_id(test_context *ctx, task_id id)
    115116{
    116117  rtems_event_set events;
    117118
    118   send_event(ctx, H, REQ_WAKE_UP_HELPER);
     119  send_event(ctx, id, REQ_WAKE_UP_HELPER);
    119120  events = wait_for_events();
    120121  rtems_test_assert(events == REQ_WAKE_UP_MASTER);
    121122}
    122123
     124static void sync_with_helper(test_context *ctx)
     125{
     126  sync_with_helper_by_id(ctx, H_A);
     127  sync_with_helper_by_id(ctx, H_B);
     128}
     129
    123130static void request(test_context *ctx, task_id id, request_id req)
    124131{
     
    158165    rtems_test_assert(ctx->generation[i] == ctx->expected_generation[i]);
    159166  }
     167}
     168
     169static void assert_prio(
     170  test_context *ctx,
     171  task_id id,
     172  rtems_task_priority expected
     173)
     174{
     175  rtems_task_priority actual;
     176  rtems_status_code sc;
     177
     178  sc = rtems_task_set_priority(
     179    ctx->tasks[id],
     180    RTEMS_CURRENT_PRIORITY,
     181    &actual
     182  );
     183  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
     184  rtems_test_assert(expected == actual);
    160185}
    161186
     
    203228  start_task(ctx, B_5_0, worker, 5, SCHED_B);
    204229  start_task(ctx, B_5_1, worker, 5, SCHED_B);
    205   start_task(ctx, H, helper, 6, SCHED_B);
     230  start_task(ctx, H_A, helper, 3, SCHED_A);
     231  start_task(ctx, H_B, helper, 6, SCHED_B);
    206232
    207233  sc = rtems_semaphore_create(
     
    217243  request(ctx, A_1, REQ_MTX_OBTAIN);
    218244  check_generations(ctx, NONE, NONE);
     245  assert_prio(ctx, M, 1);
    219246  release(ctx);
    220247  check_generations(ctx, A_1, NONE);
     248  assert_prio(ctx, M, 3);
    221249  request(ctx, A_1, REQ_MTX_RELEASE);
    222250  check_generations(ctx, A_1, NONE);
     
    227255  request(ctx, A_2_1, REQ_MTX_OBTAIN);
    228256  check_generations(ctx, NONE, NONE);
     257  assert_prio(ctx, M, 1);
    229258  release(ctx);
    230259  check_generations(ctx, A_1, NONE);
     260  assert_prio(ctx, M, 3);
     261  assert_prio(ctx, A_1, 1);
    231262  request(ctx, A_1, REQ_MTX_RELEASE);
    232263  check_generations(ctx, A_1, A_2_0);
     
    241272  request(ctx, B_5_1, REQ_MTX_OBTAIN);
    242273  check_generations(ctx, NONE, NONE);
     274  assert_prio(ctx, M, 0);
    243275  release(ctx);
    244276  sync_with_helper(ctx);
     277  assert_prio(ctx, M, 3);
    245278  check_generations(ctx, B_4, NONE);
    246279  request(ctx, B_4, REQ_MTX_RELEASE);
     
    253286  obtain(ctx);
    254287  request(ctx, A_2_0, REQ_MTX_OBTAIN);
     288  check_generations(ctx, NONE, NONE);
     289  assert_prio(ctx, M, 2);
    255290  request(ctx, B_5_0, REQ_MTX_OBTAIN);
     291  check_generations(ctx, NONE, NONE);
     292  assert_prio(ctx, M, 0);
    256293  request(ctx, B_5_1, REQ_MTX_OBTAIN);
    257294  request(ctx, B_4, REQ_MTX_OBTAIN);
     
    260297  check_generations(ctx, NONE, NONE);
    261298  release(ctx);
     299  sync_with_helper(ctx);
    262300  check_generations(ctx, A_1, NONE);
     301  assert_prio(ctx, M, 3);
     302  assert_prio(ctx, A_1, 0);
    263303  request(ctx, A_1, REQ_MTX_RELEASE);
    264304  check_generations(ctx, A_1, B_4);
     305  assert_prio(ctx, A_1, 1);
     306  assert_prio(ctx, B_4, 0);
    265307  request(ctx, B_4, REQ_MTX_RELEASE);
    266308  check_generations(ctx, B_4, A_2_0);
     309  assert_prio(ctx, B_4, 4);
     310  assert_prio(ctx, A_2_0, 0);
    267311  request(ctx, A_2_0, REQ_MTX_RELEASE);
    268312  check_generations(ctx, A_2_0, B_5_0);
     313  assert_prio(ctx, A_2_0, 2);
     314  assert_prio(ctx, B_5_0, 0);
    269315  request(ctx, B_5_0, REQ_MTX_RELEASE);
    270316  check_generations(ctx, B_5_0, A_2_1);
     317  assert_prio(ctx, B_5_0, 5);
     318  assert_prio(ctx, A_2_1, 0);
    271319  request(ctx, A_2_1, REQ_MTX_RELEASE);
    272320  check_generations(ctx, A_2_1, B_5_1);
     321  assert_prio(ctx, A_2_1, 2);
     322  assert_prio(ctx, B_5_1, 5);
    273323  request(ctx, B_5_1, REQ_MTX_RELEASE);
    274324  check_generations(ctx, B_5_1, NONE);
     325  assert_prio(ctx, B_5_1, 5);
    275326}
    276327
Note: See TracChangeset for help on using the changeset viewer.