Skip to content
Snippets Groups Projects
Commit 9512e6db authored by Myron Stowe's avatar Myron Stowe
Browse files

PCI/bwctrl: Re-add BW notification portdrv as PCIe BW controller

JIRA: https://issues.redhat.com/browse/RHEL-81906
Upstream Status: 665745f274870c921020f610e2c99a3b1613519b

commit 665745f274870c921020f610e2c99a3b1613519b
Author: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Date:   Fri Oct 18 17:47:52 2024 +0300

    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: default avatarIlpo 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: default avatarBjorn Helgaas <bhelgaas@google.com>
Tested-by: default avatarStefan Wahren <wahrenst@gmx.net>
Reviewed-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>

Signed-off-by: default avatarMyron Stowe <mstowe@redhat.com>
parent 2fa55aab
No related branches found
No related tags found
No related merge requests found
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment