Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fd0fe6ac authored by Imre Deak's avatar Imre Deak Committed by Jani Nikula
Browse files

drm/i915: get runtime PM reference around GEM set_caching IOCTL



After Damien's D3 fix I started to get runtime suspend residency for the
first time and that revealed a breakage on the set_caching IOCTL path
that accesses the HW but doesn't take an RPM ref. Fix this up.

Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
Reviewed-by: default avatarPaulo Zanoni <paulo.r.zanoni@intel.com>
Cc: stable@vger.kernel.org
Link: http://patchwork.freedesktop.org/patch/msgid/1446665132-22491-1-git-send-email-imre.deak@intel.com


Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
parent 500a3d2e
Loading
Loading
Loading
Loading
+7 −1
Original line number Original line Diff line number Diff line
@@ -3809,6 +3809,7 @@ int i915_gem_get_caching_ioctl(struct drm_device *dev, void *data,
int i915_gem_set_caching_ioctl(struct drm_device *dev, void *data,
int i915_gem_set_caching_ioctl(struct drm_device *dev, void *data,
			       struct drm_file *file)
			       struct drm_file *file)
{
{
	struct drm_i915_private *dev_priv = dev->dev_private;
	struct drm_i915_gem_caching *args = data;
	struct drm_i915_gem_caching *args = data;
	struct drm_i915_gem_object *obj;
	struct drm_i915_gem_object *obj;
	enum i915_cache_level level;
	enum i915_cache_level level;
@@ -3837,9 +3838,11 @@ int i915_gem_set_caching_ioctl(struct drm_device *dev, void *data,
		return -EINVAL;
		return -EINVAL;
	}
	}


	intel_runtime_pm_get(dev_priv);

	ret = i915_mutex_lock_interruptible(dev);
	ret = i915_mutex_lock_interruptible(dev);
	if (ret)
	if (ret)
		return ret;
		goto rpm_put;


	obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
	obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
	if (&obj->base == NULL) {
	if (&obj->base == NULL) {
@@ -3852,6 +3855,9 @@ int i915_gem_set_caching_ioctl(struct drm_device *dev, void *data,
	drm_gem_object_unreference(&obj->base);
	drm_gem_object_unreference(&obj->base);
unlock:
unlock:
	mutex_unlock(&dev->struct_mutex);
	mutex_unlock(&dev->struct_mutex);
rpm_put:
	intel_runtime_pm_put(dev_priv);

	return ret;
	return ret;
}
}