IB/mlx5: Fix function updating xlt emergency path
authorArtemy Kovalyov <artemyko@mellanox.com>
Wed, 5 Apr 2017 06:23:51 +0000 (09:23 +0300)
committerDoug Ledford <dledford@redhat.com>
Tue, 25 Apr 2017 19:40:28 +0000 (15:40 -0400)
In memory shortage path we fall back to use spare buffer.
mlx5_ib_update_xlt() called from ib_uverbs_reg_mr when ibmr.ucontext
not initialized yet.

Scenario how to test it:
1. trigger memory exhaustion so __get_free_pages(GFP_KERNEL, 4) will fail
2. register MR
3. there should be no kernel oops

Fixes: 7d0cc6edcc70 ('IB/mlx5: Add MR cache for large UMR regions')
Signed-off-by: Artemy Kovalyov <artemyko@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/mlx5/mr.c

index b8f9382a8b7dd72daf02b37804b912999dc500a1..1f09e11fa694d03ae35205ad9280020d621ff2fe 100644 (file)
@@ -1009,7 +1009,7 @@ int mlx5_ib_update_xlt(struct mlx5_ib_mr *mr, u64 idx, int npages,
        }
 
        if (!xlt) {
-               uctx = to_mucontext(mr->ibmr.uobject->context);
+               uctx = to_mucontext(mr->ibmr.pd->uobject->context);
                mlx5_ib_warn(dev, "Using XLT emergency buffer\n");
                size = PAGE_SIZE;
                xlt = (void *)uctx->upd_xlt_page;