dri-devel.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/5] drm/radeon: Stop changing the drm_driver struct
@ 2020-10-30 10:11 Daniel Vetter
  2020-10-30 10:11 ` [PATCH 2/5] drm: Compile out legacy chunks from struct drm_device Daniel Vetter
                   ` (4 more replies)
  0 siblings, 5 replies; 19+ messages in thread
From: Daniel Vetter @ 2020-10-30 10:11 UTC (permalink / raw)
  To: DRI Development
  Cc: Daniel Vetter, Intel Graphics Development, amd-gfx, Alex Deucher,
	Daniel Vetter, Christian König

With only the kms driver left, we can fold this in. This means
we need to move the ioctl table, which means one additional ioctl
must be defined in headers.

Also there's a conflict between the radeon_init macro and the module
init function, so rename the module functions to avoid that.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: "Christian König" <christian.koenig@amd.com>
Cc: amd-gfx@lists.freedesktop.org
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/gpu/drm/radeon/radeon.h     |  1 +
 drivers/gpu/drm/radeon/radeon_drv.c | 85 ++++++++++++++++++++---------
 drivers/gpu/drm/radeon/radeon_kms.c | 49 +----------------
 3 files changed, 62 insertions(+), 73 deletions(-)

diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 5d54bccebd4d..f475785d6491 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -2244,6 +2244,7 @@ int radeon_gem_set_tiling_ioctl(struct drm_device *dev, void *data,
 				struct drm_file *filp);
 int radeon_gem_get_tiling_ioctl(struct drm_device *dev, void *data,
 				struct drm_file *filp);
+int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp);
 
 /* VRAM scratch page for HDP bug, default vram page */
 struct r600_vram_scratch {
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
index 65061c949aee..9c11e36ad33a 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
@@ -51,6 +51,7 @@
 #include <drm/radeon_drm.h>
 
 #include "radeon_drv.h"
+#include "radeon.h"
 
 /*
  * KMS wrapper.
@@ -129,8 +130,6 @@ extern int radeon_get_crtc_scanoutpos(struct drm_device *dev, unsigned int crtc,
 				      ktime_t *stime, ktime_t *etime,
 				      const struct drm_display_mode *mode);
 extern bool radeon_is_px(struct drm_device *dev);
-extern const struct drm_ioctl_desc radeon_ioctls_kms[];
-extern int radeon_max_kms_ioctl;
 int radeon_mmap(struct file *filp, struct vm_area_struct *vma);
 int radeon_mode_dumb_mmap(struct drm_file *filp,
 			  struct drm_device *dev,
@@ -584,9 +583,55 @@ static const struct file_operations radeon_driver_kms_fops = {
 #endif
 };
 
+static const struct drm_ioctl_desc radeon_ioctls_kms[] = {
+	DRM_IOCTL_DEF_DRV(RADEON_CP_INIT, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+	DRM_IOCTL_DEF_DRV(RADEON_CP_START, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+	DRM_IOCTL_DEF_DRV(RADEON_CP_STOP, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+	DRM_IOCTL_DEF_DRV(RADEON_CP_RESET, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+	DRM_IOCTL_DEF_DRV(RADEON_CP_IDLE, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_CP_RESUME, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_RESET, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_FULLSCREEN, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_SWAP, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_CLEAR, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_VERTEX, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_INDICES, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_TEXTURE, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_STIPPLE, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_INDIRECT, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+	DRM_IOCTL_DEF_DRV(RADEON_VERTEX2, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_CMDBUF, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_GETPARAM, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_FLIP, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_ALLOC, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_FREE, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_INIT_HEAP, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+	DRM_IOCTL_DEF_DRV(RADEON_IRQ_EMIT, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_IRQ_WAIT, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_SETPARAM, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_SURF_ALLOC, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_SURF_FREE, drm_invalid_op, DRM_AUTH),
+	/* KMS */
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_INFO, radeon_gem_info_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_CREATE, radeon_gem_create_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_MMAP, radeon_gem_mmap_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_SET_DOMAIN, radeon_gem_set_domain_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_PREAD, radeon_gem_pread_ioctl, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_PWRITE, radeon_gem_pwrite_ioctl, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_WAIT_IDLE, radeon_gem_wait_idle_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_CS, radeon_cs_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_INFO, radeon_info_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_SET_TILING, radeon_gem_set_tiling_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_GET_TILING, radeon_gem_get_tiling_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_BUSY, radeon_gem_busy_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_VA, radeon_gem_va_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_OP, radeon_gem_op_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_USERPTR, radeon_gem_userptr_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+};
+
 static struct drm_driver kms_driver = {
 	.driver_features =
-	    DRIVER_GEM | DRIVER_RENDER,
+	    DRIVER_GEM | DRIVER_RENDER | DRIVER_MODESET,
 	.load = radeon_driver_load_kms,
 	.open = radeon_driver_open_kms,
 	.postclose = radeon_driver_postclose_kms,
@@ -597,6 +642,7 @@ static struct drm_driver kms_driver = {
 	.irq_uninstall = radeon_driver_irq_uninstall_kms,
 	.irq_handler = radeon_driver_irq_handler_kms,
 	.ioctls = radeon_ioctls_kms,
+	.num_ioctls = ARRAY_SIZE(radeon_ioctls_kms),
 	.dumb_create = radeon_mode_dumb_create,
 	.dumb_map_offset = radeon_mode_dumb_mmap,
 	.fops = &radeon_driver_kms_fops,
@@ -613,9 +659,6 @@ static struct drm_driver kms_driver = {
 	.patchlevel = KMS_DRIVER_PATCHLEVEL,
 };
 
-static struct drm_driver *driver;
-static struct pci_driver *pdriver;
-
 static struct pci_driver radeon_kms_pci_driver = {
 	.name = DRIVER_NAME,
 	.id_table = pciidlist,
@@ -625,41 +668,33 @@ static struct pci_driver radeon_kms_pci_driver = {
 	.driver.pm = &radeon_pm_ops,
 };
 
-static int __init radeon_init(void)
+static int __init radeon_module_init(void)
 {
 	if (vgacon_text_force() && radeon_modeset == -1) {
 		DRM_INFO("VGACON disable radeon kernel modesetting.\n");
 		radeon_modeset = 0;
 	}
-	/* set to modesetting by default if not nomodeset */
-	if (radeon_modeset == -1)
-		radeon_modeset = 1;
-
-	if (radeon_modeset == 1) {
-		DRM_INFO("radeon kernel modesetting enabled.\n");
-		driver = &kms_driver;
-		pdriver = &radeon_kms_pci_driver;
-		driver->driver_features |= DRIVER_MODESET;
-		driver->num_ioctls = radeon_max_kms_ioctl;
-		radeon_register_atpx_handler();
-
-	} else {
+
+	if (radeon_modeset == 0) {
 		DRM_ERROR("No UMS support in radeon module!\n");
 		return -EINVAL;
 	}
 
-	return pci_register_driver(pdriver);
+	DRM_INFO("radeon kernel modesetting enabled.\n");
+	radeon_register_atpx_handler();
+
+	return pci_register_driver(&radeon_kms_pci_driver);
 }
 
-static void __exit radeon_exit(void)
+static void __exit radeon_module_exit(void)
 {
-	pci_unregister_driver(pdriver);
+	pci_unregister_driver(&radeon_kms_pci_driver);
 	radeon_unregister_atpx_handler();
 	mmu_notifier_synchronize();
 }
 
-module_init(radeon_init);
-module_exit(radeon_exit);
+module_init(radeon_module_init);
+module_exit(radeon_module_exit);
 
 MODULE_AUTHOR(DRIVER_AUTHOR);
 MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
index 99ee60f8b604..abb3bdd9ca25 100644
--- a/drivers/gpu/drm/radeon/radeon_kms.c
+++ b/drivers/gpu/drm/radeon/radeon_kms.c
@@ -221,7 +221,7 @@ static void radeon_set_filp_rights(struct drm_device *dev,
  * etc. (all asics).
  * Returns 0 on success, -EINVAL on failure.
  */
-static int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
+int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
 {
 	struct radeon_device *rdev = dev->dev_private;
 	struct drm_radeon_info *info = data;
@@ -866,50 +866,3 @@ void radeon_disable_vblank_kms(struct drm_crtc *crtc)
 	radeon_irq_set(rdev);
 	spin_unlock_irqrestore(&rdev->irq.lock, irqflags);
 }
-
-const struct drm_ioctl_desc radeon_ioctls_kms[] = {
-	DRM_IOCTL_DEF_DRV(RADEON_CP_INIT, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
-	DRM_IOCTL_DEF_DRV(RADEON_CP_START, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
-	DRM_IOCTL_DEF_DRV(RADEON_CP_STOP, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
-	DRM_IOCTL_DEF_DRV(RADEON_CP_RESET, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
-	DRM_IOCTL_DEF_DRV(RADEON_CP_IDLE, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_CP_RESUME, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_RESET, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_FULLSCREEN, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_SWAP, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_CLEAR, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_VERTEX, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_INDICES, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_TEXTURE, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_STIPPLE, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_INDIRECT, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
-	DRM_IOCTL_DEF_DRV(RADEON_VERTEX2, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_CMDBUF, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_GETPARAM, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_FLIP, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_ALLOC, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_FREE, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_INIT_HEAP, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
-	DRM_IOCTL_DEF_DRV(RADEON_IRQ_EMIT, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_IRQ_WAIT, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_SETPARAM, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_SURF_ALLOC, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_SURF_FREE, drm_invalid_op, DRM_AUTH),
-	/* KMS */
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_INFO, radeon_gem_info_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_CREATE, radeon_gem_create_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_MMAP, radeon_gem_mmap_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_SET_DOMAIN, radeon_gem_set_domain_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_PREAD, radeon_gem_pread_ioctl, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_PWRITE, radeon_gem_pwrite_ioctl, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_WAIT_IDLE, radeon_gem_wait_idle_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_CS, radeon_cs_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_INFO, radeon_info_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_SET_TILING, radeon_gem_set_tiling_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_GET_TILING, radeon_gem_get_tiling_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_BUSY, radeon_gem_busy_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_VA, radeon_gem_va_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_OP, radeon_gem_op_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_USERPTR, radeon_gem_userptr_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-};
-int radeon_max_kms_ioctl = ARRAY_SIZE(radeon_ioctls_kms);
-- 
2.28.0

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

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 2/5] drm: Compile out legacy chunks from struct drm_device
  2020-10-30 10:11 [PATCH 1/5] drm/radeon: Stop changing the drm_driver struct Daniel Vetter
@ 2020-10-30 10:11 ` Daniel Vetter
  2020-10-30 18:22   ` Alex Deucher
  2020-10-30 10:11 ` [PATCH 3/5] drm/amdgpu: Paper over the drm_driver mangling for virt Daniel Vetter
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 19+ messages in thread
From: Daniel Vetter @ 2020-10-30 10:11 UTC (permalink / raw)
  To: DRI Development
  Cc: David Airlie, Daniel Vetter, Intel Graphics Development,
	Thomas Zimmermann, Daniel Vetter, Sam Ravnborg

This means some very few #ifdef in code, but it allows us to
enlist the compiler to make sure this stuff isn't used anymore.

More important, only legacy drivers change drm_device (for the
legacy_dev_list shadow attach management), therefore this is
prep to allow modern drivers to have a const driver struct. Which
is nice, because there's a ton of function pointers in there.

Acked-by: Maxime Ripard <mripard@kernel.org>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Review-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel@ffwll.ch>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/gpu/drm/drm_file.c   |  2 ++
 drivers/gpu/drm/drm_vblank.c | 15 ++++++++++++---
 include/drm/drm_drv.h        |  2 ++
 3 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c
index 0ac4566ae3f4..b50380fa80ce 100644
--- a/drivers/gpu/drm/drm_file.c
+++ b/drivers/gpu/drm/drm_file.c
@@ -258,9 +258,11 @@ void drm_file_free(struct drm_file *file)
 		  (long)old_encode_dev(file->minor->kdev->devt),
 		  atomic_read(&dev->open_count));
 
+#ifdef CONFIG_DRM_LEGACY
 	if (drm_core_check_feature(dev, DRIVER_LEGACY) &&
 	    dev->driver->preclose)
 		dev->driver->preclose(dev, file);
+#endif
 
 	if (drm_core_check_feature(dev, DRIVER_LEGACY))
 		drm_legacy_lock_release(dev, file->filp);
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index ba7e741764aa..15e5ea436434 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -210,9 +210,12 @@ static u32 __get_vblank_counter(struct drm_device *dev, unsigned int pipe)
 
 		if (crtc->funcs->get_vblank_counter)
 			return crtc->funcs->get_vblank_counter(crtc);
-	} else if (dev->driver->get_vblank_counter) {
+	}
+#ifdef CONFIG_DRM_LEGACY
+	else if (dev->driver->get_vblank_counter) {
 		return dev->driver->get_vblank_counter(dev, pipe);
 	}
+#endif
 
 	return drm_vblank_no_hw_counter(dev, pipe);
 }
@@ -430,9 +433,12 @@ static void __disable_vblank(struct drm_device *dev, unsigned int pipe)
 
 		if (crtc->funcs->disable_vblank)
 			crtc->funcs->disable_vblank(crtc);
-	} else {
+	}
+#ifdef CONFIG_DRM_LEGACY
+	else {
 		dev->driver->disable_vblank(dev, pipe);
 	}
+#endif
 }
 
 /*
@@ -1097,9 +1103,12 @@ static int __enable_vblank(struct drm_device *dev, unsigned int pipe)
 
 		if (crtc->funcs->enable_vblank)
 			return crtc->funcs->enable_vblank(crtc);
-	} else if (dev->driver->enable_vblank) {
+	}
+#ifdef CONFIG_DRM_LEGACY
+	else if (dev->driver->enable_vblank) {
 		return dev->driver->enable_vblank(dev, pipe);
 	}
+#endif
 
 	return -EINVAL;
 }
diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
index c6d17550efc9..7af220226a25 100644
--- a/include/drm/drm_drv.h
+++ b/include/drm/drm_drv.h
@@ -498,6 +498,7 @@ struct drm_driver {
 	 */
 	const struct file_operations *fops;
 
+#ifdef CONFIG_DRM_LEGACY
 	/* Everything below here is for legacy driver, never use! */
 	/* private: */
 
@@ -512,6 +513,7 @@ struct drm_driver {
 	int (*enable_vblank)(struct drm_device *dev, unsigned int pipe);
 	void (*disable_vblank)(struct drm_device *dev, unsigned int pipe);
 	int dev_priv_size;
+#endif
 };
 
 void *__devm_drm_dev_alloc(struct device *parent, struct drm_driver *driver,
-- 
2.28.0

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

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 3/5] drm/amdgpu: Paper over the drm_driver mangling for virt
  2020-10-30 10:11 [PATCH 1/5] drm/radeon: Stop changing the drm_driver struct Daniel Vetter
  2020-10-30 10:11 ` [PATCH 2/5] drm: Compile out legacy chunks from struct drm_device Daniel Vetter
@ 2020-10-30 10:11 ` Daniel Vetter
  2020-10-30 10:41   ` Liu, Monk
  2020-10-30 18:47   ` Alex Deucher
  2020-10-30 10:11 ` [PATCH 4/5] drm: Allow const struct drm_driver Daniel Vetter
                   ` (2 subsequent siblings)
  4 siblings, 2 replies; 19+ messages in thread
From: Daniel Vetter @ 2020-10-30 10:11 UTC (permalink / raw)
  To: DRI Development
  Cc: chen gong, Daniel Vetter, Daniel Vetter,
	Intel Graphics Development, Wenhui Sheng, shaoyunl, Luben Tuikov,
	Stanley.Yang, Dennis Li, Thomas Zimmermann, Bokun Zhang,
	Alex Deucher, Felix Kuehling, Yintian Tao, Evan Quan,
	Christian König, Monk Liu, Hawking Zhang

Prep work to make drm_device->driver const.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: "Christian König" <christian.koenig@amd.com>
Cc: Evan Quan <evan.quan@amd.com>
Cc: Felix Kuehling <Felix.Kuehling@amd.com>
Cc: Hawking Zhang <Hawking.Zhang@amd.com>
Cc: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
Cc: Luben Tuikov <luben.tuikov@amd.com>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: Monk Liu <Monk.Liu@amd.com>
Cc: Yintian Tao <yttao@amd.com>
Cc: Dennis Li <Dennis.Li@amd.com>
Cc: shaoyunl <shaoyun.liu@amd.com>
Cc: Bokun Zhang <Bokun.Zhang@amd.com>
Cc: "Stanley.Yang" <Stanley.Yang@amd.com>
Cc: Wenhui Sheng <Wenhui.Sheng@amd.com>
Cc: chen gong <curry.gong@amd.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c  |  8 ++++----
 drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 12 +++++++++++-
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index 024c3b70b1aa..3d337f13ae4e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -1093,7 +1093,7 @@ static const struct pci_device_id pciidlist[] = {
 
 MODULE_DEVICE_TABLE(pci, pciidlist);
 
-static struct drm_driver kms_driver;
+struct drm_driver amdgpu_kms_driver;
 
 static int amdgpu_pci_probe(struct pci_dev *pdev,
 			    const struct pci_device_id *ent)
@@ -1164,7 +1164,7 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
 	if (ret)
 		return ret;
 
-	adev = devm_drm_dev_alloc(&pdev->dev, &kms_driver, typeof(*adev), ddev);
+	adev = devm_drm_dev_alloc(&pdev->dev, &amdgpu_kms_driver, typeof(*adev), ddev);
 	if (IS_ERR(adev))
 		return PTR_ERR(adev);
 
@@ -1508,7 +1508,7 @@ int amdgpu_file_to_fpriv(struct file *filp, struct amdgpu_fpriv **fpriv)
 	return 0;
 }
 
-static struct drm_driver kms_driver = {
+struct drm_driver amdgpu_kms_driver = {
 	.driver_features =
 	    DRIVER_ATOMIC |
 	    DRIVER_GEM |
@@ -1571,7 +1571,7 @@ static int __init amdgpu_init(void)
 		goto error_fence;
 
 	DRM_INFO("amdgpu kernel modesetting enabled.\n");
-	kms_driver.num_ioctls = amdgpu_max_kms_ioctl;
+	amdgpu_kms_driver.num_ioctls = amdgpu_max_kms_ioctl;
 	amdgpu_register_atpx_handler();
 
 	/* Ignore KFD init failures. Normal when CONFIG_HSA_AMD is not set. */
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
index d0aea5e39531..dde4c449c284 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
@@ -45,13 +45,23 @@ bool amdgpu_virt_mmio_blocked(struct amdgpu_device *adev)
 	return RREG32_NO_KIQ(0xc040) == 0xffffffff;
 }
 
+extern struct drm_driver amdgpu_kms_driver;
+
 void amdgpu_virt_init_setting(struct amdgpu_device *adev)
 {
 	/* enable virtual display */
 	if (adev->mode_info.num_crtc == 0)
 		adev->mode_info.num_crtc = 1;
 	adev->enable_virtual_display = true;
-	adev_to_drm(adev)->driver->driver_features &= ~DRIVER_ATOMIC;
+
+	/*
+	 * FIXME: Either make virt support atomic or make sure you have two
+	 * drm_driver structs, these kind of tricks are only ok when there's
+	 * guaranteed only a single device per system. This should also be done
+	 * before struct drm_device is initialized.
+	 */
+	amdgpu_kms_driver.driver_features &= ~DRIVER_ATOMIC;
+
 	adev->cg_flags = 0;
 	adev->pg_flags = 0;
 }
-- 
2.28.0

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

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 4/5] drm: Allow const struct drm_driver
  2020-10-30 10:11 [PATCH 1/5] drm/radeon: Stop changing the drm_driver struct Daniel Vetter
  2020-10-30 10:11 ` [PATCH 2/5] drm: Compile out legacy chunks from struct drm_device Daniel Vetter
  2020-10-30 10:11 ` [PATCH 3/5] drm/amdgpu: Paper over the drm_driver mangling for virt Daniel Vetter
@ 2020-10-30 10:11 ` Daniel Vetter
  2020-10-30 18:53   ` Alex Deucher
  2020-10-30 10:11 ` [PATCH 5/5] drm/<drivers>: Constify " Daniel Vetter
  2020-10-30 18:21 ` [PATCH 1/5] drm/radeon: Stop changing the drm_driver struct Alex Deucher
  4 siblings, 1 reply; 19+ messages in thread
From: Daniel Vetter @ 2020-10-30 10:11 UTC (permalink / raw)
  To: DRI Development
  Cc: David Airlie, Daniel Vetter, Intel Graphics Development,
	Thomas Zimmermann, Daniel Vetter, Sam Ravnborg

It's nice if a big function/ioctl table like this is const. Only
downside here is that we need a few more #ifdef to paper over the
differences when CONFIG_DRM_LEGACY is enabled. Maybe provides more
motivation to sunset that horror show :-)

v2:
- Fix super important checkpatch warning (Sam)
- Update the kerneldoc example too (Sam)

Acked-by: Maxime Ripard <mripard@kernel.org>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel@ffwll.ch>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/gpu/drm/drm_drv.c | 17 +++++++++++------
 include/drm/drm_device.h  |  4 ++++
 include/drm/drm_drv.h     |  5 +++--
 3 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index 457ac0f82be2..0371d1f095b2 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -284,7 +284,7 @@ void drm_minor_release(struct drm_minor *minor)
  *		struct clk *pclk;
  *	};
  *
- *	static struct drm_driver driver_drm_driver = {
+ *	static const struct drm_driver driver_drm_driver = {
  *		[...]
  *	};
  *
@@ -574,7 +574,7 @@ static void drm_dev_init_release(struct drm_device *dev, void *res)
 }
 
 static int drm_dev_init(struct drm_device *dev,
-			struct drm_driver *driver,
+			const struct drm_driver *driver,
 			struct device *parent)
 {
 	int ret;
@@ -589,7 +589,11 @@ static int drm_dev_init(struct drm_device *dev,
 
 	kref_init(&dev->ref);
 	dev->dev = get_device(parent);
+#ifdef CONFIG_DRM_LEGACY
+	dev->driver = (struct drm_driver *)driver;
+#else
 	dev->driver = driver;
+#endif
 
 	INIT_LIST_HEAD(&dev->managed.resources);
 	spin_lock_init(&dev->managed.lock);
@@ -663,7 +667,7 @@ static void devm_drm_dev_init_release(void *data)
 
 static int devm_drm_dev_init(struct device *parent,
 			     struct drm_device *dev,
-			     struct drm_driver *driver)
+			     const struct drm_driver *driver)
 {
 	int ret;
 
@@ -678,7 +682,8 @@ static int devm_drm_dev_init(struct device *parent,
 	return ret;
 }
 
-void *__devm_drm_dev_alloc(struct device *parent, struct drm_driver *driver,
+void *__devm_drm_dev_alloc(struct device *parent,
+			   const struct drm_driver *driver,
 			   size_t size, size_t offset)
 {
 	void *container;
@@ -713,7 +718,7 @@ EXPORT_SYMBOL(__devm_drm_dev_alloc);
  * RETURNS:
  * Pointer to new DRM device, or ERR_PTR on failure.
  */
-struct drm_device *drm_dev_alloc(struct drm_driver *driver,
+struct drm_device *drm_dev_alloc(const struct drm_driver *driver,
 				 struct device *parent)
 {
 	struct drm_device *dev;
@@ -858,7 +863,7 @@ static void remove_compat_control_link(struct drm_device *dev)
  */
 int drm_dev_register(struct drm_device *dev, unsigned long flags)
 {
-	struct drm_driver *driver = dev->driver;
+	const struct drm_driver *driver = dev->driver;
 	int ret;
 
 	if (!driver->load)
diff --git a/include/drm/drm_device.h b/include/drm/drm_device.h
index f4f68e7a9149..2c361964aee7 100644
--- a/include/drm/drm_device.h
+++ b/include/drm/drm_device.h
@@ -83,7 +83,11 @@ struct drm_device {
 	} managed;
 
 	/** @driver: DRM driver managing the device */
+#ifdef CONFIG_DRM_LEGACY
 	struct drm_driver *driver;
+#else
+	const struct drm_driver *driver;
+#endif
 
 	/**
 	 * @dev_private:
diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
index 7af220226a25..cc9da43b6eda 100644
--- a/include/drm/drm_drv.h
+++ b/include/drm/drm_drv.h
@@ -516,7 +516,8 @@ struct drm_driver {
 #endif
 };
 
-void *__devm_drm_dev_alloc(struct device *parent, struct drm_driver *driver,
+void *__devm_drm_dev_alloc(struct device *parent,
+			   const struct drm_driver *driver,
 			   size_t size, size_t offset);
 
 /**
@@ -549,7 +550,7 @@ void *__devm_drm_dev_alloc(struct device *parent, struct drm_driver *driver,
 	((type *) __devm_drm_dev_alloc(parent, driver, sizeof(type), \
 				       offsetof(type, member)))
 
-struct drm_device *drm_dev_alloc(struct drm_driver *driver,
+struct drm_device *drm_dev_alloc(const struct drm_driver *driver,
 				 struct device *parent);
 int drm_dev_register(struct drm_device *dev, unsigned long flags);
 void drm_dev_unregister(struct drm_device *dev);
-- 
2.28.0

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

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 5/5] drm/<drivers>: Constify struct drm_driver
  2020-10-30 10:11 [PATCH 1/5] drm/radeon: Stop changing the drm_driver struct Daniel Vetter
                   ` (2 preceding siblings ...)
  2020-10-30 10:11 ` [PATCH 4/5] drm: Allow const struct drm_driver Daniel Vetter
@ 2020-10-30 10:11 ` Daniel Vetter
  2020-10-30 18:53   ` Alex Deucher
  2020-10-30 18:21 ` [PATCH 1/5] drm/radeon: Stop changing the drm_driver struct Alex Deucher
  4 siblings, 1 reply; 19+ messages in thread
From: Daniel Vetter @ 2020-10-30 10:11 UTC (permalink / raw)
  To: DRI Development
  Cc: Daniel Vetter, kernel test robot, nouveau, Leo Li, Daniel Vetter,
	Intel Graphics Development, virtualization, Gerd Hoffmann,
	Alex Deucher, Dave Airlie, Sam Ravnborg, Christian König,
	Ben Skeggs

Only the following drivers aren't converted:
- amdgpu, because of the driver_feature mangling due to virt support
- nouveau, because DRIVER_ATOMIC uapi is still not the default on the
  platforms where it's supported (i.e. again driver_feature mangling)
- vc4, again because of driver_feature mangling
- qxl, because the ioctl table is somewhere else and moving that is
  maybe a bit too much, hence the num_ioctls assignment prevents a
  const driver structure.
- arcpgu, because that is stuck behind a pending tiny-fication series
  from me.
- legacy drivers, because legacy requires non-const drm_driver.

Note that for armada I also went ahead and made the ioctl array const.

Only cc'ing the driver people who've not been converted (everyone else
is way too much).

v2: Fix one misplaced const static, should be static const (0day)

v3:
- Improve commit message (Sam)

Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: kernel test robot <lkp@intel.com>
Acked-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: Dave Airlie <airlied@redhat.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: virtualization@lists.linux-foundation.org
Cc: Harry Wentland <harry.wentland@amd.com>
Cc: Leo Li <sunpeng.li@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: Eric Anholt <eric@anholt.net>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Ben Skeggs <bskeggs@redhat.com>
Cc: nouveau@lists.freedesktop.org
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
 drivers/gpu/drm/arm/display/komeda/komeda_kms.c  | 2 +-
 drivers/gpu/drm/arm/hdlcd_drv.c                  | 2 +-
 drivers/gpu/drm/arm/malidp_drv.c                 | 2 +-
 drivers/gpu/drm/armada/armada_drv.c              | 7 +++----
 drivers/gpu/drm/aspeed/aspeed_gfx_drv.c          | 2 +-
 drivers/gpu/drm/ast/ast_drv.c                    | 2 +-
 drivers/gpu/drm/ast/ast_drv.h                    | 2 +-
 drivers/gpu/drm/ast/ast_main.c                   | 2 +-
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c     | 2 +-
 drivers/gpu/drm/bochs/bochs_drv.c                | 2 +-
 drivers/gpu/drm/etnaviv/etnaviv_drv.c            | 2 +-
 drivers/gpu/drm/exynos/exynos_drm_drv.c          | 2 +-
 drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c        | 5 ++---
 drivers/gpu/drm/gma500/psb_drv.c                 | 4 ++--
 drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c  | 2 +-
 drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c  | 2 +-
 drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h  | 2 +-
 drivers/gpu/drm/i915/i915_drv.c                  | 4 ++--
 drivers/gpu/drm/i915/selftests/mock_gem_device.c | 2 +-
 drivers/gpu/drm/imx/dcss/dcss-kms.c              | 2 +-
 drivers/gpu/drm/imx/imx-drm-core.c               | 2 +-
 drivers/gpu/drm/ingenic/ingenic-drm-drv.c        | 2 +-
 drivers/gpu/drm/lima/lima_drv.c                  | 2 +-
 drivers/gpu/drm/mcde/mcde_drv.c                  | 2 +-
 drivers/gpu/drm/mediatek/mtk_drm_drv.c           | 2 +-
 drivers/gpu/drm/meson/meson_drv.c                | 2 +-
 drivers/gpu/drm/mgag200/mgag200_drv.c            | 2 +-
 drivers/gpu/drm/msm/msm_drv.c                    | 4 ++--
 drivers/gpu/drm/mxsfb/mxsfb_drv.c                | 2 +-
 drivers/gpu/drm/omapdrm/omap_drv.c               | 2 +-
 drivers/gpu/drm/panfrost/panfrost_drv.c          | 2 +-
 drivers/gpu/drm/pl111/pl111_drv.c                | 2 +-
 drivers/gpu/drm/radeon/radeon_drv.c              | 4 ++--
 drivers/gpu/drm/rcar-du/rcar_du_drv.c            | 2 +-
 drivers/gpu/drm/rockchip/rockchip_drm_drv.c      | 4 ++--
 drivers/gpu/drm/shmobile/shmob_drm_drv.c         | 2 +-
 drivers/gpu/drm/sti/sti_drv.c                    | 2 +-
 drivers/gpu/drm/stm/drv.c                        | 2 +-
 drivers/gpu/drm/sun4i/sun4i_drv.c                | 2 +-
 drivers/gpu/drm/tegra/drm.c                      | 5 ++---
 drivers/gpu/drm/tidss/tidss_drv.c                | 2 +-
 drivers/gpu/drm/tilcdc/tilcdc_drv.c              | 4 ++--
 drivers/gpu/drm/tiny/cirrus.c                    | 2 +-
 drivers/gpu/drm/tiny/gm12u320.c                  | 2 +-
 drivers/gpu/drm/tiny/hx8357d.c                   | 2 +-
 drivers/gpu/drm/tiny/ili9225.c                   | 2 +-
 drivers/gpu/drm/tiny/ili9341.c                   | 2 +-
 drivers/gpu/drm/tiny/ili9486.c                   | 2 +-
 drivers/gpu/drm/tiny/mi0283qt.c                  | 2 +-
 drivers/gpu/drm/tiny/repaper.c                   | 2 +-
 drivers/gpu/drm/tiny/st7586.c                    | 2 +-
 drivers/gpu/drm/tiny/st7735r.c                   | 2 +-
 drivers/gpu/drm/tve200/tve200_drv.c              | 2 +-
 drivers/gpu/drm/udl/udl_drv.c                    | 2 +-
 drivers/gpu/drm/v3d/v3d_drv.c                    | 2 +-
 drivers/gpu/drm/vboxvideo/vbox_drv.c             | 4 ++--
 drivers/gpu/drm/vgem/vgem_drv.c                  | 2 +-
 drivers/gpu/drm/virtio/virtgpu_drv.c             | 4 ++--
 drivers/gpu/drm/vkms/vkms_drv.c                  | 2 +-
 drivers/gpu/drm/vmwgfx/vmwgfx_drv.c              | 2 +-
 drivers/gpu/drm/xen/xen_drm_front.c              | 2 +-
 drivers/gpu/drm/xlnx/zynqmp_dpsub.c              | 2 +-
 drivers/gpu/drm/zte/zx_drm_drv.c                 | 2 +-
 63 files changed, 75 insertions(+), 78 deletions(-)

diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
index cc5b5915bc5e..d04008f3e31a 100644
--- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
+++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
@@ -58,7 +58,7 @@ static irqreturn_t komeda_kms_irq_handler(int irq, void *data)
 	return status;
 }
 
-static struct drm_driver komeda_kms_driver = {
+static const struct drm_driver komeda_kms_driver = {
 	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	.lastclose			= drm_fb_helper_lastclose,
 	DRM_GEM_CMA_DRIVER_OPS_WITH_DUMB_CREATE(komeda_gem_cma_dumb_create),
diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
index faa8a5a752da..81ae92390736 100644
--- a/drivers/gpu/drm/arm/hdlcd_drv.c
+++ b/drivers/gpu/drm/arm/hdlcd_drv.c
@@ -234,7 +234,7 @@ static void hdlcd_debugfs_init(struct drm_minor *minor)
 
 DEFINE_DRM_GEM_CMA_FOPS(fops);
 
-static struct drm_driver hdlcd_driver = {
+static const struct drm_driver hdlcd_driver = {
 	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	.irq_handler = hdlcd_irq,
 	.irq_preinstall = hdlcd_irq_preinstall,
diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
index 26e60401a8e1..d83c7366b348 100644
--- a/drivers/gpu/drm/arm/malidp_drv.c
+++ b/drivers/gpu/drm/arm/malidp_drv.c
@@ -564,7 +564,7 @@ static void malidp_debugfs_init(struct drm_minor *minor)
 
 #endif //CONFIG_DEBUG_FS
 
-static struct drm_driver malidp_driver = {
+static const struct drm_driver malidp_driver = {
 	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	DRM_GEM_CMA_DRIVER_OPS_WITH_DUMB_CREATE(malidp_dumb_create),
 #ifdef CONFIG_DEBUG_FS
diff --git a/drivers/gpu/drm/armada/armada_drv.c b/drivers/gpu/drm/armada/armada_drv.c
index 22247cfce80b..44fe9f994fc5 100644
--- a/drivers/gpu/drm/armada/armada_drv.c
+++ b/drivers/gpu/drm/armada/armada_drv.c
@@ -27,7 +27,7 @@
 #include <drm/armada_drm.h>
 #include "armada_ioctlP.h"
 
-static struct drm_ioctl_desc armada_ioctls[] = {
+static const struct drm_ioctl_desc armada_ioctls[] = {
 	DRM_IOCTL_DEF_DRV(ARMADA_GEM_CREATE, armada_gem_create_ioctl,0),
 	DRM_IOCTL_DEF_DRV(ARMADA_GEM_MMAP, armada_gem_mmap_ioctl, 0),
 	DRM_IOCTL_DEF_DRV(ARMADA_GEM_PWRITE, armada_gem_pwrite_ioctl, 0),
@@ -35,7 +35,7 @@ static struct drm_ioctl_desc armada_ioctls[] = {
 
 DEFINE_DRM_GEM_FOPS(armada_drm_fops);
 
-static struct drm_driver armada_drm_driver = {
+static const struct drm_driver armada_drm_driver = {
 	.lastclose		= drm_fb_helper_lastclose,
 	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
@@ -48,6 +48,7 @@ static struct drm_driver armada_drm_driver = {
 	.date			= "20120730",
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	.ioctls			= armada_ioctls,
+	.num_ioctls = ARRAY_SIZE(armada_ioctls),
 	.fops			= &armada_drm_fops,
 };
 
@@ -275,8 +276,6 @@ static int __init armada_drm_init(void)
 {
 	int ret;
 
-	armada_drm_driver.num_ioctls = ARRAY_SIZE(armada_ioctls);
-
 	ret = platform_driver_register(&armada_lcd_platform_driver);
 	if (ret)
 		return ret;
diff --git a/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c b/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c
index 771ad71cd340..457ec04950f7 100644
--- a/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c
+++ b/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c
@@ -191,7 +191,7 @@ static void aspeed_gfx_unload(struct drm_device *drm)
 
 DEFINE_DRM_GEM_CMA_FOPS(fops);
 
-static struct drm_driver aspeed_gfx_driver = {
+static const struct drm_driver aspeed_gfx_driver = {
 	.driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	DRM_GEM_CMA_DRIVER_OPS,
 	.fops = &fops,
diff --git a/drivers/gpu/drm/ast/ast_drv.c b/drivers/gpu/drm/ast/ast_drv.c
index f0b4af1c390a..667b450606ef 100644
--- a/drivers/gpu/drm/ast/ast_drv.c
+++ b/drivers/gpu/drm/ast/ast_drv.c
@@ -49,7 +49,7 @@ module_param_named(modeset, ast_modeset, int, 0400);
 
 DEFINE_DRM_GEM_FOPS(ast_fops);
 
-static struct drm_driver ast_driver = {
+static const struct drm_driver ast_driver = {
 	.driver_features = DRIVER_ATOMIC |
 			   DRIVER_GEM |
 			   DRIVER_MODESET,
diff --git a/drivers/gpu/drm/ast/ast_drv.h b/drivers/gpu/drm/ast/ast_drv.h
index 467049ca8430..33e596a4f042 100644
--- a/drivers/gpu/drm/ast/ast_drv.h
+++ b/drivers/gpu/drm/ast/ast_drv.h
@@ -159,7 +159,7 @@ static inline struct ast_private *to_ast_private(struct drm_device *dev)
 	return container_of(dev, struct ast_private, base);
 }
 
-struct ast_private *ast_device_create(struct drm_driver *drv,
+struct ast_private *ast_device_create(const struct drm_driver *drv,
 				      struct pci_dev *pdev,
 				      unsigned long flags);
 
diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
index 77066bca8793..45dd8185a488 100644
--- a/drivers/gpu/drm/ast/ast_main.c
+++ b/drivers/gpu/drm/ast/ast_main.c
@@ -392,7 +392,7 @@ static void ast_device_release(void *data)
 	ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xa1, 0x04);
 }
 
-struct ast_private *ast_device_create(struct drm_driver *drv,
+struct ast_private *ast_device_create(const struct drm_driver *drv,
 				      struct pci_dev *pdev,
 				      unsigned long flags)
 {
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
index 03984932d174..65af56e47129 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
@@ -712,7 +712,7 @@ static void atmel_hlcdc_dc_irq_uninstall(struct drm_device *dev)
 
 DEFINE_DRM_GEM_CMA_FOPS(fops);
 
-static struct drm_driver atmel_hlcdc_dc_driver = {
+static const struct drm_driver atmel_hlcdc_dc_driver = {
 	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	.irq_handler = atmel_hlcdc_dc_irq_handler,
 	.irq_preinstall = atmel_hlcdc_dc_irq_uninstall,
diff --git a/drivers/gpu/drm/bochs/bochs_drv.c b/drivers/gpu/drm/bochs/bochs_drv.c
index e18c51de1196..fd454225fd19 100644
--- a/drivers/gpu/drm/bochs/bochs_drv.c
+++ b/drivers/gpu/drm/bochs/bochs_drv.c
@@ -57,7 +57,7 @@ static int bochs_load(struct drm_device *dev)
 
 DEFINE_DRM_GEM_FOPS(bochs_fops);
 
-static struct drm_driver bochs_driver = {
+static const struct drm_driver bochs_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	.fops			= &bochs_fops,
 	.name			= "bochs-drm",
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
index aa270b79e585..7604e3c07973 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
@@ -480,7 +480,7 @@ static const struct file_operations fops = {
 	.mmap               = etnaviv_gem_mmap,
 };
 
-static struct drm_driver etnaviv_drm_driver = {
+static const struct drm_driver etnaviv_drm_driver = {
 	.driver_features    = DRIVER_GEM | DRIVER_RENDER,
 	.open               = etnaviv_open,
 	.postclose           = etnaviv_postclose,
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
index fe46680ca208..e60257f1f24b 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
@@ -113,7 +113,7 @@ static const struct file_operations exynos_drm_driver_fops = {
 	.release	= drm_release,
 };
 
-static struct drm_driver exynos_drm_driver = {
+static const struct drm_driver exynos_drm_driver = {
 	.driver_features	= DRIVER_MODESET | DRIVER_GEM
 				  | DRIVER_ATOMIC | DRIVER_RENDER,
 	.open			= exynos_drm_open,
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
index ae584f62aa19..75b58d55a940 100644
--- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
+++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
@@ -124,7 +124,7 @@ static irqreturn_t fsl_dcu_drm_irq(int irq, void *arg)
 
 DEFINE_DRM_GEM_CMA_FOPS(fsl_dcu_drm_fops);
 
-static struct drm_driver fsl_dcu_drm_driver = {
+static const struct drm_driver fsl_dcu_drm_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	.load			= fsl_dcu_load,
 	.unload			= fsl_dcu_unload,
@@ -224,7 +224,6 @@ static int fsl_dcu_drm_probe(struct platform_device *pdev)
 	struct device *dev = &pdev->dev;
 	struct resource *res;
 	void __iomem *base;
-	struct drm_driver *driver = &fsl_dcu_drm_driver;
 	struct clk *pix_clk_in;
 	char pix_clk_name[32];
 	const char *pix_clk_in_name;
@@ -294,7 +293,7 @@ static int fsl_dcu_drm_probe(struct platform_device *pdev)
 
 	fsl_dev->tcon = fsl_tcon_init(dev);
 
-	drm = drm_dev_alloc(driver, dev);
+	drm = drm_dev_alloc(&fsl_dcu_drm_driver, dev);
 	if (IS_ERR(drm)) {
 		ret = PTR_ERR(drm);
 		goto unregister_pix_clk;
diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c
index b13376a6fb91..6e7197d89463 100644
--- a/drivers/gpu/drm/gma500/psb_drv.c
+++ b/drivers/gpu/drm/gma500/psb_drv.c
@@ -34,7 +34,7 @@
 #include "psb_intel_reg.h"
 #include "psb_reg.h"
 
-static struct drm_driver driver;
+static const struct drm_driver driver;
 static int psb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent);
 
 /*
@@ -491,7 +491,7 @@ static const struct file_operations psb_gem_fops = {
 	.read = drm_read,
 };
 
-static struct drm_driver driver = {
+static const struct drm_driver driver = {
 	.driver_features = DRIVER_MODESET | DRIVER_GEM,
 	.lastclose = drm_fb_helper_lastclose,
 
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
index a684814927cd..27205aa907f4 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
@@ -43,7 +43,7 @@ static irqreturn_t hibmc_drm_interrupt(int irq, void *arg)
 	return IRQ_HANDLED;
 }
 
-static struct drm_driver hibmc_driver = {
+static const struct drm_driver hibmc_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	.fops			= &hibmc_fops,
 	.name			= "hibmc",
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
index cfe8ff596d55..aa9641a6a7d8 100644
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
@@ -918,7 +918,7 @@ static const struct drm_mode_config_funcs ade_mode_config_funcs = {
 
 DEFINE_DRM_GEM_CMA_FOPS(ade_fops);
 
-static struct drm_driver ade_driver = {
+static const struct drm_driver ade_driver = {
 	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	.fops = &ade_fops,
 	DRM_GEM_CMA_DRIVER_OPS,
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h
index dee8ec2f7f2e..386d137f29e5 100644
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h
@@ -40,7 +40,7 @@ struct kirin_drm_data {
 	u32 num_planes;
 	u32 prim_plane;
 
-	struct drm_driver *driver;
+	const struct drm_driver *driver;
 	const struct drm_crtc_helper_funcs *crtc_helper_funcs;
 	const struct drm_crtc_funcs *crtc_funcs;
 	const struct drm_plane_helper_funcs *plane_helper_funcs;
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index d6e25212d5c0..f2389ba49c69 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -87,7 +87,7 @@
 #include "intel_sideband.h"
 #include "vlv_suspend.h"
 
-static struct drm_driver driver;
+static const struct drm_driver driver;
 
 static int i915_get_bridge_dev(struct drm_i915_private *dev_priv)
 {
@@ -1759,7 +1759,7 @@ static const struct drm_ioctl_desc i915_ioctls[] = {
 	DRM_IOCTL_DEF_DRV(I915_GEM_VM_DESTROY, i915_gem_vm_destroy_ioctl, DRM_RENDER_ALLOW),
 };
 
-static struct drm_driver driver = {
+static const struct drm_driver driver = {
 	/* Don't use MTRRs here; the Xserver or userspace app should
 	 * deal with them for Intel hardware.
 	 */
diff --git a/drivers/gpu/drm/i915/selftests/mock_gem_device.c b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
index 9220c9d1a4b7..e946bd2087d8 100644
--- a/drivers/gpu/drm/i915/selftests/mock_gem_device.c
+++ b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
@@ -81,7 +81,7 @@ static void mock_device_release(struct drm_device *dev)
 	i915_params_free(&i915->params);
 }
 
-static struct drm_driver mock_driver = {
+static const struct drm_driver mock_driver = {
 	.name = "mock",
 	.driver_features = DRIVER_GEM,
 	.release = mock_device_release,
diff --git a/drivers/gpu/drm/imx/dcss/dcss-kms.c b/drivers/gpu/drm/imx/dcss/dcss-kms.c
index b72e5cef7e40..b549ce5e7607 100644
--- a/drivers/gpu/drm/imx/dcss/dcss-kms.c
+++ b/drivers/gpu/drm/imx/dcss/dcss-kms.c
@@ -26,7 +26,7 @@ static const struct drm_mode_config_funcs dcss_drm_mode_config_funcs = {
 	.atomic_commit = drm_atomic_helper_commit,
 };
 
-static struct drm_driver dcss_kms_driver = {
+static const struct drm_driver dcss_kms_driver = {
 	.driver_features	= DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
 	DRM_GEM_CMA_DRIVER_OPS,
 	.fops			= &dcss_cma_fops,
diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c
index 183f2e91881d..7090b82e7ea2 100644
--- a/drivers/gpu/drm/imx/imx-drm-core.c
+++ b/drivers/gpu/drm/imx/imx-drm-core.c
@@ -143,7 +143,7 @@ static const struct drm_ioctl_desc imx_drm_ioctls[] = {
 	/* none so far */
 };
 
-static struct drm_driver imx_drm_driver = {
+static const struct drm_driver imx_drm_driver = {
 	.driver_features	= DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
 	DRM_GEM_CMA_DRIVER_OPS,
 	.ioctls			= imx_drm_ioctls,
diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
index 2329754af116..082cb9e45908 100644
--- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
+++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
@@ -710,7 +710,7 @@ static void ingenic_drm_disable_vblank(struct drm_crtc *crtc)
 
 DEFINE_DRM_GEM_CMA_FOPS(ingenic_drm_fops);
 
-static struct drm_driver ingenic_drm_driver_data = {
+static const struct drm_driver ingenic_drm_driver_data = {
 	.driver_features	= DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
 	.name			= "ingenic-drm",
 	.desc			= "DRM module for Ingenic SoCs",
diff --git a/drivers/gpu/drm/lima/lima_drv.c b/drivers/gpu/drm/lima/lima_drv.c
index ab460121fd52..d497af91d850 100644
--- a/drivers/gpu/drm/lima/lima_drv.c
+++ b/drivers/gpu/drm/lima/lima_drv.c
@@ -261,7 +261,7 @@ DEFINE_DRM_GEM_FOPS(lima_drm_driver_fops);
  * - 1.1.0 - add heap buffer support
  */
 
-static struct drm_driver lima_drm_driver = {
+static const struct drm_driver lima_drm_driver = {
 	.driver_features    = DRIVER_RENDER | DRIVER_GEM | DRIVER_SYNCOBJ,
 	.open               = lima_drm_driver_open,
 	.postclose          = lima_drm_driver_postclose,
diff --git a/drivers/gpu/drm/mcde/mcde_drv.c b/drivers/gpu/drm/mcde/mcde_drv.c
index f9b5f450a9cb..870626e04ec0 100644
--- a/drivers/gpu/drm/mcde/mcde_drv.c
+++ b/drivers/gpu/drm/mcde/mcde_drv.c
@@ -178,7 +178,7 @@ static int mcde_modeset_init(struct drm_device *drm)
 
 DEFINE_DRM_GEM_CMA_FOPS(drm_fops);
 
-static struct drm_driver mcde_drm_driver = {
+static const struct drm_driver mcde_drm_driver = {
 	.driver_features =
 		DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
 	.lastclose = drm_fb_helper_lastclose,
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index 7f3398a7c2b0..2e8065b1e2bb 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -321,7 +321,7 @@ struct drm_gem_object *mtk_drm_gem_prime_import(struct drm_device *dev,
 	return drm_gem_prime_import_dev(dev, dma_buf, private->dma_dev);
 }
 
-static struct drm_driver mtk_drm_driver = {
+static const struct drm_driver mtk_drm_driver = {
 	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
 
 	.dumb_create = mtk_drm_gem_dumb_create,
diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/meson_drv.c
index 8b9c8dd788c4..dc8509ceb787 100644
--- a/drivers/gpu/drm/meson/meson_drv.c
+++ b/drivers/gpu/drm/meson/meson_drv.c
@@ -90,7 +90,7 @@ static int meson_dumb_create(struct drm_file *file, struct drm_device *dev,
 
 DEFINE_DRM_GEM_CMA_FOPS(fops);
 
-static struct drm_driver meson_driver = {
+static const struct drm_driver meson_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 
 	/* IRQ */
diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.c b/drivers/gpu/drm/mgag200/mgag200_drv.c
index 771b26aeee19..0f07f259503d 100644
--- a/drivers/gpu/drm/mgag200/mgag200_drv.c
+++ b/drivers/gpu/drm/mgag200/mgag200_drv.c
@@ -28,7 +28,7 @@ module_param_named(modeset, mgag200_modeset, int, 0400);
 
 DEFINE_DRM_GEM_FOPS(mgag200_driver_fops);
 
-static struct drm_driver mgag200_driver = {
+static const struct drm_driver mgag200_driver = {
 	.driver_features = DRIVER_ATOMIC | DRIVER_GEM | DRIVER_MODESET,
 	.fops = &mgag200_driver_fops,
 	.name = DRIVER_NAME,
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index aa4509766d64..f8fd31e709bb 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -393,7 +393,7 @@ static int msm_init_vram(struct drm_device *dev)
 	return ret;
 }
 
-static int msm_drm_init(struct device *dev, struct drm_driver *drv)
+static int msm_drm_init(struct device *dev, const struct drm_driver *drv)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct drm_device *ddev;
@@ -984,7 +984,7 @@ static const struct file_operations fops = {
 	.mmap               = msm_gem_mmap,
 };
 
-static struct drm_driver msm_driver = {
+static const struct drm_driver msm_driver = {
 	.driver_features    = DRIVER_GEM |
 				DRIVER_RENDER |
 				DRIVER_ATOMIC |
diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.c b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
index 35122aef037b..6faf17b6408d 100644
--- a/drivers/gpu/drm/mxsfb/mxsfb_drv.c
+++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
@@ -289,7 +289,7 @@ static irqreturn_t mxsfb_irq_handler(int irq, void *data)
 
 DEFINE_DRM_GEM_CMA_FOPS(fops);
 
-static struct drm_driver mxsfb_driver = {
+static const struct drm_driver mxsfb_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	.irq_handler		= mxsfb_irq_handler,
 	.irq_preinstall		= mxsfb_irq_disable,
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
index 2b82a708eca6..21a6cd3f5473 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.c
+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
@@ -534,7 +534,7 @@ static const struct file_operations omapdriver_fops = {
 	.llseek = noop_llseek,
 };
 
-static struct drm_driver omap_drm_driver = {
+static const struct drm_driver omap_drm_driver = {
 	.driver_features = DRIVER_MODESET | DRIVER_GEM  |
 		DRIVER_ATOMIC | DRIVER_RENDER,
 	.open = dev_open,
diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
index 37d4cb7a5491..ed116bd3d6d6 100644
--- a/drivers/gpu/drm/panfrost/panfrost_drv.c
+++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
@@ -548,7 +548,7 @@ DEFINE_DRM_GEM_FOPS(panfrost_drm_driver_fops);
  * - 1.0 - initial interface
  * - 1.1 - adds HEAP and NOEXEC flags for CREATE_BO
  */
-static struct drm_driver panfrost_drm_driver = {
+static const struct drm_driver panfrost_drm_driver = {
 	.driver_features	= DRIVER_RENDER | DRIVER_GEM | DRIVER_SYNCOBJ,
 	.open			= panfrost_open,
 	.postclose		= panfrost_postclose,
diff --git a/drivers/gpu/drm/pl111/pl111_drv.c b/drivers/gpu/drm/pl111/pl111_drv.c
index 3899c28f428d..10d9a12be672 100644
--- a/drivers/gpu/drm/pl111/pl111_drv.c
+++ b/drivers/gpu/drm/pl111/pl111_drv.c
@@ -213,7 +213,7 @@ pl111_gem_import_sg_table(struct drm_device *dev,
 
 DEFINE_DRM_GEM_CMA_FOPS(drm_fops);
 
-static struct drm_driver pl111_drm_driver = {
+static const struct drm_driver pl111_drm_driver = {
 	.driver_features =
 		DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
 	.ioctls = NULL,
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
index 9c11e36ad33a..bfadb799d6a3 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
@@ -297,7 +297,7 @@ static struct pci_device_id pciidlist[] = {
 
 MODULE_DEVICE_TABLE(pci, pciidlist);
 
-static struct drm_driver kms_driver;
+static const struct drm_driver kms_driver;
 
 bool radeon_device_is_virtual(void);
 
@@ -629,7 +629,7 @@ static const struct drm_ioctl_desc radeon_ioctls_kms[] = {
 	DRM_IOCTL_DEF_DRV(RADEON_GEM_USERPTR, radeon_gem_userptr_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
 };
 
-static struct drm_driver kms_driver = {
+static const struct drm_driver kms_driver = {
 	.driver_features =
 	    DRIVER_GEM | DRIVER_RENDER | DRIVER_MODESET,
 	.load = radeon_driver_load_kms,
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
index 447be991fa25..600056dff374 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
@@ -507,7 +507,7 @@ MODULE_DEVICE_TABLE(of, rcar_du_of_table);
 
 DEFINE_DRM_GEM_CMA_FOPS(rcar_du_fops);
 
-static struct drm_driver rcar_du_driver = {
+static const struct drm_driver rcar_du_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	DRM_GEM_CMA_DRIVER_OPS_WITH_DUMB_CREATE(rcar_du_dumb_create),
 	.fops			= &rcar_du_fops,
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
index b7654f5e4225..212bd87c0c4a 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
@@ -35,7 +35,7 @@
 #define DRIVER_MINOR	0
 
 static bool is_support_iommu = true;
-static struct drm_driver rockchip_drm_driver;
+static const struct drm_driver rockchip_drm_driver;
 
 /*
  * Attach a (component) device to the shared drm dma mapping from master drm
@@ -209,7 +209,7 @@ static const struct file_operations rockchip_drm_driver_fops = {
 	.release = drm_release,
 };
 
-static struct drm_driver rockchip_drm_driver = {
+static const struct drm_driver rockchip_drm_driver = {
 	.driver_features	= DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
 	.lastclose		= drm_fb_helper_lastclose,
 	.dumb_create		= rockchip_gem_dumb_create,
diff --git a/drivers/gpu/drm/shmobile/shmob_drm_drv.c b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
index 26a15c214bd3..0a02b7092c04 100644
--- a/drivers/gpu/drm/shmobile/shmob_drm_drv.c
+++ b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
@@ -128,7 +128,7 @@ static irqreturn_t shmob_drm_irq(int irq, void *arg)
 
 DEFINE_DRM_GEM_CMA_FOPS(shmob_drm_fops);
 
-static struct drm_driver shmob_drm_driver = {
+static const struct drm_driver shmob_drm_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET,
 	.irq_handler		= shmob_drm_irq,
 	DRM_GEM_CMA_DRIVER_OPS,
diff --git a/drivers/gpu/drm/sti/sti_drv.c b/drivers/gpu/drm/sti/sti_drv.c
index 3f54efa36098..c7efb43b83ee 100644
--- a/drivers/gpu/drm/sti/sti_drv.c
+++ b/drivers/gpu/drm/sti/sti_drv.c
@@ -130,7 +130,7 @@ static void sti_mode_config_init(struct drm_device *dev)
 
 DEFINE_DRM_GEM_CMA_FOPS(sti_driver_fops);
 
-static struct drm_driver sti_driver = {
+static const struct drm_driver sti_driver = {
 	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
 	.fops = &sti_driver_fops,
 	DRM_GEM_CMA_DRIVER_OPS,
diff --git a/drivers/gpu/drm/stm/drv.c b/drivers/gpu/drm/stm/drv.c
index 411103f013e2..222869b232ae 100644
--- a/drivers/gpu/drm/stm/drv.c
+++ b/drivers/gpu/drm/stm/drv.c
@@ -53,7 +53,7 @@ static int stm_gem_cma_dumb_create(struct drm_file *file,
 
 DEFINE_DRM_GEM_CMA_FOPS(drv_driver_fops);
 
-static struct drm_driver drv_driver = {
+static const struct drm_driver drv_driver = {
 	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
 	.name = "stm",
 	.desc = "STMicroelectronics SoC DRM",
diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
index 29861fc81b35..91502937f26d 100644
--- a/drivers/gpu/drm/sun4i/sun4i_drv.c
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
@@ -40,7 +40,7 @@ static int drm_sun4i_gem_dumb_create(struct drm_file *file_priv,
 
 DEFINE_DRM_GEM_CMA_FOPS(sun4i_drv_fops);
 
-static struct drm_driver sun4i_drv_driver = {
+static const struct drm_driver sun4i_drv_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 
 	/* Generic Operations */
diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c
index 24f353c1cee8..ae13a3ff8a87 100644
--- a/drivers/gpu/drm/tegra/drm.c
+++ b/drivers/gpu/drm/tegra/drm.c
@@ -850,7 +850,7 @@ static void tegra_debugfs_init(struct drm_minor *minor)
 }
 #endif
 
-static struct drm_driver tegra_drm_driver = {
+static const struct drm_driver tegra_drm_driver = {
 	.driver_features = DRIVER_MODESET | DRIVER_GEM |
 			   DRIVER_ATOMIC | DRIVER_RENDER,
 	.open = tegra_drm_open,
@@ -1084,12 +1084,11 @@ static bool host1x_drm_wants_iommu(struct host1x_device *dev)
 
 static int host1x_drm_probe(struct host1x_device *dev)
 {
-	struct drm_driver *driver = &tegra_drm_driver;
 	struct tegra_drm *tegra;
 	struct drm_device *drm;
 	int err;
 
-	drm = drm_dev_alloc(driver, &dev->dev);
+	drm = drm_dev_alloc(&tegra_drm_driver, &dev->dev);
 	if (IS_ERR(drm))
 		return PTR_ERR(drm);
 
diff --git a/drivers/gpu/drm/tidss/tidss_drv.c b/drivers/gpu/drm/tidss/tidss_drv.c
index 9179ea18f625..66e3c86eb5c7 100644
--- a/drivers/gpu/drm/tidss/tidss_drv.c
+++ b/drivers/gpu/drm/tidss/tidss_drv.c
@@ -108,7 +108,7 @@ static void tidss_release(struct drm_device *ddev)
 
 DEFINE_DRM_GEM_CMA_FOPS(tidss_fops);
 
-static struct drm_driver tidss_driver = {
+static const struct drm_driver tidss_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	.fops			= &tidss_fops,
 	.release		= tidss_release,
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index 3d7e4db756b7..f1d3a9f919fd 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
@@ -166,7 +166,7 @@ static void tilcdc_fini(struct drm_device *dev)
 	drm_dev_put(dev);
 }
 
-static int tilcdc_init(struct drm_driver *ddrv, struct device *dev)
+static int tilcdc_init(const struct drm_driver *ddrv, struct device *dev)
 {
 	struct drm_device *ddev;
 	struct platform_device *pdev = to_platform_device(dev);
@@ -452,7 +452,7 @@ static void tilcdc_debugfs_init(struct drm_minor *minor)
 
 DEFINE_DRM_GEM_CMA_FOPS(fops);
 
-static struct drm_driver tilcdc_driver = {
+static const struct drm_driver tilcdc_driver = {
 	.driver_features    = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	.irq_handler        = tilcdc_irq,
 	DRM_GEM_CMA_DRIVER_OPS,
diff --git a/drivers/gpu/drm/tiny/cirrus.c b/drivers/gpu/drm/tiny/cirrus.c
index 759a5a66dd0b..e5641969c181 100644
--- a/drivers/gpu/drm/tiny/cirrus.c
+++ b/drivers/gpu/drm/tiny/cirrus.c
@@ -536,7 +536,7 @@ static int cirrus_mode_config_init(struct cirrus_device *cirrus)
 
 DEFINE_DRM_GEM_FOPS(cirrus_fops);
 
-static struct drm_driver cirrus_driver = {
+static const struct drm_driver cirrus_driver = {
 	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
 
 	.name		 = DRIVER_NAME,
diff --git a/drivers/gpu/drm/tiny/gm12u320.c b/drivers/gpu/drm/tiny/gm12u320.c
index cc397671f689..5a953c4ce265 100644
--- a/drivers/gpu/drm/tiny/gm12u320.c
+++ b/drivers/gpu/drm/tiny/gm12u320.c
@@ -600,7 +600,7 @@ static const uint64_t gm12u320_pipe_modifiers[] = {
 
 DEFINE_DRM_GEM_FOPS(gm12u320_fops);
 
-static struct drm_driver gm12u320_drm_driver = {
+static const struct drm_driver gm12u320_drm_driver = {
 	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
 
 	.name		 = DRIVER_NAME,
diff --git a/drivers/gpu/drm/tiny/hx8357d.c b/drivers/gpu/drm/tiny/hx8357d.c
index 0998309b0d95..c6525cd02bc2 100644
--- a/drivers/gpu/drm/tiny/hx8357d.c
+++ b/drivers/gpu/drm/tiny/hx8357d.c
@@ -193,7 +193,7 @@ static const struct drm_display_mode yx350hv15_mode = {
 
 DEFINE_DRM_GEM_CMA_FOPS(hx8357d_fops);
 
-static struct drm_driver hx8357d_driver = {
+static const struct drm_driver hx8357d_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	.fops			= &hx8357d_fops,
 	DRM_GEM_CMA_DRIVER_OPS_VMAP,
diff --git a/drivers/gpu/drm/tiny/ili9225.c b/drivers/gpu/drm/tiny/ili9225.c
index 97a77262d791..8e98962db5a2 100644
--- a/drivers/gpu/drm/tiny/ili9225.c
+++ b/drivers/gpu/drm/tiny/ili9225.c
@@ -337,7 +337,7 @@ static const struct drm_display_mode ili9225_mode = {
 
 DEFINE_DRM_GEM_CMA_FOPS(ili9225_fops);
 
-static struct drm_driver ili9225_driver = {
+static const struct drm_driver ili9225_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	.fops			= &ili9225_fops,
 	DRM_GEM_CMA_DRIVER_OPS_VMAP,
diff --git a/drivers/gpu/drm/tiny/ili9341.c b/drivers/gpu/drm/tiny/ili9341.c
index d39c39df56ad..6ce97f0698eb 100644
--- a/drivers/gpu/drm/tiny/ili9341.c
+++ b/drivers/gpu/drm/tiny/ili9341.c
@@ -149,7 +149,7 @@ static const struct drm_display_mode yx240qv29_mode = {
 
 DEFINE_DRM_GEM_CMA_FOPS(ili9341_fops);
 
-static struct drm_driver ili9341_driver = {
+static const struct drm_driver ili9341_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	.fops			= &ili9341_fops,
 	DRM_GEM_CMA_DRIVER_OPS_VMAP,
diff --git a/drivers/gpu/drm/tiny/ili9486.c b/drivers/gpu/drm/tiny/ili9486.c
index 403af68fa440..d7ce40eb166a 100644
--- a/drivers/gpu/drm/tiny/ili9486.c
+++ b/drivers/gpu/drm/tiny/ili9486.c
@@ -162,7 +162,7 @@ static const struct drm_display_mode waveshare_mode = {
 
 DEFINE_DRM_GEM_CMA_FOPS(ili9486_fops);
 
-static struct drm_driver ili9486_driver = {
+static const struct drm_driver ili9486_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	.fops			= &ili9486_fops,
 	DRM_GEM_CMA_DRIVER_OPS_VMAP,
diff --git a/drivers/gpu/drm/tiny/mi0283qt.c b/drivers/gpu/drm/tiny/mi0283qt.c
index 2131b4268c00..ff77f983f803 100644
--- a/drivers/gpu/drm/tiny/mi0283qt.c
+++ b/drivers/gpu/drm/tiny/mi0283qt.c
@@ -153,7 +153,7 @@ static const struct drm_display_mode mi0283qt_mode = {
 
 DEFINE_DRM_GEM_CMA_FOPS(mi0283qt_fops);
 
-static struct drm_driver mi0283qt_driver = {
+static const struct drm_driver mi0283qt_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	.fops			= &mi0283qt_fops,
 	DRM_GEM_CMA_DRIVER_OPS_VMAP,
diff --git a/drivers/gpu/drm/tiny/repaper.c b/drivers/gpu/drm/tiny/repaper.c
index 2e01cf0a9876..11c602fc9897 100644
--- a/drivers/gpu/drm/tiny/repaper.c
+++ b/drivers/gpu/drm/tiny/repaper.c
@@ -936,7 +936,7 @@ static const u8 repaper_e2271cs021_cs[] = { 0x00, 0x00, 0x00, 0x7f,
 
 DEFINE_DRM_GEM_CMA_FOPS(repaper_fops);
 
-static struct drm_driver repaper_driver = {
+static const struct drm_driver repaper_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	.fops			= &repaper_fops,
 	DRM_GEM_CMA_DRIVER_OPS_VMAP,
diff --git a/drivers/gpu/drm/tiny/st7586.c b/drivers/gpu/drm/tiny/st7586.c
index d05de03891f8..ff5cf60f4bd7 100644
--- a/drivers/gpu/drm/tiny/st7586.c
+++ b/drivers/gpu/drm/tiny/st7586.c
@@ -277,7 +277,7 @@ static const struct drm_display_mode st7586_mode = {
 
 DEFINE_DRM_GEM_CMA_FOPS(st7586_fops);
 
-static struct drm_driver st7586_driver = {
+static const struct drm_driver st7586_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	.fops			= &st7586_fops,
 	DRM_GEM_CMA_DRIVER_OPS_VMAP,
diff --git a/drivers/gpu/drm/tiny/st7735r.c b/drivers/gpu/drm/tiny/st7735r.c
index a0f688f0d050..2c77d9ab7e8d 100644
--- a/drivers/gpu/drm/tiny/st7735r.c
+++ b/drivers/gpu/drm/tiny/st7735r.c
@@ -154,7 +154,7 @@ static const struct st7735r_cfg rh128128t_cfg = {
 
 DEFINE_DRM_GEM_CMA_FOPS(st7735r_fops);
 
-static struct drm_driver st7735r_driver = {
+static const struct drm_driver st7735r_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	.fops			= &st7735r_fops,
 	DRM_GEM_CMA_DRIVER_OPS_VMAP,
diff --git a/drivers/gpu/drm/tve200/tve200_drv.c b/drivers/gpu/drm/tve200/tve200_drv.c
index b5259cb1383f..07140e0b90a3 100644
--- a/drivers/gpu/drm/tve200/tve200_drv.c
+++ b/drivers/gpu/drm/tve200/tve200_drv.c
@@ -137,7 +137,7 @@ static int tve200_modeset_init(struct drm_device *dev)
 
 DEFINE_DRM_GEM_CMA_FOPS(drm_fops);
 
-static struct drm_driver tve200_drm_driver = {
+static const struct drm_driver tve200_drm_driver = {
 	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
 	.ioctls = NULL,
 	.fops = &drm_fops,
diff --git a/drivers/gpu/drm/udl/udl_drv.c b/drivers/gpu/drm/udl/udl_drv.c
index 96d4317a2c1b..46df4d07bd7b 100644
--- a/drivers/gpu/drm/udl/udl_drv.c
+++ b/drivers/gpu/drm/udl/udl_drv.c
@@ -34,7 +34,7 @@ static int udl_usb_resume(struct usb_interface *interface)
 
 DEFINE_DRM_GEM_FOPS(udl_driver_fops);
 
-static struct drm_driver driver = {
+static const struct drm_driver driver = {
 	.driver_features = DRIVER_ATOMIC | DRIVER_GEM | DRIVER_MODESET,
 
 	/* GEM hooks */
diff --git a/drivers/gpu/drm/v3d/v3d_drv.c b/drivers/gpu/drm/v3d/v3d_drv.c
index 9f7c26193831..2da0c1180bc6 100644
--- a/drivers/gpu/drm/v3d/v3d_drv.c
+++ b/drivers/gpu/drm/v3d/v3d_drv.c
@@ -194,7 +194,7 @@ static const struct drm_ioctl_desc v3d_drm_ioctls[] = {
 	DRM_IOCTL_DEF_DRV(V3D_SUBMIT_CSD, v3d_submit_csd_ioctl, DRM_RENDER_ALLOW | DRM_AUTH),
 };
 
-static struct drm_driver v3d_drm_driver = {
+static const struct drm_driver v3d_drm_driver = {
 	.driver_features = (DRIVER_GEM |
 			    DRIVER_RENDER |
 			    DRIVER_SYNCOBJ),
diff --git a/drivers/gpu/drm/vboxvideo/vbox_drv.c b/drivers/gpu/drm/vboxvideo/vbox_drv.c
index cf2e3e6a2388..f3eac72cb46e 100644
--- a/drivers/gpu/drm/vboxvideo/vbox_drv.c
+++ b/drivers/gpu/drm/vboxvideo/vbox_drv.c
@@ -26,7 +26,7 @@ static int vbox_modeset = -1;
 MODULE_PARM_DESC(modeset, "Disable/Enable modesetting");
 module_param_named(modeset, vbox_modeset, int, 0400);
 
-static struct drm_driver driver;
+static const struct drm_driver driver;
 
 static const struct pci_device_id pciidlist[] = {
 	{ PCI_DEVICE(0x80ee, 0xbeef) },
@@ -175,7 +175,7 @@ static struct pci_driver vbox_pci_driver = {
 
 DEFINE_DRM_GEM_FOPS(vbox_fops);
 
-static struct drm_driver driver = {
+static const struct drm_driver driver = {
 	.driver_features =
 	    DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
 
diff --git a/drivers/gpu/drm/vgem/vgem_drv.c b/drivers/gpu/drm/vgem/vgem_drv.c
index fa54a6d1403d..3e9b7a4c30ce 100644
--- a/drivers/gpu/drm/vgem/vgem_drv.c
+++ b/drivers/gpu/drm/vgem/vgem_drv.c
@@ -415,7 +415,7 @@ static const struct drm_gem_object_funcs vgem_gem_object_funcs = {
 	.vm_ops = &vgem_gem_vm_ops,
 };
 
-static struct drm_driver vgem_driver = {
+static const struct drm_driver vgem_driver = {
 	.driver_features		= DRIVER_GEM | DRIVER_RENDER,
 	.open				= vgem_open,
 	.postclose			= vgem_postclose,
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c
index 86330f1ade72..27f13bd29c13 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.c
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
@@ -37,7 +37,7 @@
 
 #include "virtgpu_drv.h"
 
-static struct drm_driver driver;
+static const struct drm_driver driver;
 
 static int virtio_gpu_modeset = -1;
 
@@ -190,7 +190,7 @@ MODULE_AUTHOR("Alon Levy");
 
 DEFINE_DRM_GEM_FOPS(virtio_gpu_driver_fops);
 
-static struct drm_driver driver = {
+static const struct drm_driver driver = {
 	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_RENDER | DRIVER_ATOMIC,
 	.open = virtio_gpu_driver_open,
 	.postclose = virtio_gpu_driver_postclose,
diff --git a/drivers/gpu/drm/vkms/vkms_drv.c b/drivers/gpu/drm/vkms/vkms_drv.c
index 98ba844ae77d..8056b3d1ff6a 100644
--- a/drivers/gpu/drm/vkms/vkms_drv.c
+++ b/drivers/gpu/drm/vkms/vkms_drv.c
@@ -78,7 +78,7 @@ static void vkms_atomic_commit_tail(struct drm_atomic_state *old_state)
 	drm_atomic_helper_cleanup_planes(dev, old_state);
 }
 
-static struct drm_driver vkms_driver = {
+static const struct drm_driver vkms_driver = {
 	.driver_features	= DRIVER_MODESET | DRIVER_ATOMIC | DRIVER_GEM,
 	.release		= vkms_release,
 	.fops			= &vkms_driver_fops,
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
index 68206d0a1237..e66b252e3923 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
@@ -1465,7 +1465,7 @@ static const struct file_operations vmwgfx_driver_fops = {
 	.get_unmapped_area = vmw_get_unmapped_area,
 };
 
-static struct drm_driver driver = {
+static const struct drm_driver driver = {
 	.driver_features =
 	DRIVER_MODESET | DRIVER_RENDER | DRIVER_ATOMIC,
 	.ioctls = vmw_ioctls,
diff --git a/drivers/gpu/drm/xen/xen_drm_front.c b/drivers/gpu/drm/xen/xen_drm_front.c
index 98b6d2ba088a..30d9adf31c84 100644
--- a/drivers/gpu/drm/xen/xen_drm_front.c
+++ b/drivers/gpu/drm/xen/xen_drm_front.c
@@ -483,7 +483,7 @@ static const struct file_operations xen_drm_dev_fops = {
 	.mmap           = xen_drm_front_gem_mmap,
 };
 
-static struct drm_driver xen_drm_driver = {
+static const struct drm_driver xen_drm_driver = {
 	.driver_features           = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	.release                   = xen_drm_drv_release,
 	.prime_handle_to_fd        = drm_gem_prime_handle_to_fd,
diff --git a/drivers/gpu/drm/xlnx/zynqmp_dpsub.c b/drivers/gpu/drm/xlnx/zynqmp_dpsub.c
index f3ffc3703a0e..0c1c50271a88 100644
--- a/drivers/gpu/drm/xlnx/zynqmp_dpsub.c
+++ b/drivers/gpu/drm/xlnx/zynqmp_dpsub.c
@@ -76,7 +76,7 @@ static const struct drm_mode_config_funcs zynqmp_dpsub_mode_config_funcs = {
 
 DEFINE_DRM_GEM_CMA_FOPS(zynqmp_dpsub_drm_fops);
 
-static struct drm_driver zynqmp_dpsub_drm_driver = {
+static const struct drm_driver zynqmp_dpsub_drm_driver = {
 	.driver_features		= DRIVER_MODESET | DRIVER_GEM |
 					  DRIVER_ATOMIC,
 
diff --git a/drivers/gpu/drm/zte/zx_drm_drv.c b/drivers/gpu/drm/zte/zx_drm_drv.c
index 31014a451f8b..5506336594e2 100644
--- a/drivers/gpu/drm/zte/zx_drm_drv.c
+++ b/drivers/gpu/drm/zte/zx_drm_drv.c
@@ -34,7 +34,7 @@ static const struct drm_mode_config_funcs zx_drm_mode_config_funcs = {
 
 DEFINE_DRM_GEM_CMA_FOPS(zx_drm_fops);
 
-static struct drm_driver zx_drm_driver = {
+static const struct drm_driver zx_drm_driver = {
 	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
 	DRM_GEM_CMA_DRIVER_OPS,
 	.fops = &zx_drm_fops,
-- 
2.28.0

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

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* RE: [PATCH 3/5] drm/amdgpu: Paper over the drm_driver mangling for virt
  2020-10-30 10:11 ` [PATCH 3/5] drm/amdgpu: Paper over the drm_driver mangling for virt Daniel Vetter
@ 2020-10-30 10:41   ` Liu, Monk
  2020-10-30 12:04     ` Daniel Vetter
  2020-10-30 18:47   ` Alex Deucher
  1 sibling, 1 reply; 19+ messages in thread
From: Liu, Monk @ 2020-10-30 10:41 UTC (permalink / raw)
  To: Daniel Vetter, DRI Development
  Cc: Gong, Curry, Zhang, Bokun, Kuehling,  Felix, Sheng, Wenhui,
	Koenig, Christian, Liu, Shaoyun, Tuikov, Luben, Yang, Stanley,
	Thomas Zimmermann, Deucher,  Alexander, Daniel Vetter,
	Yintian Tao, Quan, Evan, Intel Graphics Development, Li, Dennis,
	Zhang, Hawking

[AMD Official Use Only - Internal Distribution Only]

What's the purpose of the patch sets

e.g.: what bug can those 5 patches fix or what feature provided

for this particular one (3/5) I didn't see how it helpful, could you give a background  ?

thanks
_____________________________________
Monk Liu|GPU Virtualization Team |AMD


-----Original Message-----
From: Daniel Vetter <daniel.vetter@ffwll.ch>
Sent: Friday, October 30, 2020 6:11 PM
To: DRI Development <dri-devel@lists.freedesktop.org>
Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org>; Daniel Vetter <daniel.vetter@ffwll.ch>; Deucher, Alexander <Alexander.Deucher@amd.com>; Koenig, Christian <Christian.Koenig@amd.com>; Quan, Evan <Evan.Quan@amd.com>; Kuehling, Felix <Felix.Kuehling@amd.com>; Zhang, Hawking <Hawking.Zhang@amd.com>; Grodzovsky, Andrey <Andrey.Grodzovsky@amd.com>; Tuikov, Luben <Luben.Tuikov@amd.com>; Thomas Zimmermann <tzimmermann@suse.de>; Liu, Monk <Monk.Liu@amd.com>; Yintian Tao <yttao@amd.com>; Li, Dennis <Dennis.Li@amd.com>; Liu, Shaoyun <Shaoyun.Liu@amd.com>; Zhang, Bokun <Bokun.Zhang@amd.com>; Yang, Stanley <Stanley.Yang@amd.com>; Sheng, Wenhui <Wenhui.Sheng@amd.com>; Gong, Curry <Curry.Gong@amd.com>; Daniel Vetter <daniel.vetter@intel.com>
Subject: [PATCH 3/5] drm/amdgpu: Paper over the drm_driver mangling for virt

Prep work to make drm_device->driver const.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: "Christian König" <christian.koenig@amd.com>
Cc: Evan Quan <evan.quan@amd.com>
Cc: Felix Kuehling <Felix.Kuehling@amd.com>
Cc: Hawking Zhang <Hawking.Zhang@amd.com>
Cc: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
Cc: Luben Tuikov <luben.tuikov@amd.com>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: Monk Liu <Monk.Liu@amd.com>
Cc: Yintian Tao <yttao@amd.com>
Cc: Dennis Li <Dennis.Li@amd.com>
Cc: shaoyunl <shaoyun.liu@amd.com>
Cc: Bokun Zhang <Bokun.Zhang@amd.com>
Cc: "Stanley.Yang" <Stanley.Yang@amd.com>
Cc: Wenhui Sheng <Wenhui.Sheng@amd.com>
Cc: chen gong <curry.gong@amd.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c  |  8 ++++----  drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 12 +++++++++++-
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index 024c3b70b1aa..3d337f13ae4e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -1093,7 +1093,7 @@ static const struct pci_device_id pciidlist[] = {

 MODULE_DEVICE_TABLE(pci, pciidlist);

-static struct drm_driver kms_driver;
+struct drm_driver amdgpu_kms_driver;

 static int amdgpu_pci_probe(struct pci_dev *pdev,
     const struct pci_device_id *ent) @@ -1164,7 +1164,7 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
 if (ret)
 return ret;

-adev = devm_drm_dev_alloc(&pdev->dev, &kms_driver, typeof(*adev), ddev);
+adev = devm_drm_dev_alloc(&pdev->dev, &amdgpu_kms_driver,
+typeof(*adev), ddev);
 if (IS_ERR(adev))
 return PTR_ERR(adev);

@@ -1508,7 +1508,7 @@ int amdgpu_file_to_fpriv(struct file *filp, struct amdgpu_fpriv **fpriv)
 return 0;
 }

-static struct drm_driver kms_driver = {
+struct drm_driver amdgpu_kms_driver = {
 .driver_features =
     DRIVER_ATOMIC |
     DRIVER_GEM |
@@ -1571,7 +1571,7 @@ static int __init amdgpu_init(void)
 goto error_fence;

 DRM_INFO("amdgpu kernel modesetting enabled.\n");
-kms_driver.num_ioctls = amdgpu_max_kms_ioctl;
+amdgpu_kms_driver.num_ioctls = amdgpu_max_kms_ioctl;
 amdgpu_register_atpx_handler();

 /* Ignore KFD init failures. Normal when CONFIG_HSA_AMD is not set. */ diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
index d0aea5e39531..dde4c449c284 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
@@ -45,13 +45,23 @@ bool amdgpu_virt_mmio_blocked(struct amdgpu_device *adev)
 return RREG32_NO_KIQ(0xc040) == 0xffffffff;  }

+extern struct drm_driver amdgpu_kms_driver;
+
 void amdgpu_virt_init_setting(struct amdgpu_device *adev)  {
 /* enable virtual display */
 if (adev->mode_info.num_crtc == 0)
 adev->mode_info.num_crtc = 1;
 adev->enable_virtual_display = true;
-adev_to_drm(adev)->driver->driver_features &= ~DRIVER_ATOMIC;
+
+/*
+ * FIXME: Either make virt support atomic or make sure you have two
+ * drm_driver structs, these kind of tricks are only ok when there's
+ * guaranteed only a single device per system. This should also be done
+ * before struct drm_device is initialized.
+ */
+amdgpu_kms_driver.driver_features &= ~DRIVER_ATOMIC;
+
 adev->cg_flags = 0;
 adev->pg_flags = 0;
 }
--
2.28.0

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

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH 3/5] drm/amdgpu: Paper over the drm_driver mangling for virt
  2020-10-30 10:41   ` Liu, Monk
@ 2020-10-30 12:04     ` Daniel Vetter
  2020-10-31  5:09       ` Luben Tuikov
  0 siblings, 1 reply; 19+ messages in thread
From: Daniel Vetter @ 2020-10-30 12:04 UTC (permalink / raw)
  To: Liu, Monk
  Cc: Gong, Curry, Zhang, Bokun, Kuehling, Felix, DRI Development,
	Koenig, Christian, Liu, Shaoyun, Tuikov, Luben, Yang, Stanley,
	Sheng, Wenhui, Thomas Zimmermann, Deucher, Alexander,
	Daniel Vetter, Yintian Tao, Quan, Evan,
	Intel Graphics Development, Li, Dennis, Zhang, Hawking

On Fri, Oct 30, 2020 at 11:41 AM Liu, Monk <Monk.Liu@amd.com> wrote:
>
> [AMD Official Use Only - Internal Distribution Only]
>
> What's the purpose of the patch sets
>
> e.g.: what bug can those 5 patches fix or what feature provided
>
> for this particular one (3/5) I didn't see how it helpful, could you give a background  ?

It's good to make function tables const, so that they can be write
protected. More resilience against exploits and all that. This patch
here is needed to be able to make drm_device->driver const so that all
other drivers can make their drm_driver structure const. Would be good
to fully fix up amdgpu like in the comment, but I'm not going that in
this series here.
-Daniel

>
> thanks
> _____________________________________
> Monk Liu|GPU Virtualization Team |AMD
>
>
> -----Original Message-----
> From: Daniel Vetter <daniel.vetter@ffwll.ch>
> Sent: Friday, October 30, 2020 6:11 PM
> To: DRI Development <dri-devel@lists.freedesktop.org>
> Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org>; Daniel Vetter <daniel.vetter@ffwll.ch>; Deucher, Alexander <Alexander.Deucher@amd.com>; Koenig, Christian <Christian.Koenig@amd.com>; Quan, Evan <Evan.Quan@amd.com>; Kuehling, Felix <Felix.Kuehling@amd.com>; Zhang, Hawking <Hawking.Zhang@amd.com>; Grodzovsky, Andrey <Andrey.Grodzovsky@amd.com>; Tuikov, Luben <Luben.Tuikov@amd.com>; Thomas Zimmermann <tzimmermann@suse.de>; Liu, Monk <Monk.Liu@amd.com>; Yintian Tao <yttao@amd.com>; Li, Dennis <Dennis.Li@amd.com>; Liu, Shaoyun <Shaoyun.Liu@amd.com>; Zhang, Bokun <Bokun.Zhang@amd.com>; Yang, Stanley <Stanley.Yang@amd.com>; Sheng, Wenhui <Wenhui.Sheng@amd.com>; Gong, Curry <Curry.Gong@amd.com>; Daniel Vetter <daniel.vetter@intel.com>
> Subject: [PATCH 3/5] drm/amdgpu: Paper over the drm_driver mangling for virt
>
> Prep work to make drm_device->driver const.
>
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Alex Deucher <alexander.deucher@amd.com>
> Cc: "Christian König" <christian.koenig@amd.com>
> Cc: Evan Quan <evan.quan@amd.com>
> Cc: Felix Kuehling <Felix.Kuehling@amd.com>
> Cc: Hawking Zhang <Hawking.Zhang@amd.com>
> Cc: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
> Cc: Luben Tuikov <luben.tuikov@amd.com>
> Cc: Thomas Zimmermann <tzimmermann@suse.de>
> Cc: Monk Liu <Monk.Liu@amd.com>
> Cc: Yintian Tao <yttao@amd.com>
> Cc: Dennis Li <Dennis.Li@amd.com>
> Cc: shaoyunl <shaoyun.liu@amd.com>
> Cc: Bokun Zhang <Bokun.Zhang@amd.com>
> Cc: "Stanley.Yang" <Stanley.Yang@amd.com>
> Cc: Wenhui Sheng <Wenhui.Sheng@amd.com>
> Cc: chen gong <curry.gong@amd.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c  |  8 ++++----  drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 12 +++++++++++-
>  2 files changed, 15 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> index 024c3b70b1aa..3d337f13ae4e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> @@ -1093,7 +1093,7 @@ static const struct pci_device_id pciidlist[] = {
>
>  MODULE_DEVICE_TABLE(pci, pciidlist);
>
> -static struct drm_driver kms_driver;
> +struct drm_driver amdgpu_kms_driver;
>
>  static int amdgpu_pci_probe(struct pci_dev *pdev,
>      const struct pci_device_id *ent) @@ -1164,7 +1164,7 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
>  if (ret)
>  return ret;
>
> -adev = devm_drm_dev_alloc(&pdev->dev, &kms_driver, typeof(*adev), ddev);
> +adev = devm_drm_dev_alloc(&pdev->dev, &amdgpu_kms_driver,
> +typeof(*adev), ddev);
>  if (IS_ERR(adev))
>  return PTR_ERR(adev);
>
> @@ -1508,7 +1508,7 @@ int amdgpu_file_to_fpriv(struct file *filp, struct amdgpu_fpriv **fpriv)
>  return 0;
>  }
>
> -static struct drm_driver kms_driver = {
> +struct drm_driver amdgpu_kms_driver = {
>  .driver_features =
>      DRIVER_ATOMIC |
>      DRIVER_GEM |
> @@ -1571,7 +1571,7 @@ static int __init amdgpu_init(void)
>  goto error_fence;
>
>  DRM_INFO("amdgpu kernel modesetting enabled.\n");
> -kms_driver.num_ioctls = amdgpu_max_kms_ioctl;
> +amdgpu_kms_driver.num_ioctls = amdgpu_max_kms_ioctl;
>  amdgpu_register_atpx_handler();
>
>  /* Ignore KFD init failures. Normal when CONFIG_HSA_AMD is not set. */ diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> index d0aea5e39531..dde4c449c284 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> @@ -45,13 +45,23 @@ bool amdgpu_virt_mmio_blocked(struct amdgpu_device *adev)
>  return RREG32_NO_KIQ(0xc040) == 0xffffffff;  }
>
> +extern struct drm_driver amdgpu_kms_driver;
> +
>  void amdgpu_virt_init_setting(struct amdgpu_device *adev)  {
>  /* enable virtual display */
>  if (adev->mode_info.num_crtc == 0)
>  adev->mode_info.num_crtc = 1;
>  adev->enable_virtual_display = true;
> -adev_to_drm(adev)->driver->driver_features &= ~DRIVER_ATOMIC;
> +
> +/*
> + * FIXME: Either make virt support atomic or make sure you have two
> + * drm_driver structs, these kind of tricks are only ok when there's
> + * guaranteed only a single device per system. This should also be done
> + * before struct drm_device is initialized.
> + */
> +amdgpu_kms_driver.driver_features &= ~DRIVER_ATOMIC;
> +
>  adev->cg_flags = 0;
>  adev->pg_flags = 0;
>  }
> --
> 2.28.0
>


-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/5] drm/radeon: Stop changing the drm_driver struct
  2020-10-30 10:11 [PATCH 1/5] drm/radeon: Stop changing the drm_driver struct Daniel Vetter
                   ` (3 preceding siblings ...)
  2020-10-30 10:11 ` [PATCH 5/5] drm/<drivers>: Constify " Daniel Vetter
@ 2020-10-30 18:21 ` Alex Deucher
  4 siblings, 0 replies; 19+ messages in thread
From: Alex Deucher @ 2020-10-30 18:21 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Intel Graphics Development, amd-gfx list, DRI Development,
	Alex Deucher, Daniel Vetter, Christian König

On Fri, Oct 30, 2020 at 6:11 AM Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
>
> With only the kms driver left, we can fold this in. This means
> we need to move the ioctl table, which means one additional ioctl
> must be defined in headers.
>
> Also there's a conflict between the radeon_init macro and the module
> init function, so rename the module functions to avoid that.
>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Alex Deucher <alexander.deucher@amd.com>
> Cc: "Christian König" <christian.koenig@amd.com>
> Cc: amd-gfx@lists.freedesktop.org
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>

> ---
>  drivers/gpu/drm/radeon/radeon.h     |  1 +
>  drivers/gpu/drm/radeon/radeon_drv.c | 85 ++++++++++++++++++++---------
>  drivers/gpu/drm/radeon/radeon_kms.c | 49 +----------------
>  3 files changed, 62 insertions(+), 73 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
> index 5d54bccebd4d..f475785d6491 100644
> --- a/drivers/gpu/drm/radeon/radeon.h
> +++ b/drivers/gpu/drm/radeon/radeon.h
> @@ -2244,6 +2244,7 @@ int radeon_gem_set_tiling_ioctl(struct drm_device *dev, void *data,
>                                 struct drm_file *filp);
>  int radeon_gem_get_tiling_ioctl(struct drm_device *dev, void *data,
>                                 struct drm_file *filp);
> +int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp);
>
>  /* VRAM scratch page for HDP bug, default vram page */
>  struct r600_vram_scratch {
> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
> index 65061c949aee..9c11e36ad33a 100644
> --- a/drivers/gpu/drm/radeon/radeon_drv.c
> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
> @@ -51,6 +51,7 @@
>  #include <drm/radeon_drm.h>
>
>  #include "radeon_drv.h"
> +#include "radeon.h"
>
>  /*
>   * KMS wrapper.
> @@ -129,8 +130,6 @@ extern int radeon_get_crtc_scanoutpos(struct drm_device *dev, unsigned int crtc,
>                                       ktime_t *stime, ktime_t *etime,
>                                       const struct drm_display_mode *mode);
>  extern bool radeon_is_px(struct drm_device *dev);
> -extern const struct drm_ioctl_desc radeon_ioctls_kms[];
> -extern int radeon_max_kms_ioctl;
>  int radeon_mmap(struct file *filp, struct vm_area_struct *vma);
>  int radeon_mode_dumb_mmap(struct drm_file *filp,
>                           struct drm_device *dev,
> @@ -584,9 +583,55 @@ static const struct file_operations radeon_driver_kms_fops = {
>  #endif
>  };
>
> +static const struct drm_ioctl_desc radeon_ioctls_kms[] = {
> +       DRM_IOCTL_DEF_DRV(RADEON_CP_INIT, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
> +       DRM_IOCTL_DEF_DRV(RADEON_CP_START, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
> +       DRM_IOCTL_DEF_DRV(RADEON_CP_STOP, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
> +       DRM_IOCTL_DEF_DRV(RADEON_CP_RESET, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
> +       DRM_IOCTL_DEF_DRV(RADEON_CP_IDLE, drm_invalid_op, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_CP_RESUME, drm_invalid_op, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_RESET, drm_invalid_op, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_FULLSCREEN, drm_invalid_op, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_SWAP, drm_invalid_op, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_CLEAR, drm_invalid_op, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_VERTEX, drm_invalid_op, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_INDICES, drm_invalid_op, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_TEXTURE, drm_invalid_op, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_STIPPLE, drm_invalid_op, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_INDIRECT, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
> +       DRM_IOCTL_DEF_DRV(RADEON_VERTEX2, drm_invalid_op, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_CMDBUF, drm_invalid_op, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_GETPARAM, drm_invalid_op, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_FLIP, drm_invalid_op, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_ALLOC, drm_invalid_op, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_FREE, drm_invalid_op, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_INIT_HEAP, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
> +       DRM_IOCTL_DEF_DRV(RADEON_IRQ_EMIT, drm_invalid_op, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_IRQ_WAIT, drm_invalid_op, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_SETPARAM, drm_invalid_op, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_SURF_ALLOC, drm_invalid_op, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_SURF_FREE, drm_invalid_op, DRM_AUTH),
> +       /* KMS */
> +       DRM_IOCTL_DEF_DRV(RADEON_GEM_INFO, radeon_gem_info_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> +       DRM_IOCTL_DEF_DRV(RADEON_GEM_CREATE, radeon_gem_create_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> +       DRM_IOCTL_DEF_DRV(RADEON_GEM_MMAP, radeon_gem_mmap_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> +       DRM_IOCTL_DEF_DRV(RADEON_GEM_SET_DOMAIN, radeon_gem_set_domain_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> +       DRM_IOCTL_DEF_DRV(RADEON_GEM_PREAD, radeon_gem_pread_ioctl, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_GEM_PWRITE, radeon_gem_pwrite_ioctl, DRM_AUTH),
> +       DRM_IOCTL_DEF_DRV(RADEON_GEM_WAIT_IDLE, radeon_gem_wait_idle_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> +       DRM_IOCTL_DEF_DRV(RADEON_CS, radeon_cs_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> +       DRM_IOCTL_DEF_DRV(RADEON_INFO, radeon_info_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> +       DRM_IOCTL_DEF_DRV(RADEON_GEM_SET_TILING, radeon_gem_set_tiling_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> +       DRM_IOCTL_DEF_DRV(RADEON_GEM_GET_TILING, radeon_gem_get_tiling_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> +       DRM_IOCTL_DEF_DRV(RADEON_GEM_BUSY, radeon_gem_busy_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> +       DRM_IOCTL_DEF_DRV(RADEON_GEM_VA, radeon_gem_va_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> +       DRM_IOCTL_DEF_DRV(RADEON_GEM_OP, radeon_gem_op_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> +       DRM_IOCTL_DEF_DRV(RADEON_GEM_USERPTR, radeon_gem_userptr_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> +};
> +
>  static struct drm_driver kms_driver = {
>         .driver_features =
> -           DRIVER_GEM | DRIVER_RENDER,
> +           DRIVER_GEM | DRIVER_RENDER | DRIVER_MODESET,
>         .load = radeon_driver_load_kms,
>         .open = radeon_driver_open_kms,
>         .postclose = radeon_driver_postclose_kms,
> @@ -597,6 +642,7 @@ static struct drm_driver kms_driver = {
>         .irq_uninstall = radeon_driver_irq_uninstall_kms,
>         .irq_handler = radeon_driver_irq_handler_kms,
>         .ioctls = radeon_ioctls_kms,
> +       .num_ioctls = ARRAY_SIZE(radeon_ioctls_kms),
>         .dumb_create = radeon_mode_dumb_create,
>         .dumb_map_offset = radeon_mode_dumb_mmap,
>         .fops = &radeon_driver_kms_fops,
> @@ -613,9 +659,6 @@ static struct drm_driver kms_driver = {
>         .patchlevel = KMS_DRIVER_PATCHLEVEL,
>  };
>
> -static struct drm_driver *driver;
> -static struct pci_driver *pdriver;
> -
>  static struct pci_driver radeon_kms_pci_driver = {
>         .name = DRIVER_NAME,
>         .id_table = pciidlist,
> @@ -625,41 +668,33 @@ static struct pci_driver radeon_kms_pci_driver = {
>         .driver.pm = &radeon_pm_ops,
>  };
>
> -static int __init radeon_init(void)
> +static int __init radeon_module_init(void)
>  {
>         if (vgacon_text_force() && radeon_modeset == -1) {
>                 DRM_INFO("VGACON disable radeon kernel modesetting.\n");
>                 radeon_modeset = 0;
>         }
> -       /* set to modesetting by default if not nomodeset */
> -       if (radeon_modeset == -1)
> -               radeon_modeset = 1;
> -
> -       if (radeon_modeset == 1) {
> -               DRM_INFO("radeon kernel modesetting enabled.\n");
> -               driver = &kms_driver;
> -               pdriver = &radeon_kms_pci_driver;
> -               driver->driver_features |= DRIVER_MODESET;
> -               driver->num_ioctls = radeon_max_kms_ioctl;
> -               radeon_register_atpx_handler();
> -
> -       } else {
> +
> +       if (radeon_modeset == 0) {
>                 DRM_ERROR("No UMS support in radeon module!\n");
>                 return -EINVAL;
>         }
>
> -       return pci_register_driver(pdriver);
> +       DRM_INFO("radeon kernel modesetting enabled.\n");
> +       radeon_register_atpx_handler();
> +
> +       return pci_register_driver(&radeon_kms_pci_driver);
>  }
>
> -static void __exit radeon_exit(void)
> +static void __exit radeon_module_exit(void)
>  {
> -       pci_unregister_driver(pdriver);
> +       pci_unregister_driver(&radeon_kms_pci_driver);
>         radeon_unregister_atpx_handler();
>         mmu_notifier_synchronize();
>  }
>
> -module_init(radeon_init);
> -module_exit(radeon_exit);
> +module_init(radeon_module_init);
> +module_exit(radeon_module_exit);
>
>  MODULE_AUTHOR(DRIVER_AUTHOR);
>  MODULE_DESCRIPTION(DRIVER_DESC);
> diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
> index 99ee60f8b604..abb3bdd9ca25 100644
> --- a/drivers/gpu/drm/radeon/radeon_kms.c
> +++ b/drivers/gpu/drm/radeon/radeon_kms.c
> @@ -221,7 +221,7 @@ static void radeon_set_filp_rights(struct drm_device *dev,
>   * etc. (all asics).
>   * Returns 0 on success, -EINVAL on failure.
>   */
> -static int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
> +int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
>  {
>         struct radeon_device *rdev = dev->dev_private;
>         struct drm_radeon_info *info = data;
> @@ -866,50 +866,3 @@ void radeon_disable_vblank_kms(struct drm_crtc *crtc)
>         radeon_irq_set(rdev);
>         spin_unlock_irqrestore(&rdev->irq.lock, irqflags);
>  }
> -
> -const struct drm_ioctl_desc radeon_ioctls_kms[] = {
> -       DRM_IOCTL_DEF_DRV(RADEON_CP_INIT, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
> -       DRM_IOCTL_DEF_DRV(RADEON_CP_START, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
> -       DRM_IOCTL_DEF_DRV(RADEON_CP_STOP, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
> -       DRM_IOCTL_DEF_DRV(RADEON_CP_RESET, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
> -       DRM_IOCTL_DEF_DRV(RADEON_CP_IDLE, drm_invalid_op, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_CP_RESUME, drm_invalid_op, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_RESET, drm_invalid_op, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_FULLSCREEN, drm_invalid_op, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_SWAP, drm_invalid_op, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_CLEAR, drm_invalid_op, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_VERTEX, drm_invalid_op, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_INDICES, drm_invalid_op, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_TEXTURE, drm_invalid_op, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_STIPPLE, drm_invalid_op, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_INDIRECT, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
> -       DRM_IOCTL_DEF_DRV(RADEON_VERTEX2, drm_invalid_op, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_CMDBUF, drm_invalid_op, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_GETPARAM, drm_invalid_op, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_FLIP, drm_invalid_op, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_ALLOC, drm_invalid_op, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_FREE, drm_invalid_op, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_INIT_HEAP, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
> -       DRM_IOCTL_DEF_DRV(RADEON_IRQ_EMIT, drm_invalid_op, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_IRQ_WAIT, drm_invalid_op, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_SETPARAM, drm_invalid_op, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_SURF_ALLOC, drm_invalid_op, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_SURF_FREE, drm_invalid_op, DRM_AUTH),
> -       /* KMS */
> -       DRM_IOCTL_DEF_DRV(RADEON_GEM_INFO, radeon_gem_info_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> -       DRM_IOCTL_DEF_DRV(RADEON_GEM_CREATE, radeon_gem_create_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> -       DRM_IOCTL_DEF_DRV(RADEON_GEM_MMAP, radeon_gem_mmap_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> -       DRM_IOCTL_DEF_DRV(RADEON_GEM_SET_DOMAIN, radeon_gem_set_domain_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> -       DRM_IOCTL_DEF_DRV(RADEON_GEM_PREAD, radeon_gem_pread_ioctl, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_GEM_PWRITE, radeon_gem_pwrite_ioctl, DRM_AUTH),
> -       DRM_IOCTL_DEF_DRV(RADEON_GEM_WAIT_IDLE, radeon_gem_wait_idle_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> -       DRM_IOCTL_DEF_DRV(RADEON_CS, radeon_cs_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> -       DRM_IOCTL_DEF_DRV(RADEON_INFO, radeon_info_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> -       DRM_IOCTL_DEF_DRV(RADEON_GEM_SET_TILING, radeon_gem_set_tiling_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> -       DRM_IOCTL_DEF_DRV(RADEON_GEM_GET_TILING, radeon_gem_get_tiling_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> -       DRM_IOCTL_DEF_DRV(RADEON_GEM_BUSY, radeon_gem_busy_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> -       DRM_IOCTL_DEF_DRV(RADEON_GEM_VA, radeon_gem_va_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> -       DRM_IOCTL_DEF_DRV(RADEON_GEM_OP, radeon_gem_op_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> -       DRM_IOCTL_DEF_DRV(RADEON_GEM_USERPTR, radeon_gem_userptr_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
> -};
> -int radeon_max_kms_ioctl = ARRAY_SIZE(radeon_ioctls_kms);
> --
> 2.28.0
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 2/5] drm: Compile out legacy chunks from struct drm_device
  2020-10-30 10:11 ` [PATCH 2/5] drm: Compile out legacy chunks from struct drm_device Daniel Vetter
@ 2020-10-30 18:22   ` Alex Deucher
  0 siblings, 0 replies; 19+ messages in thread
From: Alex Deucher @ 2020-10-30 18:22 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: David Airlie, Intel Graphics Development, DRI Development,
	Thomas Zimmermann, Daniel Vetter, Sam Ravnborg

On Fri, Oct 30, 2020 at 6:11 AM Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
>
> This means some very few #ifdef in code, but it allows us to
> enlist the compiler to make sure this stuff isn't used anymore.
>
> More important, only legacy drivers change drm_device (for the
> legacy_dev_list shadow attach management), therefore this is
> prep to allow modern drivers to have a const driver struct. Which
> is nice, because there's a ton of function pointers in there.
>
> Acked-by: Maxime Ripard <mripard@kernel.org>
> Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
> Review-by: Thomas Zimmermann <tzimmermann@suse.de>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Sam Ravnborg <sam@ravnborg.org>
> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Cc: Maxime Ripard <mripard@kernel.org>
> Cc: Thomas Zimmermann <tzimmermann@suse.de>
> Cc: David Airlie <airlied@linux.ie>
> Cc: Daniel Vetter <daniel@ffwll.ch>
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>

> ---
>  drivers/gpu/drm/drm_file.c   |  2 ++
>  drivers/gpu/drm/drm_vblank.c | 15 ++++++++++++---
>  include/drm/drm_drv.h        |  2 ++
>  3 files changed, 16 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c
> index 0ac4566ae3f4..b50380fa80ce 100644
> --- a/drivers/gpu/drm/drm_file.c
> +++ b/drivers/gpu/drm/drm_file.c
> @@ -258,9 +258,11 @@ void drm_file_free(struct drm_file *file)
>                   (long)old_encode_dev(file->minor->kdev->devt),
>                   atomic_read(&dev->open_count));
>
> +#ifdef CONFIG_DRM_LEGACY
>         if (drm_core_check_feature(dev, DRIVER_LEGACY) &&
>             dev->driver->preclose)
>                 dev->driver->preclose(dev, file);
> +#endif
>
>         if (drm_core_check_feature(dev, DRIVER_LEGACY))
>                 drm_legacy_lock_release(dev, file->filp);
> diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
> index ba7e741764aa..15e5ea436434 100644
> --- a/drivers/gpu/drm/drm_vblank.c
> +++ b/drivers/gpu/drm/drm_vblank.c
> @@ -210,9 +210,12 @@ static u32 __get_vblank_counter(struct drm_device *dev, unsigned int pipe)
>
>                 if (crtc->funcs->get_vblank_counter)
>                         return crtc->funcs->get_vblank_counter(crtc);
> -       } else if (dev->driver->get_vblank_counter) {
> +       }
> +#ifdef CONFIG_DRM_LEGACY
> +       else if (dev->driver->get_vblank_counter) {
>                 return dev->driver->get_vblank_counter(dev, pipe);
>         }
> +#endif
>
>         return drm_vblank_no_hw_counter(dev, pipe);
>  }
> @@ -430,9 +433,12 @@ static void __disable_vblank(struct drm_device *dev, unsigned int pipe)
>
>                 if (crtc->funcs->disable_vblank)
>                         crtc->funcs->disable_vblank(crtc);
> -       } else {
> +       }
> +#ifdef CONFIG_DRM_LEGACY
> +       else {
>                 dev->driver->disable_vblank(dev, pipe);
>         }
> +#endif
>  }
>
>  /*
> @@ -1097,9 +1103,12 @@ static int __enable_vblank(struct drm_device *dev, unsigned int pipe)
>
>                 if (crtc->funcs->enable_vblank)
>                         return crtc->funcs->enable_vblank(crtc);
> -       } else if (dev->driver->enable_vblank) {
> +       }
> +#ifdef CONFIG_DRM_LEGACY
> +       else if (dev->driver->enable_vblank) {
>                 return dev->driver->enable_vblank(dev, pipe);
>         }
> +#endif
>
>         return -EINVAL;
>  }
> diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
> index c6d17550efc9..7af220226a25 100644
> --- a/include/drm/drm_drv.h
> +++ b/include/drm/drm_drv.h
> @@ -498,6 +498,7 @@ struct drm_driver {
>          */
>         const struct file_operations *fops;
>
> +#ifdef CONFIG_DRM_LEGACY
>         /* Everything below here is for legacy driver, never use! */
>         /* private: */
>
> @@ -512,6 +513,7 @@ struct drm_driver {
>         int (*enable_vblank)(struct drm_device *dev, unsigned int pipe);
>         void (*disable_vblank)(struct drm_device *dev, unsigned int pipe);
>         int dev_priv_size;
> +#endif
>  };
>
>  void *__devm_drm_dev_alloc(struct device *parent, struct drm_driver *driver,
> --
> 2.28.0
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 3/5] drm/amdgpu: Paper over the drm_driver mangling for virt
  2020-10-30 10:11 ` [PATCH 3/5] drm/amdgpu: Paper over the drm_driver mangling for virt Daniel Vetter
  2020-10-30 10:41   ` Liu, Monk
@ 2020-10-30 18:47   ` Alex Deucher
  2020-10-31 13:57     ` Daniel Vetter
  1 sibling, 1 reply; 19+ messages in thread
From: Alex Deucher @ 2020-10-30 18:47 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Evan Quan, chen gong, Bokun Zhang, Intel Graphics Development,
	Wenhui Sheng, Christian König, Monk Liu, Luben Tuikov,
	Stanley.Yang, DRI Development, Thomas Zimmermann, Alex Deucher,
	Daniel Vetter, Yintian Tao, Hawking Zhang, Felix Kuehling,
	Dennis Li, shaoyunl

On Fri, Oct 30, 2020 at 6:11 AM Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
>
> Prep work to make drm_device->driver const.
>
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Alex Deucher <alexander.deucher@amd.com>
> Cc: "Christian König" <christian.koenig@amd.com>
> Cc: Evan Quan <evan.quan@amd.com>
> Cc: Felix Kuehling <Felix.Kuehling@amd.com>
> Cc: Hawking Zhang <Hawking.Zhang@amd.com>
> Cc: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
> Cc: Luben Tuikov <luben.tuikov@amd.com>
> Cc: Thomas Zimmermann <tzimmermann@suse.de>
> Cc: Monk Liu <Monk.Liu@amd.com>
> Cc: Yintian Tao <yttao@amd.com>
> Cc: Dennis Li <Dennis.Li@amd.com>
> Cc: shaoyunl <shaoyun.liu@amd.com>
> Cc: Bokun Zhang <Bokun.Zhang@amd.com>
> Cc: "Stanley.Yang" <Stanley.Yang@amd.com>
> Cc: Wenhui Sheng <Wenhui.Sheng@amd.com>
> Cc: chen gong <curry.gong@amd.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c  |  8 ++++----
>  drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 12 +++++++++++-
>  2 files changed, 15 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> index 024c3b70b1aa..3d337f13ae4e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> @@ -1093,7 +1093,7 @@ static const struct pci_device_id pciidlist[] = {
>
>  MODULE_DEVICE_TABLE(pci, pciidlist);
>
> -static struct drm_driver kms_driver;
> +struct drm_driver amdgpu_kms_driver;
>
>  static int amdgpu_pci_probe(struct pci_dev *pdev,
>                             const struct pci_device_id *ent)
> @@ -1164,7 +1164,7 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
>         if (ret)
>                 return ret;
>
> -       adev = devm_drm_dev_alloc(&pdev->dev, &kms_driver, typeof(*adev), ddev);
> +       adev = devm_drm_dev_alloc(&pdev->dev, &amdgpu_kms_driver, typeof(*adev), ddev);
>         if (IS_ERR(adev))
>                 return PTR_ERR(adev);
>
> @@ -1508,7 +1508,7 @@ int amdgpu_file_to_fpriv(struct file *filp, struct amdgpu_fpriv **fpriv)
>         return 0;
>  }
>
> -static struct drm_driver kms_driver = {
> +struct drm_driver amdgpu_kms_driver = {
>         .driver_features =
>             DRIVER_ATOMIC |
>             DRIVER_GEM |
> @@ -1571,7 +1571,7 @@ static int __init amdgpu_init(void)
>                 goto error_fence;
>
>         DRM_INFO("amdgpu kernel modesetting enabled.\n");
> -       kms_driver.num_ioctls = amdgpu_max_kms_ioctl;
> +       amdgpu_kms_driver.num_ioctls = amdgpu_max_kms_ioctl;
>         amdgpu_register_atpx_handler();
>
>         /* Ignore KFD init failures. Normal when CONFIG_HSA_AMD is not set. */
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> index d0aea5e39531..dde4c449c284 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> @@ -45,13 +45,23 @@ bool amdgpu_virt_mmio_blocked(struct amdgpu_device *adev)
>         return RREG32_NO_KIQ(0xc040) == 0xffffffff;
>  }
>
> +extern struct drm_driver amdgpu_kms_driver;
> +
>  void amdgpu_virt_init_setting(struct amdgpu_device *adev)
>  {
>         /* enable virtual display */
>         if (adev->mode_info.num_crtc == 0)
>                 adev->mode_info.num_crtc = 1;
>         adev->enable_virtual_display = true;
> -       adev_to_drm(adev)->driver->driver_features &= ~DRIVER_ATOMIC;
> +
> +       /*
> +        * FIXME: Either make virt support atomic or make sure you have two
> +        * drm_driver structs, these kind of tricks are only ok when there's
> +        * guaranteed only a single device per system. This should also be done
> +        * before struct drm_device is initialized.
> +        */
> +       amdgpu_kms_driver.driver_features &= ~DRIVER_ATOMIC;

There is additional DRIVER_ATOMIC in amdgpu_pci_probe() for older
chips without atomic support.

Alex

> +
>         adev->cg_flags = 0;
>         adev->pg_flags = 0;
>  }
> --
> 2.28.0
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4/5] drm: Allow const struct drm_driver
  2020-10-30 10:11 ` [PATCH 4/5] drm: Allow const struct drm_driver Daniel Vetter
@ 2020-10-30 18:53   ` Alex Deucher
  0 siblings, 0 replies; 19+ messages in thread
From: Alex Deucher @ 2020-10-30 18:53 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: David Airlie, Intel Graphics Development, DRI Development,
	Thomas Zimmermann, Daniel Vetter, Sam Ravnborg

On Fri, Oct 30, 2020 at 6:11 AM Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
>
> It's nice if a big function/ioctl table like this is const. Only
> downside here is that we need a few more #ifdef to paper over the
> differences when CONFIG_DRM_LEGACY is enabled. Maybe provides more
> motivation to sunset that horror show :-)
>
> v2:
> - Fix super important checkpatch warning (Sam)
> - Update the kerneldoc example too (Sam)
>
> Acked-by: Maxime Ripard <mripard@kernel.org>
> Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
> Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Sam Ravnborg <sam@ravnborg.org>
> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Cc: Maxime Ripard <mripard@kernel.org>
> Cc: Thomas Zimmermann <tzimmermann@suse.de>
> Cc: David Airlie <airlied@linux.ie>
> Cc: Daniel Vetter <daniel@ffwll.ch>
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>

> ---
>  drivers/gpu/drm/drm_drv.c | 17 +++++++++++------
>  include/drm/drm_device.h  |  4 ++++
>  include/drm/drm_drv.h     |  5 +++--
>  3 files changed, 18 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
> index 457ac0f82be2..0371d1f095b2 100644
> --- a/drivers/gpu/drm/drm_drv.c
> +++ b/drivers/gpu/drm/drm_drv.c
> @@ -284,7 +284,7 @@ void drm_minor_release(struct drm_minor *minor)
>   *             struct clk *pclk;
>   *     };
>   *
> - *     static struct drm_driver driver_drm_driver = {
> + *     static const struct drm_driver driver_drm_driver = {
>   *             [...]
>   *     };
>   *
> @@ -574,7 +574,7 @@ static void drm_dev_init_release(struct drm_device *dev, void *res)
>  }
>
>  static int drm_dev_init(struct drm_device *dev,
> -                       struct drm_driver *driver,
> +                       const struct drm_driver *driver,
>                         struct device *parent)
>  {
>         int ret;
> @@ -589,7 +589,11 @@ static int drm_dev_init(struct drm_device *dev,
>
>         kref_init(&dev->ref);
>         dev->dev = get_device(parent);
> +#ifdef CONFIG_DRM_LEGACY
> +       dev->driver = (struct drm_driver *)driver;
> +#else
>         dev->driver = driver;
> +#endif
>
>         INIT_LIST_HEAD(&dev->managed.resources);
>         spin_lock_init(&dev->managed.lock);
> @@ -663,7 +667,7 @@ static void devm_drm_dev_init_release(void *data)
>
>  static int devm_drm_dev_init(struct device *parent,
>                              struct drm_device *dev,
> -                            struct drm_driver *driver)
> +                            const struct drm_driver *driver)
>  {
>         int ret;
>
> @@ -678,7 +682,8 @@ static int devm_drm_dev_init(struct device *parent,
>         return ret;
>  }
>
> -void *__devm_drm_dev_alloc(struct device *parent, struct drm_driver *driver,
> +void *__devm_drm_dev_alloc(struct device *parent,
> +                          const struct drm_driver *driver,
>                            size_t size, size_t offset)
>  {
>         void *container;
> @@ -713,7 +718,7 @@ EXPORT_SYMBOL(__devm_drm_dev_alloc);
>   * RETURNS:
>   * Pointer to new DRM device, or ERR_PTR on failure.
>   */
> -struct drm_device *drm_dev_alloc(struct drm_driver *driver,
> +struct drm_device *drm_dev_alloc(const struct drm_driver *driver,
>                                  struct device *parent)
>  {
>         struct drm_device *dev;
> @@ -858,7 +863,7 @@ static void remove_compat_control_link(struct drm_device *dev)
>   */
>  int drm_dev_register(struct drm_device *dev, unsigned long flags)
>  {
> -       struct drm_driver *driver = dev->driver;
> +       const struct drm_driver *driver = dev->driver;
>         int ret;
>
>         if (!driver->load)
> diff --git a/include/drm/drm_device.h b/include/drm/drm_device.h
> index f4f68e7a9149..2c361964aee7 100644
> --- a/include/drm/drm_device.h
> +++ b/include/drm/drm_device.h
> @@ -83,7 +83,11 @@ struct drm_device {
>         } managed;
>
>         /** @driver: DRM driver managing the device */
> +#ifdef CONFIG_DRM_LEGACY
>         struct drm_driver *driver;
> +#else
> +       const struct drm_driver *driver;
> +#endif
>
>         /**
>          * @dev_private:
> diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
> index 7af220226a25..cc9da43b6eda 100644
> --- a/include/drm/drm_drv.h
> +++ b/include/drm/drm_drv.h
> @@ -516,7 +516,8 @@ struct drm_driver {
>  #endif
>  };
>
> -void *__devm_drm_dev_alloc(struct device *parent, struct drm_driver *driver,
> +void *__devm_drm_dev_alloc(struct device *parent,
> +                          const struct drm_driver *driver,
>                            size_t size, size_t offset);
>
>  /**
> @@ -549,7 +550,7 @@ void *__devm_drm_dev_alloc(struct device *parent, struct drm_driver *driver,
>         ((type *) __devm_drm_dev_alloc(parent, driver, sizeof(type), \
>                                        offsetof(type, member)))
>
> -struct drm_device *drm_dev_alloc(struct drm_driver *driver,
> +struct drm_device *drm_dev_alloc(const struct drm_driver *driver,
>                                  struct device *parent);
>  int drm_dev_register(struct drm_device *dev, unsigned long flags);
>  void drm_dev_unregister(struct drm_device *dev);
> --
> 2.28.0
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 5/5] drm/<drivers>: Constify struct drm_driver
  2020-10-30 10:11 ` [PATCH 5/5] drm/<drivers>: Constify " Daniel Vetter
@ 2020-10-30 18:53   ` Alex Deucher
  0 siblings, 0 replies; 19+ messages in thread
From: Alex Deucher @ 2020-10-30 18:53 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: kernel test robot, Leo Li, nouveau, Intel Graphics Development,
	DRI Development, open list:VIRTIO CORE, NET...,
	Gerd Hoffmann, Dave Airlie, Alex Deucher, Daniel Vetter,
	Sam Ravnborg, Christian König, Ben Skeggs

On Fri, Oct 30, 2020 at 6:11 AM Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
>
> Only the following drivers aren't converted:
> - amdgpu, because of the driver_feature mangling due to virt support
> - nouveau, because DRIVER_ATOMIC uapi is still not the default on the
>   platforms where it's supported (i.e. again driver_feature mangling)
> - vc4, again because of driver_feature mangling
> - qxl, because the ioctl table is somewhere else and moving that is
>   maybe a bit too much, hence the num_ioctls assignment prevents a
>   const driver structure.
> - arcpgu, because that is stuck behind a pending tiny-fication series
>   from me.
> - legacy drivers, because legacy requires non-const drm_driver.
>
> Note that for armada I also went ahead and made the ioctl array const.
>
> Only cc'ing the driver people who've not been converted (everyone else
> is way too much).
>
> v2: Fix one misplaced const static, should be static const (0day)
>
> v3:
> - Improve commit message (Sam)
>
> Acked-by: Sam Ravnborg <sam@ravnborg.org>
> Cc: kernel test robot <lkp@intel.com>
> Acked-by: Maxime Ripard <mripard@kernel.org>
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Sam Ravnborg <sam@ravnborg.org>
> Cc: Dave Airlie <airlied@redhat.com>
> Cc: Gerd Hoffmann <kraxel@redhat.com>
> Cc: virtualization@lists.linux-foundation.org
> Cc: Harry Wentland <harry.wentland@amd.com>
> Cc: Leo Li <sunpeng.li@amd.com>
> Cc: Alex Deucher <alexander.deucher@amd.com>
> Cc: Christian König <christian.koenig@amd.com>
> Cc: Eric Anholt <eric@anholt.net>
> Cc: Maxime Ripard <mripard@kernel.org>
> Cc: Ben Skeggs <bskeggs@redhat.com>
> Cc: nouveau@lists.freedesktop.org
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>

> ---
>  drivers/gpu/drm/arm/display/komeda/komeda_kms.c  | 2 +-
>  drivers/gpu/drm/arm/hdlcd_drv.c                  | 2 +-
>  drivers/gpu/drm/arm/malidp_drv.c                 | 2 +-
>  drivers/gpu/drm/armada/armada_drv.c              | 7 +++----
>  drivers/gpu/drm/aspeed/aspeed_gfx_drv.c          | 2 +-
>  drivers/gpu/drm/ast/ast_drv.c                    | 2 +-
>  drivers/gpu/drm/ast/ast_drv.h                    | 2 +-
>  drivers/gpu/drm/ast/ast_main.c                   | 2 +-
>  drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c     | 2 +-
>  drivers/gpu/drm/bochs/bochs_drv.c                | 2 +-
>  drivers/gpu/drm/etnaviv/etnaviv_drv.c            | 2 +-
>  drivers/gpu/drm/exynos/exynos_drm_drv.c          | 2 +-
>  drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c        | 5 ++---
>  drivers/gpu/drm/gma500/psb_drv.c                 | 4 ++--
>  drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c  | 2 +-
>  drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c  | 2 +-
>  drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h  | 2 +-
>  drivers/gpu/drm/i915/i915_drv.c                  | 4 ++--
>  drivers/gpu/drm/i915/selftests/mock_gem_device.c | 2 +-
>  drivers/gpu/drm/imx/dcss/dcss-kms.c              | 2 +-
>  drivers/gpu/drm/imx/imx-drm-core.c               | 2 +-
>  drivers/gpu/drm/ingenic/ingenic-drm-drv.c        | 2 +-
>  drivers/gpu/drm/lima/lima_drv.c                  | 2 +-
>  drivers/gpu/drm/mcde/mcde_drv.c                  | 2 +-
>  drivers/gpu/drm/mediatek/mtk_drm_drv.c           | 2 +-
>  drivers/gpu/drm/meson/meson_drv.c                | 2 +-
>  drivers/gpu/drm/mgag200/mgag200_drv.c            | 2 +-
>  drivers/gpu/drm/msm/msm_drv.c                    | 4 ++--
>  drivers/gpu/drm/mxsfb/mxsfb_drv.c                | 2 +-
>  drivers/gpu/drm/omapdrm/omap_drv.c               | 2 +-
>  drivers/gpu/drm/panfrost/panfrost_drv.c          | 2 +-
>  drivers/gpu/drm/pl111/pl111_drv.c                | 2 +-
>  drivers/gpu/drm/radeon/radeon_drv.c              | 4 ++--
>  drivers/gpu/drm/rcar-du/rcar_du_drv.c            | 2 +-
>  drivers/gpu/drm/rockchip/rockchip_drm_drv.c      | 4 ++--
>  drivers/gpu/drm/shmobile/shmob_drm_drv.c         | 2 +-
>  drivers/gpu/drm/sti/sti_drv.c                    | 2 +-
>  drivers/gpu/drm/stm/drv.c                        | 2 +-
>  drivers/gpu/drm/sun4i/sun4i_drv.c                | 2 +-
>  drivers/gpu/drm/tegra/drm.c                      | 5 ++---
>  drivers/gpu/drm/tidss/tidss_drv.c                | 2 +-
>  drivers/gpu/drm/tilcdc/tilcdc_drv.c              | 4 ++--
>  drivers/gpu/drm/tiny/cirrus.c                    | 2 +-
>  drivers/gpu/drm/tiny/gm12u320.c                  | 2 +-
>  drivers/gpu/drm/tiny/hx8357d.c                   | 2 +-
>  drivers/gpu/drm/tiny/ili9225.c                   | 2 +-
>  drivers/gpu/drm/tiny/ili9341.c                   | 2 +-
>  drivers/gpu/drm/tiny/ili9486.c                   | 2 +-
>  drivers/gpu/drm/tiny/mi0283qt.c                  | 2 +-
>  drivers/gpu/drm/tiny/repaper.c                   | 2 +-
>  drivers/gpu/drm/tiny/st7586.c                    | 2 +-
>  drivers/gpu/drm/tiny/st7735r.c                   | 2 +-
>  drivers/gpu/drm/tve200/tve200_drv.c              | 2 +-
>  drivers/gpu/drm/udl/udl_drv.c                    | 2 +-
>  drivers/gpu/drm/v3d/v3d_drv.c                    | 2 +-
>  drivers/gpu/drm/vboxvideo/vbox_drv.c             | 4 ++--
>  drivers/gpu/drm/vgem/vgem_drv.c                  | 2 +-
>  drivers/gpu/drm/virtio/virtgpu_drv.c             | 4 ++--
>  drivers/gpu/drm/vkms/vkms_drv.c                  | 2 +-
>  drivers/gpu/drm/vmwgfx/vmwgfx_drv.c              | 2 +-
>  drivers/gpu/drm/xen/xen_drm_front.c              | 2 +-
>  drivers/gpu/drm/xlnx/zynqmp_dpsub.c              | 2 +-
>  drivers/gpu/drm/zte/zx_drm_drv.c                 | 2 +-
>  63 files changed, 75 insertions(+), 78 deletions(-)
>
> diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> index cc5b5915bc5e..d04008f3e31a 100644
> --- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> +++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> @@ -58,7 +58,7 @@ static irqreturn_t komeda_kms_irq_handler(int irq, void *data)
>         return status;
>  }
>
> -static struct drm_driver komeda_kms_driver = {
> +static const struct drm_driver komeda_kms_driver = {
>         .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         .lastclose                      = drm_fb_helper_lastclose,
>         DRM_GEM_CMA_DRIVER_OPS_WITH_DUMB_CREATE(komeda_gem_cma_dumb_create),
> diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
> index faa8a5a752da..81ae92390736 100644
> --- a/drivers/gpu/drm/arm/hdlcd_drv.c
> +++ b/drivers/gpu/drm/arm/hdlcd_drv.c
> @@ -234,7 +234,7 @@ static void hdlcd_debugfs_init(struct drm_minor *minor)
>
>  DEFINE_DRM_GEM_CMA_FOPS(fops);
>
> -static struct drm_driver hdlcd_driver = {
> +static const struct drm_driver hdlcd_driver = {
>         .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         .irq_handler = hdlcd_irq,
>         .irq_preinstall = hdlcd_irq_preinstall,
> diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
> index 26e60401a8e1..d83c7366b348 100644
> --- a/drivers/gpu/drm/arm/malidp_drv.c
> +++ b/drivers/gpu/drm/arm/malidp_drv.c
> @@ -564,7 +564,7 @@ static void malidp_debugfs_init(struct drm_minor *minor)
>
>  #endif //CONFIG_DEBUG_FS
>
> -static struct drm_driver malidp_driver = {
> +static const struct drm_driver malidp_driver = {
>         .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         DRM_GEM_CMA_DRIVER_OPS_WITH_DUMB_CREATE(malidp_dumb_create),
>  #ifdef CONFIG_DEBUG_FS
> diff --git a/drivers/gpu/drm/armada/armada_drv.c b/drivers/gpu/drm/armada/armada_drv.c
> index 22247cfce80b..44fe9f994fc5 100644
> --- a/drivers/gpu/drm/armada/armada_drv.c
> +++ b/drivers/gpu/drm/armada/armada_drv.c
> @@ -27,7 +27,7 @@
>  #include <drm/armada_drm.h>
>  #include "armada_ioctlP.h"
>
> -static struct drm_ioctl_desc armada_ioctls[] = {
> +static const struct drm_ioctl_desc armada_ioctls[] = {
>         DRM_IOCTL_DEF_DRV(ARMADA_GEM_CREATE, armada_gem_create_ioctl,0),
>         DRM_IOCTL_DEF_DRV(ARMADA_GEM_MMAP, armada_gem_mmap_ioctl, 0),
>         DRM_IOCTL_DEF_DRV(ARMADA_GEM_PWRITE, armada_gem_pwrite_ioctl, 0),
> @@ -35,7 +35,7 @@ static struct drm_ioctl_desc armada_ioctls[] = {
>
>  DEFINE_DRM_GEM_FOPS(armada_drm_fops);
>
> -static struct drm_driver armada_drm_driver = {
> +static const struct drm_driver armada_drm_driver = {
>         .lastclose              = drm_fb_helper_lastclose,
>         .prime_handle_to_fd     = drm_gem_prime_handle_to_fd,
>         .prime_fd_to_handle     = drm_gem_prime_fd_to_handle,
> @@ -48,6 +48,7 @@ static struct drm_driver armada_drm_driver = {
>         .date                   = "20120730",
>         .driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         .ioctls                 = armada_ioctls,
> +       .num_ioctls = ARRAY_SIZE(armada_ioctls),
>         .fops                   = &armada_drm_fops,
>  };
>
> @@ -275,8 +276,6 @@ static int __init armada_drm_init(void)
>  {
>         int ret;
>
> -       armada_drm_driver.num_ioctls = ARRAY_SIZE(armada_ioctls);
> -
>         ret = platform_driver_register(&armada_lcd_platform_driver);
>         if (ret)
>                 return ret;
> diff --git a/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c b/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c
> index 771ad71cd340..457ec04950f7 100644
> --- a/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c
> +++ b/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c
> @@ -191,7 +191,7 @@ static void aspeed_gfx_unload(struct drm_device *drm)
>
>  DEFINE_DRM_GEM_CMA_FOPS(fops);
>
> -static struct drm_driver aspeed_gfx_driver = {
> +static const struct drm_driver aspeed_gfx_driver = {
>         .driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         DRM_GEM_CMA_DRIVER_OPS,
>         .fops = &fops,
> diff --git a/drivers/gpu/drm/ast/ast_drv.c b/drivers/gpu/drm/ast/ast_drv.c
> index f0b4af1c390a..667b450606ef 100644
> --- a/drivers/gpu/drm/ast/ast_drv.c
> +++ b/drivers/gpu/drm/ast/ast_drv.c
> @@ -49,7 +49,7 @@ module_param_named(modeset, ast_modeset, int, 0400);
>
>  DEFINE_DRM_GEM_FOPS(ast_fops);
>
> -static struct drm_driver ast_driver = {
> +static const struct drm_driver ast_driver = {
>         .driver_features = DRIVER_ATOMIC |
>                            DRIVER_GEM |
>                            DRIVER_MODESET,
> diff --git a/drivers/gpu/drm/ast/ast_drv.h b/drivers/gpu/drm/ast/ast_drv.h
> index 467049ca8430..33e596a4f042 100644
> --- a/drivers/gpu/drm/ast/ast_drv.h
> +++ b/drivers/gpu/drm/ast/ast_drv.h
> @@ -159,7 +159,7 @@ static inline struct ast_private *to_ast_private(struct drm_device *dev)
>         return container_of(dev, struct ast_private, base);
>  }
>
> -struct ast_private *ast_device_create(struct drm_driver *drv,
> +struct ast_private *ast_device_create(const struct drm_driver *drv,
>                                       struct pci_dev *pdev,
>                                       unsigned long flags);
>
> diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
> index 77066bca8793..45dd8185a488 100644
> --- a/drivers/gpu/drm/ast/ast_main.c
> +++ b/drivers/gpu/drm/ast/ast_main.c
> @@ -392,7 +392,7 @@ static void ast_device_release(void *data)
>         ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xa1, 0x04);
>  }
>
> -struct ast_private *ast_device_create(struct drm_driver *drv,
> +struct ast_private *ast_device_create(const struct drm_driver *drv,
>                                       struct pci_dev *pdev,
>                                       unsigned long flags)
>  {
> diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> index 03984932d174..65af56e47129 100644
> --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> @@ -712,7 +712,7 @@ static void atmel_hlcdc_dc_irq_uninstall(struct drm_device *dev)
>
>  DEFINE_DRM_GEM_CMA_FOPS(fops);
>
> -static struct drm_driver atmel_hlcdc_dc_driver = {
> +static const struct drm_driver atmel_hlcdc_dc_driver = {
>         .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         .irq_handler = atmel_hlcdc_dc_irq_handler,
>         .irq_preinstall = atmel_hlcdc_dc_irq_uninstall,
> diff --git a/drivers/gpu/drm/bochs/bochs_drv.c b/drivers/gpu/drm/bochs/bochs_drv.c
> index e18c51de1196..fd454225fd19 100644
> --- a/drivers/gpu/drm/bochs/bochs_drv.c
> +++ b/drivers/gpu/drm/bochs/bochs_drv.c
> @@ -57,7 +57,7 @@ static int bochs_load(struct drm_device *dev)
>
>  DEFINE_DRM_GEM_FOPS(bochs_fops);
>
> -static struct drm_driver bochs_driver = {
> +static const struct drm_driver bochs_driver = {
>         .driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         .fops                   = &bochs_fops,
>         .name                   = "bochs-drm",
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> index aa270b79e585..7604e3c07973 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> @@ -480,7 +480,7 @@ static const struct file_operations fops = {
>         .mmap               = etnaviv_gem_mmap,
>  };
>
> -static struct drm_driver etnaviv_drm_driver = {
> +static const struct drm_driver etnaviv_drm_driver = {
>         .driver_features    = DRIVER_GEM | DRIVER_RENDER,
>         .open               = etnaviv_open,
>         .postclose           = etnaviv_postclose,
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> index fe46680ca208..e60257f1f24b 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> @@ -113,7 +113,7 @@ static const struct file_operations exynos_drm_driver_fops = {
>         .release        = drm_release,
>  };
>
> -static struct drm_driver exynos_drm_driver = {
> +static const struct drm_driver exynos_drm_driver = {
>         .driver_features        = DRIVER_MODESET | DRIVER_GEM
>                                   | DRIVER_ATOMIC | DRIVER_RENDER,
>         .open                   = exynos_drm_open,
> diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> index ae584f62aa19..75b58d55a940 100644
> --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> @@ -124,7 +124,7 @@ static irqreturn_t fsl_dcu_drm_irq(int irq, void *arg)
>
>  DEFINE_DRM_GEM_CMA_FOPS(fsl_dcu_drm_fops);
>
> -static struct drm_driver fsl_dcu_drm_driver = {
> +static const struct drm_driver fsl_dcu_drm_driver = {
>         .driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         .load                   = fsl_dcu_load,
>         .unload                 = fsl_dcu_unload,
> @@ -224,7 +224,6 @@ static int fsl_dcu_drm_probe(struct platform_device *pdev)
>         struct device *dev = &pdev->dev;
>         struct resource *res;
>         void __iomem *base;
> -       struct drm_driver *driver = &fsl_dcu_drm_driver;
>         struct clk *pix_clk_in;
>         char pix_clk_name[32];
>         const char *pix_clk_in_name;
> @@ -294,7 +293,7 @@ static int fsl_dcu_drm_probe(struct platform_device *pdev)
>
>         fsl_dev->tcon = fsl_tcon_init(dev);
>
> -       drm = drm_dev_alloc(driver, dev);
> +       drm = drm_dev_alloc(&fsl_dcu_drm_driver, dev);
>         if (IS_ERR(drm)) {
>                 ret = PTR_ERR(drm);
>                 goto unregister_pix_clk;
> diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c
> index b13376a6fb91..6e7197d89463 100644
> --- a/drivers/gpu/drm/gma500/psb_drv.c
> +++ b/drivers/gpu/drm/gma500/psb_drv.c
> @@ -34,7 +34,7 @@
>  #include "psb_intel_reg.h"
>  #include "psb_reg.h"
>
> -static struct drm_driver driver;
> +static const struct drm_driver driver;
>  static int psb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent);
>
>  /*
> @@ -491,7 +491,7 @@ static const struct file_operations psb_gem_fops = {
>         .read = drm_read,
>  };
>
> -static struct drm_driver driver = {
> +static const struct drm_driver driver = {
>         .driver_features = DRIVER_MODESET | DRIVER_GEM,
>         .lastclose = drm_fb_helper_lastclose,
>
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> index a684814927cd..27205aa907f4 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> @@ -43,7 +43,7 @@ static irqreturn_t hibmc_drm_interrupt(int irq, void *arg)
>         return IRQ_HANDLED;
>  }
>
> -static struct drm_driver hibmc_driver = {
> +static const struct drm_driver hibmc_driver = {
>         .driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         .fops                   = &hibmc_fops,
>         .name                   = "hibmc",
> diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> index cfe8ff596d55..aa9641a6a7d8 100644
> --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> @@ -918,7 +918,7 @@ static const struct drm_mode_config_funcs ade_mode_config_funcs = {
>
>  DEFINE_DRM_GEM_CMA_FOPS(ade_fops);
>
> -static struct drm_driver ade_driver = {
> +static const struct drm_driver ade_driver = {
>         .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         .fops = &ade_fops,
>         DRM_GEM_CMA_DRIVER_OPS,
> diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h
> index dee8ec2f7f2e..386d137f29e5 100644
> --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h
> +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h
> @@ -40,7 +40,7 @@ struct kirin_drm_data {
>         u32 num_planes;
>         u32 prim_plane;
>
> -       struct drm_driver *driver;
> +       const struct drm_driver *driver;
>         const struct drm_crtc_helper_funcs *crtc_helper_funcs;
>         const struct drm_crtc_funcs *crtc_funcs;
>         const struct drm_plane_helper_funcs *plane_helper_funcs;
> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> index d6e25212d5c0..f2389ba49c69 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -87,7 +87,7 @@
>  #include "intel_sideband.h"
>  #include "vlv_suspend.h"
>
> -static struct drm_driver driver;
> +static const struct drm_driver driver;
>
>  static int i915_get_bridge_dev(struct drm_i915_private *dev_priv)
>  {
> @@ -1759,7 +1759,7 @@ static const struct drm_ioctl_desc i915_ioctls[] = {
>         DRM_IOCTL_DEF_DRV(I915_GEM_VM_DESTROY, i915_gem_vm_destroy_ioctl, DRM_RENDER_ALLOW),
>  };
>
> -static struct drm_driver driver = {
> +static const struct drm_driver driver = {
>         /* Don't use MTRRs here; the Xserver or userspace app should
>          * deal with them for Intel hardware.
>          */
> diff --git a/drivers/gpu/drm/i915/selftests/mock_gem_device.c b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
> index 9220c9d1a4b7..e946bd2087d8 100644
> --- a/drivers/gpu/drm/i915/selftests/mock_gem_device.c
> +++ b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
> @@ -81,7 +81,7 @@ static void mock_device_release(struct drm_device *dev)
>         i915_params_free(&i915->params);
>  }
>
> -static struct drm_driver mock_driver = {
> +static const struct drm_driver mock_driver = {
>         .name = "mock",
>         .driver_features = DRIVER_GEM,
>         .release = mock_device_release,
> diff --git a/drivers/gpu/drm/imx/dcss/dcss-kms.c b/drivers/gpu/drm/imx/dcss/dcss-kms.c
> index b72e5cef7e40..b549ce5e7607 100644
> --- a/drivers/gpu/drm/imx/dcss/dcss-kms.c
> +++ b/drivers/gpu/drm/imx/dcss/dcss-kms.c
> @@ -26,7 +26,7 @@ static const struct drm_mode_config_funcs dcss_drm_mode_config_funcs = {
>         .atomic_commit = drm_atomic_helper_commit,
>  };
>
> -static struct drm_driver dcss_kms_driver = {
> +static const struct drm_driver dcss_kms_driver = {
>         .driver_features        = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
>         DRM_GEM_CMA_DRIVER_OPS,
>         .fops                   = &dcss_cma_fops,
> diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c
> index 183f2e91881d..7090b82e7ea2 100644
> --- a/drivers/gpu/drm/imx/imx-drm-core.c
> +++ b/drivers/gpu/drm/imx/imx-drm-core.c
> @@ -143,7 +143,7 @@ static const struct drm_ioctl_desc imx_drm_ioctls[] = {
>         /* none so far */
>  };
>
> -static struct drm_driver imx_drm_driver = {
> +static const struct drm_driver imx_drm_driver = {
>         .driver_features        = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
>         DRM_GEM_CMA_DRIVER_OPS,
>         .ioctls                 = imx_drm_ioctls,
> diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
> index 2329754af116..082cb9e45908 100644
> --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
> +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
> @@ -710,7 +710,7 @@ static void ingenic_drm_disable_vblank(struct drm_crtc *crtc)
>
>  DEFINE_DRM_GEM_CMA_FOPS(ingenic_drm_fops);
>
> -static struct drm_driver ingenic_drm_driver_data = {
> +static const struct drm_driver ingenic_drm_driver_data = {
>         .driver_features        = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
>         .name                   = "ingenic-drm",
>         .desc                   = "DRM module for Ingenic SoCs",
> diff --git a/drivers/gpu/drm/lima/lima_drv.c b/drivers/gpu/drm/lima/lima_drv.c
> index ab460121fd52..d497af91d850 100644
> --- a/drivers/gpu/drm/lima/lima_drv.c
> +++ b/drivers/gpu/drm/lima/lima_drv.c
> @@ -261,7 +261,7 @@ DEFINE_DRM_GEM_FOPS(lima_drm_driver_fops);
>   * - 1.1.0 - add heap buffer support
>   */
>
> -static struct drm_driver lima_drm_driver = {
> +static const struct drm_driver lima_drm_driver = {
>         .driver_features    = DRIVER_RENDER | DRIVER_GEM | DRIVER_SYNCOBJ,
>         .open               = lima_drm_driver_open,
>         .postclose          = lima_drm_driver_postclose,
> diff --git a/drivers/gpu/drm/mcde/mcde_drv.c b/drivers/gpu/drm/mcde/mcde_drv.c
> index f9b5f450a9cb..870626e04ec0 100644
> --- a/drivers/gpu/drm/mcde/mcde_drv.c
> +++ b/drivers/gpu/drm/mcde/mcde_drv.c
> @@ -178,7 +178,7 @@ static int mcde_modeset_init(struct drm_device *drm)
>
>  DEFINE_DRM_GEM_CMA_FOPS(drm_fops);
>
> -static struct drm_driver mcde_drm_driver = {
> +static const struct drm_driver mcde_drm_driver = {
>         .driver_features =
>                 DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
>         .lastclose = drm_fb_helper_lastclose,
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> index 7f3398a7c2b0..2e8065b1e2bb 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> @@ -321,7 +321,7 @@ struct drm_gem_object *mtk_drm_gem_prime_import(struct drm_device *dev,
>         return drm_gem_prime_import_dev(dev, dma_buf, private->dma_dev);
>  }
>
> -static struct drm_driver mtk_drm_driver = {
> +static const struct drm_driver mtk_drm_driver = {
>         .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
>
>         .dumb_create = mtk_drm_gem_dumb_create,
> diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/meson_drv.c
> index 8b9c8dd788c4..dc8509ceb787 100644
> --- a/drivers/gpu/drm/meson/meson_drv.c
> +++ b/drivers/gpu/drm/meson/meson_drv.c
> @@ -90,7 +90,7 @@ static int meson_dumb_create(struct drm_file *file, struct drm_device *dev,
>
>  DEFINE_DRM_GEM_CMA_FOPS(fops);
>
> -static struct drm_driver meson_driver = {
> +static const struct drm_driver meson_driver = {
>         .driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>
>         /* IRQ */
> diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.c b/drivers/gpu/drm/mgag200/mgag200_drv.c
> index 771b26aeee19..0f07f259503d 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_drv.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_drv.c
> @@ -28,7 +28,7 @@ module_param_named(modeset, mgag200_modeset, int, 0400);
>
>  DEFINE_DRM_GEM_FOPS(mgag200_driver_fops);
>
> -static struct drm_driver mgag200_driver = {
> +static const struct drm_driver mgag200_driver = {
>         .driver_features = DRIVER_ATOMIC | DRIVER_GEM | DRIVER_MODESET,
>         .fops = &mgag200_driver_fops,
>         .name = DRIVER_NAME,
> diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
> index aa4509766d64..f8fd31e709bb 100644
> --- a/drivers/gpu/drm/msm/msm_drv.c
> +++ b/drivers/gpu/drm/msm/msm_drv.c
> @@ -393,7 +393,7 @@ static int msm_init_vram(struct drm_device *dev)
>         return ret;
>  }
>
> -static int msm_drm_init(struct device *dev, struct drm_driver *drv)
> +static int msm_drm_init(struct device *dev, const struct drm_driver *drv)
>  {
>         struct platform_device *pdev = to_platform_device(dev);
>         struct drm_device *ddev;
> @@ -984,7 +984,7 @@ static const struct file_operations fops = {
>         .mmap               = msm_gem_mmap,
>  };
>
> -static struct drm_driver msm_driver = {
> +static const struct drm_driver msm_driver = {
>         .driver_features    = DRIVER_GEM |
>                                 DRIVER_RENDER |
>                                 DRIVER_ATOMIC |
> diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.c b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
> index 35122aef037b..6faf17b6408d 100644
> --- a/drivers/gpu/drm/mxsfb/mxsfb_drv.c
> +++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
> @@ -289,7 +289,7 @@ static irqreturn_t mxsfb_irq_handler(int irq, void *data)
>
>  DEFINE_DRM_GEM_CMA_FOPS(fops);
>
> -static struct drm_driver mxsfb_driver = {
> +static const struct drm_driver mxsfb_driver = {
>         .driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         .irq_handler            = mxsfb_irq_handler,
>         .irq_preinstall         = mxsfb_irq_disable,
> diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
> index 2b82a708eca6..21a6cd3f5473 100644
> --- a/drivers/gpu/drm/omapdrm/omap_drv.c
> +++ b/drivers/gpu/drm/omapdrm/omap_drv.c
> @@ -534,7 +534,7 @@ static const struct file_operations omapdriver_fops = {
>         .llseek = noop_llseek,
>  };
>
> -static struct drm_driver omap_drm_driver = {
> +static const struct drm_driver omap_drm_driver = {
>         .driver_features = DRIVER_MODESET | DRIVER_GEM  |
>                 DRIVER_ATOMIC | DRIVER_RENDER,
>         .open = dev_open,
> diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
> index 37d4cb7a5491..ed116bd3d6d6 100644
> --- a/drivers/gpu/drm/panfrost/panfrost_drv.c
> +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
> @@ -548,7 +548,7 @@ DEFINE_DRM_GEM_FOPS(panfrost_drm_driver_fops);
>   * - 1.0 - initial interface
>   * - 1.1 - adds HEAP and NOEXEC flags for CREATE_BO
>   */
> -static struct drm_driver panfrost_drm_driver = {
> +static const struct drm_driver panfrost_drm_driver = {
>         .driver_features        = DRIVER_RENDER | DRIVER_GEM | DRIVER_SYNCOBJ,
>         .open                   = panfrost_open,
>         .postclose              = panfrost_postclose,
> diff --git a/drivers/gpu/drm/pl111/pl111_drv.c b/drivers/gpu/drm/pl111/pl111_drv.c
> index 3899c28f428d..10d9a12be672 100644
> --- a/drivers/gpu/drm/pl111/pl111_drv.c
> +++ b/drivers/gpu/drm/pl111/pl111_drv.c
> @@ -213,7 +213,7 @@ pl111_gem_import_sg_table(struct drm_device *dev,
>
>  DEFINE_DRM_GEM_CMA_FOPS(drm_fops);
>
> -static struct drm_driver pl111_drm_driver = {
> +static const struct drm_driver pl111_drm_driver = {
>         .driver_features =
>                 DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
>         .ioctls = NULL,
> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
> index 9c11e36ad33a..bfadb799d6a3 100644
> --- a/drivers/gpu/drm/radeon/radeon_drv.c
> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
> @@ -297,7 +297,7 @@ static struct pci_device_id pciidlist[] = {
>
>  MODULE_DEVICE_TABLE(pci, pciidlist);
>
> -static struct drm_driver kms_driver;
> +static const struct drm_driver kms_driver;
>
>  bool radeon_device_is_virtual(void);
>
> @@ -629,7 +629,7 @@ static const struct drm_ioctl_desc radeon_ioctls_kms[] = {
>         DRM_IOCTL_DEF_DRV(RADEON_GEM_USERPTR, radeon_gem_userptr_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
>  };
>
> -static struct drm_driver kms_driver = {
> +static const struct drm_driver kms_driver = {
>         .driver_features =
>             DRIVER_GEM | DRIVER_RENDER | DRIVER_MODESET,
>         .load = radeon_driver_load_kms,
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> index 447be991fa25..600056dff374 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> @@ -507,7 +507,7 @@ MODULE_DEVICE_TABLE(of, rcar_du_of_table);
>
>  DEFINE_DRM_GEM_CMA_FOPS(rcar_du_fops);
>
> -static struct drm_driver rcar_du_driver = {
> +static const struct drm_driver rcar_du_driver = {
>         .driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         DRM_GEM_CMA_DRIVER_OPS_WITH_DUMB_CREATE(rcar_du_dumb_create),
>         .fops                   = &rcar_du_fops,
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> index b7654f5e4225..212bd87c0c4a 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> @@ -35,7 +35,7 @@
>  #define DRIVER_MINOR   0
>
>  static bool is_support_iommu = true;
> -static struct drm_driver rockchip_drm_driver;
> +static const struct drm_driver rockchip_drm_driver;
>
>  /*
>   * Attach a (component) device to the shared drm dma mapping from master drm
> @@ -209,7 +209,7 @@ static const struct file_operations rockchip_drm_driver_fops = {
>         .release = drm_release,
>  };
>
> -static struct drm_driver rockchip_drm_driver = {
> +static const struct drm_driver rockchip_drm_driver = {
>         .driver_features        = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
>         .lastclose              = drm_fb_helper_lastclose,
>         .dumb_create            = rockchip_gem_dumb_create,
> diff --git a/drivers/gpu/drm/shmobile/shmob_drm_drv.c b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> index 26a15c214bd3..0a02b7092c04 100644
> --- a/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> +++ b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> @@ -128,7 +128,7 @@ static irqreturn_t shmob_drm_irq(int irq, void *arg)
>
>  DEFINE_DRM_GEM_CMA_FOPS(shmob_drm_fops);
>
> -static struct drm_driver shmob_drm_driver = {
> +static const struct drm_driver shmob_drm_driver = {
>         .driver_features        = DRIVER_GEM | DRIVER_MODESET,
>         .irq_handler            = shmob_drm_irq,
>         DRM_GEM_CMA_DRIVER_OPS,
> diff --git a/drivers/gpu/drm/sti/sti_drv.c b/drivers/gpu/drm/sti/sti_drv.c
> index 3f54efa36098..c7efb43b83ee 100644
> --- a/drivers/gpu/drm/sti/sti_drv.c
> +++ b/drivers/gpu/drm/sti/sti_drv.c
> @@ -130,7 +130,7 @@ static void sti_mode_config_init(struct drm_device *dev)
>
>  DEFINE_DRM_GEM_CMA_FOPS(sti_driver_fops);
>
> -static struct drm_driver sti_driver = {
> +static const struct drm_driver sti_driver = {
>         .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
>         .fops = &sti_driver_fops,
>         DRM_GEM_CMA_DRIVER_OPS,
> diff --git a/drivers/gpu/drm/stm/drv.c b/drivers/gpu/drm/stm/drv.c
> index 411103f013e2..222869b232ae 100644
> --- a/drivers/gpu/drm/stm/drv.c
> +++ b/drivers/gpu/drm/stm/drv.c
> @@ -53,7 +53,7 @@ static int stm_gem_cma_dumb_create(struct drm_file *file,
>
>  DEFINE_DRM_GEM_CMA_FOPS(drv_driver_fops);
>
> -static struct drm_driver drv_driver = {
> +static const struct drm_driver drv_driver = {
>         .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
>         .name = "stm",
>         .desc = "STMicroelectronics SoC DRM",
> diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
> index 29861fc81b35..91502937f26d 100644
> --- a/drivers/gpu/drm/sun4i/sun4i_drv.c
> +++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
> @@ -40,7 +40,7 @@ static int drm_sun4i_gem_dumb_create(struct drm_file *file_priv,
>
>  DEFINE_DRM_GEM_CMA_FOPS(sun4i_drv_fops);
>
> -static struct drm_driver sun4i_drv_driver = {
> +static const struct drm_driver sun4i_drv_driver = {
>         .driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>
>         /* Generic Operations */
> diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c
> index 24f353c1cee8..ae13a3ff8a87 100644
> --- a/drivers/gpu/drm/tegra/drm.c
> +++ b/drivers/gpu/drm/tegra/drm.c
> @@ -850,7 +850,7 @@ static void tegra_debugfs_init(struct drm_minor *minor)
>  }
>  #endif
>
> -static struct drm_driver tegra_drm_driver = {
> +static const struct drm_driver tegra_drm_driver = {
>         .driver_features = DRIVER_MODESET | DRIVER_GEM |
>                            DRIVER_ATOMIC | DRIVER_RENDER,
>         .open = tegra_drm_open,
> @@ -1084,12 +1084,11 @@ static bool host1x_drm_wants_iommu(struct host1x_device *dev)
>
>  static int host1x_drm_probe(struct host1x_device *dev)
>  {
> -       struct drm_driver *driver = &tegra_drm_driver;
>         struct tegra_drm *tegra;
>         struct drm_device *drm;
>         int err;
>
> -       drm = drm_dev_alloc(driver, &dev->dev);
> +       drm = drm_dev_alloc(&tegra_drm_driver, &dev->dev);
>         if (IS_ERR(drm))
>                 return PTR_ERR(drm);
>
> diff --git a/drivers/gpu/drm/tidss/tidss_drv.c b/drivers/gpu/drm/tidss/tidss_drv.c
> index 9179ea18f625..66e3c86eb5c7 100644
> --- a/drivers/gpu/drm/tidss/tidss_drv.c
> +++ b/drivers/gpu/drm/tidss/tidss_drv.c
> @@ -108,7 +108,7 @@ static void tidss_release(struct drm_device *ddev)
>
>  DEFINE_DRM_GEM_CMA_FOPS(tidss_fops);
>
> -static struct drm_driver tidss_driver = {
> +static const struct drm_driver tidss_driver = {
>         .driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         .fops                   = &tidss_fops,
>         .release                = tidss_release,
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> index 3d7e4db756b7..f1d3a9f919fd 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> @@ -166,7 +166,7 @@ static void tilcdc_fini(struct drm_device *dev)
>         drm_dev_put(dev);
>  }
>
> -static int tilcdc_init(struct drm_driver *ddrv, struct device *dev)
> +static int tilcdc_init(const struct drm_driver *ddrv, struct device *dev)
>  {
>         struct drm_device *ddev;
>         struct platform_device *pdev = to_platform_device(dev);
> @@ -452,7 +452,7 @@ static void tilcdc_debugfs_init(struct drm_minor *minor)
>
>  DEFINE_DRM_GEM_CMA_FOPS(fops);
>
> -static struct drm_driver tilcdc_driver = {
> +static const struct drm_driver tilcdc_driver = {
>         .driver_features    = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         .irq_handler        = tilcdc_irq,
>         DRM_GEM_CMA_DRIVER_OPS,
> diff --git a/drivers/gpu/drm/tiny/cirrus.c b/drivers/gpu/drm/tiny/cirrus.c
> index 759a5a66dd0b..e5641969c181 100644
> --- a/drivers/gpu/drm/tiny/cirrus.c
> +++ b/drivers/gpu/drm/tiny/cirrus.c
> @@ -536,7 +536,7 @@ static int cirrus_mode_config_init(struct cirrus_device *cirrus)
>
>  DEFINE_DRM_GEM_FOPS(cirrus_fops);
>
> -static struct drm_driver cirrus_driver = {
> +static const struct drm_driver cirrus_driver = {
>         .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
>
>         .name            = DRIVER_NAME,
> diff --git a/drivers/gpu/drm/tiny/gm12u320.c b/drivers/gpu/drm/tiny/gm12u320.c
> index cc397671f689..5a953c4ce265 100644
> --- a/drivers/gpu/drm/tiny/gm12u320.c
> +++ b/drivers/gpu/drm/tiny/gm12u320.c
> @@ -600,7 +600,7 @@ static const uint64_t gm12u320_pipe_modifiers[] = {
>
>  DEFINE_DRM_GEM_FOPS(gm12u320_fops);
>
> -static struct drm_driver gm12u320_drm_driver = {
> +static const struct drm_driver gm12u320_drm_driver = {
>         .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
>
>         .name            = DRIVER_NAME,
> diff --git a/drivers/gpu/drm/tiny/hx8357d.c b/drivers/gpu/drm/tiny/hx8357d.c
> index 0998309b0d95..c6525cd02bc2 100644
> --- a/drivers/gpu/drm/tiny/hx8357d.c
> +++ b/drivers/gpu/drm/tiny/hx8357d.c
> @@ -193,7 +193,7 @@ static const struct drm_display_mode yx350hv15_mode = {
>
>  DEFINE_DRM_GEM_CMA_FOPS(hx8357d_fops);
>
> -static struct drm_driver hx8357d_driver = {
> +static const struct drm_driver hx8357d_driver = {
>         .driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         .fops                   = &hx8357d_fops,
>         DRM_GEM_CMA_DRIVER_OPS_VMAP,
> diff --git a/drivers/gpu/drm/tiny/ili9225.c b/drivers/gpu/drm/tiny/ili9225.c
> index 97a77262d791..8e98962db5a2 100644
> --- a/drivers/gpu/drm/tiny/ili9225.c
> +++ b/drivers/gpu/drm/tiny/ili9225.c
> @@ -337,7 +337,7 @@ static const struct drm_display_mode ili9225_mode = {
>
>  DEFINE_DRM_GEM_CMA_FOPS(ili9225_fops);
>
> -static struct drm_driver ili9225_driver = {
> +static const struct drm_driver ili9225_driver = {
>         .driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         .fops                   = &ili9225_fops,
>         DRM_GEM_CMA_DRIVER_OPS_VMAP,
> diff --git a/drivers/gpu/drm/tiny/ili9341.c b/drivers/gpu/drm/tiny/ili9341.c
> index d39c39df56ad..6ce97f0698eb 100644
> --- a/drivers/gpu/drm/tiny/ili9341.c
> +++ b/drivers/gpu/drm/tiny/ili9341.c
> @@ -149,7 +149,7 @@ static const struct drm_display_mode yx240qv29_mode = {
>
>  DEFINE_DRM_GEM_CMA_FOPS(ili9341_fops);
>
> -static struct drm_driver ili9341_driver = {
> +static const struct drm_driver ili9341_driver = {
>         .driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         .fops                   = &ili9341_fops,
>         DRM_GEM_CMA_DRIVER_OPS_VMAP,
> diff --git a/drivers/gpu/drm/tiny/ili9486.c b/drivers/gpu/drm/tiny/ili9486.c
> index 403af68fa440..d7ce40eb166a 100644
> --- a/drivers/gpu/drm/tiny/ili9486.c
> +++ b/drivers/gpu/drm/tiny/ili9486.c
> @@ -162,7 +162,7 @@ static const struct drm_display_mode waveshare_mode = {
>
>  DEFINE_DRM_GEM_CMA_FOPS(ili9486_fops);
>
> -static struct drm_driver ili9486_driver = {
> +static const struct drm_driver ili9486_driver = {
>         .driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         .fops                   = &ili9486_fops,
>         DRM_GEM_CMA_DRIVER_OPS_VMAP,
> diff --git a/drivers/gpu/drm/tiny/mi0283qt.c b/drivers/gpu/drm/tiny/mi0283qt.c
> index 2131b4268c00..ff77f983f803 100644
> --- a/drivers/gpu/drm/tiny/mi0283qt.c
> +++ b/drivers/gpu/drm/tiny/mi0283qt.c
> @@ -153,7 +153,7 @@ static const struct drm_display_mode mi0283qt_mode = {
>
>  DEFINE_DRM_GEM_CMA_FOPS(mi0283qt_fops);
>
> -static struct drm_driver mi0283qt_driver = {
> +static const struct drm_driver mi0283qt_driver = {
>         .driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         .fops                   = &mi0283qt_fops,
>         DRM_GEM_CMA_DRIVER_OPS_VMAP,
> diff --git a/drivers/gpu/drm/tiny/repaper.c b/drivers/gpu/drm/tiny/repaper.c
> index 2e01cf0a9876..11c602fc9897 100644
> --- a/drivers/gpu/drm/tiny/repaper.c
> +++ b/drivers/gpu/drm/tiny/repaper.c
> @@ -936,7 +936,7 @@ static const u8 repaper_e2271cs021_cs[] = { 0x00, 0x00, 0x00, 0x7f,
>
>  DEFINE_DRM_GEM_CMA_FOPS(repaper_fops);
>
> -static struct drm_driver repaper_driver = {
> +static const struct drm_driver repaper_driver = {
>         .driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         .fops                   = &repaper_fops,
>         DRM_GEM_CMA_DRIVER_OPS_VMAP,
> diff --git a/drivers/gpu/drm/tiny/st7586.c b/drivers/gpu/drm/tiny/st7586.c
> index d05de03891f8..ff5cf60f4bd7 100644
> --- a/drivers/gpu/drm/tiny/st7586.c
> +++ b/drivers/gpu/drm/tiny/st7586.c
> @@ -277,7 +277,7 @@ static const struct drm_display_mode st7586_mode = {
>
>  DEFINE_DRM_GEM_CMA_FOPS(st7586_fops);
>
> -static struct drm_driver st7586_driver = {
> +static const struct drm_driver st7586_driver = {
>         .driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         .fops                   = &st7586_fops,
>         DRM_GEM_CMA_DRIVER_OPS_VMAP,
> diff --git a/drivers/gpu/drm/tiny/st7735r.c b/drivers/gpu/drm/tiny/st7735r.c
> index a0f688f0d050..2c77d9ab7e8d 100644
> --- a/drivers/gpu/drm/tiny/st7735r.c
> +++ b/drivers/gpu/drm/tiny/st7735r.c
> @@ -154,7 +154,7 @@ static const struct st7735r_cfg rh128128t_cfg = {
>
>  DEFINE_DRM_GEM_CMA_FOPS(st7735r_fops);
>
> -static struct drm_driver st7735r_driver = {
> +static const struct drm_driver st7735r_driver = {
>         .driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         .fops                   = &st7735r_fops,
>         DRM_GEM_CMA_DRIVER_OPS_VMAP,
> diff --git a/drivers/gpu/drm/tve200/tve200_drv.c b/drivers/gpu/drm/tve200/tve200_drv.c
> index b5259cb1383f..07140e0b90a3 100644
> --- a/drivers/gpu/drm/tve200/tve200_drv.c
> +++ b/drivers/gpu/drm/tve200/tve200_drv.c
> @@ -137,7 +137,7 @@ static int tve200_modeset_init(struct drm_device *dev)
>
>  DEFINE_DRM_GEM_CMA_FOPS(drm_fops);
>
> -static struct drm_driver tve200_drm_driver = {
> +static const struct drm_driver tve200_drm_driver = {
>         .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
>         .ioctls = NULL,
>         .fops = &drm_fops,
> diff --git a/drivers/gpu/drm/udl/udl_drv.c b/drivers/gpu/drm/udl/udl_drv.c
> index 96d4317a2c1b..46df4d07bd7b 100644
> --- a/drivers/gpu/drm/udl/udl_drv.c
> +++ b/drivers/gpu/drm/udl/udl_drv.c
> @@ -34,7 +34,7 @@ static int udl_usb_resume(struct usb_interface *interface)
>
>  DEFINE_DRM_GEM_FOPS(udl_driver_fops);
>
> -static struct drm_driver driver = {
> +static const struct drm_driver driver = {
>         .driver_features = DRIVER_ATOMIC | DRIVER_GEM | DRIVER_MODESET,
>
>         /* GEM hooks */
> diff --git a/drivers/gpu/drm/v3d/v3d_drv.c b/drivers/gpu/drm/v3d/v3d_drv.c
> index 9f7c26193831..2da0c1180bc6 100644
> --- a/drivers/gpu/drm/v3d/v3d_drv.c
> +++ b/drivers/gpu/drm/v3d/v3d_drv.c
> @@ -194,7 +194,7 @@ static const struct drm_ioctl_desc v3d_drm_ioctls[] = {
>         DRM_IOCTL_DEF_DRV(V3D_SUBMIT_CSD, v3d_submit_csd_ioctl, DRM_RENDER_ALLOW | DRM_AUTH),
>  };
>
> -static struct drm_driver v3d_drm_driver = {
> +static const struct drm_driver v3d_drm_driver = {
>         .driver_features = (DRIVER_GEM |
>                             DRIVER_RENDER |
>                             DRIVER_SYNCOBJ),
> diff --git a/drivers/gpu/drm/vboxvideo/vbox_drv.c b/drivers/gpu/drm/vboxvideo/vbox_drv.c
> index cf2e3e6a2388..f3eac72cb46e 100644
> --- a/drivers/gpu/drm/vboxvideo/vbox_drv.c
> +++ b/drivers/gpu/drm/vboxvideo/vbox_drv.c
> @@ -26,7 +26,7 @@ static int vbox_modeset = -1;
>  MODULE_PARM_DESC(modeset, "Disable/Enable modesetting");
>  module_param_named(modeset, vbox_modeset, int, 0400);
>
> -static struct drm_driver driver;
> +static const struct drm_driver driver;
>
>  static const struct pci_device_id pciidlist[] = {
>         { PCI_DEVICE(0x80ee, 0xbeef) },
> @@ -175,7 +175,7 @@ static struct pci_driver vbox_pci_driver = {
>
>  DEFINE_DRM_GEM_FOPS(vbox_fops);
>
> -static struct drm_driver driver = {
> +static const struct drm_driver driver = {
>         .driver_features =
>             DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
>
> diff --git a/drivers/gpu/drm/vgem/vgem_drv.c b/drivers/gpu/drm/vgem/vgem_drv.c
> index fa54a6d1403d..3e9b7a4c30ce 100644
> --- a/drivers/gpu/drm/vgem/vgem_drv.c
> +++ b/drivers/gpu/drm/vgem/vgem_drv.c
> @@ -415,7 +415,7 @@ static const struct drm_gem_object_funcs vgem_gem_object_funcs = {
>         .vm_ops = &vgem_gem_vm_ops,
>  };
>
> -static struct drm_driver vgem_driver = {
> +static const struct drm_driver vgem_driver = {
>         .driver_features                = DRIVER_GEM | DRIVER_RENDER,
>         .open                           = vgem_open,
>         .postclose                      = vgem_postclose,
> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c
> index 86330f1ade72..27f13bd29c13 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_drv.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
> @@ -37,7 +37,7 @@
>
>  #include "virtgpu_drv.h"
>
> -static struct drm_driver driver;
> +static const struct drm_driver driver;
>
>  static int virtio_gpu_modeset = -1;
>
> @@ -190,7 +190,7 @@ MODULE_AUTHOR("Alon Levy");
>
>  DEFINE_DRM_GEM_FOPS(virtio_gpu_driver_fops);
>
> -static struct drm_driver driver = {
> +static const struct drm_driver driver = {
>         .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_RENDER | DRIVER_ATOMIC,
>         .open = virtio_gpu_driver_open,
>         .postclose = virtio_gpu_driver_postclose,
> diff --git a/drivers/gpu/drm/vkms/vkms_drv.c b/drivers/gpu/drm/vkms/vkms_drv.c
> index 98ba844ae77d..8056b3d1ff6a 100644
> --- a/drivers/gpu/drm/vkms/vkms_drv.c
> +++ b/drivers/gpu/drm/vkms/vkms_drv.c
> @@ -78,7 +78,7 @@ static void vkms_atomic_commit_tail(struct drm_atomic_state *old_state)
>         drm_atomic_helper_cleanup_planes(dev, old_state);
>  }
>
> -static struct drm_driver vkms_driver = {
> +static const struct drm_driver vkms_driver = {
>         .driver_features        = DRIVER_MODESET | DRIVER_ATOMIC | DRIVER_GEM,
>         .release                = vkms_release,
>         .fops                   = &vkms_driver_fops,
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
> index 68206d0a1237..e66b252e3923 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
> @@ -1465,7 +1465,7 @@ static const struct file_operations vmwgfx_driver_fops = {
>         .get_unmapped_area = vmw_get_unmapped_area,
>  };
>
> -static struct drm_driver driver = {
> +static const struct drm_driver driver = {
>         .driver_features =
>         DRIVER_MODESET | DRIVER_RENDER | DRIVER_ATOMIC,
>         .ioctls = vmw_ioctls,
> diff --git a/drivers/gpu/drm/xen/xen_drm_front.c b/drivers/gpu/drm/xen/xen_drm_front.c
> index 98b6d2ba088a..30d9adf31c84 100644
> --- a/drivers/gpu/drm/xen/xen_drm_front.c
> +++ b/drivers/gpu/drm/xen/xen_drm_front.c
> @@ -483,7 +483,7 @@ static const struct file_operations xen_drm_dev_fops = {
>         .mmap           = xen_drm_front_gem_mmap,
>  };
>
> -static struct drm_driver xen_drm_driver = {
> +static const struct drm_driver xen_drm_driver = {
>         .driver_features           = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         .release                   = xen_drm_drv_release,
>         .prime_handle_to_fd        = drm_gem_prime_handle_to_fd,
> diff --git a/drivers/gpu/drm/xlnx/zynqmp_dpsub.c b/drivers/gpu/drm/xlnx/zynqmp_dpsub.c
> index f3ffc3703a0e..0c1c50271a88 100644
> --- a/drivers/gpu/drm/xlnx/zynqmp_dpsub.c
> +++ b/drivers/gpu/drm/xlnx/zynqmp_dpsub.c
> @@ -76,7 +76,7 @@ static const struct drm_mode_config_funcs zynqmp_dpsub_mode_config_funcs = {
>
>  DEFINE_DRM_GEM_CMA_FOPS(zynqmp_dpsub_drm_fops);
>
> -static struct drm_driver zynqmp_dpsub_drm_driver = {
> +static const struct drm_driver zynqmp_dpsub_drm_driver = {
>         .driver_features                = DRIVER_MODESET | DRIVER_GEM |
>                                           DRIVER_ATOMIC,
>
> diff --git a/drivers/gpu/drm/zte/zx_drm_drv.c b/drivers/gpu/drm/zte/zx_drm_drv.c
> index 31014a451f8b..5506336594e2 100644
> --- a/drivers/gpu/drm/zte/zx_drm_drv.c
> +++ b/drivers/gpu/drm/zte/zx_drm_drv.c
> @@ -34,7 +34,7 @@ static const struct drm_mode_config_funcs zx_drm_mode_config_funcs = {
>
>  DEFINE_DRM_GEM_CMA_FOPS(zx_drm_fops);
>
> -static struct drm_driver zx_drm_driver = {
> +static const struct drm_driver zx_drm_driver = {
>         .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
>         DRM_GEM_CMA_DRIVER_OPS,
>         .fops = &zx_drm_fops,
> --
> 2.28.0
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 3/5] drm/amdgpu: Paper over the drm_driver mangling for virt
  2020-10-30 12:04     ` Daniel Vetter
@ 2020-10-31  5:09       ` Luben Tuikov
  2020-11-01  9:59         ` Daniel Vetter
  0 siblings, 1 reply; 19+ messages in thread
From: Luben Tuikov @ 2020-10-31  5:09 UTC (permalink / raw)
  To: Daniel Vetter, Liu, Monk
  Cc: Gong, Curry, Zhang, Bokun, Kuehling, Felix, DRI Development,
	Koenig, Christian, Liu, Shaoyun, Yang, Stanley, Sheng, Wenhui,
	Thomas Zimmermann, Deucher, Alexander, Daniel Vetter,
	Yintian Tao, Quan, Evan, Intel Graphics Development, Li, Dennis,
	Zhang, Hawking

On 2020-10-30 08:04, Daniel Vetter wrote:
> On Fri, Oct 30, 2020 at 11:41 AM Liu, Monk <Monk.Liu@amd.com> wrote:
>>
>> [AMD Official Use Only - Internal Distribution Only]
>>
>> What's the purpose of the patch sets
>>
>> e.g.: what bug can those 5 patches fix or what feature provided
>>
>> for this particular one (3/5) I didn't see how it helpful, could you give a background  ?
> 
> It's good to make function tables const, so that they can be write
> protected. More resilience against exploits and all that. This patch
> here is needed to be able to make drm_device->driver const so that all
> other drivers can make their drm_driver structure const. Would be good
> to fully fix up amdgpu like in the comment, but I'm not going that in
> this series here.
> -Daniel

Hi Daniel,

I feel that that's a good change.

But if you can clarify this for me... Is this leading
towards a single instance of a struct drm_driver per
low-level driver, i.e. amdgpu?

And as such, being able to be defined as const?

So that we have many GPU devices driven by one
low-level driver (amdgpu_drv), represented by one
const drm_driver (and thus const)?

Which would imply that if varied devices can be handled
by a single low-level driver, whose struct drm_driver
settings cannot be shared among subset of devices (say
very old and new), then the low-level driver
would have to create more than one "const" struct drm_driver?

Regards,
Luben

> 
>>
>> thanks
>> _____________________________________
>> Monk Liu|GPU Virtualization Team |AMD
>>
>>
>> -----Original Message-----
>> From: Daniel Vetter <daniel.vetter@ffwll.ch>
>> Sent: Friday, October 30, 2020 6:11 PM
>> To: DRI Development <dri-devel@lists.freedesktop.org>
>> Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org>; Daniel Vetter <daniel.vetter@ffwll.ch>; Deucher, Alexander <Alexander.Deucher@amd.com>; Koenig, Christian <Christian.Koenig@amd.com>; Quan, Evan <Evan.Quan@amd.com>; Kuehling, Felix <Felix.Kuehling@amd.com>; Zhang, Hawking <Hawking.Zhang@amd.com>; Grodzovsky, Andrey <Andrey.Grodzovsky@amd.com>; Tuikov, Luben <Luben.Tuikov@amd.com>; Thomas Zimmermann <tzimmermann@suse.de>; Liu, Monk <Monk.Liu@amd.com>; Yintian Tao <yttao@amd.com>; Li, Dennis <Dennis.Li@amd.com>; Liu, Shaoyun <Shaoyun.Liu@amd.com>; Zhang, Bokun <Bokun.Zhang@amd.com>; Yang, Stanley <Stanley.Yang@amd.com>; Sheng, Wenhui <Wenhui.Sheng@amd.com>; Gong, Curry <Curry.Gong@amd.com>; Daniel Vetter <daniel.vetter@intel.com>
>> Subject: [PATCH 3/5] drm/amdgpu: Paper over the drm_driver mangling for virt
>>
>> Prep work to make drm_device->driver const.
>>
>> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>> Cc: Alex Deucher <alexander.deucher@amd.com>
>> Cc: "Christian König" <christian.koenig@amd.com>
>> Cc: Evan Quan <evan.quan@amd.com>
>> Cc: Felix Kuehling <Felix.Kuehling@amd.com>
>> Cc: Hawking Zhang <Hawking.Zhang@amd.com>
>> Cc: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
>> Cc: Luben Tuikov <luben.tuikov@amd.com>
>> Cc: Thomas Zimmermann <tzimmermann@suse.de>
>> Cc: Monk Liu <Monk.Liu@amd.com>
>> Cc: Yintian Tao <yttao@amd.com>
>> Cc: Dennis Li <Dennis.Li@amd.com>
>> Cc: shaoyunl <shaoyun.liu@amd.com>
>> Cc: Bokun Zhang <Bokun.Zhang@amd.com>
>> Cc: "Stanley.Yang" <Stanley.Yang@amd.com>
>> Cc: Wenhui Sheng <Wenhui.Sheng@amd.com>
>> Cc: chen gong <curry.gong@amd.com>
>> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
>> ---
>>  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c  |  8 ++++----  drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 12 +++++++++++-
>>  2 files changed, 15 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> index 024c3b70b1aa..3d337f13ae4e 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> @@ -1093,7 +1093,7 @@ static const struct pci_device_id pciidlist[] = {
>>
>>  MODULE_DEVICE_TABLE(pci, pciidlist);
>>
>> -static struct drm_driver kms_driver;
>> +struct drm_driver amdgpu_kms_driver;
>>
>>  static int amdgpu_pci_probe(struct pci_dev *pdev,
>>      const struct pci_device_id *ent) @@ -1164,7 +1164,7 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
>>  if (ret)
>>  return ret;
>>
>> -adev = devm_drm_dev_alloc(&pdev->dev, &kms_driver, typeof(*adev), ddev);
>> +adev = devm_drm_dev_alloc(&pdev->dev, &amdgpu_kms_driver,
>> +typeof(*adev), ddev);
>>  if (IS_ERR(adev))
>>  return PTR_ERR(adev);
>>
>> @@ -1508,7 +1508,7 @@ int amdgpu_file_to_fpriv(struct file *filp, struct amdgpu_fpriv **fpriv)
>>  return 0;
>>  }
>>
>> -static struct drm_driver kms_driver = {
>> +struct drm_driver amdgpu_kms_driver = {
>>  .driver_features =
>>      DRIVER_ATOMIC |
>>      DRIVER_GEM |
>> @@ -1571,7 +1571,7 @@ static int __init amdgpu_init(void)
>>  goto error_fence;
>>
>>  DRM_INFO("amdgpu kernel modesetting enabled.\n");
>> -kms_driver.num_ioctls = amdgpu_max_kms_ioctl;
>> +amdgpu_kms_driver.num_ioctls = amdgpu_max_kms_ioctl;
>>  amdgpu_register_atpx_handler();
>>
>>  /* Ignore KFD init failures. Normal when CONFIG_HSA_AMD is not set. */ diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
>> index d0aea5e39531..dde4c449c284 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
>> @@ -45,13 +45,23 @@ bool amdgpu_virt_mmio_blocked(struct amdgpu_device *adev)
>>  return RREG32_NO_KIQ(0xc040) == 0xffffffff;  }
>>
>> +extern struct drm_driver amdgpu_kms_driver;
>> +
>>  void amdgpu_virt_init_setting(struct amdgpu_device *adev)  {
>>  /* enable virtual display */
>>  if (adev->mode_info.num_crtc == 0)
>>  adev->mode_info.num_crtc = 1;
>>  adev->enable_virtual_display = true;
>> -adev_to_drm(adev)->driver->driver_features &= ~DRIVER_ATOMIC;
>> +
>> +/*
>> + * FIXME: Either make virt support atomic or make sure you have two
>> + * drm_driver structs, these kind of tricks are only ok when there's
>> + * guaranteed only a single device per system. This should also be done
>> + * before struct drm_device is initialized.
>> + */
>> +amdgpu_kms_driver.driver_features &= ~DRIVER_ATOMIC;
>> +
>>  adev->cg_flags = 0;
>>  adev->pg_flags = 0;
>>  }
>> --
>> 2.28.0
>>
> 
> 

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

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 3/5] drm/amdgpu: Paper over the drm_driver mangling for virt
  2020-10-30 18:47   ` Alex Deucher
@ 2020-10-31 13:57     ` Daniel Vetter
  2020-11-01 10:01       ` Daniel Vetter
  0 siblings, 1 reply; 19+ messages in thread
From: Daniel Vetter @ 2020-10-31 13:57 UTC (permalink / raw)
  To: Alex Deucher
  Cc: Evan Quan, chen gong, Bokun Zhang, Intel Graphics Development,
	Wenhui Sheng, Christian König, Monk Liu, Luben Tuikov,
	Stanley.Yang, DRI Development, Thomas Zimmermann, Alex Deucher,
	Daniel Vetter, Yintian Tao, Hawking Zhang, Felix Kuehling,
	Dennis Li, shaoyunl

On Fri, Oct 30, 2020 at 7:47 PM Alex Deucher <alexdeucher@gmail.com> wrote:
>
> On Fri, Oct 30, 2020 at 6:11 AM Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> >
> > Prep work to make drm_device->driver const.
> >
> > Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> > Cc: Alex Deucher <alexander.deucher@amd.com>
> > Cc: "Christian König" <christian.koenig@amd.com>
> > Cc: Evan Quan <evan.quan@amd.com>
> > Cc: Felix Kuehling <Felix.Kuehling@amd.com>
> > Cc: Hawking Zhang <Hawking.Zhang@amd.com>
> > Cc: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
> > Cc: Luben Tuikov <luben.tuikov@amd.com>
> > Cc: Thomas Zimmermann <tzimmermann@suse.de>
> > Cc: Monk Liu <Monk.Liu@amd.com>
> > Cc: Yintian Tao <yttao@amd.com>
> > Cc: Dennis Li <Dennis.Li@amd.com>
> > Cc: shaoyunl <shaoyun.liu@amd.com>
> > Cc: Bokun Zhang <Bokun.Zhang@amd.com>
> > Cc: "Stanley.Yang" <Stanley.Yang@amd.com>
> > Cc: Wenhui Sheng <Wenhui.Sheng@amd.com>
> > Cc: chen gong <curry.gong@amd.com>
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > ---
> >  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c  |  8 ++++----
> >  drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 12 +++++++++++-
> >  2 files changed, 15 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > index 024c3b70b1aa..3d337f13ae4e 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > @@ -1093,7 +1093,7 @@ static const struct pci_device_id pciidlist[] = {
> >
> >  MODULE_DEVICE_TABLE(pci, pciidlist);
> >
> > -static struct drm_driver kms_driver;
> > +struct drm_driver amdgpu_kms_driver;
> >
> >  static int amdgpu_pci_probe(struct pci_dev *pdev,
> >                             const struct pci_device_id *ent)
> > @@ -1164,7 +1164,7 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
> >         if (ret)
> >                 return ret;
> >
> > -       adev = devm_drm_dev_alloc(&pdev->dev, &kms_driver, typeof(*adev), ddev);
> > +       adev = devm_drm_dev_alloc(&pdev->dev, &amdgpu_kms_driver, typeof(*adev), ddev);
> >         if (IS_ERR(adev))
> >                 return PTR_ERR(adev);
> >
> > @@ -1508,7 +1508,7 @@ int amdgpu_file_to_fpriv(struct file *filp, struct amdgpu_fpriv **fpriv)
> >         return 0;
> >  }
> >
> > -static struct drm_driver kms_driver = {
> > +struct drm_driver amdgpu_kms_driver = {
> >         .driver_features =
> >             DRIVER_ATOMIC |
> >             DRIVER_GEM |
> > @@ -1571,7 +1571,7 @@ static int __init amdgpu_init(void)
> >                 goto error_fence;
> >
> >         DRM_INFO("amdgpu kernel modesetting enabled.\n");
> > -       kms_driver.num_ioctls = amdgpu_max_kms_ioctl;
> > +       amdgpu_kms_driver.num_ioctls = amdgpu_max_kms_ioctl;
> >         amdgpu_register_atpx_handler();
> >
> >         /* Ignore KFD init failures. Normal when CONFIG_HSA_AMD is not set. */
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> > index d0aea5e39531..dde4c449c284 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> > @@ -45,13 +45,23 @@ bool amdgpu_virt_mmio_blocked(struct amdgpu_device *adev)
> >         return RREG32_NO_KIQ(0xc040) == 0xffffffff;
> >  }
> >
> > +extern struct drm_driver amdgpu_kms_driver;
> > +
> >  void amdgpu_virt_init_setting(struct amdgpu_device *adev)
> >  {
> >         /* enable virtual display */
> >         if (adev->mode_info.num_crtc == 0)
> >                 adev->mode_info.num_crtc = 1;
> >         adev->enable_virtual_display = true;
> > -       adev_to_drm(adev)->driver->driver_features &= ~DRIVER_ATOMIC;
> > +
> > +       /*
> > +        * FIXME: Either make virt support atomic or make sure you have two
> > +        * drm_driver structs, these kind of tricks are only ok when there's
> > +        * guaranteed only a single device per system. This should also be done
> > +        * before struct drm_device is initialized.
> > +        */
> > +       amdgpu_kms_driver.driver_features &= ~DRIVER_ATOMIC;
>
> There is additional DRIVER_ATOMIC in amdgpu_pci_probe() for older
> chips without atomic support.

That would need to be fixed for making the amdgpu drm_driver
structures constant, but that's not what I'm doing here. I'm only
removing the usage of the drm_device->driver pointer, to allow that to
become constant. Untangling the flow to make the amdgpu_kms_driver
const looked a bit more involved than just a  simple patch.
-Daniel

> Alex
>
> > +
> >         adev->cg_flags = 0;
> >         adev->pg_flags = 0;
> >  }
> > --
> > 2.28.0
> >
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/dri-devel



-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 3/5] drm/amdgpu: Paper over the drm_driver mangling for virt
  2020-10-31  5:09       ` Luben Tuikov
@ 2020-11-01  9:59         ` Daniel Vetter
  0 siblings, 0 replies; 19+ messages in thread
From: Daniel Vetter @ 2020-11-01  9:59 UTC (permalink / raw)
  To: Luben Tuikov
  Cc: Gong, Curry, Zhang, Bokun, Intel Graphics Development,
	DRI Development, Sheng, Wenhui, Liu, Shaoyun, Yang, Stanley, Li,
	Dennis, Thomas Zimmermann, Daniel Vetter, Deucher, Alexander,
	Kuehling, Felix, Yintian Tao, Quan, Evan, Koenig, Christian, Liu,
	Monk, Zhang, Hawking

On Sat, Oct 31, 2020 at 6:09 AM Luben Tuikov <luben.tuikov@amd.com> wrote:
>
> On 2020-10-30 08:04, Daniel Vetter wrote:
> > On Fri, Oct 30, 2020 at 11:41 AM Liu, Monk <Monk.Liu@amd.com> wrote:
> >>
> >> [AMD Official Use Only - Internal Distribution Only]
> >>
> >> What's the purpose of the patch sets
> >>
> >> e.g.: what bug can those 5 patches fix or what feature provided
> >>
> >> for this particular one (3/5) I didn't see how it helpful, could you give a background  ?
> >
> > It's good to make function tables const, so that they can be write
> > protected. More resilience against exploits and all that. This patch
> > here is needed to be able to make drm_device->driver const so that all
> > other drivers can make their drm_driver structure const. Would be good
> > to fully fix up amdgpu like in the comment, but I'm not going that in
> > this series here.
> > -Daniel
>
> Hi Daniel,
>
> I feel that that's a good change.
>
> But if you can clarify this for me... Is this leading
> towards a single instance of a struct drm_driver per
> low-level driver, i.e. amdgpu?
>
> And as such, being able to be defined as const?
>
> So that we have many GPU devices driven by one
> low-level driver (amdgpu_drv), represented by one
> const drm_driver (and thus const)?
>
> Which would imply that if varied devices can be handled
> by a single low-level driver, whose struct drm_driver
> settings cannot be shared among subset of devices (say
> very old and new), then the low-level driver
> would have to create more than one "const" struct drm_driver?

This is already the case, minus the const. Which is why it's
problemantic if you change that shared drm_driver instance at runtime
from a specific driver, since you always change it for all instances.
-Daniel

>
> Regards,
> Luben
>
> >
> >>
> >> thanks
> >> _____________________________________
> >> Monk Liu|GPU Virtualization Team |AMD
> >>
> >>
> >> -----Original Message-----
> >> From: Daniel Vetter <daniel.vetter@ffwll.ch>
> >> Sent: Friday, October 30, 2020 6:11 PM
> >> To: DRI Development <dri-devel@lists.freedesktop.org>
> >> Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org>; Daniel Vetter <daniel.vetter@ffwll.ch>; Deucher, Alexander <Alexander.Deucher@amd.com>; Koenig, Christian <Christian.Koenig@amd.com>; Quan, Evan <Evan.Quan@amd.com>; Kuehling, Felix <Felix.Kuehling@amd.com>; Zhang, Hawking <Hawking.Zhang@amd.com>; Grodzovsky, Andrey <Andrey.Grodzovsky@amd.com>; Tuikov, Luben <Luben.Tuikov@amd.com>; Thomas Zimmermann <tzimmermann@suse.de>; Liu, Monk <Monk.Liu@amd.com>; Yintian Tao <yttao@amd.com>; Li, Dennis <Dennis.Li@amd.com>; Liu, Shaoyun <Shaoyun.Liu@amd.com>; Zhang, Bokun <Bokun.Zhang@amd.com>; Yang, Stanley <Stanley.Yang@amd.com>; Sheng, Wenhui <Wenhui.Sheng@amd.com>; Gong, Curry <Curry.Gong@amd.com>; Daniel Vetter <daniel.vetter@intel.com>
> >> Subject: [PATCH 3/5] drm/amdgpu: Paper over the drm_driver mangling for virt
> >>
> >> Prep work to make drm_device->driver const.
> >>
> >> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> >> Cc: Alex Deucher <alexander.deucher@amd.com>
> >> Cc: "Christian König" <christian.koenig@amd.com>
> >> Cc: Evan Quan <evan.quan@amd.com>
> >> Cc: Felix Kuehling <Felix.Kuehling@amd.com>
> >> Cc: Hawking Zhang <Hawking.Zhang@amd.com>
> >> Cc: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
> >> Cc: Luben Tuikov <luben.tuikov@amd.com>
> >> Cc: Thomas Zimmermann <tzimmermann@suse.de>
> >> Cc: Monk Liu <Monk.Liu@amd.com>
> >> Cc: Yintian Tao <yttao@amd.com>
> >> Cc: Dennis Li <Dennis.Li@amd.com>
> >> Cc: shaoyunl <shaoyun.liu@amd.com>
> >> Cc: Bokun Zhang <Bokun.Zhang@amd.com>
> >> Cc: "Stanley.Yang" <Stanley.Yang@amd.com>
> >> Cc: Wenhui Sheng <Wenhui.Sheng@amd.com>
> >> Cc: chen gong <curry.gong@amd.com>
> >> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> >> ---
> >>  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c  |  8 ++++----  drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 12 +++++++++++-
> >>  2 files changed, 15 insertions(+), 5 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> >> index 024c3b70b1aa..3d337f13ae4e 100644
> >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> >> @@ -1093,7 +1093,7 @@ static const struct pci_device_id pciidlist[] = {
> >>
> >>  MODULE_DEVICE_TABLE(pci, pciidlist);
> >>
> >> -static struct drm_driver kms_driver;
> >> +struct drm_driver amdgpu_kms_driver;
> >>
> >>  static int amdgpu_pci_probe(struct pci_dev *pdev,
> >>      const struct pci_device_id *ent) @@ -1164,7 +1164,7 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
> >>  if (ret)
> >>  return ret;
> >>
> >> -adev = devm_drm_dev_alloc(&pdev->dev, &kms_driver, typeof(*adev), ddev);
> >> +adev = devm_drm_dev_alloc(&pdev->dev, &amdgpu_kms_driver,
> >> +typeof(*adev), ddev);
> >>  if (IS_ERR(adev))
> >>  return PTR_ERR(adev);
> >>
> >> @@ -1508,7 +1508,7 @@ int amdgpu_file_to_fpriv(struct file *filp, struct amdgpu_fpriv **fpriv)
> >>  return 0;
> >>  }
> >>
> >> -static struct drm_driver kms_driver = {
> >> +struct drm_driver amdgpu_kms_driver = {
> >>  .driver_features =
> >>      DRIVER_ATOMIC |
> >>      DRIVER_GEM |
> >> @@ -1571,7 +1571,7 @@ static int __init amdgpu_init(void)
> >>  goto error_fence;
> >>
> >>  DRM_INFO("amdgpu kernel modesetting enabled.\n");
> >> -kms_driver.num_ioctls = amdgpu_max_kms_ioctl;
> >> +amdgpu_kms_driver.num_ioctls = amdgpu_max_kms_ioctl;
> >>  amdgpu_register_atpx_handler();
> >>
> >>  /* Ignore KFD init failures. Normal when CONFIG_HSA_AMD is not set. */ diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> >> index d0aea5e39531..dde4c449c284 100644
> >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> >> @@ -45,13 +45,23 @@ bool amdgpu_virt_mmio_blocked(struct amdgpu_device *adev)
> >>  return RREG32_NO_KIQ(0xc040) == 0xffffffff;  }
> >>
> >> +extern struct drm_driver amdgpu_kms_driver;
> >> +
> >>  void amdgpu_virt_init_setting(struct amdgpu_device *adev)  {
> >>  /* enable virtual display */
> >>  if (adev->mode_info.num_crtc == 0)
> >>  adev->mode_info.num_crtc = 1;
> >>  adev->enable_virtual_display = true;
> >> -adev_to_drm(adev)->driver->driver_features &= ~DRIVER_ATOMIC;
> >> +
> >> +/*
> >> + * FIXME: Either make virt support atomic or make sure you have two
> >> + * drm_driver structs, these kind of tricks are only ok when there's
> >> + * guaranteed only a single device per system. This should also be done
> >> + * before struct drm_device is initialized.
> >> + */
> >> +amdgpu_kms_driver.driver_features &= ~DRIVER_ATOMIC;
> >> +
> >>  adev->cg_flags = 0;
> >>  adev->pg_flags = 0;
> >>  }
> >> --
> >> 2.28.0
> >>
> >
> >
>


-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 3/5] drm/amdgpu: Paper over the drm_driver mangling for virt
  2020-10-31 13:57     ` Daniel Vetter
@ 2020-11-01 10:01       ` Daniel Vetter
  2020-11-03 16:49         ` Alex Deucher
  0 siblings, 1 reply; 19+ messages in thread
From: Daniel Vetter @ 2020-11-01 10:01 UTC (permalink / raw)
  To: Alex Deucher
  Cc: Evan Quan, chen gong, Bokun Zhang, Intel Graphics Development,
	Wenhui Sheng, Christian König, Monk Liu, Luben Tuikov,
	Stanley.Yang, DRI Development, Thomas Zimmermann, Alex Deucher,
	Daniel Vetter, Yintian Tao, Hawking Zhang, Felix Kuehling,
	Dennis Li, shaoyunl

On Sat, Oct 31, 2020 at 2:57 PM Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
>
> On Fri, Oct 30, 2020 at 7:47 PM Alex Deucher <alexdeucher@gmail.com> wrote:
> >
> > On Fri, Oct 30, 2020 at 6:11 AM Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> > >
> > > Prep work to make drm_device->driver const.
> > >
> > > Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> > > Cc: Alex Deucher <alexander.deucher@amd.com>
> > > Cc: "Christian König" <christian.koenig@amd.com>
> > > Cc: Evan Quan <evan.quan@amd.com>
> > > Cc: Felix Kuehling <Felix.Kuehling@amd.com>
> > > Cc: Hawking Zhang <Hawking.Zhang@amd.com>
> > > Cc: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
> > > Cc: Luben Tuikov <luben.tuikov@amd.com>
> > > Cc: Thomas Zimmermann <tzimmermann@suse.de>
> > > Cc: Monk Liu <Monk.Liu@amd.com>
> > > Cc: Yintian Tao <yttao@amd.com>
> > > Cc: Dennis Li <Dennis.Li@amd.com>
> > > Cc: shaoyunl <shaoyun.liu@amd.com>
> > > Cc: Bokun Zhang <Bokun.Zhang@amd.com>
> > > Cc: "Stanley.Yang" <Stanley.Yang@amd.com>
> > > Cc: Wenhui Sheng <Wenhui.Sheng@amd.com>
> > > Cc: chen gong <curry.gong@amd.com>
> > > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > > ---
> > >  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c  |  8 ++++----
> > >  drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 12 +++++++++++-
> > >  2 files changed, 15 insertions(+), 5 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > > index 024c3b70b1aa..3d337f13ae4e 100644
> > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > > @@ -1093,7 +1093,7 @@ static const struct pci_device_id pciidlist[] = {
> > >
> > >  MODULE_DEVICE_TABLE(pci, pciidlist);
> > >
> > > -static struct drm_driver kms_driver;
> > > +struct drm_driver amdgpu_kms_driver;
> > >
> > >  static int amdgpu_pci_probe(struct pci_dev *pdev,
> > >                             const struct pci_device_id *ent)
> > > @@ -1164,7 +1164,7 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
> > >         if (ret)
> > >                 return ret;
> > >
> > > -       adev = devm_drm_dev_alloc(&pdev->dev, &kms_driver, typeof(*adev), ddev);
> > > +       adev = devm_drm_dev_alloc(&pdev->dev, &amdgpu_kms_driver, typeof(*adev), ddev);
> > >         if (IS_ERR(adev))
> > >                 return PTR_ERR(adev);
> > >
> > > @@ -1508,7 +1508,7 @@ int amdgpu_file_to_fpriv(struct file *filp, struct amdgpu_fpriv **fpriv)
> > >         return 0;
> > >  }
> > >
> > > -static struct drm_driver kms_driver = {
> > > +struct drm_driver amdgpu_kms_driver = {
> > >         .driver_features =
> > >             DRIVER_ATOMIC |
> > >             DRIVER_GEM |
> > > @@ -1571,7 +1571,7 @@ static int __init amdgpu_init(void)
> > >                 goto error_fence;
> > >
> > >         DRM_INFO("amdgpu kernel modesetting enabled.\n");
> > > -       kms_driver.num_ioctls = amdgpu_max_kms_ioctl;
> > > +       amdgpu_kms_driver.num_ioctls = amdgpu_max_kms_ioctl;
> > >         amdgpu_register_atpx_handler();
> > >
> > >         /* Ignore KFD init failures. Normal when CONFIG_HSA_AMD is not set. */
> > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> > > index d0aea5e39531..dde4c449c284 100644
> > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> > > @@ -45,13 +45,23 @@ bool amdgpu_virt_mmio_blocked(struct amdgpu_device *adev)
> > >         return RREG32_NO_KIQ(0xc040) == 0xffffffff;
> > >  }
> > >
> > > +extern struct drm_driver amdgpu_kms_driver;
> > > +
> > >  void amdgpu_virt_init_setting(struct amdgpu_device *adev)
> > >  {
> > >         /* enable virtual display */
> > >         if (adev->mode_info.num_crtc == 0)
> > >                 adev->mode_info.num_crtc = 1;
> > >         adev->enable_virtual_display = true;
> > > -       adev_to_drm(adev)->driver->driver_features &= ~DRIVER_ATOMIC;
> > > +
> > > +       /*
> > > +        * FIXME: Either make virt support atomic or make sure you have two
> > > +        * drm_driver structs, these kind of tricks are only ok when there's
> > > +        * guaranteed only a single device per system. This should also be done
> > > +        * before struct drm_device is initialized.
> > > +        */
> > > +       amdgpu_kms_driver.driver_features &= ~DRIVER_ATOMIC;
> >
> > There is additional DRIVER_ATOMIC in amdgpu_pci_probe() for older
> > chips without atomic support.
>
> That would need to be fixed for making the amdgpu drm_driver
> structures constant, but that's not what I'm doing here. I'm only
> removing the usage of the drm_device->driver pointer, to allow that to
> become constant. Untangling the flow to make the amdgpu_kms_driver
> const looked a bit more involved than just a  simple patch.

On second look, this changes the drm_device->driver_features flag,
which was added to avoid having to change the drm_driver one. So
that's actually all ok (and just the virt code here is broken). But
amdgpu also updates num_ioctl and other stuff, and that's a fairly
invasive patch.

I'm also not sure whether this code here can just be switched over
from drm_driver->driver_features to drm_device->driver_features. So
given all this, ok as-is and you guys figure out how to patch this
properly, or want me to change something in this patch?

Cheers, Daniel

>
> > Alex
> >
> > > +
> > >         adev->cg_flags = 0;
> > >         adev->pg_flags = 0;
> > >  }
> > > --
> > > 2.28.0
> > >
> > > _______________________________________________
> > > dri-devel mailing list
> > > dri-devel@lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
>
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch



-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 3/5] drm/amdgpu: Paper over the drm_driver mangling for virt
  2020-11-01 10:01       ` Daniel Vetter
@ 2020-11-03 16:49         ` Alex Deucher
  2020-11-04  9:31           ` Daniel Vetter
  0 siblings, 1 reply; 19+ messages in thread
From: Alex Deucher @ 2020-11-03 16:49 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Evan Quan, chen gong, Bokun Zhang, Intel Graphics Development,
	Wenhui Sheng, Christian König, Monk Liu, Luben Tuikov,
	Stanley.Yang, DRI Development, Thomas Zimmermann, Alex Deucher,
	Daniel Vetter, Yintian Tao, Hawking Zhang, Felix Kuehling,
	Dennis Li, shaoyunl

On Sun, Nov 1, 2020 at 5:01 AM Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
>
> On Sat, Oct 31, 2020 at 2:57 PM Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> >
> > On Fri, Oct 30, 2020 at 7:47 PM Alex Deucher <alexdeucher@gmail.com> wrote:
> > >
> > > On Fri, Oct 30, 2020 at 6:11 AM Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> > > >
> > > > Prep work to make drm_device->driver const.
> > > >
> > > > Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> > > > Cc: Alex Deucher <alexander.deucher@amd.com>
> > > > Cc: "Christian König" <christian.koenig@amd.com>
> > > > Cc: Evan Quan <evan.quan@amd.com>
> > > > Cc: Felix Kuehling <Felix.Kuehling@amd.com>
> > > > Cc: Hawking Zhang <Hawking.Zhang@amd.com>
> > > > Cc: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
> > > > Cc: Luben Tuikov <luben.tuikov@amd.com>
> > > > Cc: Thomas Zimmermann <tzimmermann@suse.de>
> > > > Cc: Monk Liu <Monk.Liu@amd.com>
> > > > Cc: Yintian Tao <yttao@amd.com>
> > > > Cc: Dennis Li <Dennis.Li@amd.com>
> > > > Cc: shaoyunl <shaoyun.liu@amd.com>
> > > > Cc: Bokun Zhang <Bokun.Zhang@amd.com>
> > > > Cc: "Stanley.Yang" <Stanley.Yang@amd.com>
> > > > Cc: Wenhui Sheng <Wenhui.Sheng@amd.com>
> > > > Cc: chen gong <curry.gong@amd.com>
> > > > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > > > ---
> > > >  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c  |  8 ++++----
> > > >  drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 12 +++++++++++-
> > > >  2 files changed, 15 insertions(+), 5 deletions(-)
> > > >
> > > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > > > index 024c3b70b1aa..3d337f13ae4e 100644
> > > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > > > @@ -1093,7 +1093,7 @@ static const struct pci_device_id pciidlist[] = {
> > > >
> > > >  MODULE_DEVICE_TABLE(pci, pciidlist);
> > > >
> > > > -static struct drm_driver kms_driver;
> > > > +struct drm_driver amdgpu_kms_driver;
> > > >
> > > >  static int amdgpu_pci_probe(struct pci_dev *pdev,
> > > >                             const struct pci_device_id *ent)
> > > > @@ -1164,7 +1164,7 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
> > > >         if (ret)
> > > >                 return ret;
> > > >
> > > > -       adev = devm_drm_dev_alloc(&pdev->dev, &kms_driver, typeof(*adev), ddev);
> > > > +       adev = devm_drm_dev_alloc(&pdev->dev, &amdgpu_kms_driver, typeof(*adev), ddev);
> > > >         if (IS_ERR(adev))
> > > >                 return PTR_ERR(adev);
> > > >
> > > > @@ -1508,7 +1508,7 @@ int amdgpu_file_to_fpriv(struct file *filp, struct amdgpu_fpriv **fpriv)
> > > >         return 0;
> > > >  }
> > > >
> > > > -static struct drm_driver kms_driver = {
> > > > +struct drm_driver amdgpu_kms_driver = {
> > > >         .driver_features =
> > > >             DRIVER_ATOMIC |
> > > >             DRIVER_GEM |
> > > > @@ -1571,7 +1571,7 @@ static int __init amdgpu_init(void)
> > > >                 goto error_fence;
> > > >
> > > >         DRM_INFO("amdgpu kernel modesetting enabled.\n");
> > > > -       kms_driver.num_ioctls = amdgpu_max_kms_ioctl;
> > > > +       amdgpu_kms_driver.num_ioctls = amdgpu_max_kms_ioctl;
> > > >         amdgpu_register_atpx_handler();
> > > >
> > > >         /* Ignore KFD init failures. Normal when CONFIG_HSA_AMD is not set. */
> > > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> > > > index d0aea5e39531..dde4c449c284 100644
> > > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> > > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> > > > @@ -45,13 +45,23 @@ bool amdgpu_virt_mmio_blocked(struct amdgpu_device *adev)
> > > >         return RREG32_NO_KIQ(0xc040) == 0xffffffff;
> > > >  }
> > > >
> > > > +extern struct drm_driver amdgpu_kms_driver;
> > > > +
> > > >  void amdgpu_virt_init_setting(struct amdgpu_device *adev)
> > > >  {
> > > >         /* enable virtual display */
> > > >         if (adev->mode_info.num_crtc == 0)
> > > >                 adev->mode_info.num_crtc = 1;
> > > >         adev->enable_virtual_display = true;
> > > > -       adev_to_drm(adev)->driver->driver_features &= ~DRIVER_ATOMIC;
> > > > +
> > > > +       /*
> > > > +        * FIXME: Either make virt support atomic or make sure you have two
> > > > +        * drm_driver structs, these kind of tricks are only ok when there's
> > > > +        * guaranteed only a single device per system. This should also be done
> > > > +        * before struct drm_device is initialized.
> > > > +        */
> > > > +       amdgpu_kms_driver.driver_features &= ~DRIVER_ATOMIC;
> > >
> > > There is additional DRIVER_ATOMIC in amdgpu_pci_probe() for older
> > > chips without atomic support.
> >
> > That would need to be fixed for making the amdgpu drm_driver
> > structures constant, but that's not what I'm doing here. I'm only
> > removing the usage of the drm_device->driver pointer, to allow that to
> > become constant. Untangling the flow to make the amdgpu_kms_driver
> > const looked a bit more involved than just a  simple patch.
>
> On second look, this changes the drm_device->driver_features flag,
> which was added to avoid having to change the drm_driver one. So
> that's actually all ok (and just the virt code here is broken). But
> amdgpu also updates num_ioctl and other stuff, and that's a fairly
> invasive patch.

We don't change the number of ioctls:
const int amdgpu_max_kms_ioctl = ARRAY_SIZE(amdgpu_ioctls_kms);
So I think the only thing here is the driver features flag for the
virt display code, or am I missing something?

Alex


>
> I'm also not sure whether this code here can just be switched over
> from drm_driver->driver_features to drm_device->driver_features. So
> given all this, ok as-is and you guys figure out how to patch this
> properly, or want me to change something in this patch?
>
> Cheers, Daniel
>
> >
> > > Alex
> > >
> > > > +
> > > >         adev->cg_flags = 0;
> > > >         adev->pg_flags = 0;
> > > >  }
> > > > --
> > > > 2.28.0
> > > >
> > > > _______________________________________________
> > > > dri-devel mailing list
> > > > dri-devel@lists.freedesktop.org
> > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> >
> >
> >
> > --
> > Daniel Vetter
> > Software Engineer, Intel Corporation
> > http://blog.ffwll.ch
>
>
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 3/5] drm/amdgpu: Paper over the drm_driver mangling for virt
  2020-11-03 16:49         ` Alex Deucher
@ 2020-11-04  9:31           ` Daniel Vetter
  0 siblings, 0 replies; 19+ messages in thread
From: Daniel Vetter @ 2020-11-04  9:31 UTC (permalink / raw)
  To: Alex Deucher
  Cc: Evan Quan, chen gong, Daniel Vetter, Intel Graphics Development,
	Wenhui Sheng, Christian König, Monk Liu, Luben Tuikov,
	Stanley.Yang, DRI Development, Thomas Zimmermann, Bokun Zhang,
	Alex Deucher, Daniel Vetter, Yintian Tao, Hawking Zhang,
	Felix Kuehling, Dennis Li, shaoyunl

On Tue, Nov 03, 2020 at 11:49:40AM -0500, Alex Deucher wrote:
> On Sun, Nov 1, 2020 at 5:01 AM Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> >
> > On Sat, Oct 31, 2020 at 2:57 PM Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> > >
> > > On Fri, Oct 30, 2020 at 7:47 PM Alex Deucher <alexdeucher@gmail.com> wrote:
> > > >
> > > > On Fri, Oct 30, 2020 at 6:11 AM Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> > > > >
> > > > > Prep work to make drm_device->driver const.
> > > > >
> > > > > Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> > > > > Cc: Alex Deucher <alexander.deucher@amd.com>
> > > > > Cc: "Christian König" <christian.koenig@amd.com>
> > > > > Cc: Evan Quan <evan.quan@amd.com>
> > > > > Cc: Felix Kuehling <Felix.Kuehling@amd.com>
> > > > > Cc: Hawking Zhang <Hawking.Zhang@amd.com>
> > > > > Cc: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
> > > > > Cc: Luben Tuikov <luben.tuikov@amd.com>
> > > > > Cc: Thomas Zimmermann <tzimmermann@suse.de>
> > > > > Cc: Monk Liu <Monk.Liu@amd.com>
> > > > > Cc: Yintian Tao <yttao@amd.com>
> > > > > Cc: Dennis Li <Dennis.Li@amd.com>
> > > > > Cc: shaoyunl <shaoyun.liu@amd.com>
> > > > > Cc: Bokun Zhang <Bokun.Zhang@amd.com>
> > > > > Cc: "Stanley.Yang" <Stanley.Yang@amd.com>
> > > > > Cc: Wenhui Sheng <Wenhui.Sheng@amd.com>
> > > > > Cc: chen gong <curry.gong@amd.com>
> > > > > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > > > > ---
> > > > >  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c  |  8 ++++----
> > > > >  drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 12 +++++++++++-
> > > > >  2 files changed, 15 insertions(+), 5 deletions(-)
> > > > >
> > > > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > > > > index 024c3b70b1aa..3d337f13ae4e 100644
> > > > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > > > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > > > > @@ -1093,7 +1093,7 @@ static const struct pci_device_id pciidlist[] = {
> > > > >
> > > > >  MODULE_DEVICE_TABLE(pci, pciidlist);
> > > > >
> > > > > -static struct drm_driver kms_driver;
> > > > > +struct drm_driver amdgpu_kms_driver;
> > > > >
> > > > >  static int amdgpu_pci_probe(struct pci_dev *pdev,
> > > > >                             const struct pci_device_id *ent)
> > > > > @@ -1164,7 +1164,7 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
> > > > >         if (ret)
> > > > >                 return ret;
> > > > >
> > > > > -       adev = devm_drm_dev_alloc(&pdev->dev, &kms_driver, typeof(*adev), ddev);
> > > > > +       adev = devm_drm_dev_alloc(&pdev->dev, &amdgpu_kms_driver, typeof(*adev), ddev);
> > > > >         if (IS_ERR(adev))
> > > > >                 return PTR_ERR(adev);
> > > > >
> > > > > @@ -1508,7 +1508,7 @@ int amdgpu_file_to_fpriv(struct file *filp, struct amdgpu_fpriv **fpriv)
> > > > >         return 0;
> > > > >  }
> > > > >
> > > > > -static struct drm_driver kms_driver = {
> > > > > +struct drm_driver amdgpu_kms_driver = {
> > > > >         .driver_features =
> > > > >             DRIVER_ATOMIC |
> > > > >             DRIVER_GEM |
> > > > > @@ -1571,7 +1571,7 @@ static int __init amdgpu_init(void)
> > > > >                 goto error_fence;
> > > > >
> > > > >         DRM_INFO("amdgpu kernel modesetting enabled.\n");
> > > > > -       kms_driver.num_ioctls = amdgpu_max_kms_ioctl;
> > > > > +       amdgpu_kms_driver.num_ioctls = amdgpu_max_kms_ioctl;
> > > > >         amdgpu_register_atpx_handler();
> > > > >
> > > > >         /* Ignore KFD init failures. Normal when CONFIG_HSA_AMD is not set. */
> > > > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> > > > > index d0aea5e39531..dde4c449c284 100644
> > > > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> > > > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> > > > > @@ -45,13 +45,23 @@ bool amdgpu_virt_mmio_blocked(struct amdgpu_device *adev)
> > > > >         return RREG32_NO_KIQ(0xc040) == 0xffffffff;
> > > > >  }
> > > > >
> > > > > +extern struct drm_driver amdgpu_kms_driver;
> > > > > +
> > > > >  void amdgpu_virt_init_setting(struct amdgpu_device *adev)
> > > > >  {
> > > > >         /* enable virtual display */
> > > > >         if (adev->mode_info.num_crtc == 0)
> > > > >                 adev->mode_info.num_crtc = 1;
> > > > >         adev->enable_virtual_display = true;
> > > > > -       adev_to_drm(adev)->driver->driver_features &= ~DRIVER_ATOMIC;
> > > > > +
> > > > > +       /*
> > > > > +        * FIXME: Either make virt support atomic or make sure you have two
> > > > > +        * drm_driver structs, these kind of tricks are only ok when there's
> > > > > +        * guaranteed only a single device per system. This should also be done
> > > > > +        * before struct drm_device is initialized.
> > > > > +        */
> > > > > +       amdgpu_kms_driver.driver_features &= ~DRIVER_ATOMIC;
> > > >
> > > > There is additional DRIVER_ATOMIC in amdgpu_pci_probe() for older
> > > > chips without atomic support.
> > >
> > > That would need to be fixed for making the amdgpu drm_driver
> > > structures constant, but that's not what I'm doing here. I'm only
> > > removing the usage of the drm_device->driver pointer, to allow that to
> > > become constant. Untangling the flow to make the amdgpu_kms_driver
> > > const looked a bit more involved than just a  simple patch.
> >
> > On second look, this changes the drm_device->driver_features flag,
> > which was added to avoid having to change the drm_driver one. So
> > that's actually all ok (and just the virt code here is broken). But
> > amdgpu also updates num_ioctl and other stuff, and that's a fairly
> > invasive patch.
> 
> We don't change the number of ioctls:
> const int amdgpu_max_kms_ioctl = ARRAY_SIZE(amdgpu_ioctls_kms);
> So I think the only thing here is the driver features flag for the
> virt display code, or am I missing something?

You set the num_ioctl at runtime, not compile time. That's enough to
prevent constification. Moving that around to make it compile time means a
_lot_ of code shuffling, much more than I felt was a good idea for me to
do :-)

And for the virt case you could use drm_device->driver_flags instead to
avoid this.

Note I don't really care for this series whether you're changing your
drm_driver at runtime or not, I just want to make it possible for drivers
to make it const, which means drm_device->driver must be a const pointer.
Whether you want to make the amdgpu drm_driver const or not is up to you.
-Daniel

> 
> Alex
> 
> 
> >
> > I'm also not sure whether this code here can just be switched over
> > from drm_driver->driver_features to drm_device->driver_features. So
> > given all this, ok as-is and you guys figure out how to patch this
> > properly, or want me to change something in this patch?
> >
> > Cheers, Daniel
> >
> > >
> > > > Alex
> > > >
> > > > > +
> > > > >         adev->cg_flags = 0;
> > > > >         adev->pg_flags = 0;
> > > > >  }
> > > > > --
> > > > > 2.28.0
> > > > >
> > > > > _______________________________________________
> > > > > dri-devel mailing list
> > > > > dri-devel@lists.freedesktop.org
> > > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > >
> > >
> > >
> > > --
> > > Daniel Vetter
> > > Software Engineer, Intel Corporation
> > > http://blog.ffwll.ch
> >
> >
> >
> > --
> > Daniel Vetter
> > Software Engineer, Intel Corporation
> > http://blog.ffwll.ch

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 1/5] drm/radeon: Stop changing the drm_driver struct
@ 2020-10-23 12:28 Daniel Vetter
  0 siblings, 0 replies; 19+ messages in thread
From: Daniel Vetter @ 2020-10-23 12:28 UTC (permalink / raw)
  To: DRI Development
  Cc: Daniel Vetter, Intel Graphics Development, amd-gfx, Alex Deucher,
	Daniel Vetter, Christian König

With only the kms driver left, we can fold this in. This means
we need to move the ioctl table, which means one additional ioctl
must be defined in headers.

Also there's a conflict between the radeon_init macro and the module
init function, so rename the module functions to avoid that.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: "Christian König" <christian.koenig@amd.com>
Cc: amd-gfx@lists.freedesktop.org
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/gpu/drm/radeon/radeon.h     |  1 +
 drivers/gpu/drm/radeon/radeon_drv.c | 85 ++++++++++++++++++++---------
 drivers/gpu/drm/radeon/radeon_kms.c | 49 +----------------
 3 files changed, 62 insertions(+), 73 deletions(-)

diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 5d54bccebd4d..f475785d6491 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -2244,6 +2244,7 @@ int radeon_gem_set_tiling_ioctl(struct drm_device *dev, void *data,
 				struct drm_file *filp);
 int radeon_gem_get_tiling_ioctl(struct drm_device *dev, void *data,
 				struct drm_file *filp);
+int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp);
 
 /* VRAM scratch page for HDP bug, default vram page */
 struct r600_vram_scratch {
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
index 65061c949aee..9c11e36ad33a 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
@@ -51,6 +51,7 @@
 #include <drm/radeon_drm.h>
 
 #include "radeon_drv.h"
+#include "radeon.h"
 
 /*
  * KMS wrapper.
@@ -129,8 +130,6 @@ extern int radeon_get_crtc_scanoutpos(struct drm_device *dev, unsigned int crtc,
 				      ktime_t *stime, ktime_t *etime,
 				      const struct drm_display_mode *mode);
 extern bool radeon_is_px(struct drm_device *dev);
-extern const struct drm_ioctl_desc radeon_ioctls_kms[];
-extern int radeon_max_kms_ioctl;
 int radeon_mmap(struct file *filp, struct vm_area_struct *vma);
 int radeon_mode_dumb_mmap(struct drm_file *filp,
 			  struct drm_device *dev,
@@ -584,9 +583,55 @@ static const struct file_operations radeon_driver_kms_fops = {
 #endif
 };
 
+static const struct drm_ioctl_desc radeon_ioctls_kms[] = {
+	DRM_IOCTL_DEF_DRV(RADEON_CP_INIT, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+	DRM_IOCTL_DEF_DRV(RADEON_CP_START, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+	DRM_IOCTL_DEF_DRV(RADEON_CP_STOP, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+	DRM_IOCTL_DEF_DRV(RADEON_CP_RESET, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+	DRM_IOCTL_DEF_DRV(RADEON_CP_IDLE, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_CP_RESUME, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_RESET, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_FULLSCREEN, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_SWAP, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_CLEAR, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_VERTEX, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_INDICES, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_TEXTURE, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_STIPPLE, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_INDIRECT, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+	DRM_IOCTL_DEF_DRV(RADEON_VERTEX2, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_CMDBUF, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_GETPARAM, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_FLIP, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_ALLOC, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_FREE, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_INIT_HEAP, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+	DRM_IOCTL_DEF_DRV(RADEON_IRQ_EMIT, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_IRQ_WAIT, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_SETPARAM, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_SURF_ALLOC, drm_invalid_op, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_SURF_FREE, drm_invalid_op, DRM_AUTH),
+	/* KMS */
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_INFO, radeon_gem_info_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_CREATE, radeon_gem_create_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_MMAP, radeon_gem_mmap_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_SET_DOMAIN, radeon_gem_set_domain_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_PREAD, radeon_gem_pread_ioctl, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_PWRITE, radeon_gem_pwrite_ioctl, DRM_AUTH),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_WAIT_IDLE, radeon_gem_wait_idle_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_CS, radeon_cs_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_INFO, radeon_info_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_SET_TILING, radeon_gem_set_tiling_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_GET_TILING, radeon_gem_get_tiling_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_BUSY, radeon_gem_busy_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_VA, radeon_gem_va_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_OP, radeon_gem_op_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(RADEON_GEM_USERPTR, radeon_gem_userptr_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+};
+
 static struct drm_driver kms_driver = {
 	.driver_features =
-	    DRIVER_GEM | DRIVER_RENDER,
+	    DRIVER_GEM | DRIVER_RENDER | DRIVER_MODESET,
 	.load = radeon_driver_load_kms,
 	.open = radeon_driver_open_kms,
 	.postclose = radeon_driver_postclose_kms,
@@ -597,6 +642,7 @@ static struct drm_driver kms_driver = {
 	.irq_uninstall = radeon_driver_irq_uninstall_kms,
 	.irq_handler = radeon_driver_irq_handler_kms,
 	.ioctls = radeon_ioctls_kms,
+	.num_ioctls = ARRAY_SIZE(radeon_ioctls_kms),
 	.dumb_create = radeon_mode_dumb_create,
 	.dumb_map_offset = radeon_mode_dumb_mmap,
 	.fops = &radeon_driver_kms_fops,
@@ -613,9 +659,6 @@ static struct drm_driver kms_driver = {
 	.patchlevel = KMS_DRIVER_PATCHLEVEL,
 };
 
-static struct drm_driver *driver;
-static struct pci_driver *pdriver;
-
 static struct pci_driver radeon_kms_pci_driver = {
 	.name = DRIVER_NAME,
 	.id_table = pciidlist,
@@ -625,41 +668,33 @@ static struct pci_driver radeon_kms_pci_driver = {
 	.driver.pm = &radeon_pm_ops,
 };
 
-static int __init radeon_init(void)
+static int __init radeon_module_init(void)
 {
 	if (vgacon_text_force() && radeon_modeset == -1) {
 		DRM_INFO("VGACON disable radeon kernel modesetting.\n");
 		radeon_modeset = 0;
 	}
-	/* set to modesetting by default if not nomodeset */
-	if (radeon_modeset == -1)
-		radeon_modeset = 1;
-
-	if (radeon_modeset == 1) {
-		DRM_INFO("radeon kernel modesetting enabled.\n");
-		driver = &kms_driver;
-		pdriver = &radeon_kms_pci_driver;
-		driver->driver_features |= DRIVER_MODESET;
-		driver->num_ioctls = radeon_max_kms_ioctl;
-		radeon_register_atpx_handler();
-
-	} else {
+
+	if (radeon_modeset == 0) {
 		DRM_ERROR("No UMS support in radeon module!\n");
 		return -EINVAL;
 	}
 
-	return pci_register_driver(pdriver);
+	DRM_INFO("radeon kernel modesetting enabled.\n");
+	radeon_register_atpx_handler();
+
+	return pci_register_driver(&radeon_kms_pci_driver);
 }
 
-static void __exit radeon_exit(void)
+static void __exit radeon_module_exit(void)
 {
-	pci_unregister_driver(pdriver);
+	pci_unregister_driver(&radeon_kms_pci_driver);
 	radeon_unregister_atpx_handler();
 	mmu_notifier_synchronize();
 }
 
-module_init(radeon_init);
-module_exit(radeon_exit);
+module_init(radeon_module_init);
+module_exit(radeon_module_exit);
 
 MODULE_AUTHOR(DRIVER_AUTHOR);
 MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
index 99ee60f8b604..abb3bdd9ca25 100644
--- a/drivers/gpu/drm/radeon/radeon_kms.c
+++ b/drivers/gpu/drm/radeon/radeon_kms.c
@@ -221,7 +221,7 @@ static void radeon_set_filp_rights(struct drm_device *dev,
  * etc. (all asics).
  * Returns 0 on success, -EINVAL on failure.
  */
-static int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
+int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
 {
 	struct radeon_device *rdev = dev->dev_private;
 	struct drm_radeon_info *info = data;
@@ -866,50 +866,3 @@ void radeon_disable_vblank_kms(struct drm_crtc *crtc)
 	radeon_irq_set(rdev);
 	spin_unlock_irqrestore(&rdev->irq.lock, irqflags);
 }
-
-const struct drm_ioctl_desc radeon_ioctls_kms[] = {
-	DRM_IOCTL_DEF_DRV(RADEON_CP_INIT, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
-	DRM_IOCTL_DEF_DRV(RADEON_CP_START, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
-	DRM_IOCTL_DEF_DRV(RADEON_CP_STOP, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
-	DRM_IOCTL_DEF_DRV(RADEON_CP_RESET, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
-	DRM_IOCTL_DEF_DRV(RADEON_CP_IDLE, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_CP_RESUME, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_RESET, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_FULLSCREEN, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_SWAP, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_CLEAR, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_VERTEX, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_INDICES, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_TEXTURE, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_STIPPLE, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_INDIRECT, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
-	DRM_IOCTL_DEF_DRV(RADEON_VERTEX2, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_CMDBUF, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_GETPARAM, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_FLIP, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_ALLOC, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_FREE, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_INIT_HEAP, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
-	DRM_IOCTL_DEF_DRV(RADEON_IRQ_EMIT, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_IRQ_WAIT, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_SETPARAM, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_SURF_ALLOC, drm_invalid_op, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_SURF_FREE, drm_invalid_op, DRM_AUTH),
-	/* KMS */
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_INFO, radeon_gem_info_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_CREATE, radeon_gem_create_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_MMAP, radeon_gem_mmap_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_SET_DOMAIN, radeon_gem_set_domain_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_PREAD, radeon_gem_pread_ioctl, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_PWRITE, radeon_gem_pwrite_ioctl, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_WAIT_IDLE, radeon_gem_wait_idle_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_CS, radeon_cs_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_INFO, radeon_info_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_SET_TILING, radeon_gem_set_tiling_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_GET_TILING, radeon_gem_get_tiling_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_BUSY, radeon_gem_busy_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_VA, radeon_gem_va_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_OP, radeon_gem_op_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(RADEON_GEM_USERPTR, radeon_gem_userptr_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
-};
-int radeon_max_kms_ioctl = ARRAY_SIZE(radeon_ioctls_kms);
-- 
2.28.0

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

^ permalink raw reply related	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2020-11-04  9:31 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-30 10:11 [PATCH 1/5] drm/radeon: Stop changing the drm_driver struct Daniel Vetter
2020-10-30 10:11 ` [PATCH 2/5] drm: Compile out legacy chunks from struct drm_device Daniel Vetter
2020-10-30 18:22   ` Alex Deucher
2020-10-30 10:11 ` [PATCH 3/5] drm/amdgpu: Paper over the drm_driver mangling for virt Daniel Vetter
2020-10-30 10:41   ` Liu, Monk
2020-10-30 12:04     ` Daniel Vetter
2020-10-31  5:09       ` Luben Tuikov
2020-11-01  9:59         ` Daniel Vetter
2020-10-30 18:47   ` Alex Deucher
2020-10-31 13:57     ` Daniel Vetter
2020-11-01 10:01       ` Daniel Vetter
2020-11-03 16:49         ` Alex Deucher
2020-11-04  9:31           ` Daniel Vetter
2020-10-30 10:11 ` [PATCH 4/5] drm: Allow const struct drm_driver Daniel Vetter
2020-10-30 18:53   ` Alex Deucher
2020-10-30 10:11 ` [PATCH 5/5] drm/<drivers>: Constify " Daniel Vetter
2020-10-30 18:53   ` Alex Deucher
2020-10-30 18:21 ` [PATCH 1/5] drm/radeon: Stop changing the drm_driver struct Alex Deucher
  -- strict thread matches above, loose matches on Subject: below --
2020-10-23 12:28 Daniel Vetter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).