]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
RDMA/mlx4: Restrict external umem for CQ when copy_to_user() is used
authorLeon Romanovsky <leonro@nvidia.com>
Wed, 25 Mar 2026 18:16:03 +0000 (20:16 +0200)
committerLeon Romanovsky <leon@kernel.org>
Mon, 30 Mar 2026 17:47:45 +0000 (13:47 -0400)
When the mlx4 firmware reports the MLX4_DEV_CAP_FLAG2_SW_CQ_INIT capability,
libmlx4 from the rdma-core package expects the driver to initialize memory
at the address provided in the buf_addr parameter of ucmd.

This behavior cannot be supported by any external umem implementation, so
restrict it accordingly.

Fixes: f45f195af521 ("RDMA/mlx4: Introduce a modern CQ creation interface")
Reported-by: Jiri Pirko <jiri@nvidia.com>
Link: https://patch.msgid.link/20260325-fix-mlx4-external-umem-v1-1-1c7c0e779329@nvidia.com
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
drivers/infiniband/hw/mlx4/cq.c

index b391883aa400462439a4f56ba253478d3753463c..6fef3f1724eb9015b71e93d666f8dedae7272fba 100644 (file)
@@ -173,6 +173,10 @@ int mlx4_ib_create_user_cq(struct ib_cq *ibcq,
                goto err_cq;
        }
 
+       if (ibcq->umem &&
+           (dev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_SW_CQ_INIT))
+               return -EOPNOTSUPP;
+
        buf_addr = (void *)(unsigned long)ucmd.buf_addr;
 
        if (!ibcq->umem)