Merge tag 'misc-habanalabs-fixes-2020-11-30' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/ogabbay/linux into char-misc-linus

Oded writes:

This tag contains two bug fixes for v5.10-rc7:

- Memory leak every time a user closes the file-descriptor of the device.
The driver didn't always free all the VA range structures it maintains
per user.

- Memory leak every time the driver was removed. The device structure was
not "put" at the device's teardown function in the driver.

* tag 'misc-habanalabs-fixes-2020-11-30' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/ogabbay/linux:
habanalabs: put devices before driver removal
habanalabs: free host huge va_range if not used

Changed files
+9 -8
drivers
misc
habanalabs
+8 -8
drivers/misc/habanalabs/common/device.c
··· 231 231 232 232 static void device_cdev_sysfs_del(struct hl_device *hdev) 233 233 { 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; 240 236 241 237 hl_sysfs_fini(hdev); 242 238 cdev_device_del(&hdev->cdev_ctrl, hdev->dev_ctrl); 243 239 cdev_device_del(&hdev->cdev, hdev->dev); 240 + 241 + put_devices: 242 + put_device(hdev->dev); 243 + put_device(hdev->dev_ctrl); 244 244 } 245 245 246 246 /* ··· 1371 1371 early_fini: 1372 1372 device_early_fini(hdev); 1373 1373 free_dev_ctrl: 1374 - kfree(hdev->dev_ctrl); 1374 + put_device(hdev->dev_ctrl); 1375 1375 free_dev: 1376 - kfree(hdev->dev); 1376 + put_device(hdev->dev); 1377 1377 out_disabled: 1378 1378 hdev->disabled = true; 1379 1379 if (add_cdev_sysfs_on_err)
+1
drivers/misc/habanalabs/common/memory.c
··· 1626 1626 goto host_hpage_range_err; 1627 1627 } 1628 1628 } else { 1629 + kfree(ctx->host_huge_va_range); 1629 1630 ctx->host_huge_va_range = ctx->host_va_range; 1630 1631 } 1631 1632