The Interrupt Resource Management feature can enable a device driver to use more interrupt resources by dynamically managing the driver's interrupt configuration. When the Interrupt Resource Management feature is not used, configuration of interrupt handling usually only occurs in a driver's attach(9E) routine. The Interrupt Resource Management feature monitors the system for changes, recalculates the number of interrupt vectors to grant to each device in response to those changes, and notifies each affected participating driver of the driver's new allocation of interrupt vectors. A participating driver is a driver that has registered a callback handler as described in Callback Interfaces. Changes that can cause interrupt vector reallocation include adding or removing devices, or an explicit request as described in Modify Number of Interrupt Vectors Requested.
The Interrupt Resource Management feature is not available on every Solaris platform. The feature is only available to PCIe devices that utilize MSI-X interrupts.
A driver that utilizes the Interrupt Resource Management feature must be able to adapt correctly when the feature is not available.
When the Interrupt Resource Management feature is available, it can enable a driver to gain access to more interrupt vectors than the driver might otherwise be allocated. A driver might process interrupt conditions more efficiently when utilizing a larger number of interrupt vectors.
The Interrupt Resource Management feature dynamically adjusts the number of interrupt vectors granted to each participating driver depending upon the following constraints:
Total number available. A finite number of interrupt vectors exists in the system.
Total number requested. A driver might be granted fewer, but never more than the number of interrupt vectors it requested.
Fairness to other drivers. The total number of interrupt vectors available is shared by many drivers in a manner that is fair in relation to the total number requested by each driver.
The number of interrupt vectors made available to a device at any given time can vary:
As other devices are dynamically added to or removed from the system
As drivers dynamically change the number of interrupt vectors they request in response to load
A driver must provide the following support to use the Interrupt Resource Management feature:
Callback support. Drivers must register a callback handler so they can be notified when their number of available interrupts has been changed by the system. Drivers must be able to increase or decrease their interrupt usage.
Interrupt requests. Drivers must specify how many interrupts they want to use.
Interrupt usage. Drivers must request the correct number of interrupts at any given time, based on:
What interruptible conditions their hardware can generate
How many processors can be used to process those conditions in parallel
Interrupt flexibility. Drivers must be flexible enough to assign one or more interruptible conditions to each interrupt vector in a manner that best fits their current number of available interrupts. Drivers might need to reconfigure these assignments when their number of available interrupts increases or decreases at arbitrary times.