All of lore.kernel.org
 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 related	[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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.