[PATCH 2/2] drm/i915: convert test & clear dirty to accessors too
Dave Gordon
david.s.gordon at intel.com
Mon May 16 15:08:00 UTC 2016
To go with i915_gem_object_mark_dirty(), here we introduce the
corresponding functions to clear and to test the object-dirty flag.
Signed-off-by: Dave Gordon <david.s.gordon at intel.com>
---
drivers/gpu/drm/i915/i915_debugfs.c | 2 +-
drivers/gpu/drm/i915/i915_drv.h | 14 ++++++++++++--
drivers/gpu/drm/i915/i915_gem.c | 15 ++++++++-------
drivers/gpu/drm/i915/i915_gem_userptr.c | 12 +++++++-----
drivers/gpu/drm/i915/i915_gpu_error.c | 2 +-
5 files changed, 29 insertions(+), 16 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 24f4105..0fc5b10 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -160,7 +160,7 @@ static u64 i915_gem_obj_total_ggtt_size(struct drm_i915_gem_object *obj)
i915_gem_request_get_seqno(obj->last_write_req),
i915_gem_request_get_seqno(obj->last_fenced_req),
i915_cache_level_str(to_i915(obj->base.dev), obj->cache_level),
- obj->dirty ? " dirty" : "",
+ i915_gem_object_test_dirty(obj) ? " dirty" : "",
obj->madv == I915_MADV_DONTNEED ? " purgeable" : "");
if (obj->base.name)
seq_printf(m, " (name: %d)", obj->base.name);
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 74bacc7..9868cda 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2154,7 +2154,7 @@ struct drm_i915_gem_object {
* This is set if the object has been written to since last bound
* to the GTT
*/
- unsigned int dirty:1;
+ unsigned int _dirty:1;
/**
* Fence register bits (if any) for this object. Will be set
@@ -3071,7 +3071,17 @@ static inline void i915_gem_object_pin_pages(struct drm_i915_gem_object *obj)
static inline void i915_gem_object_mark_dirty(struct drm_i915_gem_object *obj)
{
BUG_ON(obj->pages_pin_count == 0);
- obj->dirty = true;
+ obj->_dirty = true;
+}
+
+static inline void i915_gem_object_clear_dirty(struct drm_i915_gem_object *obj)
+{
+ obj->_dirty = false;
+}
+
+static inline bool i915_gem_object_test_dirty(struct drm_i915_gem_object *obj)
+{
+ return obj->_dirty;
}
static inline void i915_gem_object_unpin_pages(struct drm_i915_gem_object *obj)
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index dc3dcd7..c1d0e74 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -215,9 +215,8 @@ int i915_mutex_lock_interruptible(struct drm_device *dev)
}
if (obj->madv == I915_MADV_DONTNEED)
- obj->dirty = 0;
-
- if (obj->dirty) {
+ i915_gem_object_clear_dirty(obj);
+ else if (i915_gem_object_test_dirty(obj)) {
struct address_space *mapping = file_inode(obj->base.filp)->i_mapping;
char *vaddr = obj->phys_handle->vaddr;
int i;
@@ -241,7 +240,7 @@ int i915_mutex_lock_interruptible(struct drm_device *dev)
put_page(page);
vaddr += PAGE_SIZE;
}
- obj->dirty = 0;
+ i915_gem_object_clear_dirty(obj);
}
sg_free_table(obj->pages);
@@ -2166,6 +2165,7 @@ static void i915_gem_object_free_mmap_offset(struct drm_i915_gem_object *obj)
i915_gem_object_put_pages_gtt(struct drm_i915_gem_object *obj)
{
struct sg_page_iter sg_iter;
+ bool dirty;
int ret;
BUG_ON(obj->madv == __I915_MADV_PURGED);
@@ -2185,12 +2185,13 @@ static void i915_gem_object_free_mmap_offset(struct drm_i915_gem_object *obj)
i915_gem_object_save_bit_17_swizzle(obj);
if (obj->madv == I915_MADV_DONTNEED)
- obj->dirty = 0;
+ i915_gem_object_clear_dirty(obj);
+ dirty = i915_gem_object_test_dirty(obj);
for_each_sg_page(obj->pages->sgl, &sg_iter, obj->pages->nents, 0) {
struct page *page = sg_page_iter_page(&sg_iter);
- if (obj->dirty)
+ if (dirty)
set_page_dirty(page);
if (obj->madv == I915_MADV_WILLNEED)
@@ -2198,7 +2199,7 @@ static void i915_gem_object_free_mmap_offset(struct drm_i915_gem_object *obj)
put_page(page);
}
- obj->dirty = 0;
+ i915_gem_object_clear_dirty(obj);
sg_free_table(obj->pages);
kfree(obj->pages);
diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c b/drivers/gpu/drm/i915/i915_gem_userptr.c
index 32d9726..e4b12c0 100644
--- a/drivers/gpu/drm/i915/i915_gem_userptr.c
+++ b/drivers/gpu/drm/i915/i915_gem_userptr.c
@@ -707,25 +707,27 @@ struct get_pages_work {
i915_gem_userptr_put_pages(struct drm_i915_gem_object *obj)
{
struct sg_page_iter sg_iter;
+ bool dirty;
BUG_ON(obj->userptr.work != NULL);
__i915_gem_userptr_set_active(obj, false);
- if (obj->madv != I915_MADV_WILLNEED)
- obj->dirty = 0;
-
i915_gem_gtt_finish_object(obj);
+ if (obj->madv != I915_MADV_WILLNEED)
+ i915_gem_object_clear_dirty(obj);
+
+ dirty = i915_gem_object_test_dirty(obj);
for_each_sg_page(obj->pages->sgl, &sg_iter, obj->pages->nents, 0) {
struct page *page = sg_page_iter_page(&sg_iter);
- if (obj->dirty)
+ if (dirty)
set_page_dirty(page);
mark_page_accessed(page);
put_page(page);
}
- obj->dirty = 0;
+ i915_gem_object_clear_dirty(obj);
sg_free_table(obj->pages);
kfree(obj->pages);
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c
index 34ff245..aada42f 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.c
+++ b/drivers/gpu/drm/i915/i915_gpu_error.c
@@ -746,7 +746,7 @@ static void capture_bo(struct drm_i915_error_buffer *err,
if (i915_gem_obj_is_pinned(obj))
err->pinned = 1;
err->tiling = obj->tiling_mode;
- err->dirty = obj->dirty;
+ err->dirty = i915_gem_object_test_dirty(obj);
err->purgeable = obj->madv != I915_MADV_WILLNEED;
err->userptr = obj->userptr.mm != NULL;
err->ring = obj->last_write_req ?
--
1.9.1
More information about the Intel-gfx-trybot
mailing list