drm/nouveau: fail runtime pm properly.
Subsystems (3)
Dave Airlie
maintainerPATCH 1/1 drm/nouveau: fail runtime pm properly.
From: Dave Airlie <[email protected]>
If we were on a non-optimus device, we'd return -EINVAL, this would lead to the over engineered runtime pm system to go into an error state, subsequent get_sync's would fail, so we'd never be able to open the device again.
(like really get_sync shouldn't fail if the device isn't powered down).
--- drivers/gpu/drm/nouveau/nouveau_drm.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)
drivers/gpu/drm/nouveau/nouveau_drm.c +10 -4
@@ -866,13 +866,16 @@ static int nouveau_pmops_runtime_suspend(struct device *dev)struct drm_device *drm_dev =pci_get_drvdata (pdev);int ret; -if (nouveau_runtime_pm ==0 ) -return -EINVAL ; +if (nouveau_runtime_pm ==0 ) { +pm_runtime_forbid (dev); +return -EBUSY ; + }/* are we optimus enabled? */ if (nouveau_runtime_pm ==-1 && !nouveau_is_optimus () && !nouveau_is_v1_dsm ()) {DRM_DEBUG_DRIVER ("failing to power off - not optimus\n" ); -return -EINVAL ; +pm_runtime_forbid (dev); +return -EBUSY ; }nv_debug_level (SILENT );
@@ -923,12 +926,15 @@ static int nouveau_pmops_runtime_idle(struct device *dev)struct nouveau_drm *drm =nouveau_drm (drm_dev);struct drm_crtc *crtc; -if (nouveau_runtime_pm ==0 ) +if (nouveau_runtime_pm ==0 ) { +pm_runtime_forbid (dev);return -EBUSY ; + }/* are we optimus enabled? */ if (nouveau_runtime_pm ==-1 && !nouveau_is_optimus () && !nouveau_is_v1_dsm ()) {DRM_DEBUG_DRIVER ("failing to power off - not optimus\n" ); +pm_runtime_forbid (dev);return -EBUSY ; }
Signature · 1 line
1.8.3.1
Quoted 9 lines · Dave Airlie
From: Dave Airlie <[email protected]>
If we were on a non-optimus device, we'd return
-EINVAL, this would lead to the over engineered runtime pm system to go into an error state, subsequent get_sync's would fail, so we'd never be able to open the device again.(like really
get_syncshouldn't fail if the device isn't powered down).
Any chance you'd want to spin similar patches for radeon?
Quoted 54 lines
Signed-off-by Dave Airlie <[email protected]>--- drivers/gpu/drm/nouveau/nouveau_drm.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)drivers/gpu/drm/nouveau/nouveau_drm.c +10
-5@@ -866,13 +866,16 @@ static int nouveau_pmops_runtime_suspend(struct device *dev)struct drm_device *drm_dev =pci_get_drvdata (pdev);int ret; -if (nouveau_runtime_pm ==0 ) -return -EINVAL ; +if (nouveau_runtime_pm ==0 ) { +pm_runtime_forbid (dev); +return -EBUSY ; + }/* are we optimus enabled? */ if (nouveau_runtime_pm ==-1 && !nouveau_is_optimus () && !nouveau_is_v1_dsm ()) {DRM_DEBUG_DRIVER ("failing to power off - not optimus\n" ); -return -EINVAL ; +pm_runtime_forbid (dev); +return -EBUSY ; }nv_debug_level (SILENT );@@ -923,12 +926,15 @@ static int nouveau_pmops_runtime_idle(struct device *dev)struct nouveau_drm *drm =nouveau_drm (drm_dev);struct drm_crtc *crtc; -if (nouveau_runtime_pm ==0 ) +if (nouveau_runtime_pm ==0 ) { +pm_runtime_forbid (dev);return -EBUSY ; + }/* are we optimus enabled? */ if (nouveau_runtime_pm ==-1 && !nouveau_is_optimus () && !nouveau_is_v1_dsm ()) {DRM_DEBUG_DRIVER ("failing to power off - not optimus\n" ); +pm_runtime_forbid (dev);return -EBUSY ; } --1.8.3.1
_______________________________________________
dri-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/dri-devel