[PATCH 100/101] drm/i915/gt: Name the individual i915_address_space classes

Chris Wilson chris at chris-wilson.co.uk
Mon Jul 27 23:13:05 UTC 2020


Pass down a unique lock_class_key and identifying name to
i915_address_space_init() so that the lockdep reports and stats are
clearer. The major distinction between i915_ppgtt and i915_ggtt is that
the global-GTT is private to the kernel, access is protected, whereas
we allow userspace to directly influence the per-process GTT.

Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/gt/intel_ggtt.c      | 3 ++-
 drivers/gpu/drm/i915/gt/intel_gtt.c       | 6 ++++--
 drivers/gpu/drm/i915/gt/intel_gtt.h       | 6 +++---
 drivers/gpu/drm/i915/gt/intel_ppgtt.c     | 3 ++-
 drivers/gpu/drm/i915/selftests/mock_gtt.c | 7 +++++--
 5 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_ggtt.c b/drivers/gpu/drm/i915/gt/intel_ggtt.c
index a78ae2733fd6..d906b3e2d959 100644
--- a/drivers/gpu/drm/i915/gt/intel_ggtt.c
+++ b/drivers/gpu/drm/i915/gt/intel_ggtt.c
@@ -41,9 +41,10 @@ static void i915_ggtt_color_adjust(const struct drm_mm_node *node,
 
 static int ggtt_init_hw(struct i915_ggtt *ggtt)
 {
+	static struct lock_class_key key;
 	struct drm_i915_private *i915 = ggtt->vm.i915;
 
-	i915_address_space_init(&ggtt->vm, VM_CLASS_GGTT);
+	i915_address_space_init(&ggtt->vm, &key, "i915_ggtt");
 
 	ggtt->vm.is_ggtt = true;
 
diff --git a/drivers/gpu/drm/i915/gt/intel_gtt.c b/drivers/gpu/drm/i915/gt/intel_gtt.c
index 1e541bc942a0..00afbbd15a10 100644
--- a/drivers/gpu/drm/i915/gt/intel_gtt.c
+++ b/drivers/gpu/drm/i915/gt/intel_gtt.c
@@ -86,7 +86,9 @@ void i915_vm_release(struct kref *kref)
 	queue_rcu_work(vm->i915->wq, &vm->rcu);
 }
 
-void i915_address_space_init(struct i915_address_space *vm, int subclass)
+void i915_address_space_init(struct i915_address_space *vm,
+			     struct lock_class_key *key,
+			     const char *name)
 {
 	kref_init(&vm->ref);
 	INIT_RCU_WORK(&vm->rcu, __i915_vm_release);
@@ -98,7 +100,7 @@ void i915_address_space_init(struct i915_address_space *vm, int subclass)
 	 * attempt holding the lock is immediately reported by lockdep.
 	 */
 	mutex_init(&vm->mutex);
-	lockdep_set_subclass(&vm->mutex, subclass);
+	lockdep_set_class_and_name(&vm->mutex, key, name);
 	i915_gem_shrinker_taints_mutex(vm->i915, &vm->mutex);
 
 	GEM_BUG_ON(!vm->total);
diff --git a/drivers/gpu/drm/i915/gt/intel_gtt.h b/drivers/gpu/drm/i915/gt/intel_gtt.h
index 4d9e402e12ec..b2a3501fd3ad 100644
--- a/drivers/gpu/drm/i915/gt/intel_gtt.h
+++ b/drivers/gpu/drm/i915/gt/intel_gtt.h
@@ -236,8 +236,6 @@ struct i915_address_space {
 	atomic_t open;
 
 	struct mutex mutex; /* protects vma and our lists */
-#define VM_CLASS_GGTT 0
-#define VM_CLASS_PPGTT 1
 
 	struct drm_i915_gem_object *scratch[4];
 	/**
@@ -422,7 +420,9 @@ i915_vm_close(struct i915_address_space *vm)
 	i915_vm_put(vm);
 }
 
-void i915_address_space_init(struct i915_address_space *vm, int subclass);
+void i915_address_space_init(struct i915_address_space *vm,
+			     struct lock_class_key *key,
+			     const char *name);
 void i915_address_space_fini(struct i915_address_space *vm);
 
 static inline u32 i915_pte_index(u64 address, unsigned int pde_shift)
diff --git a/drivers/gpu/drm/i915/gt/intel_ppgtt.c b/drivers/gpu/drm/i915/gt/intel_ppgtt.c
index 1fe510afdaf2..c56d2a34e407 100644
--- a/drivers/gpu/drm/i915/gt/intel_ppgtt.c
+++ b/drivers/gpu/drm/i915/gt/intel_ppgtt.c
@@ -298,6 +298,7 @@ int ppgtt_set_pages(struct i915_vma *vma)
 
 void ppgtt_init(struct i915_ppgtt *ppgtt, struct intel_gt *gt)
 {
+	static struct lock_class_key key;
 	struct drm_i915_private *i915 = gt->i915;
 
 	ppgtt->vm.gt = gt;
@@ -305,7 +306,7 @@ void ppgtt_init(struct i915_ppgtt *ppgtt, struct intel_gt *gt)
 	ppgtt->vm.dma = &i915->drm.pdev->dev;
 	ppgtt->vm.total = BIT_ULL(INTEL_INFO(i915)->ppgtt_size);
 
-	i915_address_space_init(&ppgtt->vm, VM_CLASS_PPGTT);
+	i915_address_space_init(&ppgtt->vm, &key, "i915_ppgtt");
 
 	ppgtt->vm.vma_ops.bind_vma    = ppgtt_bind_vma;
 	ppgtt->vm.vma_ops.unbind_vma  = ppgtt_unbind_vma;
diff --git a/drivers/gpu/drm/i915/selftests/mock_gtt.c b/drivers/gpu/drm/i915/selftests/mock_gtt.c
index 7270fc8ca801..4ae9875bc0e7 100644
--- a/drivers/gpu/drm/i915/selftests/mock_gtt.c
+++ b/drivers/gpu/drm/i915/selftests/mock_gtt.c
@@ -64,6 +64,7 @@ static void mock_clear_range(struct i915_address_space *vm,
 
 struct i915_ppgtt *mock_ppgtt(struct drm_i915_private *i915, const char *name)
 {
+	static struct lock_class_key key;
 	struct i915_ppgtt *ppgtt;
 
 	ppgtt = kzalloc(sizeof(*ppgtt), GFP_KERNEL);
@@ -76,7 +77,7 @@ struct i915_ppgtt *mock_ppgtt(struct drm_i915_private *i915, const char *name)
 	ppgtt->vm.file = ERR_PTR(-ENODEV);
 	ppgtt->vm.dma = &i915->drm.pdev->dev;
 
-	i915_address_space_init(&ppgtt->vm, VM_CLASS_PPGTT);
+	i915_address_space_init(&ppgtt->vm, &key, "mock_ppgtt");
 
 	ppgtt->vm.alloc_pt_dma = alloc_pt_dma;
 
@@ -108,6 +109,8 @@ static void mock_unbind_ggtt(struct i915_address_space *vm,
 
 void mock_init_ggtt(struct drm_i915_private *i915, struct i915_ggtt *ggtt)
 {
+	static struct lock_class_key key;
+
 	memset(ggtt, 0, sizeof(*ggtt));
 
 	ggtt->vm.gt = &i915->gt;
@@ -130,7 +133,7 @@ void mock_init_ggtt(struct drm_i915_private *i915, struct i915_ggtt *ggtt)
 	ggtt->vm.vma_ops.set_pages   = ggtt_set_pages;
 	ggtt->vm.vma_ops.clear_pages = clear_pages;
 
-	i915_address_space_init(&ggtt->vm, VM_CLASS_GGTT);
+	i915_address_space_init(&ggtt->vm, &key, "mock_ggtt");
 	i915->gt.ggtt = ggtt;
 }
 
-- 
2.20.1



More information about the Intel-gfx-trybot mailing list