diff mbox

ACPI:remove panic in case hardware has changed after S4

Message ID 1373888637-20737-1-git-send-email-oliver@neukum.org (mailing list archive)
State Deferred, archived
Headers show

Commit Message

Oliver Neukum July 15, 2013, 11:43 a.m. UTC
From: Oliver Neukum <oneukum@suse.de>

Some BIOSes change hardware based on the state of
a laptop's lid. If the lid is closed, the touchpad is
disabled and the checksum changes. Windows 8 no longer
aborts resume if the checksum has changed.

Signed-off-by: Oliver Neukum <oneukum@suse.de>
---
 drivers/acpi/sleep.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

Comments

Thomas Renninger July 15, 2013, 11:55 a.m. UTC | #1
On Monday, July 15, 2013 01:43:57 PM oliver@neukum.org wrote:
> From: Oliver Neukum <oneukum@suse.de>
> 
> Some BIOSes change hardware based on the state of
> a laptop's lid. If the lid is closed, the touchpad is
> disabled and the checksum changes. Windows 8 no longer
> aborts resume if the checksum has changed.
I expect more machines will show up and ignore s4_hardware_signature
if Windows does not check it and we should do the same.

So no objections from my side.

Rafael: If you agree, could you queue this one up, please?

Thanks,

       Thomas

> 
> Signed-off-by: Oliver Neukum <oneukum@suse.de>
> ---
>  drivers/acpi/sleep.c | 8 +++-----
>  1 file changed, 3 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
> index 9c1a435..14744e5 100644
> --- a/drivers/acpi/sleep.c
> +++ b/drivers/acpi/sleep.c
> @@ -664,11 +664,9 @@ static void acpi_hibernation_leave(void)
>  	/* Reprogram control registers */
>  	acpi_leave_sleep_state_prep(ACPI_STATE_S4);
>  	/* Check the hardware signature */
> -	if (facs && s4_hardware_signature != facs->hardware_signature) {
> -		printk(KERN_EMERG "ACPI: Hardware changed while hibernated, "
> -			"cannot resume!\n");
> -		panic("ACPI S4 hardware signature mismatch");
> -	}
> +	if (facs && s4_hardware_signature != facs->hardware_signature)
> +		printk(KERN_CRIT "ACPI: Hardware changed while hibernated, "
> +			"success doubtful!\n");
>  	/* Restore the NVS memory area */
>  	suspend_nvs_restore();
>  	/* Allow EC transactions to happen. */
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Rafael Wysocki July 15, 2013, 12:09 p.m. UTC | #2
On Monday, July 15, 2013 01:55:56 PM Thomas Renninger wrote:
> On Monday, July 15, 2013 01:43:57 PM oliver@neukum.org wrote:
> > From: Oliver Neukum <oneukum@suse.de>
> > 
> > Some BIOSes change hardware based on the state of
> > a laptop's lid. If the lid is closed, the touchpad is
> > disabled and the checksum changes. Windows 8 no longer
> > aborts resume if the checksum has changed.
> I expect more machines will show up and ignore s4_hardware_signature
> if Windows does not check it and we should do the same.
> 
> So no objections from my side.
> 
> Rafael: If you agree, could you queue this one up, please?

Yes, I'm going to do that, although for 3.11 only, not for -stable.

If you need it in -stable, please send a separate inclusion request.

Thanks,
Rafael


> > 
> > Signed-off-by: Oliver Neukum <oneukum@suse.de>
> > ---
> >  drivers/acpi/sleep.c | 8 +++-----
> >  1 file changed, 3 insertions(+), 5 deletions(-)
> > 
> > diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
> > index 9c1a435..14744e5 100644
> > --- a/drivers/acpi/sleep.c
> > +++ b/drivers/acpi/sleep.c
> > @@ -664,11 +664,9 @@ static void acpi_hibernation_leave(void)
> >  	/* Reprogram control registers */
> >  	acpi_leave_sleep_state_prep(ACPI_STATE_S4);
> >  	/* Check the hardware signature */
> > -	if (facs && s4_hardware_signature != facs->hardware_signature) {
> > -		printk(KERN_EMERG "ACPI: Hardware changed while hibernated, "
> > -			"cannot resume!\n");
> > -		panic("ACPI S4 hardware signature mismatch");
> > -	}
> > +	if (facs && s4_hardware_signature != facs->hardware_signature)
> > +		printk(KERN_CRIT "ACPI: Hardware changed while hibernated, "
> > +			"success doubtful!\n");
> >  	/* Restore the NVS memory area */
> >  	suspend_nvs_restore();
> >  	/* Allow EC transactions to happen. */
Henrique de Moraes Holschuh July 15, 2013, 12:31 p.m. UTC | #3
On Mon, 15 Jul 2013, Thomas Renninger wrote:
> On Monday, July 15, 2013 01:43:57 PM oliver@neukum.org wrote:
> > Some BIOSes change hardware based on the state of
> > a laptop's lid. If the lid is closed, the touchpad is
> > disabled and the checksum changes. Windows 8 no longer
> > aborts resume if the checksum has changed.

> I expect more machines will show up and ignore s4_hardware_signature
> if Windows does not check it and we should do the same.

Windows *8* does not check.   But what about older versions?  Maybe this
needs to be guarded by verifying the firmware requested windows-8 mode?
Thomas Renninger July 15, 2013, 12:44 p.m. UTC | #4
On Monday, July 15, 2013 09:31:27 AM Henrique de Moraes Holschuh wrote:
> On Mon, 15 Jul 2013, Thomas Renninger wrote:
> > On Monday, July 15, 2013 01:43:57 PM oliver@neukum.org wrote:
> > > Some BIOSes change hardware based on the state of
> > > a laptop's lid. If the lid is closed, the touchpad is
> > > disabled and the checksum changes. Windows 8 no longer
> > > aborts resume if the checksum has changed.
> > 
> > I expect more machines will show up and ignore s4_hardware_signature
> > if Windows does not check it and we should do the same.
> 
> Windows *8* does not check.   But what about older versions?  Maybe this
> needs to be guarded by verifying the firmware requested windows-8 mode?

I would not make it too complicated.
Sticking to the latest Windows version should be enough for this one.
What bad should happen if we still try to resume and fail...

      Thomas
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Henrique de Moraes Holschuh July 15, 2013, 3:06 p.m. UTC | #5
On Mon, 15 Jul 2013, Thomas Renninger wrote:
> On Monday, July 15, 2013 09:31:27 AM Henrique de Moraes Holschuh wrote:
> > On Mon, 15 Jul 2013, Thomas Renninger wrote:
> > > On Monday, July 15, 2013 01:43:57 PM oliver@neukum.org wrote:
> > > > Some BIOSes change hardware based on the state of
> > > > a laptop's lid. If the lid is closed, the touchpad is
> > > > disabled and the checksum changes. Windows 8 no longer
> > > > aborts resume if the checksum has changed.
> > > 
> > > I expect more machines will show up and ignore s4_hardware_signature
> > > if Windows does not check it and we should do the same.
> > 
> > Windows *8* does not check.   But what about older versions?  Maybe this
> > needs to be guarded by verifying the firmware requested windows-8 mode?
> 
> I would not make it too complicated.
> Sticking to the latest Windows version should be enough for this one.
> What bad should happen if we still try to resume and fail...

Hmm, why was that check added in the first place?  If it is useless,
removing it for good is fine.  If it is _not_ useless, we should still do
the checking when not operating in windows-8 firmware mode.
Oliver Neukum July 15, 2013, 3:35 p.m. UTC | #6
On Monday 15 July 2013 12:06:11 Henrique de Moraes Holschuh wrote:
> On Mon, 15 Jul 2013, Thomas Renninger wrote:

> > I would not make it too complicated.
> > Sticking to the latest Windows version should be enough for this one.
> > What bad should happen if we still try to resume and fail...
> 
> Hmm, why was that check added in the first place?

Safety.

> If it is useless,
> removing it for good is fine.  If it is _not_ useless, we should still do
> the checking when not operating in windows-8 firmware mode.

Firmware will only be tested against Windows 8 pretty soon.
We'd end up with a gigantic list of exceptions.

	Regards
		Oliver

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Henrique de Moraes Holschuh July 15, 2013, 4:34 p.m. UTC | #7
On Mon, 15 Jul 2013, Oliver Neukum wrote:
> On Monday 15 July 2013 12:06:11 Henrique de Moraes Holschuh wrote:
> > On Mon, 15 Jul 2013, Thomas Renninger wrote:
> > > I would not make it too complicated.
> > > Sticking to the latest Windows version should be enough for this one.
> > > What bad should happen if we still try to resume and fail...
> > 
> > Hmm, why was that check added in the first place?
> 
> Safety.
> 
> > If it is useless,
> > removing it for good is fine.  If it is _not_ useless, we should still do
> > the checking when not operating in windows-8 firmware mode.
> 
> Firmware will only be tested against Windows 8 pretty soon.
> We'd end up with a gigantic list of exceptions.

No, we won't.  We can query the ACPI core for the OSI compatibility level
requested by the firmware, and ignore the test only for win8.

We still have 10 to 15 years worth of users using non-win8 firmware boxes on
x86/x86-64.
Rafael Wysocki July 15, 2013, 11:56 p.m. UTC | #8
On Monday, July 15, 2013 01:34:27 PM Henrique de Moraes Holschuh wrote:
> On Mon, 15 Jul 2013, Oliver Neukum wrote:
> > On Monday 15 July 2013 12:06:11 Henrique de Moraes Holschuh wrote:
> > > On Mon, 15 Jul 2013, Thomas Renninger wrote:
> > > > I would not make it too complicated.
> > > > Sticking to the latest Windows version should be enough for this one.
> > > > What bad should happen if we still try to resume and fail...
> > > 
> > > Hmm, why was that check added in the first place?
> > 
> > Safety.
> > 
> > > If it is useless,
> > > removing it for good is fine.  If it is _not_ useless, we should still do
> > > the checking when not operating in windows-8 firmware mode.
> > 
> > Firmware will only be tested against Windows 8 pretty soon.
> > We'd end up with a gigantic list of exceptions.
> 
> No, we won't.  We can query the ACPI core for the OSI compatibility level
> requested by the firmware, and ignore the test only for win8.
> 
> We still have 10 to 15 years worth of users using non-win8 firmware boxes on
> x86/x86-64.

But what's the risk from removing the check exactly for those systems?

Rafael
Thomas Renninger July 16, 2013, 7:30 a.m. UTC | #9
On Tuesday, July 16, 2013 01:56:49 AM Rafael J. Wysocki wrote:
> On Monday, July 15, 2013 01:34:27 PM Henrique de Moraes Holschuh wrote:
...
> > We still have 10 to 15 years worth of users using non-win8 firmware boxes
> > on x86/x86-64.
> 
> But what's the risk from removing the check exactly for those systems?

Yeah, I guess this is the point.

Is there a security or data corruption issue that might show up?
And even if.., if you exchange HW you should do a real reboot, otherwise
you have to blame yourself. The check is/was nice to at least give a hint
and remember the user where the failure might have come from.
But this does not work if Windows does not check for it.
Maybe Windows never checked for it, but it's not worth trying out
different versions, just for the sake of absolute Windows version
compatibility.

       Thomas

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
joeyli July 16, 2013, 7:32 a.m. UTC | #10
? ??2013-07-15 ? 13:43 +0200?oliver@neukum.org ???
> From: Oliver Neukum <oneukum@suse.de>
> 
> Some BIOSes change hardware based on the state of
> a laptop's lid. If the lid is closed, the touchpad is
> disabled and the checksum changes. Windows 8 no longer
> aborts resume if the checksum has changed.
> 
> Signed-off-by: Oliver Neukum <oneukum@suse.de>
> ---
>  drivers/acpi/sleep.c | 8 +++-----
>  1 file changed, 3 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
> index 9c1a435..14744e5 100644
> --- a/drivers/acpi/sleep.c
> +++ b/drivers/acpi/sleep.c
> @@ -664,11 +664,9 @@ static void acpi_hibernation_leave(void)
>  	/* Reprogram control registers */
>  	acpi_leave_sleep_state_prep(ACPI_STATE_S4);
>  	/* Check the hardware signature */
> -	if (facs && s4_hardware_signature != facs->hardware_signature) {
> -		printk(KERN_EMERG "ACPI: Hardware changed while hibernated, "
> -			"cannot resume!\n");
> -		panic("ACPI S4 hardware signature mismatch");
> -	}
> +	if (facs && s4_hardware_signature != facs->hardware_signature)
> +		printk(KERN_CRIT "ACPI: Hardware changed while hibernated, "
> +			"success doubtful!\n");
>  	/* Restore the NVS memory area */
>  	suspend_nvs_restore();
>  	/* Allow EC transactions to happen. */

This morning I tried to reproduce the hardware_signature change on my
Acer notebook, I hope can monitor the change on Linux then use Windows 8
to check the behavior.
Unfortunately I can not reproduce the hardware_signature change by
remove memory or PCI device(wifi module) with Linux kernel.

For PCI device, as ACPI spec's declare, it didn't causes
hardware_signature change, I print out in acpi_hibernation_leave() to
confirm it.

For memory size, before the S4 resume path run to
acpi_hibernation_leave(), kernel check the physical memory pages number
in snapshot_write_next() then -EPERM if physical pages change . So, it
doesn't have chance to check the hardware_signature changed.

Base on the above testing, correct my originally thinking, the
hardware_signature check could not detect the change of memory size
because it's too late.

Sorry for I didn't find out the actual behavior of Windows 8 to confirm
it ignore hardware_signature change. At least could not verify on my
machine.


Thanks a lot!
Joey Lee

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Rafael Wysocki July 16, 2013, 12:12 p.m. UTC | #11
On Tuesday, July 16, 2013 03:32:01 PM joeyli wrote:
> ? ??2013-07-15 ? 13:43 +0200?oliver@neukum.org ???
> > From: Oliver Neukum <oneukum@suse.de>
> > 
> > Some BIOSes change hardware based on the state of
> > a laptop's lid. If the lid is closed, the touchpad is
> > disabled and the checksum changes. Windows 8 no longer
> > aborts resume if the checksum has changed.
> > 
> > Signed-off-by: Oliver Neukum <oneukum@suse.de>
> > ---
> >  drivers/acpi/sleep.c | 8 +++-----
> >  1 file changed, 3 insertions(+), 5 deletions(-)
> > 
> > diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
> > index 9c1a435..14744e5 100644
> > --- a/drivers/acpi/sleep.c
> > +++ b/drivers/acpi/sleep.c
> > @@ -664,11 +664,9 @@ static void acpi_hibernation_leave(void)
> >  	/* Reprogram control registers */
> >  	acpi_leave_sleep_state_prep(ACPI_STATE_S4);
> >  	/* Check the hardware signature */
> > -	if (facs && s4_hardware_signature != facs->hardware_signature) {
> > -		printk(KERN_EMERG "ACPI: Hardware changed while hibernated, "
> > -			"cannot resume!\n");
> > -		panic("ACPI S4 hardware signature mismatch");
> > -	}
> > +	if (facs && s4_hardware_signature != facs->hardware_signature)
> > +		printk(KERN_CRIT "ACPI: Hardware changed while hibernated, "
> > +			"success doubtful!\n");
> >  	/* Restore the NVS memory area */
> >  	suspend_nvs_restore();
> >  	/* Allow EC transactions to happen. */
> 
> This morning I tried to reproduce the hardware_signature change on my
> Acer notebook, I hope can monitor the change on Linux then use Windows 8
> to check the behavior.
> Unfortunately I can not reproduce the hardware_signature change by
> remove memory or PCI device(wifi module) with Linux kernel.
> 
> For PCI device, as ACPI spec's declare, it didn't causes
> hardware_signature change, I print out in acpi_hibernation_leave() to
> confirm it.
> 
> For memory size, before the S4 resume path run to
> acpi_hibernation_leave(), kernel check the physical memory pages number
> in snapshot_write_next() then -EPERM if physical pages change . So, it
> doesn't have chance to check the hardware_signature changed.
> 
> Base on the above testing, correct my originally thinking, the
> hardware_signature check could not detect the change of memory size
> because it's too late.
> 
> Sorry for I didn't find out the actual behavior of Windows 8 to confirm
> it ignore hardware_signature change. At least could not verify on my
> machine.

OK, so it looks like we still need somebody to confirm that indeed Windows 8
doesn't check the hardware signature during resume from hibernation, right?

It is kind of important, because the *reason* for doing that change is the
reported Windows 8 compatibility issue.

Thanks,
Rafael
Thomas Renninger July 17, 2013, 2:58 p.m. UTC | #12
On Monday, July 15, 2013 05:35:23 PM Oliver Neukum wrote:
> On Monday 15 July 2013 12:06:11 Henrique de Moraes Holschuh wrote:
> > On Mon, 15 Jul 2013, Thomas Renninger wrote:
> > > I would not make it too complicated.
> > > Sticking to the latest Windows version should be enough for this one.
> > > What bad should happen if we still try to resume and fail...
> > 
> > Hmm, why was that check added in the first place?
> 
> Safety.

I expect it is there, because it is stated rather clear in the specs.
 
> > If it is useless,
> > removing it for good is fine.  If it is _not_ useless, we should still do
> > the checking when not operating in windows-8 firmware mode.
> 
> Firmware will only be tested against Windows 8 pretty soon.
> We'd end up with a gigantic list of exceptions.

Joey found an interessting paper about Win8 behavior:
http://bizsupport2.austin.hp.com/bc/docs/support/SupportManual/c03654081/c03654081.pdf

It looks like Win8 behaves rather different compared to Linux and is providing
"Hybrid Boot" where the user has to end all his apps. They have no big problem 
when resume fails as the user will not lose any data or work he had done 
before.

Joey also found the rather hidden acpi_sleep=s4_nohwsig boot option
which helps as well.
So Linux could do:
   1) Invalidate suspend image and reboot  (disadvantage: message is gone)
   2) Panic (current behavior) -> above boot param helps
   3) Still try to resume with a "not so offending message"
   4) ?

1. seem to be what Win8 is doing
3. sounds best to me. It could be ugly if suspend fails and
it always worked before and all your work/data is gone. So trying
hard to resume sounds like a good idea

I guess this still needs some discussion?

At least some facts came up already and people have an idea what
happens...

       Thomas
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Rafael Wysocki July 17, 2013, 10:09 p.m. UTC | #13
On Wednesday, July 17, 2013 04:58:34 PM Thomas Renninger wrote:
> On Monday, July 15, 2013 05:35:23 PM Oliver Neukum wrote:
> > On Monday 15 July 2013 12:06:11 Henrique de Moraes Holschuh wrote:
> > > On Mon, 15 Jul 2013, Thomas Renninger wrote:
> > > > I would not make it too complicated.
> > > > Sticking to the latest Windows version should be enough for this one.
> > > > What bad should happen if we still try to resume and fail...
> > > 
> > > Hmm, why was that check added in the first place?
> > 
> > Safety.
> 
> I expect it is there, because it is stated rather clear in the specs.
>  
> > > If it is useless,
> > > removing it for good is fine.  If it is _not_ useless, we should still do
> > > the checking when not operating in windows-8 firmware mode.
> > 
> > Firmware will only be tested against Windows 8 pretty soon.
> > We'd end up with a gigantic list of exceptions.
> 
> Joey found an interessting paper about Win8 behavior:
> http://bizsupport2.austin.hp.com/bc/docs/support/SupportManual/c03654081/c03654081.pdf
> 
> It looks like Win8 behaves rather different compared to Linux and is providing
> "Hybrid Boot" where the user has to end all his apps. They have no big problem 
> when resume fails as the user will not lose any data or work he had done 
> before.
> 
> Joey also found the rather hidden acpi_sleep=s4_nohwsig boot option
> which helps as well.
> So Linux could do:
>    1) Invalidate suspend image and reboot  (disadvantage: message is gone)
>    2) Panic (current behavior) -> above boot param helps
>    3) Still try to resume with a "not so offending message"
>    4) ?
> 
> 1. seem to be what Win8 is doing
> 3. sounds best to me. It could be ugly if suspend fails and
> it always worked before and all your work/data is gone. So trying
> hard to resume sounds like a good idea

We can also blacklist systems that need acpi_sleep=s4_nohwsig due to idiotic
hardware/BIOS design choices.

In any case, if we remove the panic, we should also drop s4_nohwsig and since
we have that (which I forgot about, by bad), the whole issue isn't so urgent,
so I'm dropping the patch for the time being.

Thanks,
Rafael
joeyli July 31, 2013, 11:52 p.m. UTC | #14
Hi all experts, 

? ??2013-07-18 ? 00:09 +0200?Rafael J. Wysocki ???
> On Wednesday, July 17, 2013 04:58:34 PM Thomas Renninger wrote:
> > On Monday, July 15, 2013 05:35:23 PM Oliver Neukum wrote:
> > > On Monday 15 July 2013 12:06:11 Henrique de Moraes Holschuh wrote:
> > > > On Mon, 15 Jul 2013, Thomas Renninger wrote:
> > > > > I would not make it too complicated.
> > > > > Sticking to the latest Windows version should be enough for this one.
> > > > > What bad should happen if we still try to resume and fail...
> > > > 
> > > > Hmm, why was that check added in the first place?
> > > 
> > > Safety.
> > 
> > I expect it is there, because it is stated rather clear in the specs.
> >  
> > > > If it is useless,
> > > > removing it for good is fine.  If it is _not_ useless, we should still do
> > > > the checking when not operating in windows-8 firmware mode.
> > > 
> > > Firmware will only be tested against Windows 8 pretty soon.
> > > We'd end up with a gigantic list of exceptions.
> > 
> > Joey found an interessting paper about Win8 behavior:
> > http://bizsupport2.austin.hp.com/bc/docs/support/SupportManual/c03654081/c03654081.pdf
> > 
> > It looks like Win8 behaves rather different compared to Linux and is providing
> > "Hybrid Boot" where the user has to end all his apps. They have no big problem 
> > when resume fails as the user will not lose any data or work he had done 
> > before.
> > 
> > Joey also found the rather hidden acpi_sleep=s4_nohwsig boot option
> > which helps as well.
> > So Linux could do:
> >    1) Invalidate suspend image and reboot  (disadvantage: message is gone)
> >    2) Panic (current behavior) -> above boot param helps
> >    3) Still try to resume with a "not so offending message"
> >    4) ?
> > 
> > 1. seem to be what Win8 is doing
> > 3. sounds best to me. It could be ugly if suspend fails and
> > it always worked before and all your work/data is gone. So trying
> > hard to resume sounds like a good idea
> 
> We can also blacklist systems that need acpi_sleep=s4_nohwsig due to idiotic
> hardware/BIOS design choices.
> 
> In any case, if we remove the panic, we should also drop s4_nohwsig and since
> we have that (which I forgot about, by bad), the whole issue isn't so urgent,
> so I'm dropping the patch for the time being.
> 
> Thanks,
> Rafael
> 
> 


About the testing on real machine to capture the Windows behavior of
hardware_signature... We confirm the behavior on fast boot and _REAL_ S4
are different on Windows.

First, on Windows 8, user could not see S4 option on default UI, they
need enable it in setup UI when user really want to use it. Windows 8's
default shutdown is fast boot but not real S5.

We found a notebook that has a buggy BIOS that changed the
hardware_signature in 3 times S4 cycles. With Linux kernel, normally we
can reproduced the FACS hardware signature fail at second time S4.

My friend, Max Lin help to install Windows 7 and Windows 8 on this buggy
machine to run S4 and fast boot testing, the result as following:

 + Linux v3.10 Kernel:
   Can reproduce error of hardware_signature changed in 3 times S4. 

 + Windows 8 _REAL_ S4:
   Run more then 10 S4 cycles, always resume like normally. Didn't see
any problem.

 + Windows 8 fast boot:
   Random happened blue screen as the attached picture (sorry for the
chinese message), the error is: PAGE_FAULT_IN_NONPAGED_AREA. Then
Windows 8 reboot and try to recover error.  We are not sure this error
is caused by hardware_signature changed, but it only reproduced on fast
boot but not S4.

 + Windows 7 _REAL_ S4:
   Run more then 10 S4 cycles, always resume like normally. Didn't see
any problem.


Base on the above testing result, our conclusion is: 

 + The _REAL_ S4 on Windows 7/8 ignored FACS hardware signature change.
It just result like normally, didn't lost any user data.

 + The fast boot resume on Windows 8, happen blue screen, but we are not
sure it reflect to FACS hardware signature change. Even that, Windows 8
didn't lost any user data because user already close all applications
before fast boot shutdown.


Due to Linux kernel is running REAL S4, so I suggest we can just ignore
the FACS hardware signature changed, means accept Oliver's patch. Just
let machine try to restore the S4 snapshot, if lucky, then user can get
their user data back.


Thanks a lot!
Joey Lee

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
index 9c1a435..14744e5 100644
--- a/drivers/acpi/sleep.c
+++ b/drivers/acpi/sleep.c
@@ -664,11 +664,9 @@  static void acpi_hibernation_leave(void)
 	/* Reprogram control registers */
 	acpi_leave_sleep_state_prep(ACPI_STATE_S4);
 	/* Check the hardware signature */
-	if (facs && s4_hardware_signature != facs->hardware_signature) {
-		printk(KERN_EMERG "ACPI: Hardware changed while hibernated, "
-			"cannot resume!\n");
-		panic("ACPI S4 hardware signature mismatch");
-	}
+	if (facs && s4_hardware_signature != facs->hardware_signature)
+		printk(KERN_CRIT "ACPI: Hardware changed while hibernated, "
+			"success doubtful!\n");
 	/* Restore the NVS memory area */
 	suspend_nvs_restore();
 	/* Allow EC transactions to happen. */