Question about cross core IPC

Adam Lackorzynski adam at
Tue Jun 3 23:57:58 CEST 2014


On Sun Jun 01, 2014 at 05:15:06 -0800, Yuxin Ren wrote:
> I am learning the IPC code in the Fiasco kernel. I have some questions here.
> If the receiver is not ready, we will add the sender to the sender_list.
> But I did find any lock to protect the sender_list. So if two threads at
> different cores try to add themselves to the sender_list at the same time,
> how can we guarantee the we are safe to do so?

So if there's no lock then the data structure will only ever be
manipulated by a single context (and preemption disabled as required).

> When sender and receiver are at different cores, we have to use IPI to
> communicate. Where is the code on IPC path to use IPI? I imagine the code
> around IPI should be complex, so it is great if someone can tell me the
> logic about it, especially about how we protect data structures, using
> locks or any other lock-free algorithm.

Ipi is the base class that implements IPI functionality. So for example
see for Ipi::send in context.cpp. Around that are functions that allow
to call functions on remote cores etc, also in context.cpp.

Adam                 adam at

More information about the l4-hackers mailing list