diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-03-18 15:33:13 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-03-18 15:36:58 +0100 |
commit | 19e855d745819297ee64f817eff02dac17a20104 (patch) | |
tree | ff8555b5ba38562ed2a16dc102d3f7cbf21fdc95 | |
parent | score: Avoid Giant lock for CORE spinlock (diff) | |
download | rtems-19e855d745819297ee64f817eff02dac17a20104.tar.bz2 |
mpci: Avoid Giant lock
Update #2555.
-rw-r--r-- | cpukit/score/src/mpci.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/cpukit/score/src/mpci.c b/cpukit/score/src/mpci.c index c191bbe472..3929d78a09 100644 --- a/cpukit/score/src/mpci.c +++ b/cpukit/score/src/mpci.c @@ -237,16 +237,19 @@ uint32_t _MPCI_Send_request_packet ( uint32_t timeout_code ) { - Thread_Control *executing = _Thread_Executing; + Per_CPU_Control *cpu_self; + Thread_Control *executing; - the_packet->source_tid = executing->Object.id; - the_packet->source_priority = executing->current_priority; - the_packet->to_convert = - ( the_packet->to_convert - sizeof(MP_packet_Prefix) ) / sizeof(uint32_t); + cpu_self = _Thread_Dispatch_disable(); + + executing = _Per_CPU_Get_executing( cpu_self ); - executing->Wait.id = the_packet->id; + the_packet->source_tid = executing->Object.id; + the_packet->source_priority = executing->current_priority; + the_packet->to_convert = + ( the_packet->to_convert - sizeof(MP_packet_Prefix) ) / sizeof(uint32_t); - _Thread_Disable_dispatch(); + executing->Wait.id = the_packet->id; (*_MPCI_table->send_packet)( destination, the_packet ); @@ -265,7 +268,7 @@ uint32_t _MPCI_Send_request_packet ( timeout_code ); - _Thread_Enable_dispatch(); + _Thread_Dispatch_enable( cpu_self ); return executing->Wait.return_code; } |