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

Stewart Smith stewart at linux.ibm.com
Mon Feb 18 16:32:04 AEDT 2019


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?


-- 
Stewart Smith
OPAL Architect, IBM.



More information about the Skiboot mailing list