Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [High] AB-BA deadlock between `vgasr_mutex` and `dev->clientlist_mutex` during VGA switcheroo and DRM client hotplug/registration. --
--- Patch [6]: [PATCH 06/10] drm/i915: Implement vga_switcheroo_client_ops.pre_switch --- commit ca43d8e034e1ee27918b22e1b7a19b8f6a5b4a67 Author: Thomas Zimmermann <[email protected]> drm/i915: Implement vga_switcheroo_client_ops.pre_switch This commit implements the pre_switch callback for vga_switcheroo in the i915 driver. It calls drm_client_dev_acquire_outputs() to push fbcon updates from vga_switcheroo into DRM's fbdev emulation. > diff --git a/drivers/gpu/drm/i915/i915_switcheroo.c > b/drivers/gpu/drm/i915/i915_switcheroo.c > index 7e0791024282e..6b306ece0556a 100644 > --- a/drivers/gpu/drm/i915/i915_switcheroo.c > +++ b/drivers/gpu/drm/i915/i915_switcheroo.c [ ... ] > @@ -58,10 +59,19 @@ static bool i915_switcheroo_can_switch(struct pci_dev > *pdev) > atomic_read(&i915->drm.open_count) == 0; > } > > +static void i915_switcheroo_pre_switch(struct pci_dev *pdev) > +{ > + struct drm_i915_private *i915 = pdev_to_i915(pdev); > + > + if (i915 && intel_display_device_present(i915->display)) > + drm_client_dev_acquire_outputs(&i915->drm); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [Severity: High] Does this code introduce an AB-BA deadlock between vgasr_mutex and dev->clientlist_mutex? A GPU switch triggered via userspace will acquire vgasr_mutex and eventually call this pre_switch callback: vga_switcheroo_debugfs_write() [acquires vgasr_mutex] vga_switchto_stage2() i915_switcheroo_pre_switch() drm_client_dev_acquire_outputs() [acquires dev->clientlist_mutex] However, a DRM client hotplug event can acquire these locks in the reverse order: drm_client_dev_hotplug() [acquires dev->clientlist_mutex] drm_fbdev_client_hotplug() register_framebuffer() fbcon_fb_registered() do_fb_registered() vga_switcheroo_client_fb_set() [acquires vgasr_mutex] Could this lead to a system hang when a GPU switch races with a display hotplug event? > +} > + > static const struct vga_switcheroo_client_ops i915_switcheroo_ops = { > .set_gpu_state = i915_switcheroo_set_state, > .reprobe = NULL, -- Sashiko AI review ยท https://sashiko.dev/#/patchset/[email protected]?part=6
