On 3/8/25 11:20 PM, Shuai Xue wrote: > 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@xxxxxxxxxxxxxxx > Signed-off-by: Shuai Xue <xueshuai@xxxxxxxxxxxxxxxxx> Reviewed-by: Dave Jiang <dave.jiang@xxxxxxxxx> > --- > drivers/dma/idxd/init.c | 11 +++-------- > 1 file changed, 3 insertions(+), 8 deletions(-) > > diff --git a/drivers/dma/idxd/init.c b/drivers/dma/idxd/init.c > index 7334085939dc..cf5dc981be32 100644 > --- a/drivers/dma/idxd/init.c > +++ b/drivers/dma/idxd/init.c > @@ -408,14 +408,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); > } >