| IPI(9) | Kernel Developer's Manual | IPI(9) | 
ipi —
#include <sys/ipi.h>
typedef void (*ipi_func_t)(void *);
u_int
  
  ipi_register(ipi_func_t
    func, void
  *arg);
void
  
  ipi_unregister(u_int
    ipi_id);
void
  
  ipi_trigger(u_int
    ipi_id, struct cpu_info
    *ci);
void
  
  ipi_trigger_multi(u_int
    ipi_id, const kcpuset_t
    *target);
void
  
  ipi_trigger_broadcast(u_int
    ipi_id, bool
    skip_self);
void
  
  ipi_unicast(ipi_msg_t
    *msg, struct cpu_info
    *ci);
void
  
  ipi_multicast(ipi_msg_t
    *msg, const kcpuset_t
    *target);
void
  
  ipi_broadcast(ipi_msg_t
    *msg, bool
    skip_self);
void
  
  ipi_wait(ipi_msg_t
    *msg);
ipi interface provides
  capability to send inter-processor interrupts (IPIs) amongst CPUs. The
  interface has two mechanisms: asynchronous IPI to invoke functions with a
  constant argument and synchronous IPIs with the cross-call support.
Other synchronization interfaces are built using the MI IPI interface. For a general purpose inter-processor cross-calls or remote interrupts, use the xcall(9) or softint(9) interfaces.
The primary use cases of the MI IPIs include the following:
ipi_register(func,
    arg)ipi_unregister(ipi_id)ipi_trigger(ipi_id,
    ci)ipi_trigger_multi(ipi_id,
    target)ipi_trigger_broadcast(ipi_id,
    skip_self)true for skip_self.
        ipi_func_t	func;
        void		arg;
The func member specifies a function to invoke and arg is the argument to be passed to the function.
ipi_unicast(msg,
    ci)ipi_multicast(msg,
    target)ipi_broadcast(msg,
    skip_self)true for
    skip_self.ipi_wait(msg)All described functions, except
    ipi_wait(), must be called with the kernel
    preemption disabled. All synchronous IPI invocations must be completed (wait
    for them with the ipi_wait() function) before the
    IPI message structure can be destroyed or new cross-call requests can be
    performed.
IPL_HIGH and should generally not use any other
  synchronization interfaces such as
  mutex(9). If spin-locks are used,
  they must be used carefully and have no contention.
ipi interface is implemented within the file
  sys/kern/subr_ipi.c.
ipi interface first appeared in
  NetBSD 7.0.
| March 31, 2019 | NetBSD 9.3 |