mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] i386: do a global tlb flush in S4 resume
@ 2010-03-04  1:23 Shaohua Li
  2010-03-04  2:30 ` H. Peter Anvin
  0 siblings, 1 reply; 11+ messages in thread
From: Shaohua Li @ 2010-03-04  1:23 UTC (permalink / raw)
  To: linux-kernel; +Cc: rjw, mingo, hpa, colin.king, Shaohua Li

Colin reported a strange oops in S4 resume code path (see below). The test
system has i5/i7 CPU. The kernel doesn't open PAE, so 4M page table is used.
The oops always happen a virtual address 0xc03ff000, which is mapped to the
last 4k of first 4M memory. Doing a global tlb flush fixes the issue.

EIP: 0060:[<c0493a01>] EFLAGS: 00010086 CPU: 0
EIP is at copy_loop+0xe/0x15
EAX: 36aeb000 EBX: 00000000 ECX: 00000400 EDX: f55ad46c
ESI: 0f800000 EDI: c03ff000 EBP: f67fbec4 ESP: f67fbea8
 DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
...
...
CR2: 00000000c03ff000

Tested-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Shaohua Li <shaohua.li@intel.com>
---
 arch/x86/power/hibernate_asm_32.S |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/arch/x86/power/hibernate_asm_32.S b/arch/x86/power/hibernate_asm_32.S
index b641388..9e4ef64 100644
--- a/arch/x86/power/hibernate_asm_32.S
+++ b/arch/x86/power/hibernate_asm_32.S
@@ -27,10 +27,21 @@ ENTRY(swsusp_arch_suspend)
 	ret
 
 ENTRY(restore_image)
+	movl	mmu_cr4_features, %ecx
 	movl	resume_pg_dir, %eax
 	subl	$__PAGE_OFFSET, %eax
 	movl	%eax, %cr3
 
+	jecxz	1f	# cr4 Pentium and higher, skip if zero
+	movl	%ecx, %edx
+	andl	$~(X86_CR4_PGE), %edx
+	movl	%edx, %cr4;  # turn off PGE
+1:
+	movl	%cr3, %eax;  # flush TLB
+	movl	%eax, %cr3
+	jecxz	1f	# cr4 Pentium and higher, skip if zero
+	movl	%ecx, %cr4;  # turn PGE back on
+1:
 	movl	restore_pblist, %edx
 	.p2align 4,,7
 
-- 
1.6.3.3


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2010-03-30 18:49 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-03-04  1:23 [PATCH] i386: do a global tlb flush in S4 resume Shaohua Li
2010-03-04  2:30 ` H. Peter Anvin
2010-03-04  2:41   ` Shaohua Li
2010-03-04 19:49     ` Rafael J. Wysocki
2010-03-04 20:11       ` Rafael J. Wysocki
2010-03-05  0:59       ` Shaohua Li
2010-03-05 20:55         ` Rafael J. Wysocki
2010-03-06 21:54           ` Rafael J. Wysocki
2010-03-06 23:17             ` H. Peter Anvin
2010-03-30 18:42         ` [tip:x86/urgent] x86-32, resume: " tip-bot for Shaohua Li
2010-03-30 18:48         ` tip-bot for Shaohua Li

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome