Skip to content

Commit c311f5e

Browse files
vcgomesvinodkoul
authored andcommitted
dmaengine: idxd: Fix freeing the allocated ida too late
It can happen that when the cdev .release() is called, the driver already called ida_destroy(). Move ida_free() to the _del() path. We see with DEBUG_KOBJECT_RELEASE enabled and forcing an early PCI unbind. Fixes: 04922b7 ("dmaengine: idxd: fix cdev setup and free device lifetime issues") Reviewed-by: Dave Jiang <dave.jiang@intel.com> Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@intel.com> Link: https://patch.msgid.link/20260121-idxd-fix-flr-on-kernel-queues-v3-v3-9-7ed70658a9d1@intel.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
1 parent d9cfb51 commit c311f5e

1 file changed

Lines changed: 4 additions & 4 deletions

File tree

drivers/dma/idxd/cdev.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -158,11 +158,7 @@ static const struct device_type idxd_cdev_file_type = {
158158
static void idxd_cdev_dev_release(struct device *dev)
159159
{
160160
struct idxd_cdev *idxd_cdev = dev_to_cdev(dev);
161-
struct idxd_cdev_context *cdev_ctx;
162-
struct idxd_wq *wq = idxd_cdev->wq;
163161

164-
cdev_ctx = &ictx[wq->idxd->data->type];
165-
ida_free(&cdev_ctx->minor_ida, idxd_cdev->minor);
166162
kfree(idxd_cdev);
167163
}
168164

@@ -582,11 +578,15 @@ int idxd_wq_add_cdev(struct idxd_wq *wq)
582578

583579
void idxd_wq_del_cdev(struct idxd_wq *wq)
584580
{
581+
struct idxd_cdev_context *cdev_ctx;
585582
struct idxd_cdev *idxd_cdev;
586583

587584
idxd_cdev = wq->idxd_cdev;
588585
wq->idxd_cdev = NULL;
589586
cdev_device_del(&idxd_cdev->cdev, cdev_dev(idxd_cdev));
587+
588+
cdev_ctx = &ictx[wq->idxd->data->type];
589+
ida_free(&cdev_ctx->minor_ida, idxd_cdev->minor);
590590
put_device(cdev_dev(idxd_cdev));
591591
}
592592

0 commit comments

Comments
 (0)