From: Sander van Leeuwen Sander van on
I'm looking for an official way to send an IPI to a target CPU. This target
CPU is running code at DISPATCH_LEVEL, so queuing a DPC doesn't immediately
send an IPI.

KeIpiGenericCall does exactly what I want, but it's a broadcast (=
expensive) and Vista+ only.

HalRequestIpi is an option, but it's undocumented and its interface has
changed in Windows 7. I did manage to make it work in Vista.

Thanks for any suggestions!

Sander van Leeuwen
From: Doron Holan [MSFT] on
why do you need to send an IPI? IPIs are typically considerd an internal
operation to the OS, not something drivers do on their own

d

--

This posting is provided "AS IS" with no warranties, and confers no rights.


"Sander van Leeuwen" <Sander van Leeuwen(a)discussions.microsoft.com> wrote in
message news:EC92F105-CEB3-462F-94BF-3D2C464175F9(a)microsoft.com...
> I'm looking for an official way to send an IPI to a target CPU. This
> target
> CPU is running code at DISPATCH_LEVEL, so queuing a DPC doesn't
> immediately
> send an IPI.
>
> KeIpiGenericCall does exactly what I want, but it's a broadcast (=
> expensive) and Vista+ only.
>
> HalRequestIpi is an option, but it's undocumented and its interface has
> changed in Windows 7. I did manage to make it work in Vista.
>
> Thanks for any suggestions!
>
> Sander van Leeuwen

From: Chris M. Thomasson on
"Doron Holan [MSFT]" <doron.holan(a)online.microsoft.com> wrote in message
news:%23qM3uBAVKHA.2932(a)TK2MSFTNGP04.phx.gbl...
> why do you need to send an IPI? IPIs are typically considerd an internal
> operation to the OS, not something drivers do on their own

FWIW, I use IPI + Ack in order to ensure that the target processor has
executed a memory barrier. One you do this for all processors, you have
observed a synchronization epoch. One can use sync-epochs to implement
exotic non-blocking algorithms (e.g., RCU, vZOOM, asymmetric rw-lock,
ect...). Luckily, Windows provides everything I need to do this, in
user-space wrapped up in a single procedure:

http://msdn.microsoft.com/en-us/library/ms683148(VS.85).aspx


For pre-Vista systems I use a hack in order to poll for sync-epochs:

http://groups.google.com/group/comp.programming.threads/browse_frm/thread/abb3622071b0d52f