On 16/09/2021 22:50, Kinsey Moore wrote:
There is currently a narrow window between the CPU state being set to UP
and the dispatch disable flag being set. It is possible to perform a
cross-processor thread dispatch in this window which catches the CPU in
a state which is not actually fully ready for that type of thread
dispatch.

This moves the CPU state change to just before the CPU's first thread
dispatch and later than the dispatch disable flag change which closes
the window for the race condition.
---
  cpukit/score/src/threadstartmultitasking.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/cpukit/score/src/threadstartmultitasking.c 
b/cpukit/score/src/threadstartmultitasking.c
index 094a535394..0c0951a243 100644
--- a/cpukit/score/src/threadstartmultitasking.c
+++ b/cpukit/score/src/threadstartmultitasking.c
@@ -29,8 +29,6 @@ void _Thread_Start_multitasking( void )
    Thread_Control  *heir;
#if defined(RTEMS_SMP)
-  _Per_CPU_State_change( cpu_self, PER_CPU_STATE_UP );
-
    /*
     * Threads begin execution in the _Thread_Handler() function.   This
     * function will set the thread dispatch disable level to zero.
@@ -44,6 +42,8 @@ void _Thread_Start_multitasking( void )
#if defined(RTEMS_SMP)
    _CPU_SMP_Prepare_start_multitasking();
+
+  _Per_CPU_State_change( cpu_self, PER_CPU_STATE_UP );
  #endif
#if defined(_CPU_Start_multitasking)


For which branch is this patch? The code on the master is different.

Which scenario caused a problem here? I guess there is a second bug involved, since maskable interrupt should be disabled for this code path. How could there be a race condition?

--
embedded brains GmbH
Herr Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.hu...@embedded-brains.de
phone: +49-89-18 94 741 - 16
fax:   +49-89-18 94 741 - 08

Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to