aboutsummaryrefslogtreecommitdiff
path: root/sys/ofed/include/rdma/ib_umem.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/ofed/include/rdma/ib_umem.h')
-rw-r--r--sys/ofed/include/rdma/ib_umem.h75
1 files changed, 33 insertions, 42 deletions
diff --git a/sys/ofed/include/rdma/ib_umem.h b/sys/ofed/include/rdma/ib_umem.h
index a825111918ab..82f6cfaa5b7a 100644
--- a/sys/ofed/include/rdma/ib_umem.h
+++ b/sys/ofed/include/rdma/ib_umem.h
@@ -37,9 +37,26 @@
#include <linux/scatterlist.h>
#include <linux/workqueue.h>
#include <linux/dma-attrs.h>
+#include <linux/completion.h>
+#include <rdma/ib_peer_mem.h>
struct ib_ucontext;
-struct vm_area_struct;
+struct ib_umem;
+
+typedef void (*umem_invalidate_func_t)(void *invalidation_cookie,
+ struct ib_umem *umem,
+ unsigned long addr, size_t size);
+
+struct invalidation_ctx {
+ struct ib_umem *umem;
+ umem_invalidate_func_t func;
+ void *cookie;
+ unsigned long context_ticket;
+ int peer_callback;
+ int inflight_invalidation;
+ int peer_invalidated;
+ struct completion comp;
+};
struct ib_umem {
struct ib_ucontext *context;
@@ -48,55 +65,29 @@ struct ib_umem {
int page_size;
int writable;
int hugetlb;
- struct list_head chunk_list;
-#ifdef __linux__
struct work_struct work;
- struct mm_struct *mm;
-#else
- unsigned long start;
-#endif
unsigned long diff;
-};
-
-struct ib_cmem {
-
- struct ib_ucontext *context;
- size_t length;
- /* Link list of contiguous blocks being part of that cmem */
- struct list_head ib_cmem_block;
-
- /* Order of cmem block, 2^ block_order will equal number
- of physical pages per block
- */
- unsigned long block_order;
- /* Refernce counter for that memory area
- - When value became 0 pages will be returned to the kernel.
- */
- struct kref refcount;
-};
-
-
-struct ib_umem_chunk {
- struct list_head list;
- int nents;
+ unsigned long start;
+ struct sg_table sg_head;
int nmap;
- struct dma_attrs attrs;
- struct scatterlist page_list[0];
+ int npages;
+ /* peer memory that manages this umem*/
+ struct ib_peer_memory_client *ib_peer_mem;
+ struct invalidation_ctx *invalidation_ctx;
+ int peer_mem_srcu_key;
+ /* peer memory private context */
+ void *peer_mem_client_context;
};
struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
size_t size, int access, int dmasync);
+struct ib_umem *ib_umem_get_ex(struct ib_ucontext *context, unsigned long addr,
+ size_t size, int access, int dmasync,
+ int invalidation_supported);
+void ib_umem_activate_invalidation_notifier(struct ib_umem *umem,
+ umem_invalidate_func_t func,
+ void *cookie);
void ib_umem_release(struct ib_umem *umem);
int ib_umem_page_count(struct ib_umem *umem);
-int ib_cmem_map_contiguous_pages_to_vma(struct ib_cmem *ib_cmem,
- struct vm_area_struct *vma);
-struct ib_cmem *ib_cmem_alloc_contiguous_pages(struct ib_ucontext *context,
- unsigned long total_size,
- unsigned long page_size_order);
-void ib_cmem_release_contiguous_pages(struct ib_cmem *cmem);
-int ib_umem_map_to_vma(struct ib_umem *umem,
- struct vm_area_struct *vma);
-
-
#endif /* IB_UMEM_H */