[Skiboot] [PATCH 6/7] hmi: Only raise a catchall HMI if no other components have
Mahesh Jagannath Salgaonkar
mahesh at linux.vnet.ibm.com
Thu Mar 17 22:26:11 AEDT 2016
On 03/17/2016 11:00 AM, Alistair Popple wrote:
> Looks reasonable to me, but probably worth getting Mahesh (CC'ing) to comment
> as well because he should be more familiar with this code and the related
> kernel code
Looks fine to me as well.
Reviewed-By: Mahesh Salgaonkar <mahesh at linux.vnet.ibm.com>
>
> Reviewed-By: Alistair Popple <alistair at popple.id.au>
>
> On Tue, 15 Mar 2016 18:33:56 Russell Currey wrote:
>> Regardless of whether a handler for a specific component has raised an
>> event to deal with a HMI or not, skiboot will raise an extra HMI at the
>> end of the detection. This is problematic, as if one component reports
>> it is recoverable but another reports it is not, the last handler to be
>> called will have priority.
>>
>> Rework this to instead only send a HMI event if no handler has raised an
>> event themselves. This will send an unknown, unrecoverable HMI event
>> since the cause could not be found.
>>
>> Signed-off-by: Russell Currey <ruscur at russell.cc>
>> ---
>> core/hmi.c | 8 +++-----
>> 1 file changed, 3 insertions(+), 5 deletions(-)
>>
>> diff --git a/core/hmi.c b/core/hmi.c
>> index 09bf610..faf99ca 100644
>> --- a/core/hmi.c
>> +++ b/core/hmi.c
>> @@ -433,7 +433,7 @@ static void find_nx_checkstop_reason(int flat_chip_id,
>> *event_generated = 1;
>> }
>>
>> -static int decode_malfunction(struct OpalHMIEvent *hmi_evt)
>> +static void decode_malfunction(struct OpalHMIEvent *hmi_evt)
>> {
>> int i;
>> int recover = -1;
>> @@ -465,10 +465,9 @@ static int decode_malfunction(struct OpalHMIEvent
> *hmi_evt)
>> hmi_evt->u.xstop_error.xstop_type =
>> CHECKSTOP_TYPE_UNKNOWN;
>> hmi_evt->u.xstop_error.xstop_reason = 0;
>> + queue_hmi_event(hmi_evt, recover);
>> }
>> }
>> -
>> - return recover;
>> }
>>
>> static void wait_for_subcore_threads(void)
>> @@ -697,8 +696,7 @@ int handle_hmi_exception(uint64_t hmer, struct
> OpalHMIEvent *hmi_evt)
>> recover = 0;
>>
>> if (hmi_evt) {
>> - recover = decode_malfunction(hmi_evt);
>> - queue_hmi_event(hmi_evt, recover);
>> + decode_malfunction(hmi_evt);
>> }
>> }
>>
>>
>
More information about the Skiboot
mailing list