Alexandre Courbot
2014-Feb-10 05:58 UTC
[Nouveau] [PATCH] drm/nouveau: handle -EACCES runtime PM return code
pm_runtime_get*() may return -EACCESS to indicate a device does not have runtime PM enabled. This is the case when the nouveau.runpm parameter is set to 0, and is not an error in that context. Handle this case without failure. Signed-off-by: Alexandre Courbot <acourbot at nvidia.com> --- drivers/gpu/drm/nouveau/dispnv04/crtc.c | 2 +- drivers/gpu/drm/nouveau/nouveau_connector.c | 2 +- drivers/gpu/drm/nouveau/nouveau_drm.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/nouveau/dispnv04/crtc.c b/drivers/gpu/drm/nouveau/dispnv04/crtc.c index 0e3270c3ffd2..1caef1fd139e 100644 --- a/drivers/gpu/drm/nouveau/dispnv04/crtc.c +++ b/drivers/gpu/drm/nouveau/dispnv04/crtc.c @@ -1048,7 +1048,7 @@ nouveau_crtc_set_config(struct drm_mode_set *set) /* get a pm reference here */ ret = pm_runtime_get_sync(dev->dev); - if (ret < 0) + if (ret < 0 && ret != -EACCES) return ret; ret = drm_crtc_helper_set_config(set); diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c index 1674882d60d5..cddef546d9b0 100644 --- a/drivers/gpu/drm/nouveau/nouveau_connector.c +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c @@ -255,7 +255,7 @@ nouveau_connector_detect(struct drm_connector *connector, bool force) } ret = pm_runtime_get_sync(connector->dev->dev); - if (ret < 0) + if (ret < 0 && ret != -EACCES) return conn_status; i2c = nouveau_connector_ddc_detect(connector, &nv_encoder); diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c index 8a4630a1fc45..2617168af244 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c @@ -696,7 +696,7 @@ nouveau_drm_open(struct drm_device *dev, struct drm_file *fpriv) /* need to bring up power immediately if opening device */ ret = pm_runtime_get_sync(dev->dev); - if (ret < 0) + if (ret < 0 && ret != -EACCES) return ret; get_task_comm(tmpname, current); @@ -781,7 +781,7 @@ long nouveau_drm_ioctl(struct file *filp, dev = file_priv->minor->dev; ret = pm_runtime_get_sync(dev->dev); - if (ret < 0) + if (ret < 0 && ret != -EACCES) return ret; ret = drm_ioctl(filp, cmd, arg); -- 1.8.5.4
Thierry Reding
2014-Feb-10 12:34 UTC
[Nouveau] [PATCH] drm/nouveau: handle -EACCES runtime PM return code
On Mon, Feb 10, 2014 at 02:58:12PM +0900, Alexandre Courbot wrote:> pm_runtime_get*() may return -EACCESS to indicate a device does not haves/-EACCESS/-EACCES/> runtime PM enabled. This is the case when the nouveau.runpm parameter is > set to 0, and is not an error in that context. Handle this case without > failure. > > Signed-off-by: Alexandre Courbot <acourbot at nvidia.com> > --- > drivers/gpu/drm/nouveau/dispnv04/crtc.c | 2 +- > drivers/gpu/drm/nouveau/nouveau_connector.c | 2 +- > drivers/gpu/drm/nouveau/nouveau_drm.c | 4 ++-- > 3 files changed, 4 insertions(+), 4 deletions(-)I'm not sure if the commit message is entirely accurate. Looking at the various runtime power-management functions in nouveau_drm.c (such as nouveau_pmops_runtime_suspend() for example), they seem to return -EINVAL if the nouveau.runpm parameter is set to 0. However it seems like -EACCES is indeed returned when runtime power- management hasn't been enabled for a device. This is done automatically for PCI devices, but not for platform devices. We don't support runtime power-management on gk20a yet, therefore pm_runtime_enable() is never called, causing disable_depth to remain at -1 and therefore runtime PM helpers return -EACCES. Thierry -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: not available URL: <http://lists.freedesktop.org/archives/nouveau/attachments/20140210/5f88f505/attachment.pgp>
Alexandre Courbot
2014-Feb-11 04:14 UTC
[Nouveau] [PATCH] drm/nouveau: handle -EACCES runtime PM return code
On Mon, Feb 10, 2014 at 9:34 PM, Thierry Reding <thierry.reding at gmail.com> wrote:> On Mon, Feb 10, 2014 at 02:58:12PM +0900, Alexandre Courbot wrote: >> pm_runtime_get*() may return -EACCESS to indicate a device does not have > > s/-EACCESS/-EACCES/Oops.>> runtime PM enabled. This is the case when the nouveau.runpm parameter is >> set to 0, and is not an error in that context. Handle this case without >> failure. >> >> Signed-off-by: Alexandre Courbot <acourbot at nvidia.com> >> --- >> drivers/gpu/drm/nouveau/dispnv04/crtc.c | 2 +- >> drivers/gpu/drm/nouveau/nouveau_connector.c | 2 +- >> drivers/gpu/drm/nouveau/nouveau_drm.c | 4 ++-- >> 3 files changed, 4 insertions(+), 4 deletions(-) > > I'm not sure if the commit message is entirely accurate. Looking at the > various runtime power-management functions in nouveau_drm.c (such as > nouveau_pmops_runtime_suspend() for example), they seem to return > -EINVAL if the nouveau.runpm parameter is set to 0. > > However it seems like -EACCES is indeed returned when runtime power- > management hasn't been enabled for a device. This is done automatically > for PCI devices, but not for platform devices. We don't support runtime > power-management on gk20a yet, therefore pm_runtime_enable() is never > called, causing disable_depth to remain at -1 and therefore runtime PM > helpers return -EACCES.I will fix the commit message, as indeed the -EACCES code is not directly related to the runpm parameter, but rather to the fact pm_runtime_enable() is not called for platform devices yet. Do we however agree on the issue that this patch addresses, and the way it addresses it? Thanks, Alex.
Reasonably Related Threads
- [PATCH] drm/nouveau: handle -EACCES runtime PM return code
- [RFC 01/16] drm/nouveau: handle -EACCES runtime PM return code
- [PATCH] drm/nouveau: handle -EACCES runtime PM return code
- [PATCH v2] drm/nouveau: handle -EACCES runtime PM return code
- [PATCH 0/5] drm/nouveau: Fix a lot of nasty RPM bugs and deadlocks