[Skiboot] [PATCH 3/3] xscom: Do not wait indefinitely for xscom operation to complete

Vasant Hegde hegdevasant at linux.vnet.ibm.com
Thu May 21 01:24:15 AEST 2020


On 5/20/20 7:43 PM, Nicholas Piggin wrote:
> Excerpts from Vasant Hegde's message of May 20, 2020 9:51 pm:
>> In some corner cases (specially on P8), xscom_wait_done() won't
>> complete.. resulting in waiting forever.
>>
>> This patch retries for predefined time and then exits even if xscom
>> operation did not complete.
>>
>> Signed-off-by: Vasant Hegde <hegdevasant at linux.vnet.ibm.com>
>> ---
>>   hw/xscom.c | 7 +++++--
>>   1 file changed, 5 insertions(+), 2 deletions(-)
>>
>> diff --git a/hw/xscom.c b/hw/xscom.c
>> index 0eda567fc..500b6c0e9 100644
>> --- a/hw/xscom.c
>> +++ b/hw/xscom.c
>> @@ -72,10 +72,13 @@ static inline void *xscom_addr(uint32_t gcid, uint32_t pcb_addr)
>>   static uint64_t xscom_wait_done(void)
>>   {
>>   	uint64_t hmer;
>> +	int retry_cnt = 0;
>>   
>> -	do
>> +	do {
>>   		hmer = mfspr(SPR_HMER);
>> -	while(!(hmer & SPR_HMER_XSCOM_DONE));
>> +		if (retry_cnt++ > 5)
>> +			break;
> 
> AFAIKS you'd better return SPR_HMER_XSCOM_FAIL here.

Makes sense. Will fix it in v2.

Thanks!

-Vasant


More information about the Skiboot mailing list