From 8488aed175f62fad1a889d927509579ca1ea499d Mon Sep 17 00:00:00 2001 From: Taylor R Campbell Date: Tue, 18 Jul 2023 21:14:15 +0000 Subject: [PATCH 1/3] amdgpu: Suspend ioctls while device is suspended. XXX pullup-10 --- sys/external/bsd/drm2/amdgpu/amdgpu_pci.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sys/external/bsd/drm2/amdgpu/amdgpu_pci.c b/sys/external/bsd/drm2/amdgpu/amdgpu_pci.c index bd45abcb6cab..ccd7ebd5accf 100644 --- a/sys/external/bsd/drm2/amdgpu/amdgpu_pci.c +++ b/sys/external/bsd/drm2/amdgpu/amdgpu_pci.c @@ -260,6 +260,8 @@ amdgpu_do_suspend(device_t self, const pmf_qual_t *qual) struct drm_device *const dev = sc->sc_drm_dev; int ret; + drm_suspend_ioctl(dev); + ret = amdgpu_device_suspend(dev, /*fbcon*/true); if (ret) return false; @@ -276,9 +278,10 @@ amdgpu_do_resume(device_t self, const pmf_qual_t *qual) ret = amdgpu_device_resume(dev, /*fbcon*/true); if (ret) - return false; + goto out; - return true; +out: drm_resume_ioctl(dev); + return ret == 0; } static void From 8c9770f477e76ae1653555141aeb44097b4ae619 Mon Sep 17 00:00:00 2001 From: Taylor R Campbell Date: Tue, 18 Jul 2023 21:15:50 +0000 Subject: [PATCH 2/3] nouveau: Suspend ioctls while device is suspended. XXX pullup-10 --- sys/external/bsd/drm2/nouveau/nouveau_pci.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/sys/external/bsd/drm2/nouveau/nouveau_pci.c b/sys/external/bsd/drm2/nouveau/nouveau_pci.c index e15927195b11..9cb93ab15310 100644 --- a/sys/external/bsd/drm2/nouveau/nouveau_pci.c +++ b/sys/external/bsd/drm2/nouveau/nouveau_pci.c @@ -316,16 +316,31 @@ static bool nouveau_pci_suspend(device_t self, const pmf_qual_t *qual __unused) { struct nouveau_pci_softc *const sc = device_private(self); + struct drm_device *const dev = sc->sc_drm_dev; + int ret; + + drm_suspend_ioctl(dev); + + ret = nouveau_pmops_suspend(dev); + if (ret) + return false; - return nouveau_pmops_suspend(sc->sc_drm_dev) == 0; + return true; } static bool nouveau_pci_resume(device_t self, const pmf_qual_t *qual) { struct nouveau_pci_softc *const sc = device_private(self); + struct drm_device *const dev = sc->sc_drm_dev; + int ret; + + ret = nouveau_pmops_resume(sc->sc_drm_dev); + if (ret) + goto out; - return nouveau_pmops_resume(sc->sc_drm_dev) == 0; +out: drm_resume_ioctl(dev); + return ret == 0; } static void From 4cac071518d005a996cc58c84644396a755cbd99 Mon Sep 17 00:00:00 2001 From: Taylor R Campbell Date: Tue, 18 Jul 2023 21:16:33 +0000 Subject: [PATCH 3/3] radeon: Suspend ioctls while device is suspended. XXX pullup-10 --- sys/external/bsd/drm2/radeon/radeon_pci.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sys/external/bsd/drm2/radeon/radeon_pci.c b/sys/external/bsd/drm2/radeon/radeon_pci.c index 30f79060e363..bcda21a538fa 100644 --- a/sys/external/bsd/drm2/radeon/radeon_pci.c +++ b/sys/external/bsd/drm2/radeon/radeon_pci.c @@ -366,6 +366,8 @@ radeon_do_suspend(device_t self, const pmf_qual_t *qual) int ret; bool is_console = true; /* XXX */ + drm_suspend_ioctl(dev); + ret = radeon_suspend_kms(dev, true, is_console, false); if (ret) return false; @@ -383,9 +385,10 @@ radeon_do_resume(device_t self, const pmf_qual_t *qual) ret = radeon_resume_kms(dev, true, is_console); if (ret) - return false; + goto out; - return true; +out: drm_resume_ioctl(dev); + return ret == 0; } static void