BUS_BIND_INTR
,
bus_bind_intr
— bind an
interrupt resource to a specific CPU
#include
<sys/param.h>
#include <sys/bus.h>
int
BUS_BIND_INTR
(device_t dev,
device_t child, struct resource
*irq, int cpu);
int
bus_bind_intr
(device_t
dev, struct resource
*irq, int cpu);
The
BUS_BIND_INTR
()
method allows an interrupt resource to be pinned to a specific CPU. The
interrupt resource must have an interrupt handler attached via
BUS_SETUP_INTR(9).
The cpu parameter corresponds to the ID of a valid CPU
in the system. Binding an interrupt restricts the
cpuset(2)
of any associated interrupt threads to only include the specified CPU. It
may also direct the low-level interrupt handling of the interrupt to the
specified CPU as well, but this behavior is platform-dependent. If the value
NOCPU
is used for cpu, then
the interrupt will be “unbound” which restores any associated
interrupt threads back to the default cpuset.
Non-sleepable locks such as mutexes should not be held across
calls to these functions.
The
bus_bind_intr
()
function is a simple wrapper around
BUS_BIND_INTR
().
Note that currently there is no attempt made
to arbitrate between multiple bind requests for the same interrupt from
either the same device or multiple devices. There is also no arbitration
between interrupt binding requests submitted by userland via
cpuset(2)
and
BUS_BIND_INTR
().
The most recent binding request is the one that will be in effect.
Zero is returned on success, otherwise an appropriate error is
returned.
The BUS_BIND_INTR
() method and
bus_bind_intr
() functions first appeared in
FreeBSD 7.2.