summaryrefslogtreecommitdiff
path: root/drivers/infiniband/sw/rxe/rxe_verbs.h
diff options
context:
space:
mode:
authorBob Pearson <rpearsonhpe@gmail.com>2021-06-08 07:25:51 +0300
committerJason Gunthorpe <jgg@nvidia.com>2021-06-17 02:51:18 +0300
commit3902b429ca14f325123057f3e5cafe8d45d00263 (patch)
treeaeeae38e66025b434f960aa854b233118c0fd46c /drivers/infiniband/sw/rxe/rxe_verbs.h
parent32a577b4c3a9d0b5d3e47ac47ffd50774a04f82a (diff)
downloadlinux-3902b429ca14f325123057f3e5cafe8d45d00263.tar.xz
RDMA/rxe: Implement invalidate MW operations
Implement invalidate MW and cleaned up invalidate MR operations. Added code to perform remote invalidate for send with invalidate. Added code to perform local invalidation. Deleted some blank lines in rxe_loc.h. Link: https://lore.kernel.org/r/20210608042552.33275-9-rpearsonhpe@gmail.com Signed-off-by: Bob Pearson <rpearsonhpe@gmail.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Diffstat (limited to 'drivers/infiniband/sw/rxe/rxe_verbs.h')
-rw-r--r--drivers/infiniband/sw/rxe/rxe_verbs.h33
1 files changed, 25 insertions, 8 deletions
diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.h b/drivers/infiniband/sw/rxe/rxe_verbs.h
index 3d0ab8b7804f..47399bf7517e 100644
--- a/drivers/infiniband/sw/rxe/rxe_verbs.h
+++ b/drivers/infiniband/sw/rxe/rxe_verbs.h
@@ -278,6 +278,16 @@ enum rxe_mr_type {
RXE_MR_TYPE_MR,
};
+enum rxe_mr_copy_dir {
+ RXE_TO_MR_OBJ,
+ RXE_FROM_MR_OBJ,
+};
+
+enum rxe_mr_lookup_type {
+ RXE_LOOKUP_LOCAL,
+ RXE_LOOKUP_REMOTE,
+};
+
#define RXE_BUF_PER_MAP (PAGE_SIZE / sizeof(struct rxe_phys_buf))
struct rxe_phys_buf {
@@ -289,6 +299,13 @@ struct rxe_map {
struct rxe_phys_buf buf[RXE_BUF_PER_MAP];
};
+static inline int rkey_is_mw(u32 rkey)
+{
+ u32 index = rkey >> 8;
+
+ return (index >= RXE_MIN_MW_INDEX) && (index <= RXE_MAX_MW_INDEX);
+}
+
struct rxe_mr {
struct rxe_pool_entry pelem;
struct ib_mr ibmr;
@@ -314,23 +331,23 @@ struct rxe_mr {
u32 max_buf;
u32 num_map;
- struct rxe_map **map;
-
atomic_t num_mw;
+
+ struct rxe_map **map;
};
enum rxe_mw_state {
- RXE_MW_STATE_INVALID = RXE_MR_STATE_INVALID,
- RXE_MW_STATE_FREE = RXE_MR_STATE_FREE,
- RXE_MW_STATE_VALID = RXE_MR_STATE_VALID,
+ RXE_MW_STATE_INVALID = RXE_MR_STATE_INVALID,
+ RXE_MW_STATE_FREE = RXE_MR_STATE_FREE,
+ RXE_MW_STATE_VALID = RXE_MR_STATE_VALID,
};
struct rxe_mw {
- struct ib_mw ibmw;
- struct rxe_pool_entry pelem;
+ struct ib_mw ibmw;
+ struct rxe_pool_entry pelem;
spinlock_t lock;
enum rxe_mw_state state;
- struct rxe_qp *qp; /* Type 2 only */
+ struct rxe_qp *qp; /* Type 2 only */
struct rxe_mr *mr;
int access;
u64 addr;