On Tue, Sep 03, 2019 at 08:16:02PM +1000, Oliver O'Halloran wrote:
> 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: Oliver O'Halloran <ooh...@gmail.com>

Looks good, although I think it would be clearer if you could separate
checking the slot from raising the alert.

Reviewed-by: Sam Bobroff <sbobr...@linux.ibm.com>

> ---
>  arch/powerpc/kernel/eeh_driver.c | 32 ++++++++++++++++++++++++++++++++
>  1 file changed, 32 insertions(+)
> 
> diff --git a/arch/powerpc/kernel/eeh_driver.c 
> b/arch/powerpc/kernel/eeh_driver.c
> index 0d34cc12c529..80bd157fcb45 100644
> --- a/arch/powerpc/kernel/eeh_driver.c
> +++ b/arch/powerpc/kernel/eeh_driver.c
> @@ -803,6 +803,10 @@ static bool eeh_slot_presence_check(struct pci_dev *pdev)
>       if (!ops || !ops->get_adapter_status)
>               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);
>       if (rc)
>               return true;
> @@ -810,6 +814,28 @@ static bool eeh_slot_presence_check(struct pci_dev *pdev)
>       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
>   * @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)
>        * we don't want to modify the PE tree structure so we do it here.
>        */
>       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);
>  }
>  
> -- 
> 2.21.0
> 

Attachment: signature.asc
Description: PGP signature

Reply via email to