shutdown via power button: "acpi: resumed at..."

Andriy Gapon avg at icyb.net.ua
Wed Mar 25 09:41:12 PDT 2009


on 25/03/2009 18:28 Nate Lawson said the following:
> Andriy Gapon wrote:
>> on 25/03/2009 18:12 Nate Lawson said the following:
>>> Andriy Gapon wrote:
>>>> I noticed that sometimes I am getting "acpi: resumed at..." message on console and
>>>> in system log when I initiate system shutdown by pressing power button.
>>>> I think that the cause is in acpi_UserNotify("Resume") call and this call is only
>>>> found in acpi_EnterSleepState().
>>>>
>>>> I see the following code in that function:
>>>>     case ACPI_STATE_S5:
>>>>         /*
>>>>          * Shut down cleanly and power off.  This will call us back through the
>>>>          * shutdown handlers.
>>>>          */
>>>>         shutdown_nice(RB_POWEROFF);
>>>>         break;
>>>>
>>>> So it seems that it is expected that shutdown_nice() would return immediately.
>>>> I think it makes S5 a special case comparing to other states where return happens
>>>> upon resuming from the state.
>>>> In this case, maybe it is not necessary for S5 request to go through the
>>>> resume/wakeup half of acpi_EnterSleepState.
>>>>
>>> I thought shutdown*() should never return at all. It sounds like
>>> interrupts are being re-enabled or something.
>>>
>> No, this is a different kind of shutdown, this one just send a signal to init:
>> void
>> shutdown_nice(int howto)
>> {
>>
>>         shutdown_howto = howto;
>>
>>         /* Send a signal to init(8) and have it shutdown the world */
>>         if (initproc != NULL) {
>>                 PROC_LOCK(initproc);
>>                 psignal(initproc, SIGINT);
>>                 PROC_UNLOCK(initproc);
>>         } else {
>>                 /* No init(8) running, so simply reboot */
>>                 boot(RB_NOSYNC);
>>         }
>>         return;
>> }
> 
> But the shutdown that is initiated through ACPI is RB_POWEROFF.

Not sure what exactly you meant here, so can't argue, just can comment - we are
just handing power button press in acpi_EnterSleepState.

> There
> should be no returning from there. What has changed in the code so that
> RB_POWEROFF does not immediately call back into acpi_shutdown_final()
> which powers off the system?

I am not sure what you are asking here, so I can't answer, but... power off or
not, shouldn't userland be given a chance to shutdown gracefully? I thought it
always worked this way.

> Anyway, the resume notification could be moved under the "if (state !=
> S5)" line right above it if this behavior is legal.
> 

Yes, I also think so.

-- 
Andriy Gapon


More information about the freebsd-acpi mailing list