drm/nouveau: Remove support for legacy contexts/buffers
authorThomas Zimmermann <tzimmermann@suse.de>
Thu, 12 Jan 2023 13:38:58 +0000 (14:38 +0100)
committerThomas Zimmermann <tzimmermann@suse.de>
Fri, 13 Jan 2023 08:22:02 +0000 (09:22 +0100)
Remove nouveau's support for legacy contexts and buffers. It was
required by libdrm earlier than 2.4.33, released in March 2012. A
previous attempt in 2013 to remove the functionality [1] had to be
reverted [2] as there were still users left. Libdrm 2.4.33 is now
almost 11 years old and it is time for userspace to move on.

With the nouveau code gone, we can also remove the driver-feature
bit DRIVER_KMS_LEGACY_CONTEXT.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Karol Herbst <kherbst@redhat.com>
Link: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7c510133d93dd6f15ca040733ba7b2891ed61fd1
Link: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c21eb21cb50d58e7cbdcb8b9e7ff68b85cfa5095
Link: https://patchwork.freedesktop.org/patch/msgid/20230112133858.17087-1-tzimmermann@suse.de
drivers/gpu/drm/drm_bufs.c
drivers/gpu/drm/drm_context.c
drivers/gpu/drm/nouveau/Kconfig
drivers/gpu/drm/nouveau/nouveau_drm.c
include/drm/drm_drv.h

index fcca21e8efac0c9463d4f253fe74712366cecab5..86700560fea28d3b3d5f6bad439772797db278be 100644 (file)
@@ -423,8 +423,7 @@ int drm_legacy_addmap_ioctl(struct drm_device *dev, void *data,
        if (!(capable(CAP_SYS_ADMIN) || map->type == _DRM_AGP || map->type == _DRM_SHM))
                return -EPERM;
 
-       if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
-           !drm_core_check_feature(dev, DRIVER_LEGACY))
+       if (!drm_core_check_feature(dev, DRIVER_LEGACY))
                return -EOPNOTSUPP;
 
        err = drm_addmap_core(dev, map->offset, map->size, map->type,
@@ -469,8 +468,7 @@ int drm_legacy_getmap_ioctl(struct drm_device *dev, void *data,
        int idx;
        int i;
 
-       if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
-           !drm_core_check_feature(dev, DRIVER_LEGACY))
+       if (!drm_core_check_feature(dev, DRIVER_LEGACY))
                return -EOPNOTSUPP;
 
        idx = map->offset;
@@ -570,8 +568,7 @@ EXPORT_SYMBOL(drm_legacy_rmmap_locked);
 
 void drm_legacy_rmmap(struct drm_device *dev, struct drm_local_map *map)
 {
-       if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
-           !drm_core_check_feature(dev, DRIVER_LEGACY))
+       if (!drm_core_check_feature(dev, DRIVER_LEGACY))
                return;
 
        mutex_lock(&dev->struct_mutex);
@@ -628,8 +625,7 @@ int drm_legacy_rmmap_ioctl(struct drm_device *dev, void *data,
        struct drm_map_list *r_list;
        int ret;
 
-       if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
-           !drm_core_check_feature(dev, DRIVER_LEGACY))
+       if (!drm_core_check_feature(dev, DRIVER_LEGACY))
                return -EOPNOTSUPP;
 
        mutex_lock(&dev->struct_mutex);
index c6e6a3e7219a6084bad566d95f7e54e2fc8b8e6d..a0fc779e5e1e8a14ab48f9c7f43ff9419b022e2b 100644 (file)
@@ -59,8 +59,7 @@ struct drm_ctx_list {
  */
 void drm_legacy_ctxbitmap_free(struct drm_device * dev, int ctx_handle)
 {
-       if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
-           !drm_core_check_feature(dev, DRIVER_LEGACY))
+       if (!drm_core_check_feature(dev, DRIVER_LEGACY))
                return;
 
        mutex_lock(&dev->struct_mutex);
@@ -97,8 +96,7 @@ static int drm_legacy_ctxbitmap_next(struct drm_device * dev)
  */
 void drm_legacy_ctxbitmap_init(struct drm_device * dev)
 {
-       if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
-           !drm_core_check_feature(dev, DRIVER_LEGACY))
+       if (!drm_core_check_feature(dev, DRIVER_LEGACY))
                return;
 
        idr_init(&dev->ctx_idr);
@@ -114,8 +112,7 @@ void drm_legacy_ctxbitmap_init(struct drm_device * dev)
  */
 void drm_legacy_ctxbitmap_cleanup(struct drm_device * dev)
 {
-       if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
-           !drm_core_check_feature(dev, DRIVER_LEGACY))
+       if (!drm_core_check_feature(dev, DRIVER_LEGACY))
                return;
 
        mutex_lock(&dev->struct_mutex);
@@ -136,8 +133,7 @@ void drm_legacy_ctxbitmap_flush(struct drm_device *dev, struct drm_file *file)
 {
        struct drm_ctx_list *pos, *tmp;
 
-       if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
-           !drm_core_check_feature(dev, DRIVER_LEGACY))
+       if (!drm_core_check_feature(dev, DRIVER_LEGACY))
                return;
 
        mutex_lock(&dev->ctxlist_mutex);
@@ -182,8 +178,7 @@ int drm_legacy_getsareactx(struct drm_device *dev, void *data,
        struct drm_local_map *map;
        struct drm_map_list *_entry;
 
-       if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
-           !drm_core_check_feature(dev, DRIVER_LEGACY))
+       if (!drm_core_check_feature(dev, DRIVER_LEGACY))
                return -EOPNOTSUPP;
 
        mutex_lock(&dev->struct_mutex);
@@ -230,8 +225,7 @@ int drm_legacy_setsareactx(struct drm_device *dev, void *data,
        struct drm_local_map *map = NULL;
        struct drm_map_list *r_list = NULL;
 
-       if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
-           !drm_core_check_feature(dev, DRIVER_LEGACY))
+       if (!drm_core_check_feature(dev, DRIVER_LEGACY))
                return -EOPNOTSUPP;
 
        mutex_lock(&dev->struct_mutex);
@@ -335,8 +329,7 @@ int drm_legacy_resctx(struct drm_device *dev, void *data,
        struct drm_ctx ctx;
        int i;
 
-       if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
-           !drm_core_check_feature(dev, DRIVER_LEGACY))
+       if (!drm_core_check_feature(dev, DRIVER_LEGACY))
                return -EOPNOTSUPP;
 
        if (res->count >= DRM_RESERVED_CONTEXTS) {
@@ -370,8 +363,7 @@ int drm_legacy_addctx(struct drm_device *dev, void *data,
        struct drm_ctx *ctx = data;
        int tmp_handle;
 
-       if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
-           !drm_core_check_feature(dev, DRIVER_LEGACY))
+       if (!drm_core_check_feature(dev, DRIVER_LEGACY))
                return -EOPNOTSUPP;
 
        tmp_handle = drm_legacy_ctxbitmap_next(dev);
@@ -419,8 +411,7 @@ int drm_legacy_getctx(struct drm_device *dev, void *data,
 {
        struct drm_ctx *ctx = data;
 
-       if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
-           !drm_core_check_feature(dev, DRIVER_LEGACY))
+       if (!drm_core_check_feature(dev, DRIVER_LEGACY))
                return -EOPNOTSUPP;
 
        /* This is 0, because we don't handle any context flags */
@@ -445,8 +436,7 @@ int drm_legacy_switchctx(struct drm_device *dev, void *data,
 {
        struct drm_ctx *ctx = data;
 
-       if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
-           !drm_core_check_feature(dev, DRIVER_LEGACY))
+       if (!drm_core_check_feature(dev, DRIVER_LEGACY))
                return -EOPNOTSUPP;
 
        DRM_DEBUG("%d\n", ctx->handle);
@@ -469,8 +459,7 @@ int drm_legacy_newctx(struct drm_device *dev, void *data,
 {
        struct drm_ctx *ctx = data;
 
-       if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
-           !drm_core_check_feature(dev, DRIVER_LEGACY))
+       if (!drm_core_check_feature(dev, DRIVER_LEGACY))
                return -EOPNOTSUPP;
 
        DRM_DEBUG("%d\n", ctx->handle);
@@ -495,8 +484,7 @@ int drm_legacy_rmctx(struct drm_device *dev, void *data,
 {
        struct drm_ctx *ctx = data;
 
-       if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
-           !drm_core_check_feature(dev, DRIVER_LEGACY))
+       if (!drm_core_check_feature(dev, DRIVER_LEGACY))
                return -EOPNOTSUPP;
 
        DRM_DEBUG("%d\n", ctx->handle);
index a0bb3987bf6379069dc92ae5667350b100a59014..a70bd65e1400760e46fef5097547df256b2f5d51 100644 (file)
@@ -26,18 +26,6 @@ config DRM_NOUVEAU
        help
          Choose this option for open-source NVIDIA support.
 
-config NOUVEAU_LEGACY_CTX_SUPPORT
-       bool "Nouveau legacy context support"
-       depends on DRM_NOUVEAU
-       select DRM_LEGACY
-       default y
-       help
-         There was a version of the nouveau DDX that relied on legacy
-         ctx ioctls not erroring out. But that was back in time a long
-         ways, so offer a way to disable it now. For uapi compat with
-         old nouveau ddx this should be on by default, but modern distros
-         should consider turning it off.
-
 config NOUVEAU_PLATFORM_DRIVER
        bool "Nouveau (NVIDIA) SoC GPUs"
        depends on DRM_NOUVEAU && ARCH_TEGRA
index 80f154b6adabd684495f739a9c17c5b629049c57..80562177b58185e0599569aa9c60fea54c7c22e0 100644 (file)
@@ -1221,13 +1221,9 @@ nouveau_driver_fops = {
 
 static struct drm_driver
 driver_stub = {
-       .driver_features =
-               DRIVER_GEM | DRIVER_MODESET | DRIVER_RENDER
-#if defined(CONFIG_NOUVEAU_LEGACY_CTX_SUPPORT)
-               | DRIVER_KMS_LEGACY_CONTEXT
-#endif
-               ,
-
+       .driver_features = DRIVER_GEM |
+                          DRIVER_MODESET |
+                          DRIVER_RENDER,
        .open = nouveau_drm_open,
        .postclose = nouveau_drm_postclose,
        .lastclose = nouveau_vga_lastclose,
index 700d3857e0881582ea6ed45c154b7dfc629cd6c7..a3bce427891a14bb031e740a996546c1e9d93d67 100644 (file)
@@ -141,13 +141,6 @@ enum drm_driver_feature {
         * Legacy irq support. Only for legacy drivers. Do not use.
         */
        DRIVER_HAVE_IRQ                 = BIT(30),
-       /**
-        * @DRIVER_KMS_LEGACY_CONTEXT:
-        *
-        * Used only by nouveau for backwards compatibility with existing
-        * userspace.  Do not use.
-        */
-       DRIVER_KMS_LEGACY_CONTEXT       = BIT(31),
 };
 
 /**