4.17-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Jack Morgenstein <ja...@dev.mellanox.co.il>

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: <sta...@vger.kernel.org>
Signed-off-by: Jason Gunthorpe <j...@mellanox.com>
Signed-off-by: Jack Morgenstein <ja...@dev.mellanox.co.il>
Signed-off-by: Leon Romanovsky <leo...@mellanox.com>
Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>

---
 drivers/infiniband/core/umem.c |   11 +----------
 include/rdma/ib_verbs.h        |   14 ++++++++++++++
 2 files changed, 15 insertions(+), 10 deletions(-)

--- a/drivers/infiniband/core/umem.c
+++ b/drivers/infiniband/core/umem.c
@@ -119,16 +119,7 @@ struct ib_umem *ib_umem_get(struct ib_uc
        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);
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -3734,6 +3734,20 @@ static inline int ib_check_mr_access(int
        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


Reply via email to