Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 217905
b: refs/heads/master
c: e35a41d
h: refs/heads/master
i:
  217903: 28093ba
v: v3
  • Loading branch information
Daniel Vetter authored and Chris Wilson committed Sep 8, 2010
1 parent f2da2b5 commit 8fdc2ca
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 22 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: be282fd48e7492812402a22d73a348c44bf95b63
refs/heads/master: e35a41de3926ec81e3ed2ed31d1f30cecb3513f9
55 changes: 34 additions & 21 deletions trunk/drivers/gpu/drm/i915/i915_gem.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ static int i915_gem_object_set_cpu_read_domain_range(struct drm_gem_object *obj,
uint64_t offset,
uint64_t size);
static void i915_gem_object_set_to_full_cpu_read_domain(struct drm_gem_object *obj);
static int i915_gem_object_wait_rendering(struct drm_gem_object *obj);
static int i915_gem_object_wait_rendering(struct drm_gem_object *obj,
bool interruptible);
static int i915_gem_object_bind_to_gtt(struct drm_gem_object *obj,
unsigned alignment);
static void i915_gem_clear_fence_reg(struct drm_gem_object *obj);
Expand Down Expand Up @@ -1468,6 +1469,14 @@ i915_gem_object_put_pages(struct drm_gem_object *obj)
obj_priv->pages = NULL;
}

static uint32_t
i915_gem_next_request_seqno(struct drm_device *dev)
{
drm_i915_private_t *dev_priv = dev->dev_private;

return dev_priv->next_seqno;
}

static void
i915_gem_object_move_to_active(struct drm_gem_object *obj, uint32_t seqno,
struct intel_ring_buffer *ring)
Expand All @@ -1483,6 +1492,11 @@ i915_gem_object_move_to_active(struct drm_gem_object *obj, uint32_t seqno,
drm_gem_object_reference(obj);
obj_priv->active = 1;
}

/* Take the seqno of the next request if none is given */
if (seqno == 0)
seqno = i915_gem_next_request_seqno(dev);

/* Move from whatever list we were on to the tail of execution. */
spin_lock(&dev_priv->mm.active_list_lock);
list_move_tail(&obj_priv->list, &ring->active_list);
Expand Down Expand Up @@ -1828,6 +1842,12 @@ i915_do_wait_request(struct drm_device *dev, uint32_t seqno,

BUG_ON(seqno == 0);

if (seqno == dev_priv->next_seqno) {
seqno = i915_add_request(dev, NULL, 0, ring);
if (seqno == 0)
return -ENOMEM;
}

if (atomic_read(&dev_priv->mm.wedged))
return -EIO;

Expand Down Expand Up @@ -1915,7 +1935,8 @@ i915_gem_flush(struct drm_device *dev,
* safe to unbind from the GTT or access from the CPU.
*/
static int
i915_gem_object_wait_rendering(struct drm_gem_object *obj)
i915_gem_object_wait_rendering(struct drm_gem_object *obj,
bool interruptible)
{
struct drm_device *dev = obj->dev;
struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);
Expand All @@ -1934,8 +1955,10 @@ i915_gem_object_wait_rendering(struct drm_gem_object *obj)
DRM_INFO("%s: object %p wait for seqno %08x\n",
__func__, obj, obj_priv->last_rendering_seqno);
#endif
ret = i915_wait_request(dev,
obj_priv->last_rendering_seqno, obj_priv->ring);
ret = i915_do_wait_request(dev,
obj_priv->last_rendering_seqno,
interruptible,
obj_priv->ring);
if (ret != 0)
return ret;
}
Expand Down Expand Up @@ -2438,7 +2461,7 @@ i915_gem_object_put_fence_reg(struct drm_gem_object *obj)
if (ret != 0)
return ret;

ret = i915_gem_object_wait_rendering(obj);
ret = i915_gem_object_wait_rendering(obj, true);
if (ret != 0)
return ret;
}
Expand Down Expand Up @@ -2694,7 +2717,7 @@ i915_gem_object_set_to_gtt_domain(struct drm_gem_object *obj, int write)
return ret;

/* Wait on any GPU rendering and flushing to occur. */
ret = i915_gem_object_wait_rendering(obj);
ret = i915_gem_object_wait_rendering(obj, true);
if (ret != 0)
return ret;

Expand Down Expand Up @@ -2733,7 +2756,6 @@ i915_gem_object_set_to_gtt_domain(struct drm_gem_object *obj, int write)
int
i915_gem_object_set_to_display_plane(struct drm_gem_object *obj)
{
struct drm_device *dev = obj->dev;
struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);
uint32_t old_write_domain, old_read_domains;
int ret;
Expand All @@ -2747,18 +2769,9 @@ i915_gem_object_set_to_display_plane(struct drm_gem_object *obj)
return ret;

/* Wait on any GPU rendering and flushing to occur. */
if (obj_priv->active) {
#if WATCH_BUF
DRM_INFO("%s: object %p wait for seqno %08x\n",
__func__, obj, obj_priv->last_rendering_seqno);
#endif
ret = i915_do_wait_request(dev,
obj_priv->last_rendering_seqno,
0,
obj_priv->ring);
if (ret != 0)
return ret;
}
ret = i915_gem_object_wait_rendering(obj, false);
if (ret != 0)
return ret;

i915_gem_object_flush_cpu_write_domain(obj);

Expand Down Expand Up @@ -2797,7 +2810,7 @@ i915_gem_object_set_to_cpu_domain(struct drm_gem_object *obj, int write)
return ret;

/* Wait on any GPU rendering and flushing to occur. */
ret = i915_gem_object_wait_rendering(obj);
ret = i915_gem_object_wait_rendering(obj, true);
if (ret != 0)
return ret;

Expand Down Expand Up @@ -3098,7 +3111,7 @@ i915_gem_object_set_cpu_read_domain_range(struct drm_gem_object *obj,
return ret;

/* Wait on any GPU rendering and flushing to occur. */
ret = i915_gem_object_wait_rendering(obj);
ret = i915_gem_object_wait_rendering(obj, true);
if (ret != 0)
return ret;
i915_gem_object_flush_gtt_write_domain(obj);
Expand Down

0 comments on commit 8fdc2ca

Please sign in to comment.