Commit 0fa635ae authored by Lukas Wunner's avatar Lukas Wunner Committed by Bjorn Helgaas

PCI/LINK: Deduplicate bandwidth reports for multi-function devices

If a multi-function device's bandwidth is already limited when it is
enumerated, a message is logged only for function 0.  By contrast, when
downtraining occurs after enumeration, a message is logged for all
functions.  That's because the former uses pcie_report_downtraining(),
whereas the latter uses __pcie_print_link_status() (which doesn't filter
functions != 0).  I am seeing this happen on a MacBookPro9,1 with a GPU
(function 0) and an integrated HDA controller (function 1).

Avoid this incongruence by calling pcie_report_downtraining() in both
cases.
Signed-off-by: default avatarLukas Wunner <lukas@wunner.de>
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
Reviewed-by: default avatarAlexandru Gagniuc <alex.gagniuc@dellteam.com>
parent 55397ce8
...@@ -273,6 +273,7 @@ enum pcie_link_width pcie_get_width_cap(struct pci_dev *dev); ...@@ -273,6 +273,7 @@ enum pcie_link_width pcie_get_width_cap(struct pci_dev *dev);
u32 pcie_bandwidth_capable(struct pci_dev *dev, enum pci_bus_speed *speed, u32 pcie_bandwidth_capable(struct pci_dev *dev, enum pci_bus_speed *speed,
enum pcie_link_width *width); enum pcie_link_width *width);
void __pcie_print_link_status(struct pci_dev *dev, bool verbose); void __pcie_print_link_status(struct pci_dev *dev, bool verbose);
void pcie_report_downtraining(struct pci_dev *dev);
/* Single Root I/O Virtualization */ /* Single Root I/O Virtualization */
struct pci_sriov { struct pci_sriov {
......
...@@ -76,7 +76,7 @@ static irqreturn_t pcie_bw_notification_handler(int irq, void *context) ...@@ -76,7 +76,7 @@ static irqreturn_t pcie_bw_notification_handler(int irq, void *context)
*/ */
down_read(&pci_bus_sem); down_read(&pci_bus_sem);
list_for_each_entry(dev, &port->subordinate->devices, bus_list) list_for_each_entry(dev, &port->subordinate->devices, bus_list)
__pcie_print_link_status(dev, false); pcie_report_downtraining(dev);
up_read(&pci_bus_sem); up_read(&pci_bus_sem);
return IRQ_HANDLED; return IRQ_HANDLED;
......
...@@ -2388,7 +2388,7 @@ static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn) ...@@ -2388,7 +2388,7 @@ static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn)
return dev; return dev;
} }
static void pcie_report_downtraining(struct pci_dev *dev) void pcie_report_downtraining(struct pci_dev *dev)
{ {
if (!pci_is_pcie(dev)) if (!pci_is_pcie(dev))
return; return;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment