drm/qxl: add drm_driver.release callback.
Move final cleanups to qxl_drm_release() callback. Add drm_atomic_helper_shutdown() call to qxl_pci_remove(). Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20200210113753.5614-3-kraxel@redhat.com
This commit is contained in:
Родитель
c2874a1331
Коммит
23575e7afd
|
@ -34,6 +34,7 @@
|
|||
#include <linux/pci.h>
|
||||
|
||||
#include <drm/drm.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_drv.h>
|
||||
#include <drm/drm_file.h>
|
||||
#include <drm/drm_modeset_helper.h>
|
||||
|
@ -132,21 +133,30 @@ free_dev:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static void qxl_drm_release(struct drm_device *dev)
|
||||
{
|
||||
struct qxl_device *qdev = dev->dev_private;
|
||||
|
||||
/*
|
||||
* TODO: qxl_device_fini() call should be in qxl_pci_remove(),
|
||||
* reodering qxl_modeset_fini() + qxl_device_fini() calls is
|
||||
* non-trivial though.
|
||||
*/
|
||||
qxl_modeset_fini(qdev);
|
||||
qxl_device_fini(qdev);
|
||||
dev->dev_private = NULL;
|
||||
kfree(qdev);
|
||||
}
|
||||
|
||||
static void
|
||||
qxl_pci_remove(struct pci_dev *pdev)
|
||||
{
|
||||
struct drm_device *dev = pci_get_drvdata(pdev);
|
||||
struct qxl_device *qdev = dev->dev_private;
|
||||
|
||||
drm_dev_unregister(dev);
|
||||
|
||||
qxl_modeset_fini(qdev);
|
||||
qxl_device_fini(qdev);
|
||||
drm_atomic_helper_shutdown(dev);
|
||||
if (is_vga(pdev))
|
||||
vga_put(pdev, VGA_RSRC_LEGACY_IO);
|
||||
|
||||
dev->dev_private = NULL;
|
||||
kfree(qdev);
|
||||
drm_dev_put(dev);
|
||||
}
|
||||
|
||||
|
@ -279,6 +289,8 @@ static struct drm_driver qxl_driver = {
|
|||
.major = 0,
|
||||
.minor = 1,
|
||||
.patchlevel = 0,
|
||||
|
||||
.release = qxl_drm_release,
|
||||
};
|
||||
|
||||
static int __init qxl_init(void)
|
||||
|
|
Загрузка…
Ссылка в новой задаче