lkml.org 
[lkml]   [2015]   [Jun]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH kernel v12 32/34] powerpc/mmu: Add userspace-to-physical addresses translation cache
    On Fri, Jun 05, 2015 at 04:35:24PM +1000, Alexey Kardashevskiy wrote:
    > We are adding support for DMA memory pre-registration to be used in
    > conjunction with VFIO. The idea is that the userspace which is going to
    > run a guest may want to pre-register a user space memory region so
    > it all gets pinned once and never goes away. Having this done,
    > a hypervisor will not have to pin/unpin pages on every DMA map/unmap
    > request. This is going to help with multiple pinning of the same memory.
    >
    > Another use of it is in-kernel real mode (mmu off) acceleration of
    > DMA requests where real time translation of guest physical to host
    > physical addresses is non-trivial and may fail as linux ptes may be
    > temporarily invalid. Also, having cached host physical addresses
    > (compared to just pinning at the start and then walking the page table
    > again on every H_PUT_TCE), we can be sure that the addresses which we put
    > into TCE table are the ones we already pinned.
    >
    > This adds a list of memory regions to mm_context_t. Each region consists
    > of a header and a list of physical addresses. This adds API to:
    > 1. register/unregister memory regions;
    > 2. do final cleanup (which puts all pre-registered pages);
    > 3. do userspace to physical address translation;
    > 4. manage usage counters; multiple registration of the same memory
    > is allowed (once per container).
    >
    > This implements 2 counters per registered memory region:
    > - @mapped: incremented on every DMA mapping; decremented on unmapping;
    > initialized to 1 when a region is just registered; once it becomes zero,
    > no more mappings allowe;
    > - @used: incremented on every "register" ioctl; decremented on
    > "unregister"; unregistration is allowed for DMA mapped regions unless
    > it is the very last reference. For the very last reference this checks
    > that the region is still mapped and returns -EBUSY so the userspace
    > gets to know that memory is still pinned and unregistration needs to
    > be retried; @used remains 1.
    >
    > Host physical addresses are stored in vmalloc'ed array. In order to
    > access these in the real mode (mmu off), there is a real_vmalloc_addr()
    > helper. In-kernel acceleration patchset will move it from KVM to MMU code.
    >
    > Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>

    Reviewed-by: David Gibson <david@gibson.dropbear.id.au>

    --
    David Gibson | I'll have my music baroque, and my code
    david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
    | _way_ _around_!
    http://www.ozlabs.org/~dgibson
    [unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2015-06-09 07:21    [W:4.289 / U:0.144 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site