Hi Gabriel,

2017-01-17 Gabriel Krisman Bertazi <kris...@collabora.co.uk>:

> This avoids using the deprecated drm_get_pci_dev() and load() hook
> interfaces in the qxl driver.
> 
> The only tricky part is to ensure TTM debugfs initialization happens
> after the debugfs root node is created, which is done by moving that
> code into the debufs_init() hook.
> 
> Tested on qemu with igt and running a WM on top of X.
> 
> Changes since v1:
>  - Drop verification for primary minor in qxl_debugsfs_init
> 
> Signed-off-by: Gabriel Krisman Bertazi <kris...@collabora.co.uk>
> Cc: Dave Airlie <airl...@redhat.com>
> Cc: Daniel Vetter <daniel.vet...@ffwll.ch>
> Cc: Gustavo Padovan <gustavo.pado...@collabora.com>
> ---
>  drivers/gpu/drm/qxl/qxl_debugfs.c | 10 +++++++
>  drivers/gpu/drm/qxl/qxl_drv.c     | 58 
> +++++++++++++++++++++++++++++++++++++--
>  drivers/gpu/drm/qxl/qxl_drv.h     |  7 ++++-
>  drivers/gpu/drm/qxl/qxl_kms.c     | 40 ++-------------------------
>  drivers/gpu/drm/qxl/qxl_ttm.c     |  8 +-----
>  5 files changed, 75 insertions(+), 48 deletions(-)
> 
> diff --git a/drivers/gpu/drm/qxl/qxl_debugfs.c 
> b/drivers/gpu/drm/qxl/qxl_debugfs.c
> index 241af9131dc8..057b2b547cac 100644
> --- a/drivers/gpu/drm/qxl/qxl_debugfs.c
> +++ b/drivers/gpu/drm/qxl/qxl_debugfs.c
> @@ -84,8 +84,18 @@ int
>  qxl_debugfs_init(struct drm_minor *minor)
>  {
>  #if defined(CONFIG_DEBUG_FS)
> +     int r;
> +     struct qxl_device *dev =
> +             (struct qxl_device *) minor->dev->dev_private;
> +
>       drm_debugfs_create_files(qxl_debugfs_list, QXL_DEBUGFS_ENTRIES,
>                                minor->debugfs_root, minor);
> +
> +     r = qxl_ttm_debugfs_init(dev);
> +     if (r) {
> +             DRM_ERROR("Failed to init TTM debugfs\n");
> +             return r;
> +     }
>  #endif
>       return 0;
>  }
> diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c
> index 460bbceae297..7cc29027a612 100644
> --- a/drivers/gpu/drm/qxl/qxl_drv.c
> +++ b/drivers/gpu/drm/qxl/qxl_drv.c
> @@ -62,12 +62,67 @@ 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;
> +
>       if (pdev->revision < 4) {
>               DRM_ERROR("qxl too old, doesn't support client_monitors_config,"
>                         " use xf86-video-qxl in user mode");
>               return -EINVAL; /* TODO: ENODEV ? */
>       }
> -     return drm_get_pci_dev(pdev, ent, &qxl_driver);
> +
> +     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;
> +     }
> +
> +     ret = pci_enable_device(pdev);
> +     if (ret)
> +             goto free_drm_device;
> +
> +     drm->pdev = pdev;
> +     pci_set_drvdata(pdev, drm);
> +     drm->dev_private = qdev;
> +
> +     ret = qxl_device_init(qdev, drm, pdev, ent->driver_data);
> +     if (ret)
> +             goto disable_pci;
> +
> +     ret = drm_vblank_init(drm, 1);
> +     if (ret)
> +             goto unload;
> +
> +     ret = qxl_modeset_init(qdev);
> +     if (ret)
> +             goto vblank_cleanup;
> +
> +     drm_kms_helper_poll_init(qdev->ddev);
> +
> +     /* Complete initialization. */
> +     ret = drm_dev_register(drm, ent->driver_data);
> +     if (ret)
> +             goto modeset_cleanup;
> +
> +     return 0;
> +
> +modeset_cleanup:
> +     qxl_modeset_fini(qdev);
> +vblank_cleanup:
> +     drm_vblank_cleanup(drm);
> +unload:
> +     qxl_device_fini(qdev);
> +disable_pci:
> +     pci_disable_device(pdev);
> +free_drm_device:
> +     kfree(qdev);
> +     kfree(drm);
> +     return ret;
>  }
>  
>  static void
> @@ -230,7 +285,6 @@ static struct pci_driver qxl_pci_driver = {
>  static struct drm_driver qxl_driver = {
>       .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME |
>                          DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED,
> -     .load = qxl_driver_load,
>       .unload = qxl_driver_unload,
>       .get_vblank_counter = qxl_noop_get_vblank_counter,
>       .enable_vblank = qxl_noop_enable_vblank,
> diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h
> index 883d8639c04e..d0aed9ed12d2 100644
> --- a/drivers/gpu/drm/qxl/qxl_drv.h
> +++ b/drivers/gpu/drm/qxl/qxl_drv.h
> @@ -336,7 +336,10 @@ __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_driver_load(struct drm_device *dev, unsigned long flags);
> +int qxl_device_init(struct qxl_device *qdev, struct drm_device *ddev,
> +                 struct pci_dev *pdev,  unsigned long flags);
> +void qxl_device_fini(struct qxl_device *qdev);
> +
>  void qxl_driver_unload(struct drm_device *dev);
>  
>  int qxl_modeset_init(struct qxl_device *qdev);
> @@ -345,6 +348,8 @@ void qxl_modeset_fini(struct qxl_device *qdev);
>  int qxl_bo_init(struct qxl_device *qdev);
>  void qxl_bo_fini(struct qxl_device *qdev);
>  
> +int qxl_ttm_debugfs_init(struct qxl_device *qdev);
> +

Please group this declaration together with the other qxl debugfs
declarations.

Gustavo

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to