From f8e38e49dd70bf4a5ef97c29f0c405a1fc5023f5 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 21 May 2008 00:32:02 -0700 Subject: [intel-gem] invalidate ring locals for pin/unpin/set_domain/free functions Ring locals must be reloaded from hardware in case the X server ran. --- linux-core/i915_gem.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'linux-core') diff --git a/linux-core/i915_gem.c b/linux-core/i915_gem.c index 3535fae1..8e5539f5 100644 --- a/linux-core/i915_gem.c +++ b/linux-core/i915_gem.c @@ -1163,6 +1163,7 @@ i915_gem_pin_ioctl(struct drm_device *dev, void *data, mutex_lock(&dev->struct_mutex); + i915_kernel_lost_context(dev); obj = drm_gem_object_lookup(dev, file_priv, args->handle); if (obj == NULL) { DRM_ERROR("Bad handle in i915_gem_pin_ioctl(): %d\n", @@ -1202,6 +1203,8 @@ i915_gem_unpin_ioctl(struct drm_device *dev, void *data, struct drm_i915_gem_object *obj_priv; mutex_lock(&dev->struct_mutex); + + i915_kernel_lost_context(dev); obj = drm_gem_object_lookup(dev, file_priv, args->handle); if (obj == NULL) { DRM_ERROR("Bad handle in i915_gem_unpin_ioctl(): %d\n", @@ -1233,6 +1236,7 @@ int i915_gem_init_object(struct drm_gem_object *obj) void i915_gem_free_object(struct drm_gem_object *obj) { + i915_kernel_lost_context(obj->dev); i915_gem_object_unbind(obj); drm_free(obj->driver_private, 1, DRM_MEM_DRIVER); @@ -1247,6 +1251,7 @@ i915_gem_set_domain(struct drm_gem_object *obj, BUG_ON(!mutex_is_locked(&dev->struct_mutex)); + i915_kernel_lost_context(dev); i915_gem_object_set_domain(obj, read_domains, write_domain); i915_gem_dev_set_domain(obj->dev); -- cgit v1.2.3