[Skiboot] [PATCH v2] ipmi/power: Fix system reboot issue

Vasant Hegde hegdevasant at linux.vnet.ibm.com
Mon Feb 18 17:23:41 AEDT 2019


On 02/18/2019 11:02 AM, Stewart Smith wrote:
> Vasant Hegde <hegdevasant at linux.vnet.ibm.com> writes:
>> Kernel makes reboot/shudown OPAL call for reboot/shutdown. Once kernel
>> gets response from OPAL it runs opal_poll_events() until firmware
>> handles the request.
>>
>> On BMC based system, OPAL makes IPMI call (IPMI_CHASSIS_CONTROL) to
>> initiate system reboot/shutdown. At present OPAL queues IPMI messages
>> and return SUCESS to Host. If BMC is not ready to accept command (like
>> BMC reboot), then these message will fail. We have to manually
>> reboot/shutdown the system using BMC interface.
>>
>> This patch adds logic to validate message return value. If message failed,
>> then it will resend the message. At some stage BMC will be ready to accept
>> message and handles IPMI message.
>>
>> Signed-off-by: Vasant Hegde <hegdevasant at linux.vnet.ibm.com>
>> ---
>> Changes in v2:
>>    - Fixed use after free issue
>>
>> -Vasant
>>
>>   hw/ipmi/ipmi-power.c | 29 +++++++++++++++++++++++++++--
>>   1 file changed, 27 insertions(+), 2 deletions(-)
>>
>> diff --git a/hw/ipmi/ipmi-power.c b/hw/ipmi/ipmi-power.c
>> index f14a0c980..1d175dfb5 100644
>> --- a/hw/ipmi/ipmi-power.c
>> +++ b/hw/ipmi/ipmi-power.c
>> @@ -18,6 +18,28 @@
>>   #include <stdlib.h>
>>   #include <ipmi.h>
>>   #include <opal.h>
>> +#include <timebase.h>
>> +
>> +static void ipmi_chassis_control_complete(struct ipmi_msg *msg)
>> +{
>> +	uint8_t request = msg->data[0];
>> +	uint8_t cc = msg->cc;
>> +
>> +	ipmi_free_msg(msg);
>> +	if (cc == IPMI_CC_NO_ERROR)
>> +		return;
>> +
>> +	prlog(PR_INFO, "IPMI: Chassis control request failed. "
>> +	      "request=0x%02x, rc=0x%02x\n", request, cc);
>> +
>> +	/* Relax a bit before resending command */
>> +	time_wait_nopoll(100);
> 
> Any reason time_wait rather than just scheduling a job in the future?

I thought we will relax bit before scheduling again. But no strong reason. We 
can get rid of
time_wait() here.

-Vasant



More information about the Skiboot mailing list