]> git.ipfire.org Git - thirdparty/linux.git/commit
RDMA/core: Add driver APIs pre_destroy_cq() and post_destroy_cq()
authorMark Zhang <markzhang@nvidia.com>
Mon, 16 Jun 2025 08:26:20 +0000 (11:26 +0300)
committerLeon Romanovsky <leon@kernel.org>
Wed, 25 Jun 2025 07:49:51 +0000 (03:49 -0400)
commit5a2a5b65d5d67279be9e1f0e4b9baf39ee594cb1
tree3334eb2c15b3ed583ea3c2ff02626fa66c91a218
parentc036993721a3773f918d9a34bd706f72dc1628bf
RDMA/core: Add driver APIs pre_destroy_cq() and post_destroy_cq()

Currently in ib_free_cq, it disables IRQ or cancel the CQ work before
driver destroy_cq. This isn't good as a new IRQ or a CQ work can be
submitted immediately after disabling IRQ or canceling CQ work, which
may run concurrently with destroy_cq and cause crashes.
The right flow should be:
 1. Driver disables CQ to make sure no new CQ event will be submitted;
 2. Disables IRQ or Cancels CQ work in core layer, to make sure no CQ
    polling work is running;
 3. Free all resources to destroy the CQ.

This patch adds 2 driver APIs:
- pre_destroy_cq(): Disable a CQ to prevent it from generating any new
  work completions, but not free any kernel resources;
- post_destroy_cq(): Free all kernel resources.

In ib_free_cq, the IRQ is disabled or CQ work is canceled after
pre_destroy_cq, and before post_destroy_cq.

Fixes: 14d3a3b2498e ("IB: add a proper completion queue abstraction")
Signed-off-by: Mark Zhang <markzhang@nvidia.com>
Link: https://patch.msgid.link/b5f7ae3d75f44a3e15ff3f4eb2bbdea13e06b97f.1750062328.git.leon@kernel.org
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/core/cq.c
drivers/infiniband/core/device.c
include/rdma/ib_verbs.h