|
@@ -366,6 +366,30 @@ i915_vma_get_fence(struct i915_vma *vma)
|
|
|
return fence_update(fence, set);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * i915_gem_revoke_fences - revoke fence state
|
|
|
+ * @dev_priv: i915 device private
|
|
|
+ *
|
|
|
+ * Removes all GTT mmappings via the fence registers. This forces any user
|
|
|
+ * of the fence to reacquire that fence before continuing with their access.
|
|
|
+ * One use is during GPU reset where the fence register is lost and we need to
|
|
|
+ * revoke concurrent userspace access via GTT mmaps until the hardware has been
|
|
|
+ * reset and the fence registers have been restored.
|
|
|
+ */
|
|
|
+void i915_gem_revoke_fences(struct drm_i915_private *dev_priv)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+
|
|
|
+ lockdep_assert_held(&dev_priv->drm.struct_mutex);
|
|
|
+
|
|
|
+ for (i = 0; i < dev_priv->num_fence_regs; i++) {
|
|
|
+ struct drm_i915_fence_reg *fence = &dev_priv->fence_regs[i];
|
|
|
+
|
|
|
+ if (fence->vma)
|
|
|
+ i915_gem_release_mmap(fence->vma->obj);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* i915_gem_restore_fences - restore fence state
|
|
|
* @dev_priv: i915 device private
|