HomeFreeBSD

Assorted fixes to MSI-X/MSI/INTx setup in iflib(9):

Description

Assorted fixes to MSI-X/MSI/INTx setup in iflib(9):

  • In iflib_msix_init(), VMMs with broken MSI-X activation are trying to be worked around by manually enabling PCIM_MSIXCTRL_MSIX_ENABLE before calling pci_alloc_msix(9). Apart from constituting a layering violation, this has the problem of leaving PCIM_MSIXCTRL_MSIX_ENABLE enabled when falling back to MSI or INTx when e. g. MSI-X is black- listed and initially also when disabled via hw.pci.enable_msix. The later in turn was incorrectly worked around in r325166. Since r310806, pci(4) itself has code to deal with broken MSI-X handling of VMMs, so all of these workarounds in iflib(9) can go, fixing non-working interrupts when falling back to MSI/INTx. In any case, possibly further adjustments to broken MSI-X activation of VMMs like enabling r310806 by default in VM environments need to be placed into pci(4), not iflib(9). [1]
  • Also remove the pci_enable_busmaster(9) call from iflib_msix_init(), which is already more properly invoked from iflib_device_attach().
  • When falling back to MSI/INTx, release the MSI-X BAR resource again.
  • When falling back to INTx, ensure scctx->isc_vectors is set to 1 and not to something higher from a device with more than one MSI message supported.
  • Make the nearby ring_state(s) stuff (static) const.

Discussed with: jhb at BSDCan 2018 [1]
Reviewed by: imp, jhb
Differential Revision: https://reviews.freebsd.org/D15729

Details

Provenance
mariusAuthored on
Reviewer
imp
Differential Revision
D15729: Assorted fixes to MSI-X/MSI/INTx setup iflib(9)
Parents
rS335302: sysrc.subr: Fix a comment for accuracy
Branches
Unknown
Tags
Unknown