drm: qxl: Embed drm_device into driver structure
authorGabriel Krisman Bertazi <krisman@collabora.co.uk>
Fri, 27 Jan 2017 01:05:48 +0000 (23:05 -0200)
committerGerd Hoffmann <kraxel@redhat.com>
Thu, 2 Feb 2017 09:02:37 +0000 (10:02 +0100)
This is the recommended way to create the drm_device structure,
according to DRM documentation.

Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.co.uk>
Link: http://patchwork.freedesktop.org/patch/msgid/20170127010548.27970-4-krisman@collabora.co.uk
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
drivers/gpu/drm/qxl/qxl_debugfs.c
drivers/gpu/drm/qxl/qxl_display.c
drivers/gpu/drm/qxl/qxl_drv.c
drivers/gpu/drm/qxl/qxl_drv.h
drivers/gpu/drm/qxl/qxl_fb.c
drivers/gpu/drm/qxl/qxl_ioctl.c
drivers/gpu/drm/qxl/qxl_irq.c
drivers/gpu/drm/qxl/qxl_kms.c
drivers/gpu/drm/qxl/qxl_object.c
drivers/gpu/drm/qxl/qxl_ttm.c

index 057b2b547cac6606f6fd60f88f9e570f76b81f7b..d58751c94618a9209cda2198003ab7b4849b1b9d 100644 (file)
@@ -133,8 +133,8 @@ int qxl_debugfs_add_files(struct qxl_device *qdev,
        qdev->debugfs_count = i;
 #if defined(CONFIG_DEBUG_FS)
        drm_debugfs_create_files(files, nfiles,
-                                qdev->ddev->primary->debugfs_root,
-                                qdev->ddev->primary);
+                                qdev->ddev.primary->debugfs_root,
+                                qdev->ddev.primary);
 #endif
        return 0;
 }
@@ -147,7 +147,7 @@ void qxl_debugfs_remove_files(struct qxl_device *qdev)
        for (i = 0; i < qdev->debugfs_count; i++) {
                drm_debugfs_remove_files(qdev->debugfs[i].files,
                                         qdev->debugfs[i].num_files,
-                                        qdev->ddev->primary);
+                                        qdev->ddev.primary);
        }
 #endif
 }
index 416ade8566b79be8686a4211b73643b1c0b519b3..1094cd33eb06e9d78009c4fc91c0423da6df1182 100644 (file)
@@ -136,7 +136,7 @@ static int qxl_display_copy_rom_client_monitors_config(struct qxl_device *qdev)
 
 static void qxl_update_offset_props(struct qxl_device *qdev)
 {
-       struct drm_device *dev = qdev->ddev;
+       struct drm_device *dev = &qdev->ddev;
        struct drm_connector *connector;
        struct qxl_output *output;
        struct qxl_head *head;
@@ -156,7 +156,7 @@ static void qxl_update_offset_props(struct qxl_device *qdev)
 void qxl_display_read_client_monitors_config(struct qxl_device *qdev)
 {
 
-       struct drm_device *dev = qdev->ddev;
+       struct drm_device *dev = &qdev->ddev;
        int status;
 
        status = qxl_display_copy_rom_client_monitors_config(qdev);
@@ -174,10 +174,10 @@ void qxl_display_read_client_monitors_config(struct qxl_device *qdev)
        drm_modeset_lock_all(dev);
        qxl_update_offset_props(qdev);
        drm_modeset_unlock_all(dev);
-       if (!drm_helper_hpd_irq_event(qdev->ddev)) {
+       if (!drm_helper_hpd_irq_event(dev)) {
                /* notify that the monitor configuration changed, to
                   adjust at the arbitrary resolution */
-               drm_kms_helper_hotplug_event(qdev->ddev);
+               drm_kms_helper_hotplug_event(dev);
        }
 }
 
@@ -1036,7 +1036,7 @@ static int qxl_mode_create_hotplug_mode_update_property(struct qxl_device *qdev)
                return 0;
 
        qdev->hotplug_mode_update_property =
-               drm_property_create_range(qdev->ddev, DRM_MODE_PROP_IMMUTABLE,
+               drm_property_create_range(&qdev->ddev, DRM_MODE_PROP_IMMUTABLE,
                                          "hotplug_mode_update", 0, 1);
 
        return 0;
@@ -1175,28 +1175,28 @@ int qxl_modeset_init(struct qxl_device *qdev)
        int i;
        int ret;
 
-       drm_mode_config_init(qdev->ddev);
+       drm_mode_config_init(&qdev->ddev);
 
        ret = qxl_create_monitors_object(qdev);
        if (ret)
                return ret;
 
-       qdev->ddev->mode_config.funcs = (void *)&qxl_mode_funcs;
+       qdev->ddev.mode_config.funcs = (void *)&qxl_mode_funcs;
 
        /* modes will be validated against the framebuffer size */
-       qdev->ddev->mode_config.min_width = 320;
-       qdev->ddev->mode_config.min_height = 200;
-       qdev->ddev->mode_config.max_width = 8192;
-       qdev->ddev->mode_config.max_height = 8192;
+       qdev->ddev.mode_config.min_width = 320;
+       qdev->ddev.mode_config.min_height = 200;
+       qdev->ddev.mode_config.max_width = 8192;
+       qdev->ddev.mode_config.max_height = 8192;
 
-       qdev->ddev->mode_config.fb_base = qdev->vram_base;
+       qdev->ddev.mode_config.fb_base = qdev->vram_base;
 
-       drm_mode_create_suggested_offset_properties(qdev->ddev);
+       drm_mode_create_suggested_offset_properties(&qdev->ddev);
        qxl_mode_create_hotplug_mode_update_property(qdev);
 
        for (i = 0 ; i < qxl_num_crtc; ++i) {
-               qdev_crtc_init(qdev->ddev, i);
-               qdev_output_init(qdev->ddev, i);
+               qdev_crtc_init(&qdev->ddev, i);
+               qdev_output_init(&qdev->ddev, i);
        }
 
        qdev->mode_info.mode_config_initialized = true;
@@ -1214,7 +1214,7 @@ void qxl_modeset_fini(struct qxl_device *qdev)
 
        qxl_destroy_monitors_object(qdev);
        if (qdev->mode_info.mode_config_initialized) {
-               drm_mode_config_cleanup(qdev->ddev);
+               drm_mode_config_cleanup(&qdev->ddev);
                qdev->mode_info.mode_config_initialized = false;
        }
 }
index 6e0f8a2d8ac998b8087d3a1dbf50ac17526d0125..8e17c241e63c7681e5ab4b31f43c3c47e7f8c35c 100644 (file)
@@ -62,7 +62,6 @@ static struct pci_driver qxl_pci_driver;
 static int
 qxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
-       struct drm_device *drm;
        struct qxl_device *qdev;
        int ret;
 
@@ -72,29 +71,19 @@ qxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
                return -EINVAL; /* TODO: ENODEV ? */
        }
 
-       drm = drm_dev_alloc(&qxl_driver, &pdev->dev);
-       if (IS_ERR(drm))
-               return -ENOMEM;
-
        qdev = kzalloc(sizeof(struct qxl_device), GFP_KERNEL);
-       if (!qdev) {
-               ret = -ENOMEM;
-               goto free_drm_device;
-       }
+       if (!qdev)
+               return -ENOMEM;
 
        ret = pci_enable_device(pdev);
        if (ret)
-               goto free_drm_device;
-
-       drm->pdev = pdev;
-       pci_set_drvdata(pdev, drm);
-       drm->dev_private = qdev;
+               goto free_dev;
 
-       ret = qxl_device_init(qdev, drm, pdev, ent->driver_data);
+       ret = qxl_device_init(qdev, &qxl_driver, pdev, ent->driver_data);
        if (ret)
                goto disable_pci;
 
-       ret = drm_vblank_init(drm, 1);
+       ret = drm_vblank_init(&qdev->ddev, 1);
        if (ret)
                goto unload;
 
@@ -102,10 +91,10 @@ qxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        if (ret)
                goto vblank_cleanup;
 
-       drm_kms_helper_poll_init(qdev->ddev);
+       drm_kms_helper_poll_init(&qdev->ddev);
 
        /* Complete initialization. */
-       ret = drm_dev_register(drm, ent->driver_data);
+       ret = drm_dev_register(&qdev->ddev, ent->driver_data);
        if (ret)
                goto modeset_cleanup;
 
@@ -114,14 +103,13 @@ qxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 modeset_cleanup:
        qxl_modeset_fini(qdev);
 vblank_cleanup:
-       drm_vblank_cleanup(drm);
+       drm_vblank_cleanup(&qdev->ddev);
 unload:
        qxl_device_fini(qdev);
 disable_pci:
        pci_disable_device(pdev);
-free_drm_device:
+free_dev:
        kfree(qdev);
-       kfree(drm);
        return ret;
 }
 
index 05a96dde1916e8117162370b1285d0167b6b73d5..785c17b56f739c0e3ee5c39a941315cd04d22c56 100644 (file)
@@ -242,7 +242,7 @@ void qxl_debugfs_remove_files(struct qxl_device *qdev);
 struct qxl_device;
 
 struct qxl_device {
-       struct drm_device               *ddev;
+       struct drm_device ddev;
        unsigned long flags;
 
        resource_size_t vram_base, vram_size;
@@ -334,8 +334,8 @@ __printf(2,3) void qxl_io_log(struct qxl_device *qdev, const char *fmt, ...);
 extern const struct drm_ioctl_desc qxl_ioctls[];
 extern int qxl_max_ioctl;
 
-int qxl_device_init(struct qxl_device *qdev, struct drm_device *ddev,
-                   struct pci_dev *pdev,  unsigned long flags);
+int qxl_device_init(struct qxl_device *qdev, struct drm_driver *drv,
+                   struct pci_dev *pdev, unsigned long flags);
 void qxl_device_fini(struct qxl_device *qdev);
 
 int qxl_modeset_init(struct qxl_device *qdev);
index 4ba2d2f81bd3b6d497adec6d6d85e0466d989615..53edfa498af5de37c05589a00ebee091a9292ae9 100644 (file)
@@ -268,7 +268,7 @@ static int qxlfb_create(struct qxl_fbdev *qfbdev,
 
        info->par = qfbdev;
 
-       qxl_framebuffer_init(qdev->ddev, &qfbdev->qfb, &mode_cmd, gobj,
+       qxl_framebuffer_init(&qdev->ddev, &qfbdev->qfb, &mode_cmd, gobj,
                             &qxlfb_fb_funcs);
 
        fb = &qfbdev->qfb.base;
@@ -297,7 +297,7 @@ static int qxlfb_create(struct qxl_fbdev *qfbdev,
                               sizes->fb_height);
 
        /* setup aperture base/size for vesafb takeover */
-       info->apertures->ranges[0].base = qdev->ddev->mode_config.fb_base;
+       info->apertures->ranges[0].base = qdev->ddev.mode_config.fb_base;
        info->apertures->ranges[0].size = qdev->vram_size;
 
        info->fix.mmio_start = 0;
@@ -395,10 +395,10 @@ int qxl_fbdev_init(struct qxl_device *qdev)
        spin_lock_init(&qfbdev->delayed_ops_lock);
        INIT_LIST_HEAD(&qfbdev->delayed_ops);
 
-       drm_fb_helper_prepare(qdev->ddev, &qfbdev->helper,
+       drm_fb_helper_prepare(&qdev->ddev, &qfbdev->helper,
                              &qxl_fb_helper_funcs);
 
-       ret = drm_fb_helper_init(qdev->ddev, &qfbdev->helper,
+       ret = drm_fb_helper_init(&qdev->ddev, &qfbdev->helper,
                                 qxl_num_crtc,
                                 QXLFB_CONN_LIMIT);
        if (ret)
@@ -426,7 +426,7 @@ void qxl_fbdev_fini(struct qxl_device *qdev)
        if (!qdev->mode_info.qfbdev)
                return;
 
-       qxl_fbdev_destroy(qdev->ddev, qdev->mode_info.qfbdev);
+       qxl_fbdev_destroy(&qdev->ddev, qdev->mode_info.qfbdev);
        kfree(qdev->mode_info.qfbdev);
        qdev->mode_info.qfbdev = NULL;
 }
index 7ad5070f2550e015a37fb7a0766dd5d18b437452..0b82a87916ae65b3d871d533bd528c6a47516aea 100644 (file)
@@ -64,7 +64,7 @@ static int qxl_map_ioctl(struct drm_device *dev, void *data,
        struct qxl_device *qdev = dev->dev_private;
        struct drm_qxl_map *qxl_map = data;
 
-       return qxl_mode_dumb_mmap(file_priv, qdev->ddev, qxl_map->handle,
+       return qxl_mode_dumb_mmap(file_priv, &qdev->ddev, qxl_map->handle,
                                  &qxl_map->offset);
 }
 
index 0bf1e20c6e44cee16a4c11b18b7903713e4707a9..23a40106ab536183ba9fc1e672d27d9474c2f001 100644 (file)
@@ -90,7 +90,7 @@ int qxl_irq_init(struct qxl_device *qdev)
        atomic_set(&qdev->irq_received_cursor, 0);
        atomic_set(&qdev->irq_received_io_cmd, 0);
        qdev->irq_received_error = 0;
-       ret = drm_irq_install(qdev->ddev, qdev->ddev->pdev->irq);
+       ret = drm_irq_install(&qdev->ddev, qdev->ddev.pdev->irq);
        qdev->ram_header->int_mask = QXL_INTERRUPT_MASK;
        if (unlikely(ret != 0)) {
                DRM_ERROR("Failed installing irq: %d\n", ret);
index 52d1bc1bb0ca4e4018a2a8948e7100a7bd87e16e..2dcd5c14cb568c1b37fcb9ea4620ff0ea6e5e1ae 100644 (file)
@@ -116,13 +116,20 @@ static void qxl_gc_work(struct work_struct *work)
 }
 
 int qxl_device_init(struct qxl_device *qdev,
-                   struct drm_device *ddev,
+                   struct drm_driver *drv,
                    struct pci_dev *pdev,
                    unsigned long flags)
 {
        int r, sb;
 
-       qdev->ddev = ddev;
+       r = drm_dev_init(&qdev->ddev, drv, &pdev->dev);
+       if (r)
+               return r;
+
+       qdev->ddev.pdev = pdev;
+       pci_set_drvdata(pdev, &qdev->ddev);
+       qdev->ddev.dev_private = qdev;
+
        qdev->flags = flags;
 
        mutex_init(&qdev->gem.mutex);
index adaa131d1588f531bee4b3e6cfcbce93bbfa3240..dbc13510a1f8cf62c74a35a465ee7a89216dc2bc 100644 (file)
@@ -93,7 +93,7 @@ int qxl_bo_create(struct qxl_device *qdev,
        if (bo == NULL)
                return -ENOMEM;
        size = roundup(size, PAGE_SIZE);
-       r = drm_gem_object_init(qdev->ddev, &bo->gem_base, size);
+       r = drm_gem_object_init(&qdev->ddev, &bo->gem_base, size);
        if (unlikely(r)) {
                kfree(bo);
                return r;
@@ -113,7 +113,7 @@ int qxl_bo_create(struct qxl_device *qdev,
                        NULL, NULL, &qxl_ttm_bo_destroy);
        if (unlikely(r != 0)) {
                if (r != -ERESTARTSYS)
-                       dev_err(qdev->ddev->dev,
+                       dev_err(qdev->ddev.dev,
                                "object_init failed for (%lu, 0x%08X)\n",
                                size, domain);
                return r;
@@ -270,9 +270,9 @@ void qxl_bo_force_delete(struct qxl_device *qdev)
 
        if (list_empty(&qdev->gem.objects))
                return;
-       dev_err(qdev->ddev->dev, "Userspace still has active objects !\n");
+       dev_err(qdev->ddev.dev, "Userspace still has active objects !\n");
        list_for_each_entry_safe(bo, n, &qdev->gem.objects, list) {
-               dev_err(qdev->ddev->dev, "%p %p %lu %lu force free\n",
+               dev_err(qdev->ddev.dev, "%p %p %lu %lu force free\n",
                        &bo->gem_base, bo, (unsigned long)bo->gem_base.size,
                        *((unsigned long *)&bo->gem_base.refcount));
                mutex_lock(&qdev->gem.mutex);
index 3dcc48431015d700a53c7835aff04d1a27240ed3..4e1a40389964fc6416206cf51d2b88c9ed2be6b1 100644 (file)
@@ -408,7 +408,7 @@ int qxl_ttm_init(struct qxl_device *qdev)
        r = ttm_bo_device_init(&qdev->mman.bdev,
                               qdev->mman.bo_global_ref.ref.object,
                               &qxl_bo_driver,
-                              qdev->ddev->anon_inode->i_mapping,
+                              qdev->ddev.anon_inode->i_mapping,
                               DRM_FILE_PAGE_OFFSET, 0);
        if (r) {
                DRM_ERROR("failed initializing buffer object driver(%d).\n", r);