Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/client: Remove holds_console_lock parameter from suspend/resume

No caller of the client resume/suspend helpers holds the console
lock. The last such cases were removed from radeon in the patch
series at [1]. Now remove the related parameter and the TODO items.

v2:
- update placeholders for CONFIG_DRM_CLIENT=n

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/series/151624/ # [1]
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Acked-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com>
Acked-by: Danilo Krummrich <dakr@kernel.org>
Reviewed-by: Lyude Paul <lyude@redhat.com>
Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
Link: https://lore.kernel.org/r/20251001143709.419736-1-tzimmermann@suse.de

+37 -53
+4 -4
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
··· 5212 5212 dev_warn(adev->dev, "smart shift update failed\n"); 5213 5213 5214 5214 if (notify_clients) 5215 - drm_client_dev_suspend(adev_to_drm(adev), false); 5215 + drm_client_dev_suspend(adev_to_drm(adev)); 5216 5216 5217 5217 cancel_delayed_work_sync(&adev->delayed_init_work); 5218 5218 ··· 5346 5346 flush_delayed_work(&adev->delayed_init_work); 5347 5347 5348 5348 if (notify_clients) 5349 - drm_client_dev_resume(adev_to_drm(adev), false); 5349 + drm_client_dev_resume(adev_to_drm(adev)); 5350 5350 5351 5351 amdgpu_ras_resume(adev); 5352 5352 ··· 5951 5951 if (r) 5952 5952 goto out; 5953 5953 5954 - drm_client_dev_resume(adev_to_drm(tmp_adev), false); 5954 + drm_client_dev_resume(adev_to_drm(tmp_adev)); 5955 5955 5956 5956 /* 5957 5957 * The GPU enters bad state once faulty pages ··· 6286 6286 */ 6287 6287 amdgpu_unregister_gpu_instance(tmp_adev); 6288 6288 6289 - drm_client_dev_suspend(adev_to_drm(tmp_adev), false); 6289 + drm_client_dev_suspend(adev_to_drm(tmp_adev)); 6290 6290 6291 6291 /* disable ras on ALL IPs */ 6292 6292 if (!need_emergency_restart && !amdgpu_reset_in_dpc(adev) &&
+4 -10
drivers/gpu/drm/clients/drm_fbdev_client.c
··· 62 62 return ret; 63 63 } 64 64 65 - static int drm_fbdev_client_suspend(struct drm_client_dev *client, bool holds_console_lock) 65 + static int drm_fbdev_client_suspend(struct drm_client_dev *client) 66 66 { 67 67 struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client); 68 68 69 - if (holds_console_lock) 70 - drm_fb_helper_set_suspend(fb_helper, true); 71 - else 72 - drm_fb_helper_set_suspend_unlocked(fb_helper, true); 69 + drm_fb_helper_set_suspend_unlocked(fb_helper, true); 73 70 74 71 return 0; 75 72 } 76 73 77 - static int drm_fbdev_client_resume(struct drm_client_dev *client, bool holds_console_lock) 74 + static int drm_fbdev_client_resume(struct drm_client_dev *client) 78 75 { 79 76 struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client); 80 77 81 - if (holds_console_lock) 82 - drm_fb_helper_set_suspend(fb_helper, false); 83 - else 84 - drm_fb_helper_set_suspend_unlocked(fb_helper, false); 78 + drm_fb_helper_set_suspend_unlocked(fb_helper, false); 85 79 86 80 return 0; 87 81 }
+2 -2
drivers/gpu/drm/clients/drm_log.c
··· 319 319 return 0; 320 320 } 321 321 322 - static int drm_log_client_suspend(struct drm_client_dev *client, bool _console_lock) 322 + static int drm_log_client_suspend(struct drm_client_dev *client) 323 323 { 324 324 struct drm_log *dlog = client_to_drm_log(client); 325 325 ··· 328 328 return 0; 329 329 } 330 330 331 - static int drm_log_client_resume(struct drm_client_dev *client, bool _console_lock) 331 + static int drm_log_client_resume(struct drm_client_dev *client) 332 332 { 333 333 struct drm_log *dlog = client_to_drm_log(client); 334 334
+8 -8
drivers/gpu/drm/drm_client_event.c
··· 122 122 mutex_unlock(&dev->clientlist_mutex); 123 123 } 124 124 125 - static int drm_client_suspend(struct drm_client_dev *client, bool holds_console_lock) 125 + static int drm_client_suspend(struct drm_client_dev *client) 126 126 { 127 127 struct drm_device *dev = client->dev; 128 128 int ret = 0; ··· 131 131 return 0; 132 132 133 133 if (client->funcs && client->funcs->suspend) 134 - ret = client->funcs->suspend(client, holds_console_lock); 134 + ret = client->funcs->suspend(client); 135 135 drm_dbg_kms(dev, "%s: ret=%d\n", client->name, ret); 136 136 137 137 client->suspended = true; ··· 139 139 return ret; 140 140 } 141 141 142 - void drm_client_dev_suspend(struct drm_device *dev, bool holds_console_lock) 142 + void drm_client_dev_suspend(struct drm_device *dev) 143 143 { 144 144 struct drm_client_dev *client; 145 145 146 146 mutex_lock(&dev->clientlist_mutex); 147 147 list_for_each_entry(client, &dev->clientlist, list) { 148 148 if (!client->suspended) 149 - drm_client_suspend(client, holds_console_lock); 149 + drm_client_suspend(client); 150 150 } 151 151 mutex_unlock(&dev->clientlist_mutex); 152 152 } 153 153 EXPORT_SYMBOL(drm_client_dev_suspend); 154 154 155 - static int drm_client_resume(struct drm_client_dev *client, bool holds_console_lock) 155 + static int drm_client_resume(struct drm_client_dev *client) 156 156 { 157 157 struct drm_device *dev = client->dev; 158 158 int ret = 0; ··· 161 161 return 0; 162 162 163 163 if (client->funcs && client->funcs->resume) 164 - ret = client->funcs->resume(client, holds_console_lock); 164 + ret = client->funcs->resume(client); 165 165 drm_dbg_kms(dev, "%s: ret=%d\n", client->name, ret); 166 166 167 167 client->suspended = false; ··· 172 172 return ret; 173 173 } 174 174 175 - void drm_client_dev_resume(struct drm_device *dev, bool holds_console_lock) 175 + void drm_client_dev_resume(struct drm_device *dev) 176 176 { 177 177 struct drm_client_dev *client; 178 178 179 179 mutex_lock(&dev->clientlist_mutex); 180 180 list_for_each_entry(client, &dev->clientlist, list) { 181 181 if (client->suspended) 182 - drm_client_resume(client, holds_console_lock); 182 + drm_client_resume(client); 183 183 } 184 184 mutex_unlock(&dev->clientlist_mutex); 185 185 }
+3 -3
drivers/gpu/drm/drm_modeset_helper.c
··· 203 203 if (dev->mode_config.poll_enabled) 204 204 drm_kms_helper_poll_disable(dev); 205 205 206 - drm_client_dev_suspend(dev, false); 206 + drm_client_dev_suspend(dev); 207 207 state = drm_atomic_helper_suspend(dev); 208 208 if (IS_ERR(state)) { 209 - drm_client_dev_resume(dev, false); 209 + drm_client_dev_resume(dev); 210 210 211 211 /* 212 212 * Don't enable polling if it was never initialized ··· 252 252 DRM_ERROR("Failed to resume (%d)\n", ret); 253 253 dev->mode_config.suspend_state = NULL; 254 254 255 - drm_client_dev_resume(dev, false); 255 + drm_client_dev_resume(dev); 256 256 257 257 /* 258 258 * Don't enable polling if it is not initialized
+3 -3
drivers/gpu/drm/i915/i915_driver.c
··· 978 978 intel_runtime_pm_disable(&i915->runtime_pm); 979 979 intel_power_domains_disable(display); 980 980 981 - drm_client_dev_suspend(&i915->drm, false); 981 + drm_client_dev_suspend(&i915->drm); 982 982 if (intel_display_device_present(display)) { 983 983 drm_kms_helper_poll_disable(&i915->drm); 984 984 intel_display_driver_disable_user_access(display); ··· 1061 1061 /* We do a lot of poking in a lot of registers, make sure they work 1062 1062 * properly. */ 1063 1063 intel_power_domains_disable(display); 1064 - drm_client_dev_suspend(dev, false); 1064 + drm_client_dev_suspend(dev); 1065 1065 if (intel_display_device_present(display)) { 1066 1066 drm_kms_helper_poll_disable(dev); 1067 1067 intel_display_driver_disable_user_access(display); ··· 1245 1245 1246 1246 intel_opregion_resume(display); 1247 1247 1248 - drm_client_dev_resume(dev, false); 1248 + drm_client_dev_resume(dev); 1249 1249 1250 1250 intel_power_domains_enable(display); 1251 1251
+2 -2
drivers/gpu/drm/nouveau/nouveau_display.c
··· 765 765 { 766 766 struct nouveau_display *disp = nouveau_display(dev); 767 767 768 - drm_client_dev_suspend(dev, false); 768 + drm_client_dev_suspend(dev); 769 769 770 770 if (drm_drv_uses_atomic_modeset(dev)) { 771 771 if (!runtime) { ··· 796 796 } 797 797 } 798 798 799 - drm_client_dev_resume(dev, false); 799 + drm_client_dev_resume(dev); 800 800 } 801 801 802 802 int
+2 -2
drivers/gpu/drm/radeon/radeon_device.c
··· 1635 1635 } 1636 1636 1637 1637 if (notify_clients) 1638 - drm_client_dev_suspend(dev, false); 1638 + drm_client_dev_suspend(dev); 1639 1639 1640 1640 return 0; 1641 1641 } ··· 1739 1739 radeon_pm_compute_clocks(rdev); 1740 1740 1741 1741 if (notify_clients) 1742 - drm_client_dev_resume(dev, false); 1742 + drm_client_dev_resume(dev); 1743 1743 1744 1744 return 0; 1745 1745 }
+3 -3
drivers/gpu/drm/xe/display/xe_display.c
··· 324 324 * properly. 325 325 */ 326 326 intel_power_domains_disable(display); 327 - drm_client_dev_suspend(&xe->drm, false); 327 + drm_client_dev_suspend(&xe->drm); 328 328 329 329 if (intel_display_device_present(display)) { 330 330 drm_kms_helper_poll_disable(&xe->drm); ··· 356 356 return; 357 357 358 358 intel_power_domains_disable(display); 359 - drm_client_dev_suspend(&xe->drm, false); 359 + drm_client_dev_suspend(&xe->drm); 360 360 361 361 if (intel_display_device_present(display)) { 362 362 drm_kms_helper_poll_disable(&xe->drm); ··· 481 481 482 482 intel_opregion_resume(display); 483 483 484 - drm_client_dev_resume(&xe->drm, false); 484 + drm_client_dev_resume(&xe->drm); 485 485 486 486 intel_power_domains_enable(display); 487 487 }
+2 -12
include/drm/drm_client.h
··· 70 70 * Called when suspending the device. 71 71 * 72 72 * This callback is optional. 73 - * 74 - * FIXME: Some callers hold the console lock when invoking this 75 - * function. This interferes with fbdev emulation, which 76 - * also tries to acquire the lock. Push the console lock 77 - * into the callback and remove 'holds_console_lock'. 78 73 */ 79 - int (*suspend)(struct drm_client_dev *client, bool holds_console_lock); 74 + int (*suspend)(struct drm_client_dev *client); 80 75 81 76 /** 82 77 * @resume: ··· 79 84 * Called when resuming the device from suspend. 80 85 * 81 86 * This callback is optional. 82 - * 83 - * FIXME: Some callers hold the console lock when invoking this 84 - * function. This interferes with fbdev emulation, which 85 - * also tries to acquire the lock. Push the console lock 86 - * into the callback and remove 'holds_console_lock'. 87 87 */ 88 - int (*resume)(struct drm_client_dev *client, bool holds_console_lock); 88 + int (*resume)(struct drm_client_dev *client); 89 89 }; 90 90 91 91 /**
+4 -4
include/drm/drm_client_event.h
··· 11 11 void drm_client_dev_unregister(struct drm_device *dev); 12 12 void drm_client_dev_hotplug(struct drm_device *dev); 13 13 void drm_client_dev_restore(struct drm_device *dev); 14 - void drm_client_dev_suspend(struct drm_device *dev, bool holds_console_lock); 15 - void drm_client_dev_resume(struct drm_device *dev, bool holds_console_lock); 14 + void drm_client_dev_suspend(struct drm_device *dev); 15 + void drm_client_dev_resume(struct drm_device *dev); 16 16 #else 17 17 static inline void drm_client_dev_unregister(struct drm_device *dev) 18 18 { } ··· 20 20 { } 21 21 static inline void drm_client_dev_restore(struct drm_device *dev) 22 22 { } 23 - static inline void drm_client_dev_suspend(struct drm_device *dev, bool holds_console_lock) 23 + static inline void drm_client_dev_suspend(struct drm_device *dev) 24 24 { } 25 - static inline void drm_client_dev_resume(struct drm_device *dev, bool holds_console_lock) 25 + static inline void drm_client_dev_resume(struct drm_device *dev) 26 26 { } 27 27 #endif 28 28