On Sun, Oct 21, 2018 at 05:06:58PM +0200, Heiner Kallweit wrote: > Memory-Write-Invalidate isn't applicable for PCIe devices, therefore > make the MWI functions a dummy and don't even write to the (dummy) > PCI config space registers. > > Signed-off-by: Heiner Kallweit <hkallweit1@xxxxxxxxx> > --- > drivers/pci/pci.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c > index d068f11d0..fb63b3d89 100644 > --- a/drivers/pci/pci.c > +++ b/drivers/pci/pci.c > @@ -4137,6 +4137,9 @@ int pci_set_mwi(struct pci_dev *dev) > int rc; > u16 cmd; > > + if (pci_is_pcie(dev)) > + return 0; I don't think this works quite right for the case of a PCIe-to-PCI/PCI-X bridge. That is a PCIe device (it has a PCIe Capability, and pci_is_pcie() should return true), but the MWI bit is writable and meaningful (it controls whether the bridge can convert a PCIe Memory Write into a PCI Memory Write and Invalidate), so I don't think it would be correct to just skip this. I'm looking at the "PCI EXPRESS TO PCI/PCI-X BRIDGE" spec, r1.0, sec 5.1.1.1. > rc = pci_set_cacheline_size(dev); > if (rc) > return rc; > @@ -4203,6 +4206,9 @@ void pci_clear_mwi(struct pci_dev *dev) > #ifndef PCI_DISABLE_MWI > u16 cmd; > > + if (pci_is_pcie(dev)) > + return; > + > pci_read_config_word(dev, PCI_COMMAND, &cmd); > if (cmd & PCI_COMMAND_INVALIDATE) { > cmd &= ~PCI_COMMAND_INVALIDATE; > -- > 2.19.1 >