IB/core: Add support for on demand paging regions
authorShachar Raindel <raindel@mellanox.com>
Thu, 11 Dec 2014 15:04:17 +0000 (17:04 +0200)
committerRoland Dreier <roland@purestorage.com>
Tue, 16 Dec 2014 02:13:36 +0000 (18:13 -0800)
commit8ada2c1c0c1d75a60723cd2ca7d49c594a146af6
treea80d10bb8cf4888a7f6313698a40980de5724b51
parent860f10a799c83e38a69d5a69d80da5312a4c4106
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>
drivers/infiniband/core/Makefile
drivers/infiniband/core/umem.c
drivers/infiniband/core/umem_odp.c [new file with mode: 0644]
drivers/infiniband/core/uverbs_cmd.c
drivers/infiniband/core/uverbs_main.c
include/rdma/ib_umem.h
include/rdma/ib_umem_odp.h [new file with mode: 0644]
include/rdma/ib_verbs.h