>> bash[5908]: NaT consumption 17179869216 [1] >> Modules linked in: aer_inject cpufreq_conservative cpufreq_userspace cpufreq_pow >> ersave acpi_cpufreq binfmt_misc fuse nls_iso8859_1 loop ipmi_si(+) ipmi_devintf >> ipmi_msghandler dm_mod ppdev iTCO_wdt iTCO_vendor_support sg igb parport_pc i2c_ >> i801 mptctl i2c_core serio_raw hid_generic lpc_ich mfd_core parport button conta >> iner usbhid hid uhci_hcd ehci_hcd usbcore usb_common sd_mod crc_t10dif ext3 mbca >> che jbd fan processor ide_pci_generic ide_core ata_piix libata mptsas mptscsih m >> ptbase scsi_transport_sas scsi_mod thermal thermal_sys hwmon >> > [...] >> >> Signed-off-by: Yijing Wang <wangyijing@xxxxxxxxxx> >> Signed-off-by: Jiang Liu <liuj97@xxxxxxxxx> >> --- >> drivers/pci/pcie/aer/aer_inject.c | 21 +++++++++++++++++++++ >> 1 files changed, 21 insertions(+), 0 deletions(-) >> >> diff --git a/drivers/pci/pcie/aer/aer_inject.c b/drivers/pci/pcie/aer/aer_inject.c >> index 5222986..fc28785 100644 >> --- a/drivers/pci/pcie/aer/aer_inject.c >> +++ b/drivers/pci/pcie/aer/aer_inject.c >> @@ -109,6 +109,19 @@ static struct aer_error *__find_aer_error_by_dev(struct pci_dev *dev) >> return __find_aer_error((u16)domain, dev->bus->number, dev->devfn); >> } >> >> +static bool pci_is_upstream_bus(struct pci_bus *bus, struct pci_bus *up_bus) >> +{ >> + struct pci_bus *pbus = bus->parent; >> + >> + while (pbus) { >> + if (pbus == up_bus) >> + return true; >> + pbus = pbus->parent; >> + } >> + >> + return false; >> +} >> + >> /* inject_lock must be held before calling */ >> static struct pci_ops *__find_pci_bus_ops(struct pci_bus *bus) >> { >> @@ -118,6 +131,13 @@ static struct pci_ops *__find_pci_bus_ops(struct pci_bus *bus) >> if (bus_ops->bus == bus) >> return bus_ops->ops; >> } >> + >> + /* here can't find bus_ops, fall back to get bus_ops of upstream bus */ >> + list_for_each_entry(bus_ops, &pci_bus_ops_list, list) { >> + if (pci_is_upstream_bus(bus, bus_ops->bus)) >> + return bus_ops->ops; >> + } >> + >> return NULL; >> } >> > At least, when returning NULL, a proper check and protection is needed. > Hi Chen Gong, Thanks for your comments. It's real dangerous when returning NULL, Since pci_read_aer/pci_write_aer functions had no any protection codes to check it. I think maybe we can treat this situation as a read/write access error, and set *val = 0 ? Another way here is panic system, Becasue this is a really unexpected situation. -- Thanks! Yijing -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html