-
- Downloads
PCI/bwctrl: Re-add BW notification portdrv as PCIe BW controller
This mostly reverts the commit b4c7d207 ("PCI/LINK: Remove bandwidth notification"). An upcoming commit extends this driver building PCIe bandwidth controller on top of it. PCIe bandwidth notifications were first added in the commit e8303bb7 ("PCI/LINK: Report degraded links via link bandwidth notification") but later had to be removed. The significant changes compared with the old bandwidth notification driver include: 1) Don't print the notifications into kernel log, just keep the Link Speed cached in struct pci_bus updated. While somewhat unfortunate, the log spam was the source of complaints that eventually lead to the removal of the bandwidth notifications driver (see the links below for further information). 2) Besides the Link Bandwidth Management Interrupt, also enable Link Autonomous Bandwidth Interrupt to cover the other source of bandwidth changes. 3) Handle Link Speed updates robustly. Refresh the cached Link Speed when enabling Bandwidth Notification Interrupts, and solve the race between Link Speed read and LBMS/LABS update in pcie_bwnotif_irq_thread(). 4) Use concurrency safe LNKCTL RMW operations. 5) The driver is now called PCIe bwctrl (bandwidth controller) instead of just bandwidth notifications because of increased scope and functionality within the driver. 6) Coexist with the Target Link Speed quirk in pcie_failed_link_retrain(). Provide LBMS counting API for it. 7) Tweaks to variable/functions names for consistency and length reasons. Bandwidth Notifications enable the cur_bus_speed in the struct pci_bus to keep track PCIe Link Speed changes. [bhelgaas: This is based on previous work by Alexandru Gagniuc <mr.nuke.me@gmail.com>; see e8303bb7 ("PCI/LINK: Report degraded links via link bandwidth notification")] Link: https://lore.kernel.org/r/20241018144755.7875-7-ilpo.jarvinen@linux.intel.com Link: https://lore.kernel.org/all/20190429185611.121751-1-helgaas@kernel.org/ Link: https://lore.kernel.org/linux-pci/20190501142942.26972-1-keith.busch@intel.com/ Link: https://lore.kernel.org/linux-pci/20200115221008.GA191037@google.com/ Suggested-by: Lukas Wunner <lukas@wunner.de> # Building bwctrl on top of bwnotif Signed-off-by:Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> [bhelgaas: squash fix to drop IRQF_ONESHOT and convert to hardirq handler: https://lore.kernel.org/r/20241115165717.15233-1-ilpo.jarvinen@linux.intel.com ] Signed-off-by:
Bjorn Helgaas <bhelgaas@google.com> Tested-by:
Stefan Wahren <wahrenst@gmx.net> Reviewed-by:
Jonathan Cameron <Jonathan.Cameron@huawei.com>
Showing
- MAINTAINERS 6 additions, 0 deletionsMAINTAINERS
- drivers/pci/hotplug/pciehp_ctrl.c 5 additions, 0 deletionsdrivers/pci/hotplug/pciehp_ctrl.c
- drivers/pci/pci.c 1 addition, 1 deletiondrivers/pci/pci.c
- drivers/pci/pci.h 11 additions, 0 deletionsdrivers/pci/pci.h
- drivers/pci/pcie/Makefile 1 addition, 1 deletiondrivers/pci/pcie/Makefile
- drivers/pci/pcie/bwctrl.c 186 additions, 0 deletionsdrivers/pci/pcie/bwctrl.c
- drivers/pci/pcie/portdrv.c 5 additions, 4 deletionsdrivers/pci/pcie/portdrv.c
- drivers/pci/pcie/portdrv.h 4 additions, 2 deletionsdrivers/pci/pcie/portdrv.h
- drivers/pci/quirks.c 8 additions, 1 deletiondrivers/pci/quirks.c
- include/linux/pci.h 2 additions, 0 deletionsinclude/linux/pci.h
Loading
Please register or sign in to comment