lkml.org 
[lkml]   [2021]   [Sep]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 029/260] PCI/portdrv: Enable Bandwidth Notification only if port supports it
    Date
    From: Stuart Hayes <stuart.w.hayes@gmail.com>

    commit 00823dcbdd415c868390feaca16f0265101efab4 upstream.

    Previously we assumed that all Root Ports and Switch Downstream Ports
    supported Link Bandwidth Notification. Per spec, this is only required
    for Ports supporting Links wider than x1 and/or multiple Link speeds
    (PCIe r5.0, sec 7.5.3.6).

    Because we assumed all Ports supported it, we tried to set up a Bandwidth
    Notification IRQ, which failed for devices that don't support IRQs at all,
    which meant pcieport didn't attach to the Port at all.

    Check the Link Bandwidth Notification Capability bit and enable the service
    only when the Port supports it.

    [bhelgaas: commit log]
    Fixes: e8303bb7a75c ("PCI/LINK: Report degraded links via link bandwidth notification")
    Link: https://lore.kernel.org/r/20210512213314.7778-1-stuart.w.hayes@gmail.com
    Signed-off-by: Stuart Hayes <stuart.w.hayes@gmail.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Lukas Wunner <lukas@wunner.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/pci/pcie/portdrv_core.c | 9 +++++++--
    1 file changed, 7 insertions(+), 2 deletions(-)

    --- a/drivers/pci/pcie/portdrv_core.c
    +++ b/drivers/pci/pcie/portdrv_core.c
    @@ -255,8 +255,13 @@ static int get_port_device_capability(st
    services |= PCIE_PORT_SERVICE_DPC;

    if (pci_pcie_type(dev) == PCI_EXP_TYPE_DOWNSTREAM ||
    - pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT)
    - services |= PCIE_PORT_SERVICE_BWNOTIF;
    + pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT) {
    + u32 linkcap;
    +
    + pcie_capability_read_dword(dev, PCI_EXP_LNKCAP, &linkcap);
    + if (linkcap & PCI_EXP_LNKCAP_LBNC)
    + services |= PCIE_PORT_SERVICE_BWNOTIF;
    + }

    return services;
    }

    \
     
     \ /
      Last update: 2021-09-20 20:07    [W:4.032 / U:0.184 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site