]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/5.0.8/ib-mlx5-reset-access-mask-when-looping-inside-page-fault-handler.patch
Linux 4.19.35
[thirdparty/kernel/stable-queue.git] / releases / 5.0.8 / ib-mlx5-reset-access-mask-when-looping-inside-page-fault-handler.patch
1 From 1abe186ed8a6593069bc122da55fc684383fdc1c Mon Sep 17 00:00:00 2001
2 From: Moni Shoua <monis@mellanox.com>
3 Date: Tue, 19 Mar 2019 11:24:36 +0200
4 Subject: IB/mlx5: Reset access mask when looping inside page fault handler
5
6 From: Moni Shoua <monis@mellanox.com>
7
8 commit 1abe186ed8a6593069bc122da55fc684383fdc1c upstream.
9
10 If page-fault handler spans multiple MRs then the access mask needs to
11 be reset before each MR handling or otherwise write access will be
12 granted to mapped pages instead of read-only.
13
14 Cc: <stable@vger.kernel.org> # 3.19
15 Fixes: 7bdf65d411c1 ("IB/mlx5: Handle page faults")
16 Reported-by: Jerome Glisse <jglisse@redhat.com>
17 Signed-off-by: Moni Shoua <monis@mellanox.com>
18 Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
19 Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
20 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
21
22 ---
23 drivers/infiniband/hw/mlx5/odp.c | 3 ++-
24 1 file changed, 2 insertions(+), 1 deletion(-)
25
26 --- a/drivers/infiniband/hw/mlx5/odp.c
27 +++ b/drivers/infiniband/hw/mlx5/odp.c
28 @@ -560,7 +560,7 @@ static int pagefault_mr(struct mlx5_ib_d
29 struct ib_umem_odp *odp_mr = to_ib_umem_odp(mr->umem);
30 bool downgrade = flags & MLX5_PF_FLAGS_DOWNGRADE;
31 bool prefetch = flags & MLX5_PF_FLAGS_PREFETCH;
32 - u64 access_mask = ODP_READ_ALLOWED_BIT;
33 + u64 access_mask;
34 u64 start_idx, page_mask;
35 struct ib_umem_odp *odp;
36 size_t size;
37 @@ -582,6 +582,7 @@ next_mr:
38 page_shift = mr->umem->page_shift;
39 page_mask = ~(BIT(page_shift) - 1);
40 start_idx = (io_virt - (mr->mmkey.iova & page_mask)) >> page_shift;
41 + access_mask = ODP_READ_ALLOWED_BIT;
42
43 if (prefetch && !downgrade && !mr->umem->writable) {
44 /* prefetch with write-access must