On Fri, 22 Aug 2025 at 18:39, Chenghai Huang <huangchenghai2@xxxxxxxxxx> wrote: > > From: Wenkai Lin <linwenkai6@xxxxxxxxxxxxx> > > If adding uacce cdev to the system fails, it could be due to two > reasons: either the device's devt exists when the failure occurs, > or the device_add operation fails. In the latter case, cdev_del > will be executed, but in the former case, it will not, leading to a > resource leak. Therefore, it is necessary to perform the cdev_del > action during abnormal exit. > > Fixes: 015d239ac014 ("uacce: add uacce driver") > Signed-off-by: Wenkai Lin <linwenkai6@xxxxxxxxxxxxx> > Signed-off-by: Chenghai Huang <huangchenghai2@xxxxxxxxxx> > --- > drivers/misc/uacce/uacce.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/misc/uacce/uacce.c b/drivers/misc/uacce/uacce.c > index 42e7d2a2a90c..3604f722ed60 100644 > --- a/drivers/misc/uacce/uacce.c > +++ b/drivers/misc/uacce/uacce.c > @@ -519,6 +519,8 @@ EXPORT_SYMBOL_GPL(uacce_alloc); > */ > int uacce_register(struct uacce_device *uacce) > { > + int ret; > + > if (!uacce) > return -ENODEV; > > @@ -529,7 +531,14 @@ int uacce_register(struct uacce_device *uacce) > uacce->cdev->ops = &uacce_fops; > uacce->cdev->owner = THIS_MODULE; > > - return cdev_device_add(uacce->cdev, &uacce->dev); > + ret = cdev_device_add(uacce->cdev, &uacce->dev); > + if (ret) { > + cdev_del(uacce->cdev); Can cdev_del be called multi-times? since cdev_device_add may call cdev_device_add itself. Does this introduce another issue? Not understand the case: "either the device's devt exists when the failure occurs," Looks it is cdev_device_add itself issue, or need add check if (uacce->dev.devt) cdev_del(uacce->cdev); how about other drivers' behavior. Thanks