[PATCH] UBUNTU: SAUCE: dove: avoid page table overwrite when resuming from hibernation

Stefan Bader stefan.bader at canonical.com
Mon May 31 07:44:38 UTC 2010


On 05/31/2010 03:50 AM, Eric Miao wrote:
> On Thu, May 27, 2010 at 11:35 PM, Tim Gardner <tim.gardner at canonical.com> wrote:
>> On 05/27/2010 09:03 AM, Eric Miao wrote:
>>>
>>>  From 1ae0436f8c2159936ca42d9ef938055b68af64f7 Mon Sep 17 00:00:00 2001
>>> From: Eric Miao<eric.miao at canonical.com>
>>> Date: Fri, 23 Apr 2010 14:16:17 +0800
>>> Subject: [PATCH] UBUNTU: SAUCE: dove: avoid page table overwrite when
>>> resuming from hibernation
>>>
>>> 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 at 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
>>
>> Test results in the LP report look good. Has this patch been upstreamed? I
>> cannot remember from the original discussions a few weeks ago.
>>
>> Acked-by: Tim Gardner <tim.gardner at canonical.com>
>>
> 
> Andy,
> 
> Ping?

Wrong person pinged. This is for Lucid, right? I try to use the quiteness today
to get through all pending and ready SRUs.

-Stefan




More information about the kernel-team mailing list