[Skiboot] [PATCH 2/2] ipmi-sel: Run power action immediately if host not up

Stewart Smith stewart at linux.vnet.ibm.com
Wed Sep 30 21:31:48 AEST 2015


Vasant Hegde <hegdevasant at linux.vnet.ibm.com> writes:
> On 09/15/2015 08:40 AM, Joel Stanley wrote:
>> Our normal sequence for a soft power action (IPMI 'power soft' or
>> 'power cycle') involve receiving a SEL from the BMC, sending a message
>> to Linux's opal platform support which instructs the host OS to shut
>> down, and finally the host will request OPAL to cut power.
>> 
>> When the host is not yet up we will send the message to /dev/null, and
>> no action will be taken. This patches changes that behaviour to perform
>> the action immediately if we know how.
>> 
>> Signed-off-by: Joel Stanley <joel at jms.id.au>
>> ---
>>  hw/ipmi/ipmi-sel.c | 20 ++++++++++++++++----
>>  1 file changed, 16 insertions(+), 4 deletions(-)
>> 
>> diff --git a/hw/ipmi/ipmi-sel.c b/hw/ipmi/ipmi-sel.c
>> index 4626d9d..c446dfc 100644
>> --- a/hw/ipmi/ipmi-sel.c
>> +++ b/hw/ipmi/ipmi-sel.c
>> @@ -457,12 +457,24 @@ static void sel_power(uint8_t power)
>>  {
>>  	switch (power) {
>>  	case SOFT_OFF:
>> -		prlog(PR_NOTICE, "soft shutdown requested\n");
>> -		opal_queue_msg(OPAL_MSG_SHUTDOWN, NULL, NULL, SOFT_OFF);
>> +		prlog(PR_NOTICE, "Soft shutdown requested\n");
>> +		if (!debug_descriptor.opal_boot_complete &&
>> +		    platform.cec_power_down) {
>> +			prlog(PR_NOTICE, "Host not up, shutting down now\n");
>> +			platform.cec_power_down(IPMI_CHASSIS_PWR_DOWN);
>> +		} else {
>> +			opal_queue_msg(OPAL_MSG_SHUTDOWN, NULL, NULL, SOFT_OFF);
>> +		}
>>  		break;
>>  	case SOFT_REBOOT:
>> -		prlog(PR_NOTICE, "soft reboot rqeuested\n");
>> -		opal_queue_msg(OPAL_MSG_SHUTDOWN, NULL, NULL, SOFT_REBOOT);
>> +		prlog(PR_NOTICE, "Soft reboot rqeuested\n");
>
> Looks like copy-parse error... s/rqeuested/requested/ ..
>
>> +		if (!debug_descriptor.opal_boot_complete &&
>> +		    platform.cec_reboot) {
>> +			prlog(PR_NOTICE, "Host not up, rebooting now\n");
>> +			platform.cec_reboot();
>> +		} else {
>> +			opal_queue_msg(OPAL_MSG_SHUTDOWN, NULL, NULL, SOFT_REBOOT);
>> +		}
>
> So if platform.cec_reboot, then we will endup calling  "opal_queue_msg".. which
> is not correct..
> But given that cec_reboot will be set well before update opal_boot_complete
> flag, probably we are fine.

Looks to be same behaviour as before, correct?

Not sure what else we should do? Maybe fall back to attn or something?
Or just print a log message wishing the user good luck (or, more likely,
the hardware/firmware/kernel developer)? :)



More information about the Skiboot mailing list