Skip to content

Commit

Permalink
drm/qxl: add drm_driver.release callback.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Gerd Hoffmann committed Feb 11, 2020
1 parent c2874a1 commit 23575e7
Showing 1 changed file with 19 additions and 7 deletions.
26 changes: 19 additions & 7 deletions drivers/gpu/drm/qxl/qxl_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -132,21 +133,30 @@ qxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
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);
}

Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit 23575e7

Please sign in to comment.