drm: Remove struct drm_driver.lastclose
authorThomas Zimmermann <tzimmermann@suse.de>
Mon, 12 Aug 2024 08:28:29 +0000 (10:28 +0200)
committerThomas Zimmermann <tzimmermann@suse.de>
Tue, 13 Aug 2024 14:21:12 +0000 (16:21 +0200)
The lastclose callback in struct drm_driver is unused. Remove it. Also
update documentation.

v2:
- update to use drm_lastclose()
- fix typo in documentation

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20240812083000.337744-9-tzimmermann@suse.de
drivers/gpu/drm/drm_file.c
drivers/gpu/drm/drm_internal.h
include/drm/drm_drv.h

index 513bef8..e8a841e 100644 (file)
@@ -63,15 +63,6 @@ bool drm_dev_needs_global_mutex(struct drm_device *dev)
        if (dev->driver->load || dev->driver->unload)
                return true;
 
-       /*
-        * Drivers with the lastclose callback assume that it's synchronized
-        * against concurrent opens, which again needs the BKL. The proper fix
-        * is to use the drm_client infrastructure with proper locking for each
-        * client.
-        */
-       if (dev->driver->lastclose)
-               return true;
-
        return false;
 }
 
@@ -396,14 +387,8 @@ err_undo:
 }
 EXPORT_SYMBOL(drm_open);
 
-void drm_lastclose(struct drm_device * dev)
+static void drm_lastclose(struct drm_device *dev)
 {
-       drm_dbg_core(dev, "\n");
-
-       if (dev->driver->lastclose)
-               dev->driver->lastclose(dev);
-       drm_dbg_core(dev, "driver lastclose completed\n");
-
        drm_client_dev_restore(dev);
 
        if (dev_is_pci(dev->dev))
@@ -416,9 +401,9 @@ void drm_lastclose(struct drm_device * dev)
  * @filp: file pointer.
  *
  * This function must be used by drivers as their &file_operations.release
- * method. It frees any resources associated with the open file, and calls the
- * &drm_driver.postclose driver callback. If this is the last open file for the
- * DRM device also proceeds to call the &drm_driver.lastclose driver callback.
+ * method. It frees any resources associated with the open file. If this
+ * is the last open file for the DRM device, it also restores the active
+ * in-kernel DRM client.
  *
  * RETURNS:
  *
@@ -488,9 +473,8 @@ void drm_file_update_pid(struct drm_file *filp)
  *
  * This function may be used by drivers as their &file_operations.release
  * method. It frees any resources associated with the open file prior to taking
- * the drm_global_mutex, which then calls the &drm_driver.postclose driver
- * callback. If this is the last open file for the DRM device also proceeds to
- * call the &drm_driver.lastclose driver callback.
+ * the drm_global_mutex. If this is the last open file for the DRM device, it
+ * then restores the active in-kernel DRM client.
  *
  * RETURNS:
  *
index 690505a..23c9980 100644 (file)
@@ -53,7 +53,6 @@ extern struct mutex drm_global_mutex;
 bool drm_dev_needs_global_mutex(struct drm_device *dev);
 struct drm_file *drm_file_alloc(struct drm_minor *minor);
 void drm_file_free(struct drm_file *file);
-void drm_lastclose(struct drm_device *dev);
 
 #ifdef CONFIG_PCI
 
index cd37936..02ea4e3 100644 (file)
@@ -228,34 +228,6 @@ struct drm_driver {
         */
        void (*postclose) (struct drm_device *, struct drm_file *);
 
-       /**
-        * @lastclose:
-        *
-        * Called when the last &struct drm_file has been closed and there's
-        * currently no userspace client for the &struct drm_device.
-        *
-        * Modern drivers should only use this to force-restore the fbdev
-        * framebuffer using drm_fb_helper_restore_fbdev_mode_unlocked().
-        * Anything else would indicate there's something seriously wrong.
-        * Modern drivers can also use this to execute delayed power switching
-        * state changes, e.g. in conjunction with the :ref:`vga_switcheroo`
-        * infrastructure.
-        *
-        * This is called after @postclose hook has been called.
-        *
-        * NOTE:
-        *
-        * All legacy drivers use this callback to de-initialize the hardware.
-        * This is purely because of the shadow-attach model, where the DRM
-        * kernel driver does not really own the hardware. Instead ownershipe is
-        * handled with the help of userspace through an inheritedly racy dance
-        * to set/unset the VT into raw mode.
-        *
-        * Legacy drivers initialize the hardware in the @firstopen callback,
-        * which isn't even called for modern drivers.
-        */
-       void (*lastclose) (struct drm_device *);
-
        /**
         * @unload:
         *