It's possible to have interrupt driven receives, I am currently experimenting with this. It works by having a process register its PID in a kernel module which will in turn send a signal (SIGUSR) to that PID whenever the relevant interrupt is received. Triggering the intercore interrupt and the actual sending and receiving is handled by the program itself (in user space). I do not yet have any code for the sending/receiving as this would require some malloc/mutual exclusion strategy for the MPB which I'm not going to work on until the rest of the project starts taking shape. I was actually planning to post the code to the community as soon as I've cleaned it up and have it in a more presentable state (hopefully tomorrow or at the latest Friday).
You can see an example of how to send or receive an intercore interrupt in the kernel source.
The location is below.
See the similar question I wrote.