aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Praveen Kumar Kannoju <praveen.kannoju@oracle.com> 2021-04-03 04:53:55 +0000
committerGravatar Jason Gunthorpe <jgg@nvidia.com> 2021-04-07 20:25:17 -0300
commit7e111bbff92620f56609a81353bba5bd1944851b (patch)
tree4ae135190e0f15f0192714f93282a7bb6d8e6370
parentIB/hfi1: Remove unused function (diff)
downloadlinux-7e111bbff92620f56609a81353bba5bd1944851b.tar.gz
linux-7e111bbff92620f56609a81353bba5bd1944851b.tar.bz2
linux-7e111bbff92620f56609a81353bba5bd1944851b.zip
IB/mlx5: Reduce max order of memory allocated for xlt update
To update xlt (during mlx5_ib_reg_user_mr()), the driver can request up to 1 MB (order-8) memory, depending on the size of the MR. This costly allocation can sometimes take very long to return (a few seconds). This causes the calling application to hang for a long time, especially when the system is fragmented. To avoid these long latency spikes, the calls the higher order allocations need to fail faster in case they are not available. In order to acheive this we need __GFP_NORETRY flag in the gfp_mask before during fetching the free pages. Allow the algorithm to automatically fall back to smaller page sizes. Link: https://lore.kernel.org/r/1617425635-35631-1-git-send-email-praveen.kannoju@oracle.com Signed-off-by: Praveen Kumar Kannoju <praveen.kannoju@oracle.com> Acked-by: Leon Romanovsky <leonro@nvidia.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
-rw-r--r--drivers/infiniband/hw/mlx5/mr.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/infiniband/hw/mlx5/mr.c b/drivers/infiniband/hw/mlx5/mr.c
index eeb9f7e15634..ab5bffb919d1 100644
--- a/drivers/infiniband/hw/mlx5/mr.c
+++ b/drivers/infiniband/hw/mlx5/mr.c
@@ -1004,7 +1004,7 @@ static void *mlx5_ib_alloc_xlt(size_t *nents, size_t ent_size, gfp_t gfp_mask)
*/
might_sleep();
- gfp_mask |= __GFP_ZERO;
+ gfp_mask |= __GFP_ZERO | __GFP_NORETRY;
/*
* If the system already has a suitable high order page then just use