Changing the CPU Affinity of MSI-X Table Entries

NDIS 6.1 and later miniport drivers that support MSI-X can call the NdisMConfigMSIXTableEntry function to mask, unmask, or map MSI-X table entries to device-assigned MSI-X messages. Miniport drivers that support RSS use NdisMConfigMSIXTableEntry to change the CPU affinity of MSI-X table entries at run time.

NdisMConfigMSIXTableEntry is a wrapper around the GUID_MSIX_TABLE_CONFIG_INTERFACE query. Miniport drivers can call NdisMConfigMSIXTableEntry after NDIS calls the MiniportInitializeEx function and before the drivers return from the MiniportHaltEx function.

A miniport driver that assigns an MSI-X table entry for each RSS queue and has fewer queues than the number of RSS processors can add additional MSI-X message resources in the MiniportFilterResourceRequirements function. For more information about how to modify assigned resources for a device, see MSI-X Resource Filtering.

The miniport driver can set the CPU affinity of MSI-X interrupt resources so that the device has at least one MSI-X message for each RSS processor. Note that the PCI bus driver initially maps the n MSI-X table entries (where n is the number of MSI-X table entries that the NIC hardware reported to the bus) to the first n MSI-X messages in modified resources. After NDIS calls MiniportInitializeEx, when the miniport driver changes the target processor of a particular MSI-X table entry, the driver calls NdisMConfigMSIXTableEntry to map that table entry to an MSI-X message that already has the affinity set to the desired processor.