> From: devel [mailto:driverdev-devel..@...] On Behalf Of Bjorn Helgaas > Sent: Saturday, February 11, 2017 06:00 > ... > On Wed, Feb 08, 2017 at 04:49:22PM -0600, Bjorn Helgaas wrote: > > The PCI core doesn't configure the PCIe MPS settings by itself. Each > > host bridge driver has to call pcie_bus_configure_settings() to make > > this happen. > > > > Jon fixed this already for pcie-iproc.c. I propose these similar > > patches for other drivers. > > > > HV guys, I included you because create_root_hv_pci_bus() is one place > > that calls pci_scan_child_bus() but does not call > > pcie_bus_configure_settings(). I know you probably don't strictly > > *need* to configure MPS settings in a paravirtual front-end, but the > > PCI core does other device configuration in this path: > > > > pci_scan_child_bus > > pci_scan_slot > > pci_scan_single_device > > pci_device_add > > pci_configure_device > > pci_init_capabilities > > > > and I would like to eventually migrate the MPS configuration into that > > same path. Since we do this other configuration for HV devices > > already, I think pcie_bus_configure_settings() should also work (even > > if it ends up not doing anything to real devices). > > > > It would make that eventual migration easier if all the > > pci_scan_child_bus() callers had the same pattern of calling > > pcie_bus_configure_settings(). > > > > So would it make sense to make a similar patch for HV? It looks easy > > to add it to create_root_hv_pci_bus(), but I don't know exactly what > > to do about pci_devices_present_work(). (I'm sorry for the really late response. I neglected the thread somehow...) Hi Bjorn, IMO we don't need to make any change to pci-hyperv.c: when a PCIe device is passed through to a guest on Hyper-V, in the guest the device only directly appears on a new root bus, and the new root bus doesn't have any child bus, and the new root bus itself is actually only a logical concept instead of a concrete device (i.e. it doesn't have its own BDF at all). So, in the path pci_scan_child_bus -> ... -> pci_device_add -> pci_configure_device -> pci_configure_mps, we're sure pci_upstream_bridge() is NULL, so pci_configure_mps does nothing. And since the root bus has no child bus, we don't need to call pcie_bus_configure_settings(child). Then you may ask how the MPS is set. I suppose the para-virtual PCI back-end driver on the host should take care of this properly. FWIW, after passing through a Mellanox VF to Linux guest, in the guest I get this for the device by lspci: DevCap: MaxPayload 512 bytes DevCtl: MaxPayload 128 bytes, MaxReadReq 128 bytes Thanks -- Dexuan _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel