Re: [discuss] Re: [PATCH][Fix][Resend] Fix Bug #4959: Page tables corrupted during resume on x86-64 (take 3)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]
  Powered by Linux