Skip to content

Commit

Permalink
drm/i915: Clear fence registers on GPU reset
Browse files Browse the repository at this point in the history
When the GPU is reset, the fence registers are invalidated, so release
the objects and clear them out.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
  • Loading branch information
Chris Wilson committed Oct 1, 2010
1 parent 812ed49 commit 069efc1
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 3 deletions.
2 changes: 1 addition & 1 deletion drivers/gpu/drm/i915/i915_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -395,7 +395,7 @@ int i915_reset(struct drm_device *dev, u8 flags)

mutex_lock(&dev->struct_mutex);

i915_gem_reset_lists(dev);
i915_gem_reset(dev);

/*
* Set the domains we want to reset (GRDOM/bits 2 and 3) as
Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/i915/i915_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -1033,7 +1033,7 @@ int i915_gem_object_get_fence_reg(struct drm_gem_object *obj,
int i915_gem_object_put_fence_reg(struct drm_gem_object *obj,
bool interruptible);
void i915_gem_retire_requests(struct drm_device *dev);
void i915_gem_reset_lists(struct drm_device *dev);
void i915_gem_reset(struct drm_device *dev);
void i915_gem_clflush_object(struct drm_gem_object *obj);
int i915_gem_object_set_domain(struct drm_gem_object *obj,
uint32_t read_domains,
Expand Down
14 changes: 13 additions & 1 deletion drivers/gpu/drm/i915/i915_gem.c
Original file line number Diff line number Diff line change
Expand Up @@ -1826,10 +1826,11 @@ static void i915_gem_reset_ring_lists(struct drm_i915_private *dev_priv,
}
}

void i915_gem_reset_lists(struct drm_device *dev)
void i915_gem_reset(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
struct drm_i915_gem_object *obj_priv;
int i;

i915_gem_reset_ring_lists(dev_priv, &dev_priv->render_ring);
if (HAS_BSD(dev))
Expand Down Expand Up @@ -1858,6 +1859,17 @@ void i915_gem_reset_lists(struct drm_device *dev)
{
obj_priv->base.read_domains &= ~I915_GEM_GPU_DOMAINS;
}

/* The fence registers are invalidated so clear them out */
for (i = 0; i < 16; i++) {
struct drm_i915_fence_reg *reg;

reg = &dev_priv->fence_regs[i];
if (!reg->obj)
continue;

i915_gem_clear_fence_reg(reg->obj);
}
}

/**
Expand Down

0 comments on commit 069efc1

Please sign in to comment.