lkml.org 
[lkml]   [2011]   [Sep]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [Xen-devel] Re: [PATCH 0/6] xen: don't call vmalloc_sync_all() when mapping foreign pages
    On 09/22/2011 04:06 AM, Stefano Stabellini wrote:
    > On Wed, 21 Sep 2011, Jeremy Fitzhardinge wrote:
    >> On 09/21/2011 03:42 AM, Stefano Stabellini wrote:
    >>> On Thu, 15 Sep 2011, Jeremy Fitzhardinge wrote:
    >>>> This series is relying on regular ram mappings are already synced to all
    >>>> tasks, but I'm not sure that's necessarily guaranteed (for example, if
    >>>> you hotplug new memory into the domain, the new pages won't be mapped
    >>>> into every mm unless they're synced).
    >>> the series is using GFP_KERNEL, so this problem shouldn't occur, right?
    >> What properties do you think GFP_KERNEL guarantees?
    > That the memory is below 4G and always mapped in the kernel 1:1 region.

    Hm, but that's not quite the same thing as "mapped into every
    pagetable". Lowmem pages always have a kernel virtual address, and its
    always OK to touch them at any point in kernel code[*] because one can
    rely on the fault handler to create mappings as needed - but that
    doesn't mean they're necessarily mapped by present ptes in the current
    pagetable.

    [*] - except NMI handlers

    > Regarding memory hotplug it looks like that x86_32 is mapping new memory
    > ZONE_HIGHMEM, therefore avoiding any problems with GFP_KERNEL allocations.
    > On the other hand x86_64 is mapping the memory ZONE_NORMAL and calling
    > init_memory_mapping on the new range right away. AFAICT changes to
    > the 1:1 mapping in init_mm are automatically synced across all mm's
    > because the pgd is shared?

    TBH I'm not sure. vmalloc_sync_one/all does seem to do *something* on
    64-bit, but I was never completely sure what regions of the address
    space were already shared. I *think* it might be that the pgd and pud
    are not shared, but the pmd down is, so if you add a new pmd you need to
    sync it into all the puds (and puds into pgds if you add a new one of
    those).

    But I'd be happier pretending that vmalloc_sync_* just doesn't exist,
    and deal with it at the hypercall level - in the short term, by just
    making sure that the callers touch all those pages before passing them
    into the hypercall.

    J


    \
     
     \ /
      Last update: 2011-09-22 23:23    [W:0.049 / U:60.336 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site