• Jeremy Fitzhardinge's avatar
    [PATCH] i386: PARAVIRT: Allow paravirt backend to choose kernel PMD sharing · 5311ab62
    Jeremy Fitzhardinge authored
    Normally when running in PAE mode, the 4th PMD maps the kernel address space,
    which can be shared among all processes (since they all need the same kernel
    mappings).
    
    Xen, however, does not allow guests to have the kernel pmd shared between page
    tables, so parameterize pgtable.c to allow both modes of operation.
    
    There are several side-effects of this.  One is that vmalloc will update the
    kernel address space mappings, and those updates need to be propagated into
    all processes if the kernel mappings are not intrinsically shared.  In the
    non-PAE case, this is done by maintaining a pgd_list of all processes; this
    list is used when all process pagetables must be updated.  pgd_list is
    threaded via otherwise unused entries in the page structure for the pgd, which
    means that the pgd must be page-sized for this to work.
    
    Normally the PAE pgd is only 4x64 byte entries large, but Xen requires the PAE
    pgd to page aligned anyway, so this patch forces the pgd to be page
    aligned+sized when the kernel pmd is unshared, to accomodate both these
    requirements.
    
    Also, since there may be several distinct kernel pmds (if the user/kernel
    split is below 3G), there's no point in allocating them from a slab cache;
    they're just allocated with get_free_page and initialized appropriately.  (Of
    course the could be cached if there is just a single kernel pmd - which is the
    default with a 3G user/kernel split - but it doesn't seem worthwhile to add
    yet another case into this code).
    
    [ Many thanks to wli for review comments. ]
    Signed-off-by: default avatarJeremy Fitzhardinge <jeremy@xensource.com>
    Signed-off-by: default avatarWilliam Lee Irwin III <wli@holomorphy.com>
    Signed-off-by: default avatarAndi Kleen <ak@suse.de>
    Cc: Zachary Amsden <zach@vmware.com>
    Cc: Christoph Lameter <clameter@sgi.com>
    Acked-by: default avatarIngo Molnar <mingo@elte.hu>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    5311ab62
paravirt.h 17.4 KB