[+cc Alex] On Mon, Feb 26, 2024 at 10:25:12AM +0000, Edmund Raile wrote: > Using LSI / Agere FW643 with vfio-pci will issue an FLreset, causing > a broken link only recoverable by removing power (power-off / > suspend + rescan). Prevent this bus reset. > With this change, the device can be assigned to VMs with VFIO. I don't quite understand the commit log. It says Function Level Resets cause a problem, but the patch sets PCI_DEV_FLAGS_NO_BUS_RESET, which prevents Secondary Bus Resets, not Function Level Resets. By default, I think we try reset methods in order of pci_reset_fn_methods[], so the fact that we get to the end and try pci_reset_bus_function() (where PCI_DEV_FLAGS_NO_BUS_RESET is tested) suggests that we weren't able to use FLR or PM resets. IIUC, vfio-pci resets devices to prevent leaking state from one VM to another. We might be willing to accept the downside of allowing that leakage, but I think it's worth mentioning that in the commit log. Add blank lines between paragraphs (also in the comment below), or rewrap into a single paragraph. > Signed-off-by: Edmund Raile <edmund.raile@xxxxxxxxx> > --- > Usefulness: > The LSI FW643 PCIe->FireWire 800 interface may be EOL but it is > the only one that does not use a PCIe->PCI bridge. > It was used in the following Apple machines: > MacBookPro10,1 > MacBookPro9,2 > MacBookPro6,2 > MacBookPro5,1 > Macmini6,1 > Macmini3,1 > iMac12,2 > iMac9,1 > iMac8,1 > It is reliable and enables FireWire audio interfaces to be used > on modern machines. > Virtualization allows for flexible access to professional audio > software. > > Implementation: > PCI_VENDOR_ID_ATT was reused as they are identical and I am > uncertain it is correct to add another ID for LSI to pci_ids.h. > drivers/pci/quirks.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c > index d797df6e5f3e..a6747e1b86da 100644 > --- a/drivers/pci/quirks.c > +++ b/drivers/pci/quirks.c > @@ -3765,6 +3765,15 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x003e, quirk_no_bus_reset); > */ > DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_CAVIUM, 0xa100, quirk_no_bus_reset); > > +/* > + * Using LSI / Agere FW643 with vfio-pci will issue an FLreset, causing > + * a broken link only recoverable by removing power (power-off / > + * suspend + rescan). Prevent this bus reset. > + * With this change, the device can be assigned to VMs with VFIO. > + */ > +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATT, 0x5900, quirk_no_bus_reset); > +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATT, 0x5901, quirk_no_bus_reset); > + > /* > * Some TI KeyStone C667X devices do not support bus/hot reset. The PCIESS > * automatically disables LTSSM when Secondary Bus Reset is received and > -- > 2.43.0 > >