From 19e855d745819297ee64f817eff02dac17a20104 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 18 Mar 2016 15:33:13 +0100 Subject: mpci: Avoid Giant lock Update #2555. --- cpukit/score/src/mpci.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'cpukit/score') 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; } -- cgit v1.2.3