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

Eric Miao eric.miao at canonical.com
Mon May 31 08:26:12 UTC 2010


On Mon, May 31, 2010 at 3:44 PM, Stefan Bader
<stefan.bader at canonical.com> wrote:
> 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.
>

Hi Stefan,

Thanks for looking into this. And sorry for the noise.




More information about the kernel-team mailing list