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: Lukas Wunner <lukas@wunner.de> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Alexandru Gagniuc <alex.gagniuc@dellteam.com>
This commit is contained in:
Родитель
55397ce8df
Коммит
0fa635aec9
|
@ -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)
|
||||||
*/
|
*/
|
||||||
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)
|
||||||
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;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче