]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm/vmwgfx: Call vmw_driver_{load,unload}() before registering device
authorThomas Zimmermann <tzimmermann@suse.de>
Tue, 10 Dec 2019 12:43:22 +0000 (13:43 +0100)
committerThomas Hellstrom <thellstrom@vmware.com>
Wed, 15 Jan 2020 10:46:58 +0000 (11:46 +0100)
The load/unload callbacks in struct drm_driver are deprecated. Remove
them and call functions explicitly.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
drivers/gpu/drm/vmwgfx/vmwgfx_drv.c

index e962048f65d20f2618923ecea8ec905952226fb1..dc3d04f00683bb959fefad0af380377f45b84682 100644 (file)
 #include <linux/console.h>
 #include <linux/dma-mapping.h>
 #include <linux/module.h>
+#include <linux/pci.h>
 
 #include <drm/drm_drv.h>
 #include <drm/drm_ioctl.h>
-#include <drm/drm_pci.h>
 #include <drm/drm_sysfs.h>
 #include <drm/ttm/ttm_bo_driver.h>
 #include <drm/ttm/ttm_module.h>
@@ -1211,8 +1211,10 @@ static void vmw_remove(struct pci_dev *pdev)
 {
        struct drm_device *dev = pci_get_drvdata(pdev);
 
+       drm_dev_unregister(dev);
+       vmw_driver_unload(dev);
+       drm_dev_put(dev);
        pci_disable_device(pdev);
-       drm_put_dev(dev);
 }
 
 static int vmwgfx_pm_notifier(struct notifier_block *nb, unsigned long val,
@@ -1391,8 +1393,6 @@ static const struct file_operations vmwgfx_driver_fops = {
 static struct drm_driver driver = {
        .driver_features =
        DRIVER_MODESET | DRIVER_RENDER | DRIVER_ATOMIC,
-       .load = vmw_driver_load,
-       .unload = vmw_driver_unload,
        .get_vblank_counter = vmw_get_vblank_counter,
        .enable_vblank = vmw_enable_vblank,
        .disable_vblank = vmw_disable_vblank,
@@ -1431,7 +1431,39 @@ static struct pci_driver vmw_pci_driver = {
 
 static int vmw_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
-       return drm_get_pci_dev(pdev, ent, &driver);
+       struct drm_device *dev;
+       int ret;
+
+       ret = pci_enable_device(pdev);
+       if (ret)
+               return ret;
+
+       dev = drm_dev_alloc(&driver, &pdev->dev);
+       if (IS_ERR(dev)) {
+               ret = PTR_ERR(dev);
+               goto err_pci_disable_device;
+       }
+
+       dev->pdev = pdev;
+       pci_set_drvdata(pdev, dev);
+
+       ret = vmw_driver_load(dev, ent->driver_data);
+       if (ret)
+               goto err_drm_dev_put;
+
+       ret = drm_dev_register(dev, ent->driver_data);
+       if (ret)
+               goto err_vmw_driver_unload;
+
+       return 0;
+
+err_vmw_driver_unload:
+       vmw_driver_unload(dev);
+err_drm_dev_put:
+       drm_dev_put(dev);
+err_pci_disable_device:
+       pci_disable_device(pdev);
+       return ret;
 }
 
 static int __init vmwgfx_init(void)