Changeset 9d27732 in rtems


Ignore:
Timestamp:
Jul 6, 2000, 7:40:58 PM (20 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, master
Children:
8ce962c0
Parents:
d058ce2
Message:

Switched to using isr disable version of _Objects_Get. When the
semaphore/mutex can be obtained immediately, this cuts execution time
by 50%.

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • c/src/exec/rtems/src/semobtain.c

    rd058ce2 r9d27732  
    7171  Objects_Locations           location;
    7272  boolean                     wait;
     73  ISR_Level                   level;
    7374
    74   the_semaphore = _Semaphore_Get( id, &location );
     75  the_semaphore = _Semaphore_Get_interrupt_disable( id, &location, &level );
    7576  switch ( location ) {
    7677    case OBJECTS_REMOTE:
     
    9899          id,
    99100          wait,
    100           timeout
     101          timeout,
     102          level
    101103        );
    102         _Thread_Enable_dispatch();
    103104        return _Semaphore_Translate_core_mutex_return_code(
    104105                  _Thread_Executing->Wait.return_code );
    105       } else {
    106         _CORE_semaphore_Seize(
    107           &the_semaphore->Core_control.semaphore,
    108           id,
    109           wait,
    110           timeout
    111         );
    112         _Thread_Enable_dispatch();
    113         return _Semaphore_Translate_core_semaphore_return_code(
     106      }
     107
     108      /* must be a counting semaphore */
     109      _CORE_semaphore_Seize_isr_disable(
     110        &the_semaphore->Core_control.semaphore,
     111        id,
     112        wait,
     113        timeout,
     114        &level
     115      );
     116      return _Semaphore_Translate_core_semaphore_return_code(
    114117                  _Thread_Executing->Wait.return_code );
    115       }
    116118  }
    117119
  • cpukit/rtems/src/semobtain.c

    rd058ce2 r9d27732  
    7171  Objects_Locations           location;
    7272  boolean                     wait;
     73  ISR_Level                   level;
    7374
    74   the_semaphore = _Semaphore_Get( id, &location );
     75  the_semaphore = _Semaphore_Get_interrupt_disable( id, &location, &level );
    7576  switch ( location ) {
    7677    case OBJECTS_REMOTE:
     
    9899          id,
    99100          wait,
    100           timeout
     101          timeout,
     102          level
    101103        );
    102         _Thread_Enable_dispatch();
    103104        return _Semaphore_Translate_core_mutex_return_code(
    104105                  _Thread_Executing->Wait.return_code );
    105       } else {
    106         _CORE_semaphore_Seize(
    107           &the_semaphore->Core_control.semaphore,
    108           id,
    109           wait,
    110           timeout
    111         );
    112         _Thread_Enable_dispatch();
    113         return _Semaphore_Translate_core_semaphore_return_code(
     106      }
     107
     108      /* must be a counting semaphore */
     109      _CORE_semaphore_Seize_isr_disable(
     110        &the_semaphore->Core_control.semaphore,
     111        id,
     112        wait,
     113        timeout,
     114        &level
     115      );
     116      return _Semaphore_Translate_core_semaphore_return_code(
    114117                  _Thread_Executing->Wait.return_code );
    115       }
    116118  }
    117119
Note: See TracChangeset for help on using the changeset viewer.