From: Lu Yao <[email protected]> Fix two bugs in the probe error path:
1. If intel_mode_config_init() succeeded, after intel_xxx_init() failed leaked the resources allocated by drm_mode_config_init(). Add a cleanup_mode_config label. 2. intel_dmc_fini() was called on workqueue alloc failed paths but intel_dmc_init() don't been invoked. Move the dmc fini call in cleanup_mode_config label. Signed-off-by: Lu Yao <[email protected]> --- v2->v3: rm unused label checked by CI Link: https://lore.kernel.org/all/178294904225.140838.18311548714090230092@6beec6c84f66/ v1->v2: don't move intel_dmc_init() advance chencked by Sashiko AI and Jani Link: https://lore.kernel.org/all/[email protected]/ Link: https://lore.kernel.org/all/[email protected]/ .../drm/i915/display/intel_display_driver.c | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c index d0729936f681..4af2324f5252 100644 --- a/drivers/gpu/drm/i915/display/intel_display_driver.c +++ b/drivers/gpu/drm/i915/display/intel_display_driver.c @@ -226,7 +226,7 @@ int intel_display_driver_probe_noirq(struct intel_display *display) display->hotplug.dp_wq = alloc_ordered_workqueue("intel-dp", 0); if (!display->hotplug.dp_wq) { ret = -ENOMEM; - goto cleanup_pw_domain_dmc; + goto cleanup_pw_domain; } display->wq.modeset = alloc_ordered_workqueue("i915_modeset", 0); @@ -260,27 +260,27 @@ int intel_display_driver_probe_noirq(struct intel_display *display) ret = intel_cdclk_init(display); if (ret) - goto cleanup_wq_unordered; + goto cleanup_mode_config; ret = intel_color_init(display); if (ret) - goto cleanup_wq_unordered; + goto cleanup_mode_config; ret = intel_dbuf_init(display); if (ret) - goto cleanup_wq_unordered; + goto cleanup_mode_config; ret = intel_dbuf_bw_init(display); if (ret) - goto cleanup_wq_unordered; + goto cleanup_mode_config; ret = intel_bw_init(display); if (ret) - goto cleanup_wq_unordered; + goto cleanup_mode_config; ret = intel_pmdemand_init(display); if (ret) - goto cleanup_wq_unordered; + goto cleanup_mode_config; intel_init_quirks(display); @@ -288,7 +288,9 @@ int intel_display_driver_probe_noirq(struct intel_display *display) return 0; -cleanup_wq_unordered: +cleanup_mode_config: + intel_mode_config_cleanup(display); + intel_dmc_fini(display); destroy_workqueue(display->wq.unordered); cleanup_wq_cleanup: destroy_workqueue(display->wq.cleanup); @@ -298,8 +300,7 @@ int intel_display_driver_probe_noirq(struct intel_display *display) destroy_workqueue(display->wq.modeset); cleanup_wq_dp: destroy_workqueue(display->hotplug.dp_wq); -cleanup_pw_domain_dmc: - intel_dmc_fini(display); +cleanup_pw_domain: intel_display_power_driver_remove(display); cleanup_bios: intel_bios_driver_remove(display); -- 2.25.1
