Re: [PATCH] x86: Construct 32 bit boot time page tables in native format.

H. Peter Anvin
2008-01-28T19:56:19Z

Pavel Machek wrote:
> Hi!
>
>>>> /*
>>>> * Swap suspend & friends need this for resume because things like the intel-agp
>>>> * driver might have split up a kernel 4MB mapping.
>>>> */
>>>> -char __nosavedata swsusp_pg_dir[PAGE_SIZE]
>>>> +char swsusp_pg_dir[PAGE_SIZE]
>>> thanks, applied.
>
> Sorry, this is subtle and I've overlooked it before.
>
> (I thought you were only changing ifdef).
>
> Now you memcpy() over pg_dir when that pgdir is in use during swsusp
> resume. Granted, you memcpy() with same data that already are there,
> but it may still do some funny effects.
>
> Hmm, but same argument applies to lower levels of paging in 64-bit and
> PAE cases, and we still do that memcpy-over-active-pagetables there...
> :-(.
>

This really comes down to the concept that we should keep an
identity-mapped page table set around and keep it maintained.
Maintenance should be relatively cheap -- we don't care about the
vmalloc area (but if it's easier to have it, it won't cause any harm),
and we already have to have code to synchronize the PGDs on !PAE and the
PMDs on Xen (although that was supposedly getting fixed). This is
nothing very different than synchronizing yet another PGD[*] offset.

This obviously relates to (and needs to be on top of) the
always-native-pagetables work.

[*] = Almost. There is one exception: for 3 GB kernel:1 GB userspace,
we must ensure that only 1 GB of the kernel area is synced.

-hpa