diff options
author | Shachar Raindel <raindel@mellanox.com> | 2014-12-11 16:04:17 +0100 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2014-12-16 03:13:36 +0100 |
commit | 8ada2c1c0c1d75a60723cd2ca7d49c594a146af6 (patch) | |
tree | a80d10bb8cf4888a7f6313698a40980de5724b51 /include/rdma/ib_umem.h | |
parent | IB/core: Add flags for on demand paging support (diff) | |
download | linux-8ada2c1c0c1d75a60723cd2ca7d49c594a146af6.tar.xz linux-8ada2c1c0c1d75a60723cd2ca7d49c594a146af6.zip |
IB/core: Add support for on demand paging regions
* Extend the umem struct to keep the ODP related data.
* Allocate and initialize the ODP related information in the umem
(page_list, dma_list) and freeing as needed in the end of the run.
* Store a reference to the process PID struct in the ucontext. Used to
safely obtain the task_struct and the mm during fault handling,
without preventing the task destruction if needed.
* Add 2 helper functions: ib_umem_odp_map_dma_pages and
ib_umem_odp_unmap_dma_pages. These functions get the DMA addresses
of specific pages of the umem (and, currently, pin them).
* Support for page faults only - IB core will keep the reference on
the pages used and call put_page when freeing an ODP umem
area. Invalidations support will be added in a later patch.
Signed-off-by: Sagi Grimberg <sagig@mellanox.com>
Signed-off-by: Shachar Raindel <raindel@mellanox.com>
Signed-off-by: Haggai Eran <haggaie@mellanox.com>
Signed-off-by: Majd Dibbiny <majd@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'include/rdma/ib_umem.h')
-rw-r--r-- | include/rdma/ib_umem.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/include/rdma/ib_umem.h b/include/rdma/ib_umem.h index a51f4091489a..2d83cfd7e6ce 100644 --- a/include/rdma/ib_umem.h +++ b/include/rdma/ib_umem.h @@ -38,6 +38,7 @@ #include <linux/workqueue.h> struct ib_ucontext; +struct ib_umem_odp; struct ib_umem { struct ib_ucontext *context; @@ -50,6 +51,7 @@ struct ib_umem { struct pid *pid; struct mm_struct *mm; unsigned long diff; + struct ib_umem_odp *odp_data; struct sg_table sg_head; int nmap; int npages; |