dmaengine: idxd: Add missing cleanups in cleanup internals
authorShuai Xue <xueshuai@linux.alibaba.com>
Fri, 4 Apr 2025 12:02:13 +0000 (20:02 +0800)
committerVinod Koul <vkoul@kernel.org>
Wed, 14 May 2025 13:40:39 +0000 (14:40 +0100)
The idxd_cleanup_internals() function only decreases the reference count
of groups, engines, and wqs but is missing the step to release memory
resources.

To fix this, use the cleanup helper to properly release the memory
resources.

Fixes: ddf742d4f3f1 ("dmaengine: idxd: Add missing cleanup for early error out in probe call")
Cc: stable@vger.kernel.org
Signed-off-by: Shuai Xue <xueshuai@linux.alibaba.com>
Reviewed-by: Fenghua Yu <fenghuay@nvidia.com>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Link: https://lore.kernel.org/r/20250404120217.48772-6-xueshuai@linux.alibaba.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/idxd/init.c

index a40fb2fd500618bdfbb330e2b0f7edc5a7781865..f8129d2d53f1f135f19756ddd6cbb2cf2d3621a1 100644 (file)
@@ -407,14 +407,9 @@ static int idxd_setup_groups(struct idxd_device *idxd)
 
 static void idxd_cleanup_internals(struct idxd_device *idxd)
 {
-       int i;
-
-       for (i = 0; i < idxd->max_groups; i++)
-               put_device(group_confdev(idxd->groups[i]));
-       for (i = 0; i < idxd->max_engines; i++)
-               put_device(engine_confdev(idxd->engines[i]));
-       for (i = 0; i < idxd->max_wqs; i++)
-               put_device(wq_confdev(idxd->wqs[i]));
+       idxd_clean_groups(idxd);
+       idxd_clean_engines(idxd);
+       idxd_clean_wqs(idxd);
        destroy_workqueue(idxd->wq);
 }