---
name: "bus_bind_intr"
section: "9"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd"]
url: "https://new.carta.tech/BUS_BIND_INTR"
---

# bus\_bind\_intr(9)

bind an interrupt resource to a specific CPU

Part of [BUS\_BIND\_INTR(9)](/BUS_BIND_INTR/9.md).

## NAME

**BUS\_BIND\_INTR**, **bus\_bind\_intr** – bind an interrupt resource to a specific CPU

## SYNOPSIS

**#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*);

## DESCRIPTION

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)](/BUS_SETUP_INTR/9.md). The *cpu* parameter corresponds to the ID of a valid CPU in the system. Binding an interrupt restricts the [cpuset(2)](/cpuset/2.md) 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)](/cpuset/2.md) and **BUS\_BIND\_INTR**(). The most recent binding request is the one that will be in effect.

## RETURN VALUES

Zero is returned on success, otherwise an appropriate error is returned.

## SEE ALSO

[cpuset(2)](/cpuset/2.md), [BUS\_SETUP\_INTR(9)](/BUS_SETUP_INTR/9.md), [device(9)](/device/9.md)

## HISTORY

The **BUS\_BIND\_INTR**() method and **bus\_bind\_intr**() functions first appeared in FreeBSD 7.2.
