Please summarize isr SMP changes

Sebastian Huber sebastian.huber at embedded-brains.de
Mon Aug 5 14:41:18 UTC 2013


Hello Joel,

On 2013-08-05 16:20, Joel Sherrill wrote:
> Hi
>
> I can't tell what the ultimate result of all these changes is. I see code using the per CPU structure without indexing it but can't tell if that is uniprocessor specific.

the code without indexing the _Per_CPU_Information is only in the restored 
interrupt entry/exit code.  I used separate commits since you can then get a 
diff to the original code without SMP.

Please compare that changes in

[PATCH 08/12] bsps/sparc: Per-CPU thread dispatch disable

[PATCH 12/12] bsps/i386: SMP and per-CPU thread dispatch disable

with the changes previously necessary to add SMP support for the interrupt 
entry/exit.

Since these previous SMP support changes were quite complex and introduced bugs

https://www.rtems.org/bugzilla/show_bug.cgi?id=2082

http://git.rtems.org/rtems/commit/?id=e94aa61b6820e34732840139dbe3f2016c6f1e24

I reverted them to get a clean start point.

>
> Can you please write up the intended design/behavior?

The main change is in

[PATCH 04/12] score: Per-CPU thread dispatch disable level

It introduces a per-CPU thread dispatch disable level.  So instead of one 
global thread dispatch disable level we have now one instance per processor.

We still have the giant lock, but it is now decoupled from the thread 
dispatching in _Thread_Dispatch() and _Thread_Handler().

As a side-effect this fixes the lost thread dispatch necessary
indication bug in _Thread_Dispatch().

A per-CPU thread dispatch disable level greatly simplifies the SMP
support for the interrupt entry/exit code since no spin locks have to be
acquired in this area.  It is only necessary to get the current
processor index and use this to calculate the address of the own per-CPU
control.  This reduces the interrupt latency considerably.

All elements for the interrupt entry/exit code are now part of the 
Per_CPU_Control structure: thread dispatch disable level, ISR nest level and 
thread dispatch necessary.  Nothing else is required (except CPU port specific 
stuff like on SPARC).

The giant lock is only acquired for high-level operations in interrupt
handlers (e.g. release of a semaphore, sending of an event).

> Ultimately that needs to be in the porting guide.

Yes, I think we will start soon with such a thing.

-- 
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber at embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.



More information about the devel mailing list