On 08/16/2010 04:39 PM, Eric W. Biederman wrote: > > "H. Peter Anvin" <hpa at zytor.com> writes: >> "huang ying" <huang.ying.caritas at gmail.com> wrote: >> >>> On Mon, Aug 16, 2010 at 11:27 AM, H. Peter Anvin <hpa at zytor.com> wrote: >>>> No, it should not be dynamic; rather we should unify all the users >>>> who need a 1:1 map and just keep that page table set around. > > We still want to restore cr3 from the local task structure as soon > as is reasonable, as an identity mapped page table will have page 0 > mapped and thus hide null pointer dereferences. > Absolutely! >>> Agree. One known issue of global 1:1 map is that we need to make at >>> least part of page table PAGE_KERNEL_EXEC for EFI runtime code, and >>> change_page_attr can not be used before page allocator is available. > >> For the 1:1 map we probably should make all pages executable; other >> things need it too, but we shouldn't have it mapped in except when >> needed. > > We need to be careful in the setup of the global page table so that > we are in sync with the pat structure for the attributes pages > are mapped so that we don't map a page as cached and uncached > at the same time. Otherwise we could accidentally get cache > corruption. To do that would seem to mean change_page_attr > is relevant at least after we switch from our default set of > page permissions. Quite, which is yet another reason to have a common global page table for all the 1:1 users... right now this is all ad hoc. -hpa