Subject: Re: [PATCH v2 1/2] powerpc/powernv: Add poweroff (EPOW, DPO) events support for PowerNV platform

From: Vipin K Parashar <[email-masked]>
Date: Mon, 11 May 2015 14:31:31 +0530

On 05/11/2015 12:19 PM, Michael Ellerman wrote:
> On Thu, 2015-05-07 at 15:00 +0530, Vipin K Parashar wrote:
>> This patch adds support for FSP EPOW (Early Power Off Warning) and
>> DPO (Delayed Power Off) events support for PowerNV platform.  EPOW events
>> are generated by SPCN/FSP due to various critical system conditions that
>> need system shutdown.  Few examples of these conditions are high ambient
>> temperature or system running on UPS power with low UPS battery. DPO event
>> is generated in response to admin initiated system shutdown request.
>> 	This patch enables host kernel on PowerNV platform to handle OPAL
>> notifications for these events and initiate system poweroff. Since EPOW
>> notifications are sent in advance of impending shutdown event and thus
>> this patch also adds functionality to wait for EPOW condition to return to
>> normal. Host allows MAX_POWEROFF_SYS_TIME (600 seconds) as system
>> poweroff time (time for host + guests shutdown) and waits for remaining
>> time for EPOW condition to return to normal. If EPOW condition doesn't
>> return to normal in calculated time it proceeds with graceful system
>> shutdown. For EPOW events with smaller timeouts values than
>> MAX_POWEROFF_SYS_TIME it proceeds with system shutdown without any wait
>> for EPOW condition to return to normal.
>
> Can I suggest an alternative design:
>   - when we recieve a DPO event call orderly_poweroff()
>   - when we recieve an EPOW event call orderly_poweroff()
>
> Thoughts?

Current design is calling orderly_poweroff immediately upon DPO event
as there is not need to wait for user initiated shutdowns.
     EPOW is sent in anticipation of a poweroff needed ahead of time. A 
typical example
is EPOW due to system on UPS power with 15 mins timeout. There could be case
when power is restored back within timeout and a poweroff is not needed. 
In such case
HW sends EPOW reset informing that EPOW condition has returned to normal.
     Another example is EPOW due to high ambient temp with 15 mins timeout.
Here too if temp goes down to manageable limits within timeout window, 
HW sends EPOW reset
to avoid shutdown.
     So to handle such cases current design implements wait for
HW Timeout - MAX_POWEROFF_SYS_TIME seconds before poweroff. If EPOW 
condition
returns to normal within this time poweroff is cancelled. So immediate 
poweroff is avoided
here to handle cases when EPOW condition returns to  normal.
     For EPOW cases (like system on UPS power with UPS battery low or 
Ambient temp
critically high) which have timeouts lower than MAX_POWEROFF_SYS 
seconds, it calls immediate
orderly_poweroff.
      In concise design implements immediate orderly_poweroff for DPO as 
well as EPOW cases when
timeout is less than  MAX_POWEROFF_SYS_TIME while for EPOW cases with 
MAX_POWEROFF_SYS_TIME
timeout it implements a wait for EPOW to return the normal.

Suggestions/thoughts ?

--Vipin
> cheers