mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-02-06 11:19:56 +00:00
powerpc/eeh: Make EEH handler PE sensitive
Once eeh error is found, eeh event will be created and put it into the global linked list. At the mean while, kernel thread will be started to process it. The handler for the kernel thread originally was eeh device sensitive. The patch reworks the handler of the kernel thread so that it's PE sensitive. Signed-off-by: Gavin Shan <shangw@linux.vnet.ibm.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
c270a24c59
commit
120dc49661
@ -57,7 +57,7 @@ static int eeh_event_handler(void * dummy)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct eeh_event *event;
|
||||
struct eeh_dev *edev;
|
||||
struct eeh_pe *pe;
|
||||
|
||||
set_task_comm(current, "eehd");
|
||||
|
||||
@ -76,28 +76,23 @@ static int eeh_event_handler(void * dummy)
|
||||
|
||||
/* Serialize processing of EEH events */
|
||||
mutex_lock(&eeh_event_mutex);
|
||||
edev = event->edev;
|
||||
eeh_mark_slot(eeh_dev_to_of_node(edev), EEH_MODE_RECOVERING);
|
||||
|
||||
printk(KERN_INFO "EEH: Detected PCI bus error on device %s\n",
|
||||
eeh_pci_name(edev->pdev));
|
||||
pe = event->pe;
|
||||
eeh_pe_state_mark(pe, EEH_PE_RECOVERING);
|
||||
pr_info("EEH: Detected PCI bus error on PHB#%d-PE#%x\n",
|
||||
pe->phb->global_number, pe->addr);
|
||||
|
||||
set_current_state(TASK_INTERRUPTIBLE); /* Don't add to load average */
|
||||
edev = handle_eeh_events(event);
|
||||
|
||||
if (edev) {
|
||||
eeh_clear_slot(eeh_dev_to_of_node(edev), EEH_MODE_RECOVERING);
|
||||
pci_dev_put(edev->pdev);
|
||||
}
|
||||
handle_eeh_events(event);
|
||||
eeh_pe_state_clear(pe, EEH_PE_RECOVERING);
|
||||
|
||||
kfree(event);
|
||||
mutex_unlock(&eeh_event_mutex);
|
||||
|
||||
/* If there are no new errors after an hour, clear the counter. */
|
||||
if (edev && edev->freeze_count>0) {
|
||||
if (pe && pe->freeze_count > 0) {
|
||||
msleep_interruptible(3600*1000);
|
||||
if (edev->freeze_count>0)
|
||||
edev->freeze_count--;
|
||||
if (pe->freeze_count > 0)
|
||||
pe->freeze_count--;
|
||||
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user