IB/core: Make testing MR flags for writability a static inline function
authorJack Morgenstein <jackm@dev.mellanox.co.il>
Wed, 23 May 2018 12:30:30 +0000 (15:30 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 3 Jul 2018 09:24:53 +0000 (11:24 +0200)
commit 08bb558ac11ab944e0539e78619d7b4c356278bd upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/infiniband/core/umem.c
include/rdma/ib_verbs.h

index 2b6c9b5..d76455e 100644 (file)
@@ -119,16 +119,7 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
        umem->length     = size;
        umem->address    = addr;
        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) {
                ret = ib_umem_odp_get(context, umem, access);
index 08f3d86..5a24b4c 100644 (file)
@@ -3558,6 +3558,20 @@ static inline int ib_check_mr_access(int flags)
        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.
  *     This routine may provide status checks on a selected