drm/i915/selftests: Take a VM in kernel_context()
authorJason Ekstrand <jason@jlekstrand.net>
Thu, 8 Jul 2021 15:48:32 +0000 (10:48 -0500)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 8 Jul 2021 17:49:18 +0000 (19:49 +0200)
This better models where we want to go with contexts in general where
things like the VM and engine set are create parameters instead of being
set after the fact.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20210708154835.528166-28-jason@jlekstrand.net
drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
drivers/gpu/drm/i915/gem/selftests/mock_context.c
drivers/gpu/drm/i915/gem/selftests/mock_context.h
drivers/gpu/drm/i915/gt/selftest_execlists.c
drivers/gpu/drm/i915/gt/selftest_hangcheck.c

index 92544a174cc9ada4d59fdb8095bd6fde26555bcb..3e59746afdc8250a2f7a58ebfb85c29779ee20eb 100644 (file)
@@ -680,7 +680,7 @@ static int igt_ctx_exec(void *arg)
                        struct i915_gem_context *ctx;
                        struct intel_context *ce;
 
-                       ctx = kernel_context(i915);
+                       ctx = kernel_context(i915, NULL);
                        if (IS_ERR(ctx)) {
                                err = PTR_ERR(ctx);
                                goto out_file;
@@ -813,7 +813,7 @@ static int igt_shared_ctx_exec(void *arg)
                        struct i915_gem_context *ctx;
                        struct intel_context *ce;
 
-                       ctx = kernel_context(i915);
+                       ctx = kernel_context(i915, NULL);
                        if (IS_ERR(ctx)) {
                                err = PTR_ERR(ctx);
                                goto out_test;
index 61aaac4a334cfce902bdfd1f93d2d05ad0b8dcee..500ef27ba4771cd1c5e1b2b70cf0720a03835a42 100644 (file)
@@ -150,7 +150,8 @@ live_context_for_engine(struct intel_engine_cs *engine, struct file *file)
 }
 
 struct i915_gem_context *
-kernel_context(struct drm_i915_private *i915)
+kernel_context(struct drm_i915_private *i915,
+              struct i915_address_space *vm)
 {
        struct i915_gem_context *ctx;
        struct i915_gem_proto_context *pc;
@@ -159,6 +160,12 @@ kernel_context(struct drm_i915_private *i915)
        if (IS_ERR(pc))
                return ERR_CAST(pc);
 
+       if (vm) {
+               if (pc->vm)
+                       i915_vm_put(pc->vm);
+               pc->vm = i915_vm_get(vm);
+       }
+
        ctx = i915_gem_create_context(i915, pc);
        proto_context_close(pc);
        if (IS_ERR(ctx))
index 2a6121d33352d5375f1c9e2281bd27b616fbfc82..7a02fd9b5866a6afe05ff0527ecfec0c06af5b25 100644 (file)
@@ -10,6 +10,7 @@
 struct file;
 struct drm_i915_private;
 struct intel_engine_cs;
+struct i915_address_space;
 
 void mock_init_contexts(struct drm_i915_private *i915);
 
@@ -25,7 +26,8 @@ live_context(struct drm_i915_private *i915, struct file *file);
 struct i915_gem_context *
 live_context_for_engine(struct intel_engine_cs *engine, struct file *file);
 
-struct i915_gem_context *kernel_context(struct drm_i915_private *i915);
+struct i915_gem_context *kernel_context(struct drm_i915_private *i915,
+                                       struct i915_address_space *vm);
 void kernel_context_close(struct i915_gem_context *ctx);
 
 #endif /* !__MOCK_CONTEXT_H */
index 6abce18d0ef325df3bbdcfb34748609ffc690c6b..73ddc6e147305a089ba31ea22cab4c09b9b59363 100644 (file)
@@ -1539,12 +1539,12 @@ static int live_busywait_preempt(void *arg)
         * preempt the busywaits used to synchronise between rings.
         */
 
-       ctx_hi = kernel_context(gt->i915);
+       ctx_hi = kernel_context(gt->i915, NULL);
        if (!ctx_hi)
                return -ENOMEM;
        ctx_hi->sched.priority = I915_CONTEXT_MAX_USER_PRIORITY;
 
-       ctx_lo = kernel_context(gt->i915);
+       ctx_lo = kernel_context(gt->i915, NULL);
        if (!ctx_lo)
                goto err_ctx_hi;
        ctx_lo->sched.priority = I915_CONTEXT_MIN_USER_PRIORITY;
@@ -1741,12 +1741,12 @@ static int live_preempt(void *arg)
        if (igt_spinner_init(&spin_lo, gt))
                goto err_spin_hi;
 
-       ctx_hi = kernel_context(gt->i915);
+       ctx_hi = kernel_context(gt->i915, NULL);
        if (!ctx_hi)
                goto err_spin_lo;
        ctx_hi->sched.priority = I915_CONTEXT_MAX_USER_PRIORITY;
 
-       ctx_lo = kernel_context(gt->i915);
+       ctx_lo = kernel_context(gt->i915, NULL);
        if (!ctx_lo)
                goto err_ctx_hi;
        ctx_lo->sched.priority = I915_CONTEXT_MIN_USER_PRIORITY;
@@ -1833,11 +1833,11 @@ static int live_late_preempt(void *arg)
        if (igt_spinner_init(&spin_lo, gt))
                goto err_spin_hi;
 
-       ctx_hi = kernel_context(gt->i915);
+       ctx_hi = kernel_context(gt->i915, NULL);
        if (!ctx_hi)
                goto err_spin_lo;
 
-       ctx_lo = kernel_context(gt->i915);
+       ctx_lo = kernel_context(gt->i915, NULL);
        if (!ctx_lo)
                goto err_ctx_hi;
 
@@ -1927,7 +1927,7 @@ struct preempt_client {
 
 static int preempt_client_init(struct intel_gt *gt, struct preempt_client *c)
 {
-       c->ctx = kernel_context(gt->i915);
+       c->ctx = kernel_context(gt->i915, NULL);
        if (!c->ctx)
                return -ENOMEM;
 
@@ -3384,12 +3384,12 @@ static int live_preempt_timeout(void *arg)
        if (igt_spinner_init(&spin_lo, gt))
                return -ENOMEM;
 
-       ctx_hi = kernel_context(gt->i915);
+       ctx_hi = kernel_context(gt->i915, NULL);
        if (!ctx_hi)
                goto err_spin_lo;
        ctx_hi->sched.priority = I915_CONTEXT_MAX_USER_PRIORITY;
 
-       ctx_lo = kernel_context(gt->i915);
+       ctx_lo = kernel_context(gt->i915, NULL);
        if (!ctx_lo)
                goto err_ctx_hi;
        ctx_lo->sched.priority = I915_CONTEXT_MIN_USER_PRIORITY;
@@ -3676,7 +3676,7 @@ static int live_preempt_smoke(void *arg)
        }
 
        for (n = 0; n < smoke.ncontext; n++) {
-               smoke.contexts[n] = kernel_context(smoke.gt->i915);
+               smoke.contexts[n] = kernel_context(smoke.gt->i915, NULL);
                if (!smoke.contexts[n])
                        goto err_ctx;
        }
index 6a0b04bdac58b9393fb847558c9be49c36b286bf..7aea10aa1fb4fc6c65b9fa9b888c5b980b22bf3f 100644 (file)
@@ -42,7 +42,7 @@ static int hang_init(struct hang *h, struct intel_gt *gt)
        memset(h, 0, sizeof(*h));
        h->gt = gt;
 
-       h->ctx = kernel_context(gt->i915);
+       h->ctx = kernel_context(gt->i915, NULL);
        if (IS_ERR(h->ctx))
                return PTR_ERR(h->ctx);