Hi Rafael, > -----Original Message----- > From: rjwysocki@xxxxxxxxx [mailto:rjwysocki@xxxxxxxxx] On Behalf Of > Rafael J. Wysocki > Sent: Thursday, March 03, 2016 7:45 AM > To: Chen, Yu C > Cc: ACPI Devel Maling List; linux-efi@xxxxxxxxxxxxxxx; linux- > pm@xxxxxxxxxxxxxxx; Rafael J. Wysocki; Len Brown; matt.fleming@xxxxxxxxx; > Thomas Gleixner; x86@xxxxxxxxxx; Zhang, Rui; Zheng, Lv > Subject: Re: [PATCH][RFC] ACPI / PM: Fix poweroff issue on HW-full > platforms without _S5 > > On Wed, Mar 2, 2016 at 2:29 PM, Chen Yu <yu.c.chen@xxxxxxxxx> wrote: > > The problem is Linux registers pm_power_off = efi_power_off only if we > > are in hardware reduced mode. Actually, what we also want is to do > > this when ACPI S5 is simply not supported. > > That should handle both the HW reduced mode, and the HW-full mode > > where the DSDT fails to supply an _S5 object. > > > > This patch fixes this issue by introducing a new flag acpi_no_s5 which > > indicates the non-existence of _S5. The initial state of acpi_no_s5 is > > false and probed in acpi_sleep_init, then we'll later see the updated > > value in efi_poweroff_required, according to which we can set > > pm_power_off to efi_power_off in efi_shutdown_init. > > > > Suggested-by: Len Brown <len.brown@xxxxxxxxx> > > Signed-off-by: Chen Yu <yu.c.chen@xxxxxxxxx> > > --- > > arch/x86/platform/efi/quirks.c | 3 ++- > > drivers/acpi/sleep.c | 2 ++ > > include/acpi/acpixf.h | 6 ++++++ > > 3 files changed, 10 insertions(+), 1 deletion(-) > > > > diff --git a/arch/x86/platform/efi/quirks.c > > b/arch/x86/platform/efi/quirks.c index 2d66db8..8ec43bc 100644 > > --- a/arch/x86/platform/efi/quirks.c > > +++ b/arch/x86/platform/efi/quirks.c > > @@ -295,5 +295,6 @@ bool efi_reboot_required(void) > > > > bool efi_poweroff_required(void) > > { > > - return !!acpi_gbl_reduced_hardware; > > + return (!!acpi_gbl_reduced_hardware) > > + || (!!acpi_no_s5); > > This can be written as: > > return acpi_gbl_reduced_hardware || acpi_no_s5; > OK. > > } > > diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c index > > 9cb9752..6f75e54 100644 > > --- a/drivers/acpi/sleep.c > > +++ b/drivers/acpi/sleep.c > > @@ -846,6 +846,8 @@ int __init acpi_sleep_init(void) > > sleep_states[ACPI_STATE_S5] = 1; > > pm_power_off_prepare = acpi_power_off_prepare; > > pm_power_off = acpi_power_off; > > + } else { > > + acpi_no_s5 = TRUE; > > } > > > > supported[0] = 0; > > diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h index > > c96621e..2b4d7f7 100644 > > --- a/include/acpi/acpixf.h > > +++ b/include/acpi/acpixf.h > > @@ -252,6 +252,12 @@ ACPI_INIT_GLOBAL(u8, acpi_gbl_osi_data, 0); > > ACPI_INIT_GLOBAL(u8, acpi_gbl_reduced_hardware, FALSE); > > > > /* > > + * Some HW-full platforms do not have S5, so they may need > > + * to leverage efi power off for a shutdown. > > + */ > > +ACPI_INIT_GLOBAL(u8, acpi_no_s5, FALSE); > > Do you have to add it here? > > Can't you simply define it as a global bool variable in sleep.c and add a > declaration to include/linux/acpi.h? > OK, let me move it there. I'll send a V2 patch, thanks! ��.n��������+%������w��{.n�����{�����ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f