Hello,
On 08/12/14 11:40, Hesham Moustafa wrote:
Hi all,
I have been implementing SMP for a new architecture (Epiphany) and I
have some questions.
When the secondary processor should be waiting (or going to idle
state)? At Thread_Start_multitasking?
before you start a secondary processor the BSS segment must be
initialized to zero and the global data must be initialized.
The startup handshake is done in _Per_CPU_State_change(), but this
should be not relevant for the BSP SMP support code.
When a secondary processor is interrupted by another one? When it's
allocated a thread (lazy allocate)? And in that case, what's the
interprocess interrupt handler should do?
The current SMP interrupt handler checks for the type of the message
(shutdown, test, cache, etc). Should the interrupt handler assembly
code check for dispatch necessary (which is set by another processor
that allocated a thread for it), and then executes this thread? Please
correct me if I am wrong. And if this is correct, where the secondary
processor should be waiting (which function)?
The interrupt processing should be identical to the uni-processor case,
except that you have to access the _Per_CPU_Information with the index
of the current processor. The thread dispatching is part of the normal
interrupt epilogue.
One major question, what's exactly the must-be-added code to both
Context Switch, and ISR Handler, that differs from uni-processor
systems.
You have to access the _Per_CPU_Information with the index of the
current processor. In the context switch code you have to add a
synchronization procedure. See for example
http://git.rtems.org/rtems/tree/cpukit/score/cpu/arm/cpu_asm.S#n56
and also the no_cpu cpu.h file.
When I tried to run smp01 with my current implementation, I noticed
that the boot processor goes to IDLE thread after initialization, and
a secondary processor is the one who executes Init, is that the
correct behaviour? I think it's not, although the boot processor does
all its necessary functions before restart itself and jump to idle
task, and it's allocating Init to processor 1.
This is fine.
[1] https://github.com/heshamelmatary/rtems-epiphany
Regards,
Hesham
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel
--
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.hu...@embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel