Skip to content

Commit 5555b7c

Browse files
ofirbittogabbay
authored andcommitted
habanalabs: put devices before driver removal
Driver never puts its device and control_device objects, hence a memory leak is introduced every driver removal. Signed-off-by: Ofir Bitton <[email protected]> Reviewed-by: Oded Gabbay <[email protected]> Signed-off-by: Oded Gabbay <[email protected]>
1 parent c8c39fb commit 5555b7c

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

drivers/misc/habanalabs/common/device.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -231,16 +231,16 @@ static int device_cdev_sysfs_add(struct hl_device *hdev)
231231

232232
static void device_cdev_sysfs_del(struct hl_device *hdev)
233233
{
234-
/* device_release() won't be called so must free devices explicitly */
235-
if (!hdev->cdev_sysfs_created) {
236-
kfree(hdev->dev_ctrl);
237-
kfree(hdev->dev);
238-
return;
239-
}
234+
if (!hdev->cdev_sysfs_created)
235+
goto put_devices;
240236

241237
hl_sysfs_fini(hdev);
242238
cdev_device_del(&hdev->cdev_ctrl, hdev->dev_ctrl);
243239
cdev_device_del(&hdev->cdev, hdev->dev);
240+
241+
put_devices:
242+
put_device(hdev->dev);
243+
put_device(hdev->dev_ctrl);
244244
}
245245

246246
/*
@@ -1371,9 +1371,9 @@ int hl_device_init(struct hl_device *hdev, struct class *hclass)
13711371
early_fini:
13721372
device_early_fini(hdev);
13731373
free_dev_ctrl:
1374-
kfree(hdev->dev_ctrl);
1374+
put_device(hdev->dev_ctrl);
13751375
free_dev:
1376-
kfree(hdev->dev);
1376+
put_device(hdev->dev);
13771377
out_disabled:
13781378
hdev->disabled = true;
13791379
if (add_cdev_sysfs_on_err)

0 commit comments

Comments
 (0)