lkml.org 
[lkml]   [2005]   [Sep]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: [discuss] Re: [PATCH][Fix][Resend] Fix Bug #4959: Page tables corrupted during resume on x86-64 (take 3)
Date
Hi,

On Thursday, 29 of September 2005 00:35, Pavel Machek wrote:
> Hi!
>
> > > > > > The following patch fixes Bug #4959.  For this purpose it creates
> > > > > > temporary page translation tables including the kernel mapping (reused)
> > > > > > and the direct mapping (created from scratch) and makes swsusp switch
> > > > > > to these tables right before the image is restored.
> > > > > >
> > > > > > The code that generates the direct mapping is based on the code in
> > > > > > arch/x86_64/mm/init.c.
> > > > >
> > > > > Looks much better than before, but is there any reason you cannot
> > > > > share the code with the mm/init.c code?
> > > >
> > > > I think so. I have to make the temporary page tables nosavedata or set
> > > > PG_nosave on them, so that swsusp doesn't overwrite them. I'm not
> > > > sure if I could do this cleanly if I used the code from mm/init.c directly.
> > >
> > > Just pass a flag for that.
> >
> > Well, the code in mm/init.c is only executed really early, before zones
> > are initialized, and it uses alloc_low_page() to map memory. Thus it seems
> > I only could make my code be executed next to init_memory_mapping(),
> > in which case I wouldn't be able to use page flags. Apparently I'm missing
> > something but now I'm too tired to think efficiently.
>
> I guess Andi meant "add a parameter to those mm/init.c functions".

Ahh, ok.

This does not seem to be enough, however, because the original code
in mm/init.c is __init, so I can't call it during resume. Moreover, it calls
some more __init functions, so to use it I'll have to move the allocation
of the resume temporary page tables to the kernel initialization code.

If I do this, I'll have to mark the allocated pages as nosave (see below)
and make sure they will always get the same physical addresses. I am
going to see if I can do this, but I need some time.

Anyway this could be a long-term solution, but in the short term the bug
is there and needs fixing ASAP. One good thing about the current
solution is that it does not break anything outside of swsusp _for_ _sure_.

> (Otoh, you have reserved area, anyway, just set all of it PG_nosave,
> and you'll not need to modify mm/init.c stuff).

Rather I've reserved a set of individual pages that are only linked
via the page tables structure. IMO it's better to mark them as nosave
as soon as they get allocated or I'll need to browse the entire
structure to do this. Also, I need to make them get always the
same physical addresses and tell the memory management
they are not free.

Greetings,
Rafael
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-09-29 13:30    [W:0.040 / U:0.032 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site