Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 197905
b: refs/heads/master
c: 98ca396
h: refs/heads/master
i:
  197903: 88193f5
v: v3
  • Loading branch information
Hidetoshi Seto authored and Jesse Barnes committed May 11, 2010
1 parent f821087 commit a79b0bd
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 13 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 843f4697eea576c24f057bbdb199115bbb6b10bc
refs/heads/master: 98ca3964fe8da0d742331af80952443af5cff464
28 changes: 16 additions & 12 deletions trunk/drivers/pci/pcie/aer/aerdrv_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -215,11 +215,13 @@ static int find_device_iter(struct pci_dev *dev, void *data)
/**
* 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
* @e_info: including detailed error information such like id
*
* Invoked when error is detected at the Root Port.
* Return true if found.
*
* Invoked by DPC when error is detected at the Root Port.
*/
static void find_source_device(struct pci_dev *parent,
static bool find_source_device(struct pci_dev *parent,
struct aer_err_info *e_info)
{
struct pci_dev *dev = parent;
Expand All @@ -228,9 +230,17 @@ static void find_source_device(struct pci_dev *parent,
/* Is Root Port an agent that sends error message? */
result = find_device_iter(dev, e_info);
if (result)
return;
return true;

pci_walk_bus(parent->subordinate, find_device_iter, e_info);

if (!e_info->error_dev_num) {
dev_printk(KERN_DEBUG, &parent->dev,
"can't find device of ID%04x\n",
e_info->id);
return false;
}
return true;
}

static int report_error_detected(struct pci_dev *dev, void *data)
Expand Down Expand Up @@ -639,12 +649,6 @@ static inline void aer_process_err_devices(struct pcie_device *p_device,
{
int i;

if (!e_info->dev[0]) {
dev_printk(KERN_DEBUG, &p_device->port->dev,
"can't find device of ID%04x\n",
e_info->id);
}

/* Report all before handle them, not to lost records by reset etc. */
for (i = 0; i < e_info->error_dev_num && e_info->dev[i]; i++) {
if (get_device_error_info(e_info->dev[i], e_info))
Expand Down Expand Up @@ -702,8 +706,8 @@ static void aer_isr_one_error(struct pcie_device *p_device,

aer_print_port_info(p_device->port, e_info);

find_source_device(p_device->port, e_info);
aer_process_err_devices(p_device, e_info);
if (find_source_device(p_device->port, e_info))
aer_process_err_devices(p_device, e_info);
}

kfree(e_info);
Expand Down

0 comments on commit a79b0bd

Please sign in to comment.