Changeset af8fa1c in rtems-central


Ignore:
Timestamp:
07/12/22 15:13:15 (20 months ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
master
Children:
8cb1607
Parents:
4358082
git-author:
Sebastian Huber <sebastian.huber@…> (07/12/22 15:13:15)
git-committer:
Sebastian Huber <sebastian.huber@…> (07/12/22 15:18:27)
Message:

spec: Specify SMP interrupt dispatch detail

File:
1 edited

Legend:

Unmodified
Added
Removed
  • spec/bsp/req/interrupt-spurious.yml

    r4358082 raf8fa1c  
    5151      *ctx->first = NULL;
    5252    text: |
    53       While the pointer to the first interrupt entry of the interrupt vector
    54       specified by the ``vector`` parameter is equal to ${/c/if/null:/name}.
     53      While the first loaded value of the pointer to the first interrupt entry
     54      of the interrupt vector specified by the ``vector`` parameter is equal to
     55      ${/c/if/null:/name}.
    5556  - name: Entry
    5657    test-code: |
    5758      *ctx->first = &ctx->entry;
    5859    text: |
    59       While the pointer to the first interrupt entry of the interrupt vector
    60       specified by the ``vector`` parameter references an object of type
    61       ${/rtems/intr/if/entry:/name}.
     60      While the first loaded value of the pointer to the first interrupt entry
     61      of the interrupt vector specified by the ``vector`` parameter references
     62      an object of type ${/rtems/intr/if/entry:/name}.
     63  test-epilogue: null
     64  test-prologue: null
     65- name: FirstAgain
     66  states:
     67  - name: 'Null'
     68    test-code: |
     69      ctx->first_again = NULL;
     70    text: |
     71      While the second loaded value of the pointer to the first interrupt entry
     72      of the interrupt vector specified by the ``vector`` parameter is equal to
     73      ${/c/if/null:/name}.
     74  - name: Entry
     75    test-code: |
     76      ctx->first_again = &ctx->entry;
     77    text: |
     78      While the second loaded value of the pointer to the first interrupt entry
     79      of the interrupt vector specified by the ``vector`` parameter references
     80      an object of type ${/rtems/intr/if/entry:/name}.
    6281  test-epilogue: null
    6382  test-prologue: null
     
    6786skip-reasons: {}
    6887test-action: |
    69   rtems_status_code sc;
    70 
    7188  ctx->interrupt_occurred = false;
    7289  ctx->entry_counter = 0;
     
    7592  ctx->fatal_code = UINT32_MAX;
    7693
    77   (void) rtems_interrupt_vector_enable( ctx->test_vector );
    78 
    79   sc = rtems_interrupt_raise( ctx->test_vector );
    80   T_rsc_success( sc );
    81 
    82   while ( !ctx->interrupt_occurred ) {
    83     /* Wait */
    84   }
    85 
    86   Disable( ctx );
     94  #if defined(RTEMS_SMP)
     95  if ( *ctx->first == NULL && ctx->first_again != NULL ) {
     96    *ctx->first = ctx->first_again;
     97    bsp_interrupt_spurious( ctx->test_vector );
     98  } else
     99  #endif
     100  {
     101    rtems_status_code sc;
     102
     103    (void) rtems_interrupt_vector_enable( ctx->test_vector );
     104
     105    sc = rtems_interrupt_raise( ctx->test_vector );
     106    T_rsc_success( sc );
     107
     108    while ( !ctx->interrupt_occurred ) {
     109      /* Wait */
     110    }
     111
     112    Disable( ctx );
     113  }
    87114test-brief: null
    88115test-cleanup: null
     
    139166  member: |
    140167    rtems_interrupt_entry **first
     168- brief: |
     169    This member references an interrupt entry for the first entry of the
     170    interrupt vector or is NULL.
     171  description: null
     172  member: |
     173    rtems_interrupt_entry *first_again
    141174test-context-support: null
    142175test-description: null
     
    255288    First:
    256289    - 'Null'
     290    FirstAgain: N/A
    257291- enabled-by: true
    258292  post-conditions:
     
    263297    First:
    264298    - Entry
     299    FirstAgain: N/A
     300- enabled-by: RTEMS_SMP
     301  post-conditions:
     302    Result: FatalError
     303    FatalSource: SpuriousInterrupt
     304    FatalCode: Vector
     305  pre-conditions:
     306    First:
     307    - 'Null'
     308    FirstAgain:
     309    - 'Null'
     310- enabled-by: RTEMS_SMP
     311  post-conditions:
     312    Result: Dispatch
     313    FatalSource: N/A
     314    FatalCode: N/A
     315  pre-conditions:
     316    First:
     317    - 'Null'
     318    FirstAgain:
     319    - Entry
    265320type: requirement
Note: See TracChangeset for help on using the changeset viewer.