diff options
Diffstat (limited to 'cpukit/score/src/smp.c')
-rw-r--r-- | cpukit/score/src/smp.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/cpukit/score/src/smp.c b/cpukit/score/src/smp.c index 69f5337b75..6f1bc55cc8 100644 --- a/cpukit/score/src/smp.c +++ b/cpukit/score/src/smp.c @@ -69,10 +69,10 @@ void rtems_smp_process_interrupt( void ) ISR_Level level; - level = _SMP_lock_spinlock_simple_Obtain( &per_cpu->lock ); + _SMP_lock_ISR_disable_and_acquire( &per_cpu->lock, level ); message = per_cpu->message; per_cpu->message = 0; - _SMP_lock_spinlock_simple_Release( &per_cpu->lock, level ); + _SMP_lock_Release_and_ISR_enable( &per_cpu->lock, level ); #if defined(RTEMS_DEBUG) { @@ -115,9 +115,9 @@ void _SMP_Send_message( int cpu, uint32_t message ) printk( "Send 0x%x to %d\n", message, cpu ); #endif - level = _SMP_lock_spinlock_simple_Obtain( &per_cpu->lock ); + _SMP_lock_ISR_disable_and_acquire( &per_cpu->lock, level ); per_cpu->message |= message; - _SMP_lock_spinlock_simple_Release( &per_cpu->lock, level ); + _SMP_lock_Release_and_ISR_enable( &per_cpu->lock, level ); bsp_smp_interrupt_cpu( cpu ); } @@ -131,9 +131,11 @@ void _SMP_Broadcast_message( uint32_t message ) for ( cpu = 0 ; cpu < ncpus ; ++cpu ) { if ( cpu != self ) { Per_CPU_Control *per_cpu = &_Per_CPU_Information[ cpu ]; - ISR_Level level = _SMP_lock_spinlock_simple_Obtain( &per_cpu->lock ); + ISR_Level level; + + _SMP_lock_ISR_disable_and_acquire( &per_cpu->lock, level ); per_cpu->message |= message; - _SMP_lock_spinlock_simple_Release( &per_cpu->lock, level ); + _SMP_lock_Release_and_ISR_enable( &per_cpu->lock, level ); } } |