Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1160980 > unrolled thread
| Started by | David Gibson <david@gibson.dropbear.id.au> |
|---|---|
| First post | 2015-06-09 07:00 +0200 |
| Last post | 2015-06-09 07:00 +0200 |
| Articles | 1 — 1 participant |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
Re: [PATCH kernel v12 32/34] powerpc/mmu: Add userspace-to-physical addresses translation cache David Gibson <david@gibson.dropbear.id.au> - 2015-06-09 07:00 +0200
| From | David Gibson <david@gibson.dropbear.id.au> |
|---|---|
| Date | 2015-06-09 07:00 +0200 |
| Subject | Re: [PATCH kernel v12 32/34] powerpc/mmu: Add userspace-to-physical addresses translation cache |
| Message-ID | <pzjNM-4t5-13@gated-at.bofh.it> |
[Multipart message — attachments visible in raw view] — view raw
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
Back to top | Article view | linux.kernel
csiph-web