From fa737b9ed60ae8a785f30170317709200ab7a4d7 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Tue, 3 Sep 2013 19:59:43 +0100 Subject: [PATCH] ideas? --- drivers/gpu/drm/i915/i915_drv.h | 3 +++ drivers/gpu/drm/i915/i915_gem.c | 7 +++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index b30161d..4732627 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -1906,11 +1906,14 @@ static inline struct page *i915_gem_object_get_page(struct drm_i915_gem_object * } static inline void i915_gem_object_pin_pages(struct drm_i915_gem_object *obj) { + lockdep_assert_held(&obj->base.dev->struct_mutex); BUG_ON(obj->pages == NULL); obj->pages_pin_count++; } static inline void i915_gem_object_unpin_pages(struct drm_i915_gem_object *obj) { + lockdep_assert_held(&obj->base.dev->struct_mutex); + BUG_ON(obj->pages == NULL); BUG_ON(obj->pages_pin_count == 0); obj->pages_pin_count--; } diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index da00032..3918d3b 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -2007,6 +2007,8 @@ i915_gem_object_get_pages(struct drm_i915_gem_object *obj) const struct drm_i915_gem_object_ops *ops = obj->ops; int ret; + lockdep_assert_held(&obj->base.dev->struct_mutex); + if (obj->pages) return 0; @@ -2749,6 +2751,8 @@ int i915_vma_unbind(struct i915_vma *vma) drm_i915_private_t *dev_priv = obj->base.dev->dev_private; int ret; + lockdep_assert_held(&obj->base.dev->struct_mutex); + /* For now we only ever use 1 vma per object */ WARN_ON(!list_is_singular(&obj->vma_list)); @@ -2757,7 +2761,6 @@ int i915_vma_unbind(struct i915_vma *vma) if (!drm_mm_node_allocated(&vma->node)) { i915_gem_vma_destroy(vma); - return 0; } @@ -2790,7 +2793,6 @@ int i915_vma_unbind(struct i915_vma *vma) obj->has_aliasing_ppgtt_mapping = 0; } i915_gem_gtt_finish_object(obj); - i915_gem_object_unpin_pages(obj); list_del(&vma->mm_list); /* Avoid an unnecessary call to unbind on rebind. */ @@ -2798,6 +2800,7 @@ int i915_vma_unbind(struct i915_vma *vma) obj->map_and_fenceable = true; drm_mm_remove_node(&vma->node); + i915_gem_object_unpin_pages(obj); i915_gem_vma_destroy(vma); -- 1.7.10.4