Эх сурвалжийг харах

IB/core: Make testing MR flags for writability a static inline function

Make the MR writability flags check, which is performed in umem.c,
a static inline function in file ib_verbs.h

This allows the function to be used by low-level infiniband drivers.

Cc: <stable@vger.kernel.org>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Jack Morgenstein 7 жил өмнө
parent
commit
08bb558ac1

+ 1 - 10
drivers/infiniband/core/umem.c

@@ -119,16 +119,7 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
 	umem->length     = size;
 	umem->length     = size;
 	umem->address    = addr;
 	umem->address    = addr;
 	umem->page_shift = PAGE_SHIFT;
 	umem->page_shift = PAGE_SHIFT;
-	/*
-	 * We ask for writable memory if any of the following
-	 * access flags are set.  "Local write" and "remote write"
-	 * obviously require write access.  "Remote atomic" can do
-	 * things like fetch and add, which will modify memory, and
-	 * "MW bind" can change permissions by binding a window.
-	 */
-	umem->writable  = !!(access &
-		(IB_ACCESS_LOCAL_WRITE   | IB_ACCESS_REMOTE_WRITE |
-		 IB_ACCESS_REMOTE_ATOMIC | IB_ACCESS_MW_BIND));
+	umem->writable   = ib_access_writable(access);
 
 
 	if (access & IB_ACCESS_ON_DEMAND) {
 	if (access & IB_ACCESS_ON_DEMAND) {
 		ret = ib_umem_odp_get(context, umem, access);
 		ret = ib_umem_odp_get(context, umem, access);

+ 14 - 0
include/rdma/ib_verbs.h

@@ -3734,6 +3734,20 @@ static inline int ib_check_mr_access(int flags)
 	return 0;
 	return 0;
 }
 }
 
 
+static inline bool ib_access_writable(int access_flags)
+{
+	/*
+	 * We have writable memory backing the MR if any of the following
+	 * access flags are set.  "Local write" and "remote write" obviously
+	 * require write access.  "Remote atomic" can do things like fetch and
+	 * add, which will modify memory, and "MW bind" can change permissions
+	 * by binding a window.
+	 */
+	return access_flags &
+		(IB_ACCESS_LOCAL_WRITE   | IB_ACCESS_REMOTE_WRITE |
+		 IB_ACCESS_REMOTE_ATOMIC | IB_ACCESS_MW_BIND);
+}
+
 /**
 /**
  * ib_check_mr_status: lightweight check of MR status.
  * ib_check_mr_status: lightweight check of MR status.
  *     This routine may provide status checks on a selected
  *     This routine may provide status checks on a selected