[PATCH 93/94] drm/i915/gt: Name the individual i915_address_space classes
Chris Wilson
chris at chris-wilson.co.uk
Thu Jul 30 23:22:39 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