Commit aeff27c1 authored by Oliver O'Halloran's avatar Oliver O'Halloran Committed by Michael Ellerman

powerpc/eeh: Set attention indicator while recovering

I am the RAS team. Hear me roar.

Roar.

On a more serious note, being able to locate failed devices can be helpful.
Set the attention indicator if the slot supports it once we've determined
the device is present and only clear it if the device is fully recovered.
Signed-off-by: default avatarOliver O'Halloran <oohall@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20190903101605.2890-12-oohall@gmail.com
parent 018c49e9
...@@ -803,6 +803,10 @@ static bool eeh_slot_presence_check(struct pci_dev *pdev) ...@@ -803,6 +803,10 @@ static bool eeh_slot_presence_check(struct pci_dev *pdev)
if (!ops || !ops->get_adapter_status) if (!ops || !ops->get_adapter_status)
return true; return true;
/* set the attention indicator while we've got the slot ops */
if (ops->set_attention_status)
ops->set_attention_status(slot->hotplug, 1);
rc = ops->get_adapter_status(slot->hotplug, &state); rc = ops->get_adapter_status(slot->hotplug, &state);
if (rc) if (rc)
return true; return true;
...@@ -810,6 +814,28 @@ static bool eeh_slot_presence_check(struct pci_dev *pdev) ...@@ -810,6 +814,28 @@ static bool eeh_slot_presence_check(struct pci_dev *pdev)
return !!state; return !!state;
} }
static void eeh_clear_slot_attention(struct pci_dev *pdev)
{
const struct hotplug_slot_ops *ops;
struct pci_slot *slot;
if (!pdev)
return;
if (pdev->error_state == pci_channel_io_perm_failure)
return;
slot = pdev->slot;
if (!slot || !slot->hotplug)
return;
ops = slot->hotplug->ops;
if (!ops || !ops->set_attention_status)
return;
ops->set_attention_status(slot->hotplug, 0);
}
/** /**
* eeh_handle_normal_event - Handle EEH events on a specific PE * eeh_handle_normal_event - Handle EEH events on a specific PE
* @pe: EEH PE - which should not be used after we return, as it may * @pe: EEH PE - which should not be used after we return, as it may
...@@ -1098,6 +1124,12 @@ void eeh_handle_normal_event(struct eeh_pe *pe) ...@@ -1098,6 +1124,12 @@ void eeh_handle_normal_event(struct eeh_pe *pe)
* we don't want to modify the PE tree structure so we do it here. * we don't want to modify the PE tree structure so we do it here.
*/ */
eeh_pe_cleanup(pe); eeh_pe_cleanup(pe);
/* clear the slot attention LED for all recovered devices */
eeh_for_each_pe(pe, tmp_pe)
eeh_pe_for_each_dev(tmp_pe, edev, tmp)
eeh_clear_slot_attention(edev->pdev);
eeh_pe_state_clear(pe, EEH_PE_RECOVERING, true); eeh_pe_state_clear(pe, EEH_PE_RECOVERING, true);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment