HomeFreeBSD

LinuxKPI: fix pci_alloc_irq_vectors() for MSI

Description

LinuxKPI: fix pci_alloc_irq_vectors() for MSI

pci_alloc_irq_vectors() is given a min and max vector value.
pci_enable_msi() will always succeed independent of these arguments as
it does not know about them. Further it will only ever allocate
1 "vector" not supporting any other amount.
So upfront check that (a) the available pci_msi_count() can satisfy the
requested minv and (b) given the pci_enable_msi() hard coded limit check
that minv is not larger than 1.
If we cannot satisfy either requirement return an error.

This fixes problems with drivers which check that the returned value
of allocated "vectors" will match their requests and only otherwise try
to fall back to ask for 1 or deal otherwise.

Sponsored by: The FreeBSD Foundation
Reviewed by: hselasky (earlier version)
Differential Revision: https://reviews.freebsd.org/D37522

(cherry picked from commit e9715b1c4474333ff119aba3a9a74bff91f72372)

Details

Provenance
bzAuthored on Nov 28 2022, 6:05 PM
Reviewer
hselasky
Differential Revision
D37522: LinuxKPI: fix pci_alloc_irq_vectors() for MSI
Parents
rGb1479a5409cf: LinuxKPI: add kstrtou32_from_user() and mac_pton()
Branches
Unknown
Tags
Unknown