aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2010-11-01 08:38:44 -0400
committerChris Wilson <chris@chris-wilson.co.uk>2010-11-01 08:38:44 -0400
commit0f8c6d7ca9257d6a01671ab69b897860d3ae9bc0 (patch)
treee06b567e620e17d5ce983610ef3721d860d0cf27
parent13b2928933919c5344716d49620a52493a243f8c (diff)
drm/i915: Move the invalidate|flush information out of the device struct
... and into a local structure scoped for the single function in which it is used. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h2
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c45
-rw-r--r--include/drm/drmP.h2
3 files changed, 23 insertions, 26 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 3f8786049cb6..a0063f82fa33 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -642,8 +642,6 @@ typedef struct drm_i915_private {
642 /* storage for physical objects */ 642 /* storage for physical objects */
643 struct drm_i915_gem_phys_object *phys_objs[I915_MAX_PHYS_OBJECT]; 643 struct drm_i915_gem_phys_object *phys_objs[I915_MAX_PHYS_OBJECT];
644 644
645 uint32_t flush_rings;
646
647 /* accounting, useful for userland debugging */ 645 /* accounting, useful for userland debugging */
648 size_t object_memory; 646 size_t object_memory;
649 size_t pin_memory; 647 size_t pin_memory;
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index c797d2b9b233..ffea847c8a0d 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -36,6 +36,12 @@
36#include <linux/pci.h> 36#include <linux/pci.h>
37#include <linux/intel-gtt.h> 37#include <linux/intel-gtt.h>
38 38
39struct change_domains {
40 uint32_t invalidate_domains;
41 uint32_t flush_domains;
42 uint32_t flush_rings;
43};
44
39static uint32_t i915_gem_get_gtt_alignment(struct drm_i915_gem_object *obj_priv); 45static uint32_t i915_gem_get_gtt_alignment(struct drm_i915_gem_object *obj_priv);
40static uint32_t i915_gem_get_gtt_size(struct drm_i915_gem_object *obj_priv); 46static uint32_t i915_gem_get_gtt_size(struct drm_i915_gem_object *obj_priv);
41 47
@@ -3167,10 +3173,9 @@ i915_gem_object_set_to_cpu_domain(struct drm_gem_object *obj, int write)
3167 */ 3173 */
3168static void 3174static void
3169i915_gem_object_set_to_gpu_domain(struct drm_gem_object *obj, 3175i915_gem_object_set_to_gpu_domain(struct drm_gem_object *obj,
3170 struct intel_ring_buffer *ring) 3176 struct intel_ring_buffer *ring,
3177 struct change_domains *cd)
3171{ 3178{
3172 struct drm_device *dev = obj->dev;
3173 struct drm_i915_private *dev_priv = dev->dev_private;
3174 struct drm_i915_gem_object *obj_priv = to_intel_bo(obj); 3179 struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);
3175 uint32_t invalidate_domains = 0; 3180 uint32_t invalidate_domains = 0;
3176 uint32_t flush_domains = 0; 3181 uint32_t flush_domains = 0;
@@ -3216,12 +3221,12 @@ i915_gem_object_set_to_gpu_domain(struct drm_gem_object *obj,
3216 if (flush_domains == 0 && obj->pending_write_domain == 0) 3221 if (flush_domains == 0 && obj->pending_write_domain == 0)
3217 obj->pending_write_domain = obj->write_domain; 3222 obj->pending_write_domain = obj->write_domain;
3218 3223
3219 dev->invalidate_domains |= invalidate_domains; 3224 cd->invalidate_domains |= invalidate_domains;
3220 dev->flush_domains |= flush_domains; 3225 cd->flush_domains |= flush_domains;
3221 if (flush_domains & I915_GEM_GPU_DOMAINS) 3226 if (flush_domains & I915_GEM_GPU_DOMAINS)
3222 dev_priv->mm.flush_rings |= obj_priv->ring->id; 3227 cd->flush_rings |= obj_priv->ring->id;
3223 if (invalidate_domains & I915_GEM_GPU_DOMAINS) 3228 if (invalidate_domains & I915_GEM_GPU_DOMAINS)
3224 dev_priv->mm.flush_rings |= ring->id; 3229 cd->flush_rings |= ring->id;
3225} 3230}
3226 3231
3227/** 3232/**
@@ -3590,30 +3595,26 @@ i915_gem_execbuffer_move_to_gpu(struct drm_device *dev,
3590 struct drm_gem_object **objects, 3595 struct drm_gem_object **objects,
3591 int count) 3596 int count)
3592{ 3597{
3593 struct drm_i915_private *dev_priv = dev->dev_private; 3598 struct change_domains cd;
3594 int ret, i; 3599 int ret, i;
3595 3600
3596 /* Zero the global flush/invalidate flags. These 3601 cd.invalidate_domains = 0;
3597 * will be modified as new domains are computed 3602 cd.flush_domains = 0;
3598 * for each object 3603 cd.flush_rings = 0;
3599 */
3600 dev->invalidate_domains = 0;
3601 dev->flush_domains = 0;
3602 dev_priv->mm.flush_rings = 0;
3603 for (i = 0; i < count; i++) 3604 for (i = 0; i < count; i++)
3604 i915_gem_object_set_to_gpu_domain(objects[i], ring); 3605 i915_gem_object_set_to_gpu_domain(objects[i], ring, &cd);
3605 3606
3606 if (dev->invalidate_domains | dev->flush_domains) { 3607 if (cd.invalidate_domains | cd.flush_domains) {
3607#if WATCH_EXEC 3608#if WATCH_EXEC
3608 DRM_INFO("%s: invalidate_domains %08x flush_domains %08x\n", 3609 DRM_INFO("%s: invalidate_domains %08x flush_domains %08x\n",
3609 __func__, 3610 __func__,
3610 dev->invalidate_domains, 3611 cd.invalidate_domains,
3611 dev->flush_domains); 3612 cd.flush_domains);
3612#endif 3613#endif
3613 i915_gem_flush(dev, file, 3614 i915_gem_flush(dev, file,
3614 dev->invalidate_domains, 3615 cd.invalidate_domains,
3615 dev->flush_domains, 3616 cd.flush_domains,
3616 dev_priv->mm.flush_rings); 3617 cd.flush_rings);
3617 } 3618 }
3618 3619
3619 for (i = 0; i < count; i++) { 3620 for (i = 0; i < count; i++) {
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index 274eaaa15c36..d4bc0f5cab8f 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -1041,8 +1041,6 @@ struct drm_device {
1041 /*@{ */ 1041 /*@{ */
1042 spinlock_t object_name_lock; 1042 spinlock_t object_name_lock;
1043 struct idr object_name_idr; 1043 struct idr object_name_idr;
1044 uint32_t invalidate_domains; /* domains pending invalidation */
1045 uint32_t flush_domains; /* domains pending flush */
1046 /*@} */ 1044 /*@} */
1047 1045
1048}; 1046};