Justus Winter, on Sun 23 Oct 2016 11:31:10 +0200, wrote: > Previously, we used contiguous page directories four pages in length > when using PAE. To prevent physical memory fragmentation, we need to > use virtual memory for objects spanning multiple pages. Virtual > kernel memory, however, is a scarce commodity. > > * i386/intel/pmap.h (lin2pdenum): Never include the page directory pointer > table index. > (lin2pdenum_cont): New macro which does include said index. > (struct pmap): Remove the directory base pointer when using PAE. > * i386/intel/pmap.c (pmap_pde): Fix lookup. > (pmap_pte): Fix check for uninitialized pmap. > (pmap_bootstrap): Do not store the page directory base if PAE. > (pmap_init): Reduce size of page directories to one page, use > direct-mapped memory. > (pmap_create): Allocate four page directories per pmap. > (pmap_destroy): Adapt to the discontinuous directories. > (pmap_collect): Likewise. > * i386/i386/xen.h (hyp_mmu_update_la): Adapt code manipulating the > kernels page directory. > * i386/i386at/model_dep.c (i386at_init): Likewise.
It looks good to me. There is just > +#if PAE > + for (i = 0; i <= lin2pdpnum(LINEAR_MIN_KERNEL_ADDRESS); i++) { > + free_all = i < lin2pdpnum(LINEAR_MIN_KERNEL_ADDRESS); > + page_dir = (pt_entry_t *) ptetokv(p->pdpbase[i]); Which is nicer to read when reviewing, but for eventual code, I'd say indent the content of the loop, otherwise a quick glance won't catch that the whole body is inside the loop. Samuel