/** * find_source_device - search through device hierarchy for source device * @parent: pointer to Root Port pci_dev data structure * @e_info: including detailed error information such like id * * Return true if found. * * Invoked by DPC when error is detected at the Root Port. * Caller of this function must set id, severity, and multi_error_valid of * struct aer_err_info pointed by @e_info properly. This function must fill * e_info->error_dev_num and e_info->dev[], based on the given information. */ static bool find_source_device(struct pci_dev *parent, struct aer_err_info *e_info) { struct pci_dev *dev = parent; int result; /* Must reset in this function */ e_info->error_dev_num = 0; /* Is Root Port an agent that sends error message? */ result = find_device_iter(dev, e_info); if (result) return true; pci_walk_bus(parent->subordinate, find_device_iter, e_info); if (!e_info->error_dev_num) { #ifdef CONFIG_DEBUG_PRINTK dev_printk(KERN_DEBUG, &parent->dev, "can't find device of ID%04x\n", e_info->id); #else dev_; #endif return false; } return true; }
/** * find_source_device - search through device hierarchy for source device * @parent: pointer to Root Port pci_dev data structure * @err_info: including detailed error information such like id * * Invoked when error is detected at the Root Port. */ static void find_source_device(struct pci_dev *parent, struct aer_err_info *e_info) { struct pci_dev *dev = parent; int result; /* Is Root Port an agent that sends error message? */ result = find_device_iter(dev, e_info); if (result) return; pci_walk_bus(parent->subordinate, find_device_iter, e_info); }
static void find_source_device(struct pci_dev *parent, struct aer_err_info *e_info) { struct pci_dev *dev = parent; int result; result = find_device_iter(dev, e_info); if (result) return; pci_walk_bus(parent->subordinate, find_device_iter, e_info); }