Re: [PATCH] Revert "nouveau: pci: quiesce GPU on shutdown"

From: Uwe Kleine-König

Date: Sat Nov 14 2026 - 11:21:10 EST


Control: forwarded -1 https://lore.kernel.org/nouveau/aviIPk4xbKhgqcTy@monoceros

Hello,

On Sun, Oct 25, 2026 at 10:30:06PM +0100, Marek Vasut wrote:
> This reverts commit 310326bb7df4bba094a3fc60364c641c547fd923.
>
> This breaks shutdown on ThinkPad W510, without the offending commit
> the system normally powers off, with the offending commit the system
> ends up spinning indefinitely and the CPU fan goes full throttle on
> shutdown.
>
> The behavior was already reported in debian bugtracker multiple times
> for various other computers too, and git bisect lands as this commit.
> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1141969

I think the original bug #1141969 is a different issue.

> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1146033

Here it affects a Lenovo ThinkPad T510 and I think that's the same issue
that Marek has.


> I tested the revert with Linux 7.2.12 from debian unstable, not next
> or drm trees, mainly because it was easier with debian test-patches
> script on that machine.
>
> Signed-off-by: Marek Vasut <marex@xxxxxxxxxxxx>
> ---
> Cc: Danilo Krummrich <dakr@xxxxxxxxxx>
> Cc: David Airlie <airlied@xxxxxxxxx>
> Cc: Li Chen <me@linux.beauty>
> Cc: Lyude Paul <lyude@xxxxxxxxxx>
> Cc: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>
> Cc: Maxime Ripard <mripard@xxxxxxxxxx>
> Cc: Ole Carlsen <ole.carlsen@xxxxxxxxxxxx>
> Cc: Simona Vetter <simona@xxxxxxxx>
> Cc: Thomas Zimmermann <tzimmermann@xxxxxxx>
> Cc: Uwe Kleine-König <ukleinek@xxxxxxxxxx>
> Cc: dri-devel@xxxxxxxxxxxxxxxxxxxxx
> Cc: linux-kernel@xxxxxxxxxxxxxxx
> Cc: nouveau@xxxxxxxxxxxxxxxxxxxxx
> ---
> NOTE: Maybe the revert is not the ideal solution, but it does fix my
> problem, and I think being able to shut computer down is a good
> functionality to have.
> ---
> drivers/gpu/drm/nouveau/nouveau_drm.c | 32 ---------------------------
> 1 file changed, 32 deletions(-)
>
> diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
> index 5e1336615cf6d..36c74f9edaa83 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
> @@ -1090,37 +1090,6 @@ nouveau_pmops_resume(struct device *dev)
> return ret;
> }
>
> -static void
> -nouveau_drm_shutdown(struct pci_dev *pdev)
> -{
> - struct nouveau_drm *drm = pci_get_drvdata(pdev);
> - int ret;
> -
> - if (!drm)
> - return;
> -
> - if (drm->dev->switch_power_state == DRM_SWITCH_POWER_OFF ||
> - drm->dev->switch_power_state == DRM_SWITCH_POWER_DYNAMIC_OFF)
> - return;
> -
> - ret = nouveau_do_suspend(drm, false);
> - if (ret)
> - NV_ERROR(drm, "shutdown suspend failed with: %d\n", ret);
> -
> - pci_save_state(pdev);
> - pci_disable_device(pdev);
> - pci_set_power_state(pdev, PCI_D3hot);
> - /*
> - * This is just to give the pci power transition time to settle
> - * before an immediate kexec jump. it’s mirroring the existing
> - * nouveau_pmops_suspend() behavior, which already does
> - * udelay(200) right after pci_set_power_state(..., pci_d3hot). In
> - * ->shutdown() we’re allowed to sleep, so I used usleep_range()
> - * instead of a busy-wait udelay().
> - */
> - usleep_range(200, 400);
> -}
> -

I cannot reproduce it, but maybe it's helpful to find out where/how the
driver hangs. Adding printks might be enough, and if not, remove stuff
from nouveau_drm_shutdown() until it works. I'd guess this gives the
needed insights to determine a fix without reverting the identified
commit.

Best regards
Uwe

Attachment: signature.asc
Description: PGP signature