IB/rdmavt: Move MR datastructures into rvt
This patch adds the MR datastructures based on hfi1 into rvt. For now the data structures are defined in include/rdma/rdma_vt.h but once all MR functionality has been moved from the drivers into rvt these should move to rdmavt/mr.h Reviewed-by: Ira Weiny <ira.weiny@intel.com> Reviewed-by: Dean Luick <dean.luick@intel.com> Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
8cf4020b2a
commit
b92a756803
|
@ -55,6 +55,56 @@
|
||||||
|
|
||||||
#include "ib_verbs.h"
|
#include "ib_verbs.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For Memory Regions. This stuff should probably be moved into rdmavt/mr.h once
|
||||||
|
* drivers no longer need access to the MR directly.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A segment is a linear region of low physical memory.
|
||||||
|
* Used by the verbs layer.
|
||||||
|
*/
|
||||||
|
struct rvt_seg {
|
||||||
|
void *vaddr;
|
||||||
|
size_t length;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* The number of rvt_segs that fit in a page. */
|
||||||
|
#define RVT_SEGSZ (PAGE_SIZE / sizeof(struct rvt_seg))
|
||||||
|
|
||||||
|
struct rvt_segarray {
|
||||||
|
struct rvt_seg segs[RVT_SEGSZ];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct rvt_mregion {
|
||||||
|
struct ib_pd *pd; /* shares refcnt of ibmr.pd */
|
||||||
|
u64 user_base; /* User's address for this region */
|
||||||
|
u64 iova; /* IB start address of this region */
|
||||||
|
size_t length;
|
||||||
|
u32 lkey;
|
||||||
|
u32 offset; /* offset (bytes) to start of region */
|
||||||
|
int access_flags;
|
||||||
|
u32 max_segs; /* number of rvt_segs in all the arrays */
|
||||||
|
u32 mapsz; /* size of the map array */
|
||||||
|
u8 page_shift; /* 0 - non unform/non powerof2 sizes */
|
||||||
|
u8 lkey_published; /* in global table */
|
||||||
|
struct completion comp; /* complete when refcount goes to zero */
|
||||||
|
atomic_t refcount;
|
||||||
|
struct rvt_segarray *map[0]; /* the segments */
|
||||||
|
};
|
||||||
|
|
||||||
|
#define RVT_MAX_LKEY_TABLE_BITS 23
|
||||||
|
|
||||||
|
struct rvt_lkey_table {
|
||||||
|
spinlock_t lock; /* protect changes in this struct */
|
||||||
|
u32 next; /* next unused index (speeds search) */
|
||||||
|
u32 gen; /* generation count */
|
||||||
|
u32 max; /* size of the table */
|
||||||
|
struct rvt_mregion __rcu **table;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* End Memmory Region */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Things that are driver specific, module parameters in hfi1 and qib
|
* Things that are driver specific, module parameters in hfi1 and qib
|
||||||
*/
|
*/
|
||||||
|
@ -119,6 +169,9 @@ struct rvt_dev_info {
|
||||||
/* Driver specific properties */
|
/* Driver specific properties */
|
||||||
struct rvt_driver_params dparms;
|
struct rvt_driver_params dparms;
|
||||||
|
|
||||||
|
struct rvt_mregion __rcu *dma_mr;
|
||||||
|
struct rvt_lkey_table lkey_table;
|
||||||
|
|
||||||
/* PKey Table goes here */
|
/* PKey Table goes here */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue