FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Ubuntu > Ubuntu Kernel Team

 
 
LinkBack Thread Tools
 
Old 04-23-2010, 06:16 AM
Eric Miao
 
Default UBUNTU: SAUCE: dove: avoid page table overwrite when

BugLink: http://bugs.launchpad.net/bugs/509006

Resuming from hibernation is OK if 'resume=/dev/sdaX' is explicitly
specified on the kernel command line, but it fails if scripts in
initramfs are used to trigger the resume. It turned out to be page
table being overwritten when restoring the memory content because
it's using a normal user process's page table in the latter case,
which is not safe and could be overwritten. Fix this by using the
safe swapper_pg_dir during restoring.

Signed-off-by: Eric Miao <eric.miao@canonical.com>
---

It was posted weeks ago, thought it was merged but not. This is an updated
version addressing the previous comments to make it cleaner.

arch/arm/mach-dove/Makefile | 2 ++
arch/arm/mach-dove/swsusp.S | 8 ++++++++
2 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-dove/Makefile b/arch/arm/mach-dove/Makefile
index 0be1e1c..c5c028f 100755
--- a/arch/arm/mach-dove/Makefile
+++ b/arch/arm/mach-dove/Makefile
@@ -1,3 +1,5 @@
+AFLAGS_swsusp.o := -DTEXT_OFFSET=$(TEXT_OFFSET)
+
obj-y += clock.o common.o addr-map.o irq.o pcie.o mpp.o
sdhci_cam_mbus.o
obj-$(CONFIG_MACH_DOVE_RD_AVNG) += dove-rd-avng-setup.o
diff --git a/arch/arm/mach-dove/swsusp.S b/arch/arm/mach-dove/swsusp.S
index 4f4a884..9b752a0 100644
--- a/arch/arm/mach-dove/swsusp.S
+++ b/arch/arm/mach-dove/swsusp.S
@@ -28,6 +28,7 @@
*/

#include <linux/linkage.h>
+#include <asm/memory.h>
#include <asm/segment.h>
#include <asm/page.h>
#include <asm/asm-offsets.h>
@@ -209,8 +210,15 @@ FUNC(swsusp_arch_suspend)

FUNC_END(swsusp_arch_suspend)

+#define KERNEL_RAM_PADDR (PHYS_OFFSET + TEXT_OFFSET)
+#define SWAPPER_PG_DIR (KERNEL_RAM_PADDR - 0x4000)
+
FUNC(swsusp_arch_resume)
/* set page table if needed */
+ ldr r0, =SWAPPER_PG_DIR
+ mcr p15, 0, r0, c2, c0, 0 @ load page table pointer
+ mcr p15, 0, r0, c8, c7, 0 @ invalidate I,D TLBs
+ mcr p15, 0, r0, c7, c5, 4 @ ISB

/*
* retore "nr_copy_pages" pages which are saved and specified
--
1.7.0.4

--
kernel-team mailing list
kernel-team@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/kernel-team
 

Thread Tools




All times are GMT. The time now is 12:51 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org