Re: [Bisected] 3.7-rc1 can't resume (still present in 3.9)

Jonas Heinrich
2013-05-01T17:11:24Z

[-- Attachment #1.1: Type: text/plain, Size: 3372 bytes --]

Hello,
I tried the newest kernel, 3.9 today but the bug is still present.
Applying the attached patch solves the bug for me.

Best regards,
Jonas Heinrich

On 03-20 14:32, Jonas Heinrich wrote:
> Hello Peter,
> sorry for responding that late to your advice ...
>
> On 02-23 13:54, H. Peter Anvin wrote:
> > So to bisect anything between
> > 73201dbec64aebf6b0dca855b523f437972dc7bb and
> > 1396adc3c2bdc556d4cdd1cf107aa0b6d59fbb1e in a meaningful way you
> > will have to apply 1396adc3c2bdc556d4cdd1cf107aa0b6d59fbb1e on top.
>
> Hope I got you right:
>
> git bisect start
> # good: [73201dbec64aebf6b0dca855b523f437972dc7bb] x86, suspend: On
> # wakeup always initialize cr4 and EFER
> git bisect good 73201dbec64aebf6b0dca855b523f437972dc7bb
> # bad: [1396adc3c2bdc556d4cdd1cf107aa0b6d59fbb1e] x86, suspend: Correct
> # the restore of CR4, EFER; skip computing EFLAGS.ID
> git bisect bad 1396adc3c2bdc556d4cdd1cf107aa0b6d59fbb1e
> # cherry-picking
> git cherry-pick 1396adc3c2bdc556d4cdd1cf107aa0b6d59fbb1e
> # bad: [a4a4fd9c1b2fa3687fa80177d5de7c551851906d] x86, suspend: Correct the restore of CR4, EFER; skip computing EFLAGS.ID
> git bisect bad a4a4fd9c1b2fa3687fa80177d5de7c551851906d
> # cherry-picking
> git cherry-pick 1396adc3c2bdc556d4cdd1cf107aa0b6d59fbb1e
> # bad: [be74ee62657cd7a51519946da7c4bedf7695b0da] x86, suspend: Correct the restore of CR4, EFER; skip computing EFLAGS.ID
> git bisect bad be74ee62657cd7a51519946da7c4bedf7695b0da
> # cherry-picking
> git cherry-pick 1396adc3c2bdc556d4cdd1cf107aa0b6d59fbb1e
> # bad: [10df153d76caf2464adb076d475c5c3bfce2c584] x86, suspend: Correct the restore of CR4, EFER; skip computing EFLAGS.ID
> git bisect bad 10df153d76caf2464adb076d475c5c3bfce2c584
> # cherry-picking
> git cherry-pick 1396adc3c2bdc556d4cdd1cf107aa0b6d59fbb1e
> # bad: [5ccf64462e2ea53f6b446aea61c308f57224ad6c] x86, suspend: Correct the restore of CR4, EFER; skip computing EFLAGS.ID
> git bisect bad 5ccf64462e2ea53f6b446aea61c308f57224ad6c
> # cherry-picking
> git cherry-pick 1396adc3c2bdc556d4cdd1cf107aa0b6d59fbb1e
> # bad: [6337a0046893906ef8dba2db30e36d7360101871] x86, suspend: Correct the restore of CR4, EFER; skip computing EFLAGS.ID
> git bisect bad 6337a0046893906ef8dba2db30e36d7360101871
> # cherry-picking
> git cherry-pick 1396adc3c2bdc556d4cdd1cf107aa0b6d59fbb1e
> # bad: [49eeaeaf09fde353766ae0cc548c4cef752d90a9] x86, suspend: Correct the restore of CR4, EFER; skip computing EFLAGS.ID
> git bisect bad 49eeaeaf09fde353766ae0cc548c4cef752d90a9
> # cherry-picking
> git cherry-pick 1396adc3c2bdc556d4cdd1cf107aa0b6d59fbb1e
> # bad: [43d880b7fbaa831d5bab9bd3215d3053f7c69e97] x86, suspend: Correct the restore of CR4, EFER; skip computing EFLAGS.ID
> git bisect bad 43d880b7fbaa831d5bab9bd3215d3053f7c69e97
>
> Well, don't know how to proceed here. As you could see, none of these kernels worked for me.
>
> > If 73201dbec64aebf6b0dca855b523f437972dc7b with
> > 1396adc3c2bdc556d4cdd1cf107aa0b6d59fbb1e on top fails whereas the
> > previous one does, then that is very interesting and something we
> > can work with.
>
> git bisect reset
> git pull
> git checkout 73201dbec64aebf6b0dca855b523f437972dc7b
> git cherry-pick 1396adc3c2bdc556d4cdd1cf107aa0b6d59fbb1e
>
> This kernel also does not work :(
>
> Best regards,
> Jonas Heinrich

[-- Attachment #1.2: suspendfix.patch --]
[-- Type: text/plain, Size: 909 bytes --]

--- a/arch/x86/realmode/rm/wakeup_asm.S 2013-04-29 02:36:01.000000000 +0200
+++ b/arch/x86/realmode/rm/wakeup_asm.S 2013-05-01 11:42:07.359999895 +0200
@@ -93,8 +93,8 @@

/* Restore MISC_ENABLE before entering protected mode, in case
BIOS decided to clear XD_DISABLE during S3. */
- movl pmode_behavior, %edi
- btl $WAKEUP_BEHAVIOR_RESTORE_MISC_ENABLE, %edi
+ movl pmode_behavior, %eax
+ btl $WAKEUP_BEHAVIOR_RESTORE_MISC_ENABLE, %eax
jnc 1f

movl pmode_misc_en, %eax
@@ -110,15 +110,15 @@
movl pmode_cr3, %eax
movl %eax, %cr3

- btl $WAKEUP_BEHAVIOR_RESTORE_CR4, %edi
- jnc 1f
- movl pmode_cr4, %eax
- movl %eax, %cr4
+ movl pmode_cr4, %ecx
+ jecxz 1f
+ movl %ecx, %cr4
1:
- btl $WAKEUP_BEHAVIOR_RESTORE_EFER, %edi
- jnc 1f
movl pmode_efer, %eax
movl pmode_efer + 4, %edx
+ movl %eax, %ecx
+ orl %edx, %ecx
+ jz 1f
movl $MSR_EFER, %ecx
wrmsr
1:

[-- Attachment #2: Type: application/pgp-signature, Size: 490 bytes --]