| From 08bb558ac11ab944e0539e78619d7b4c356278bd Mon Sep 17 00:00:00 2001 |
| From: Jack Morgenstein <jackm@dev.mellanox.co.il> |
| Date: Wed, 23 May 2018 15:30:30 +0300 |
| Subject: IB/core: Make testing MR flags for writability a static inline function |
| |
| From: Jack Morgenstein <jackm@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: <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: Sudip Mukherjee <sudipm.mukherjee@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@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 |
| @@ -122,16 +122,7 @@ struct ib_umem *ib_umem_get(struct ib_uc |
| umem->address = addr; |
| umem->page_size = PAGE_SIZE; |
| umem->pid = get_task_pid(current, PIDTYPE_PID); |
| - /* |
| - * 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) { |
| put_pid(umem->pid); |
| --- a/include/rdma/ib_verbs.h |
| +++ b/include/rdma/ib_verbs.h |
| @@ -3308,6 +3308,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 |