On Tue, 11 Aug 2026, Krzysztof Karas <[email protected]> wrote:
> Move away from generic pr prints to device context aware drm
> versions.

Hmm, aren't these selftests independent of i915 (mock or real) and the
hardware, and could, in theory, be converted to kunit?

Does it make sense to introduce a dependency on mock i915 here? There's
no device context to begin with, why introduce one?

(For the tests that do have a device context, the case is completely
different, of course.)


BR,
Jani.


>
> Signed-off-by: Krzysztof Karas <[email protected]>
> ---
>  .../gpu/drm/i915/selftests/i915_sw_fence.c    | 124 +++++++----
>  drivers/gpu/drm/i915/selftests/i915_syncmap.c | 205 +++++++++++-------
>  drivers/gpu/drm/i915/selftests/scatterlist.c  |  75 +++++--
>  3 files changed, 256 insertions(+), 148 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/selftests/i915_sw_fence.c 
> b/drivers/gpu/drm/i915/selftests/i915_sw_fence.c
> index 6a305322e30d..ab753d4d3fd8 100644
> --- a/drivers/gpu/drm/i915/selftests/i915_sw_fence.c
> +++ b/drivers/gpu/drm/i915/selftests/i915_sw_fence.c
> @@ -26,7 +26,11 @@
>  #include <linux/delay.h>
>  #include <linux/prime_numbers.h>
>  
> +#include <drm/drm_print.h>
> +
> +#include "../i915_drv.h"
>  #include "../i915_selftest.h"
> +#include "mock_gem_device.h"
>  
>  static int
>  fence_notify(struct i915_sw_fence *fence, enum i915_sw_fence_notify state)
> @@ -95,6 +99,7 @@ static int test_self(void *arg)
>  
>  static int test_dag(void *arg)
>  {
> +     struct drm_i915_private *i915 = arg;
>       struct i915_sw_fence *A, *B, *C;
>       int ret = -EINVAL;
>  
> @@ -107,7 +112,7 @@ static int test_dag(void *arg)
>               return -ENOMEM;
>  
>       if (i915_sw_fence_await_sw_fence_gfp(A, A, GFP_KERNEL) != -EINVAL) {
> -             pr_err("recursive cycle not detected (AA)\n");
> +             drm_err(&i915->drm, "recursive cycle not detected (AA)\n");
>               goto err_A;
>       }
>  
> @@ -119,7 +124,7 @@ static int test_dag(void *arg)
>  
>       i915_sw_fence_await_sw_fence_gfp(A, B, GFP_KERNEL);
>       if (i915_sw_fence_await_sw_fence_gfp(B, A, GFP_KERNEL) != -EINVAL) {
> -             pr_err("single depth cycle not detected (BAB)\n");
> +             drm_err(&i915->drm, "single depth cycle not detected (BAB)\n");
>               goto err_B;
>       }
>  
> @@ -130,19 +135,19 @@ static int test_dag(void *arg)
>       }
>  
>       if (i915_sw_fence_await_sw_fence_gfp(B, C, GFP_KERNEL) == -EINVAL) {
> -             pr_err("invalid cycle detected\n");
> +             drm_err(&i915->drm, "invalid cycle detected\n");
>               goto err_C;
>       }
>       if (i915_sw_fence_await_sw_fence_gfp(C, B, GFP_KERNEL) != -EINVAL) {
> -             pr_err("single depth cycle not detected (CBC)\n");
> +             drm_err(&i915->drm, "single depth cycle not detected (CBC)\n");
>               goto err_C;
>       }
>       if (i915_sw_fence_await_sw_fence_gfp(C, A, GFP_KERNEL) != -EINVAL) {
> -             pr_err("cycle not detected (BA, CB, AC)\n");
> +             drm_err(&i915->drm, "cycle not detected (BA, CB, AC)\n");
>               goto err_C;
>       }
>       if (i915_sw_fence_await_sw_fence_gfp(A, C, GFP_KERNEL) == -EINVAL) {
> -             pr_err("invalid cycle detected\n");
> +             drm_err(&i915->drm, "invalid cycle detected\n");
>               goto err_C;
>       }
>  
> @@ -152,15 +157,15 @@ static int test_dag(void *arg)
>  
>       ret = 0;
>       if (!i915_sw_fence_done(C)) {
> -             pr_err("fence C not done\n");
> +             drm_err(&i915->drm, "fence C not done\n");
>               ret = -EINVAL;
>       }
>       if (!i915_sw_fence_done(B)) {
> -             pr_err("fence B not done\n");
> +             drm_err(&i915->drm, "fence B not done\n");
>               ret = -EINVAL;
>       }
>       if (!i915_sw_fence_done(A)) {
> -             pr_err("fence A not done\n");
> +             drm_err(&i915->drm, "fence A not done\n");
>               ret = -EINVAL;
>       }
>  err_C:
> @@ -174,6 +179,7 @@ static int test_dag(void *arg)
>  
>  static int test_AB(void *arg)
>  {
> +     struct drm_i915_private *i915 = arg;
>       struct i915_sw_fence *A, *B;
>       int ret;
>  
> @@ -191,7 +197,8 @@ static int test_AB(void *arg)
>       if (ret < 0)
>               goto err_B;
>       if (ret == 0) {
> -             pr_err("Incorrectly reported fence A was complete before 
> await\n");
> +             drm_err(&i915->drm,
> +                     "Incorrectly reported fence A was complete before 
> await\n");
>               ret = -EINVAL;
>               goto err_B;
>       }
> @@ -203,12 +210,12 @@ static int test_AB(void *arg)
>  
>       i915_sw_fence_commit(B);
>       if (!i915_sw_fence_done(B)) {
> -             pr_err("Fence B is not done\n");
> +             drm_err(&i915->drm, "Fence B is not done\n");
>               goto err_B;
>       }
>  
>       if (!i915_sw_fence_done(A)) {
> -             pr_err("Fence A is not done\n");
> +             drm_err(&i915->drm, "Fence A is not done\n");
>               goto err_B;
>       }
>  
> @@ -222,6 +229,7 @@ static int test_AB(void *arg)
>  
>  static int test_ABC(void *arg)
>  {
> +     struct drm_i915_private *i915 = arg;
>       struct i915_sw_fence *A, *B, *C;
>       int ret;
>  
> @@ -246,7 +254,8 @@ static int test_ABC(void *arg)
>       if (ret < 0)
>               goto err_C;
>       if (ret == 0) {
> -             pr_err("Incorrectly reported fence B was complete before 
> await\n");
> +             drm_err(&i915->drm,
> +                     "Incorrectly reported fence B was complete before 
> await\n");
>               goto err_C;
>       }
>  
> @@ -254,25 +263,27 @@ static int test_ABC(void *arg)
>       if (ret < 0)
>               goto err_C;
>       if (ret == 0) {
> -             pr_err("Incorrectly reported fence C was complete before 
> await\n");
> +             drm_err(&i915->drm,
> +                     "Incorrectly reported fence C was complete before 
> await\n");
>               goto err_C;
>       }
>  
>       ret = -EINVAL;
>       i915_sw_fence_commit(A);
>       if (i915_sw_fence_done(A)) {
> -             pr_err("Fence A completed early\n");
> +             drm_err(&i915->drm, "Fence A completed early\n");
>               goto err_C;
>       }
>  
>       i915_sw_fence_commit(B);
>       if (i915_sw_fence_done(B)) {
> -             pr_err("Fence B completed early\n");
> +             drm_err(&i915->drm, "Fence B completed early\n");
>               goto err_C;
>       }
>  
>       if (i915_sw_fence_done(A)) {
> -             pr_err("Fence A completed early (after signaling B)\n");
> +             drm_err(&i915->drm,
> +                     "Fence A completed early (after signaling B)\n");
>               goto err_C;
>       }
>  
> @@ -280,15 +291,15 @@ static int test_ABC(void *arg)
>  
>       ret = 0;
>       if (!i915_sw_fence_done(C)) {
> -             pr_err("Fence C not done\n");
> +             drm_err(&i915->drm, "Fence C not done\n");
>               ret = -EINVAL;
>       }
>       if (!i915_sw_fence_done(B)) {
> -             pr_err("Fence B not done\n");
> +             drm_err(&i915->drm, "Fence B not done\n");
>               ret = -EINVAL;
>       }
>       if (!i915_sw_fence_done(A)) {
> -             pr_err("Fence A not done\n");
> +             drm_err(&i915->drm, "Fence A not done\n");
>               ret = -EINVAL;
>       }
>  err_C:
> @@ -302,6 +313,7 @@ static int test_ABC(void *arg)
>  
>  static int test_AB_C(void *arg)
>  {
> +     struct drm_i915_private *i915 = arg;
>       struct i915_sw_fence *A, *B, *C;
>       int ret = -EINVAL;
>  
> @@ -343,28 +355,28 @@ static int test_AB_C(void *arg)
>  
>       ret = 0;
>       if (i915_sw_fence_done(A)) {
> -             pr_err("Fence A completed early\n");
> +             drm_err(&i915->drm, "Fence A completed early\n");
>               ret = -EINVAL;
>       }
>  
>       if (i915_sw_fence_done(B)) {
> -             pr_err("Fence B completed early\n");
> +             drm_err(&i915->drm, "Fence B completed early\n");
>               ret = -EINVAL;
>       }
>  
>       i915_sw_fence_commit(C);
>       if (!i915_sw_fence_done(C)) {
> -             pr_err("Fence C not done\n");
> +             drm_err(&i915->drm, "Fence C not done\n");
>               ret = -EINVAL;
>       }
>  
>       if (!i915_sw_fence_done(B)) {
> -             pr_err("Fence B not done\n");
> +             drm_err(&i915->drm, "Fence B not done\n");
>               ret = -EINVAL;
>       }
>  
>       if (!i915_sw_fence_done(A)) {
> -             pr_err("Fence A not done\n");
> +             drm_err(&i915->drm, "Fence A not done\n");
>               ret = -EINVAL;
>       }
>  
> @@ -379,6 +391,7 @@ static int test_AB_C(void *arg)
>  
>  static int test_C_AB(void *arg)
>  {
> +     struct drm_i915_private *i915 = arg;
>       struct i915_sw_fence *A, *B, *C;
>       int ret;
>  
> @@ -424,17 +437,17 @@ static int test_C_AB(void *arg)
>       i915_sw_fence_commit(B);
>  
>       if (!i915_sw_fence_done(A)) {
> -             pr_err("Fence A not done\n");
> +             drm_err(&i915->drm, "Fence A not done\n");
>               ret = -EINVAL;
>       }
>  
>       if (!i915_sw_fence_done(B)) {
> -             pr_err("Fence B not done\n");
> +             drm_err(&i915->drm, "Fence B not done\n");
>               ret = -EINVAL;
>       }
>  
>       if (!i915_sw_fence_done(C)) {
> -             pr_err("Fence C not done\n");
> +             drm_err(&i915->drm, "Fence C not done\n");
>               ret = -EINVAL;
>       }
>  
> @@ -449,6 +462,7 @@ static int test_C_AB(void *arg)
>  
>  static int test_chain(void *arg)
>  {
> +     struct drm_i915_private *i915 = arg;
>       int nfences = 4096;
>       struct i915_sw_fence **fences;
>       int ret, i;
> @@ -483,14 +497,14 @@ static int test_chain(void *arg)
>       for (i = nfences; --i; ) {
>               if (i915_sw_fence_done(fences[i])) {
>                       if (ret == 0)
> -                             pr_err("Fence[%d] completed early\n", i);
> +                             drm_err(&i915->drm, "Fence[%d] completed 
> early\n", i);
>                       ret = -EINVAL;
>               }
>       }
>       i915_sw_fence_commit(fences[0]);
>       for (i = 0; ret == 0 && i < nfences; i++) {
>               if (!i915_sw_fence_done(fences[i])) {
> -                     pr_err("Fence[%d] is not done\n", i);
> +                     drm_err(&i915->drm, "Fence[%d] is not done\n", i);
>                       ret = -EINVAL;
>               }
>       }
> @@ -522,6 +536,7 @@ static void task_ipc(struct work_struct *work)
>  
>  static int test_ipc(void *arg)
>  {
> +     struct drm_i915_private *i915 = arg;
>       struct task_ipc ipc;
>       struct workqueue_struct *wq;
>       int ret = 0;
> @@ -553,7 +568,8 @@ static int test_ipc(void *arg)
>  
>       usleep_range(1000, 2000);
>       if (READ_ONCE(ipc.value)) {
> -             pr_err("worker updated value before i915_sw_fence was 
> signaled\n");
> +             drm_err(&i915->drm,
> +                     "worker updated value before i915_sw_fence was 
> signaled\n");
>               ret = -EINVAL;
>       }
>  
> @@ -561,7 +577,8 @@ static int test_ipc(void *arg)
>       i915_sw_fence_wait(ipc.out);
>  
>       if (!READ_ONCE(ipc.value)) {
> -             pr_err("worker signaled i915_sw_fence before value was 
> posted\n");
> +             drm_err(&i915->drm,
> +                     "worker signaled i915_sw_fence before value was 
> posted\n");
>               ret = -EINVAL;
>       }
>  
> @@ -578,13 +595,15 @@ static int test_ipc(void *arg)
>  
>  static int test_timer(void *arg)
>  {
> +     struct drm_i915_private *i915 = arg;
>       unsigned long target, delay;
>       struct timed_fence tf;
>  
>       preempt_disable();
>       timed_fence_init(&tf, target = jiffies);
>       if (!i915_sw_fence_done(&tf.fence)) {
> -             pr_err("Fence with immediate expiration not signaled\n");
> +             drm_err(&i915->drm,
> +                     "Fence with immediate expiration not signaled\n");
>               goto err;
>       }
>       preempt_enable();
> @@ -594,7 +613,9 @@ static int test_timer(void *arg)
>               preempt_disable();
>               timed_fence_init(&tf, target = jiffies + delay);
>               if (i915_sw_fence_done(&tf.fence)) {
> -                     pr_err("Fence with future expiration (%lu jiffies) 
> already signaled\n", delay);
> +                     drm_err(&i915->drm,
> +                             "Fence with future expiration (%lu jiffies) 
> already signaled\n",
> +                             delay);
>                       goto err;
>               }
>               preempt_enable();
> @@ -603,12 +624,13 @@ static int test_timer(void *arg)
>  
>               preempt_disable();
>               if (!i915_sw_fence_done(&tf.fence)) {
> -                     pr_err("Fence not signaled after wait\n");
> +                     drm_err(&i915->drm, "Fence not signaled after wait\n");
>                       goto err;
>               }
>               if (time_before(jiffies, target)) {
> -                     pr_err("Fence signaled too early, target=%lu, 
> now=%lu\n",
> -                            target, jiffies);
> +                     drm_err(&i915->drm,
> +                             "Fence signaled too early, target=%lu, 
> now=%lu\n",
> +                             target, jiffies);
>                       goto err;
>               }
>               preempt_enable();
> @@ -668,6 +690,7 @@ wrap_dma_fence(struct dma_fence *dma, unsigned long delay)
>  
>  static int test_dma_fence(void *arg)
>  {
> +     struct drm_i915_private *i915 = arg;
>       struct i915_sw_fence *timeout = NULL, *not = NULL;
>       unsigned long delay = i915_selftest.timeout_jiffies;
>       unsigned long end, sleep;
> @@ -692,7 +715,7 @@ static int test_dma_fence(void *arg)
>  
>       err = -EINVAL;
>       if (i915_sw_fence_done(timeout) || i915_sw_fence_done(not)) {
> -             pr_err("Fences immediately signaled\n");
> +             drm_err(&i915->drm, "Fences immediately signaled\n");
>               goto err;
>       }
>  
> @@ -702,25 +725,26 @@ static int test_dma_fence(void *arg)
>       sleep = jiffies_to_usecs(delay) / 3;
>       usleep_range(sleep, 2 * sleep);
>       if (time_after(jiffies, end)) {
> -             pr_debug("Slept too long, delay=%lu, (target=%lu, now=%lu) 
> skipping\n",
> -                      delay, end, jiffies);
> +             drm_dbg(&i915->drm,
> +                     "Slept too long, delay=%lu, (target=%lu, now=%lu) 
> skipping\n",
> +                     delay, end, jiffies);
>               goto skip;
>       }
>  
>       if (i915_sw_fence_done(timeout) || i915_sw_fence_done(not)) {
> -             pr_err("Fences signaled too early\n");
> +             drm_err(&i915->drm, "Fences signaled too early\n");
>               goto err;
>       }
>  
>       if (!wait_event_timeout(timeout->wait,
>                               i915_sw_fence_done(timeout),
>                               2 * (end - jiffies) + 1)) {
> -             pr_err("Timeout fence unsignaled!\n");
> +             drm_err(&i915->drm, "Timeout fence unsignaled!\n");
>               goto err;
>       }
>  
>       if (i915_sw_fence_done(not)) {
> -             pr_err("No timeout fence signaled!\n");
> +             drm_err(&i915->drm, "No timeout fence signaled!\n");
>               goto err;
>       }
>  
> @@ -728,7 +752,7 @@ static int test_dma_fence(void *arg)
>       dma_fence_signal(dma);
>  
>       if (!i915_sw_fence_done(timeout) || !i915_sw_fence_done(not)) {
> -             pr_err("Fences unsignaled\n");
> +             drm_err(&i915->drm, "Fences unsignaled\n");
>               goto err;
>       }
>  
> @@ -750,6 +774,9 @@ static int test_dma_fence(void *arg)
>  
>  int i915_sw_fence_mock_selftests(void)
>  {
> +     struct drm_i915_private *i915;
> +     int err;
> +
>       static const struct i915_subtest tests[] = {
>               SUBTEST(test_self),
>               SUBTEST(test_dag),
> @@ -763,5 +790,12 @@ int i915_sw_fence_mock_selftests(void)
>               SUBTEST(test_dma_fence),
>       };
>  
> -     return i915_subtests(tests, NULL);
> +     i915 = mock_gem_device();
> +     if (IS_ERR(i915))
> +             return PTR_ERR(i915);
> +
> +     err = i915_subtests(tests, i915);
> +     mock_destroy_device(i915);
> +
> +     return err;
>  }
> diff --git a/drivers/gpu/drm/i915/selftests/i915_syncmap.c 
> b/drivers/gpu/drm/i915/selftests/i915_syncmap.c
> index 88fa845e9f4a..30637c32c319 100644
> --- a/drivers/gpu/drm/i915/selftests/i915_syncmap.c
> +++ b/drivers/gpu/drm/i915/selftests/i915_syncmap.c
> @@ -23,7 +23,11 @@
>   */
>  
>  #include "../i915_selftest.h"
> +#include "../i915_drv.h"
>  #include "i915_random.h"
> +#include "mock_gem_device.h"
> +
> +#include <drm/drm_print.h>
>  
>  static char *
>  __sync_print(struct i915_syncmap *p,
> @@ -98,30 +102,32 @@ i915_syncmap_print_to_buf(struct i915_syncmap *p, char 
> *buf, unsigned long sz)
>       return true;
>  }
>  
> -static int check_syncmap_free(struct i915_syncmap **sync)
> +static int check_syncmap_free(struct i915_syncmap **sync,
> +                           struct drm_i915_private *i915)
>  {
>       i915_syncmap_free(sync);
>       if (*sync) {
> -             pr_err("sync not cleared after free\n");
> +             drm_err(&i915->drm, "sync not cleared after free\n");
>               return -EINVAL;
>       }
>  
>       return 0;
>  }
>  
> -static int dump_syncmap(struct i915_syncmap *sync, int err)
> +static int dump_syncmap(struct i915_syncmap *sync, int err,
> +                     struct drm_i915_private *i915)
>  {
>       char *buf;
>  
>       if (!err)
> -             return check_syncmap_free(&sync);
> +             return check_syncmap_free(&sync, i915);
>  
>       buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
>       if (!buf)
>               goto skip;
>  
>       if (i915_syncmap_print_to_buf(sync, buf, PAGE_SIZE))
> -             pr_err("%s", buf);
> +             drm_err(&i915->drm, "%s", buf);
>  
>       kfree(buf);
>  
> @@ -132,6 +138,7 @@ static int dump_syncmap(struct i915_syncmap *sync, int 
> err)
>  
>  static int igt_syncmap_init(void *arg)
>  {
> +     struct drm_i915_private *i915 = arg;
>       struct i915_syncmap *sync = (void *)~0ul;
>  
>       /*
> @@ -140,27 +147,29 @@ static int igt_syncmap_init(void *arg)
>        */
>  
>       i915_syncmap_init(&sync);
> -     return check_syncmap_free(&sync);
> +     return check_syncmap_free(&sync, i915);
>  }
>  
> -static int check_seqno(struct i915_syncmap *leaf, unsigned int idx, u32 
> seqno)
> +static int check_seqno(struct i915_syncmap *leaf, unsigned int idx, u32 
> seqno,
> +                    struct drm_i915_private *i915)
>  {
>       if (leaf->height) {
> -             pr_err("%s: not a leaf, height is %d\n",
> -                    __func__, leaf->height);
> +             drm_err(&i915->drm, "%s: not a leaf, height is %d\n",
> +                     __func__, leaf->height);
>               return -EINVAL;
>       }
>  
>       if (__sync_seqno(leaf)[idx] != seqno) {
> -             pr_err("%s: seqno[%d], found %x, expected %x\n",
> -                    __func__, idx, __sync_seqno(leaf)[idx], seqno);
> +             drm_err(&i915->drm, "%s: seqno[%d], found %x, expected %x\n",
> +                     __func__, idx, __sync_seqno(leaf)[idx], seqno);
>               return -EINVAL;
>       }
>  
>       return 0;
>  }
>  
> -static int check_one(struct i915_syncmap **sync, u64 context, u32 seqno)
> +static int check_one(struct i915_syncmap **sync, u64 context, u32 seqno,
> +                  struct drm_i915_private *i915)
>  {
>       int err;
>  
> @@ -169,30 +178,33 @@ static int check_one(struct i915_syncmap **sync, u64 
> context, u32 seqno)
>               return err;
>  
>       if ((*sync)->height) {
> -             pr_err("Inserting first context=%llx did not return leaf 
> (height=%d, prefix=%llx\n",
> -                    context, (*sync)->height, (*sync)->prefix);
> +             drm_err(&i915->drm,
> +                     "Inserting first context=%llx did not return leaf 
> (height=%d, prefix=%llx\n",
> +                     context, (*sync)->height, (*sync)->prefix);
>               return -EINVAL;
>       }
>  
>       if ((*sync)->parent) {
> -             pr_err("Inserting first context=%llx created branches!\n",
> -                    context);
> +             drm_err(&i915->drm,
> +                     "Inserting first context=%llx created branches!\n", 
> context);
>               return -EINVAL;
>       }
>  
>       if (hweight32((*sync)->bitmap) != 1) {
> -             pr_err("First bitmap does not contain a single entry, found %x 
> (count=%d)!\n",
> -                    (*sync)->bitmap, hweight32((*sync)->bitmap));
> +             drm_err(&i915->drm,
> +                     "First bitmap does not contain a single entry, found %x 
> (count=%d)!\n",
> +                     (*sync)->bitmap, hweight32((*sync)->bitmap));
>               return -EINVAL;
>       }
>  
> -     err = check_seqno((*sync), ilog2((*sync)->bitmap), seqno);
> +     err = check_seqno((*sync), ilog2((*sync)->bitmap), seqno, i915);
>       if (err)
>               return err;
>  
>       if (!i915_syncmap_is_later(sync, context, seqno)) {
> -             pr_err("Lookup of first context=%llx/seqno=%x failed!\n",
> -                    context, seqno);
> +             drm_err(&i915->drm,
> +                     "Lookup of first context=%llx/seqno=%x failed!\n",
> +                     context, seqno);
>               return -EINVAL;
>       }
>  
> @@ -201,6 +213,7 @@ static int check_one(struct i915_syncmap **sync, u64 
> context, u32 seqno)
>  
>  static int igt_syncmap_one(void *arg)
>  {
> +     struct drm_i915_private *i915 = arg;
>       I915_RND_STATE(prng);
>       IGT_TIMEOUT(end_time);
>       struct i915_syncmap *sync;
> @@ -217,25 +230,26 @@ static int igt_syncmap_one(void *arg)
>               u64 context = i915_prandom_u64_state(&prng);
>               unsigned long loop;
>  
> -             err = check_syncmap_free(&sync);
> +             err = check_syncmap_free(&sync, i915);
>               if (err)
>                       goto out;
>  
>               for (loop = 0; loop <= max; loop++) {
>                       err = check_one(&sync, context,
> -                                     prandom_u32_state(&prng));
> +                                     prandom_u32_state(&prng), i915);
>                       if (err)
>                               goto out;
>               }
>               max++;
>       } while (!__igt_timeout(end_time, NULL));
> -     pr_debug("%s: Completed %lu single insertions\n",
> -              __func__, max * (max - 1) / 2);
> +     drm_dbg(&i915->drm, "%s: Completed %lu single insertions\n",
> +             __func__, max * (max - 1) / 2);
>  out:
> -     return dump_syncmap(sync, err);
> +     return dump_syncmap(sync, err, i915);
>  }
>  
> -static int check_leaf(struct i915_syncmap **sync, u64 context, u32 seqno)
> +static int check_leaf(struct i915_syncmap **sync, u64 context, u32 seqno,
> +                   struct drm_i915_private *i915)
>  {
>       int err;
>  
> @@ -244,24 +258,27 @@ static int check_leaf(struct i915_syncmap **sync, u64 
> context, u32 seqno)
>               return err;
>  
>       if ((*sync)->height) {
> -             pr_err("Inserting context=%llx did not return leaf (height=%d, 
> prefix=%llx\n",
> -                    context, (*sync)->height, (*sync)->prefix);
> +             drm_err(&i915->drm,
> +                     "Inserting context=%llx did not return leaf (height=%d, 
> prefix=%llx\n",
> +                     context, (*sync)->height, (*sync)->prefix);
>               return -EINVAL;
>       }
>  
>       if (hweight32((*sync)->bitmap) != 1) {
> -             pr_err("First entry into leaf (context=%llx) does not contain a 
> single entry, found %x (count=%d)!\n",
> -                    context, (*sync)->bitmap, hweight32((*sync)->bitmap));
> +             drm_err(&i915->drm,
> +                     "First entry into leaf (context=%llx) does not contain 
> a single entry, found %x (count=%d)!\n",
> +                     context, (*sync)->bitmap, hweight32((*sync)->bitmap));
>               return -EINVAL;
>       }
>  
> -     err = check_seqno((*sync), ilog2((*sync)->bitmap), seqno);
> +     err = check_seqno((*sync), ilog2((*sync)->bitmap), seqno, i915);
>       if (err)
>               return err;
>  
>       if (!i915_syncmap_is_later(sync, context, seqno)) {
> -             pr_err("Lookup of first entry context=%llx/seqno=%x failed!\n",
> -                    context, seqno);
> +             drm_err(&i915->drm,
> +                     "Lookup of first entry context=%llx/seqno=%x failed!\n",
> +                     context, seqno);
>               return -EINVAL;
>       }
>  
> @@ -270,6 +287,7 @@ static int check_leaf(struct i915_syncmap **sync, u64 
> context, u32 seqno)
>  
>  static int igt_syncmap_join_above(void *arg)
>  {
> +     struct drm_i915_private *i915 = arg;
>       struct i915_syncmap *sync;
>       unsigned int pass, order;
>       int err;
> @@ -297,7 +315,7 @@ static int igt_syncmap_join_above(void *arg)
>                       u64 context = BIT_ULL(order);
>                       struct i915_syncmap *join;
>  
> -                     err = check_leaf(&sync, context, 0);
> +                     err = check_leaf(&sync, context, 0, i915);
>                       if (err)
>                               goto out;
>  
> @@ -306,31 +324,33 @@ static int igt_syncmap_join_above(void *arg)
>                               continue;
>  
>                       if (!join->height) {
> -                             pr_err("Parent with no height!\n");
> +                             drm_err(&i915->drm, "Parent with no height!\n");
>                               err = -EINVAL;
>                               goto out;
>                       }
>  
>                       if (hweight32(join->bitmap) != 2) {
> -                             pr_err("Join does not have 2 children: %x 
> (%d)\n",
> -                                    join->bitmap, hweight32(join->bitmap));
> +                             drm_err(&i915->drm,
> +                                     "Join does not have 2 children: %x 
> (%d)\n",
> +                                     join->bitmap, hweight32(join->bitmap));
>                               err = -EINVAL;
>                               goto out;
>                       }
>  
>                       if (__sync_child(join)[__sync_branch_idx(join, 
> context)] != sync) {
> -                             pr_err("Leaf misplaced in parent!\n");
> +                             drm_err(&i915->drm, "Leaf misplaced in 
> parent!\n");
>                               err = -EINVAL;
>                               goto out;
>                       }
>               }
>       }
>  out:
> -     return dump_syncmap(sync, err);
> +     return dump_syncmap(sync, err, i915);
>  }
>  
>  static int igt_syncmap_join_below(void *arg)
>  {
> +     struct drm_i915_private *i915 = arg;
>       struct i915_syncmap *sync;
>       unsigned int step, order, idx;
>       int err = -ENODEV;
> @@ -350,8 +370,9 @@ static int igt_syncmap_join_below(void *arg)
>                               goto out;
>  
>                       if (sync->height) {
> -                             pr_err("Inserting context=%llx (order=%d, 
> step=%d) did not return leaf (height=%d, prefix=%llx\n",
> -                                    context, order, step, sync->height, 
> sync->prefix);
> +                             drm_err(&i915->drm,
> +                                     "Inserting context=%llx (order=%d, 
> step=%d) did not return leaf (height=%d, prefix=%llx\n",
> +                                     context, order, step, sync->height, 
> sync->prefix);
>                               err = -EINVAL;
>                               goto out;
>                       }
> @@ -363,16 +384,18 @@ static int igt_syncmap_join_below(void *arg)
>                       u64 context = step * BIT_ULL(order);
>  
>                       if (!i915_syncmap_is_later(&sync, context, 0)) {
> -                             pr_err("1: context %llx (order=%d, step=%d) not 
> found\n",
> -                                    context, order, step);
> +                             drm_err(&i915->drm,
> +                                     "1: context %llx (order=%d, step=%d) 
> not found\n",
> +                                     context, order, step);
>                               err = -EINVAL;
>                               goto out;
>                       }
>  
>                       for (idx = 1; idx < KSYNCMAP; idx++) {
>                               if (i915_syncmap_is_later(&sync, context + idx, 
> 0)) {
> -                                     pr_err("1: context %llx (order=%d, 
> step=%d) should not exist\n",
> -                                            context + idx, order, step);
> +                                     drm_err(&i915->drm,
> +                                             "1: context %llx (order=%d, 
> step=%d) should not exist\n",
> +                                             context + idx, order, step);
>                                       err = -EINVAL;
>                                       goto out;
>                               }
> @@ -385,8 +408,9 @@ static int igt_syncmap_join_below(void *arg)
>                       u64 context = step * BIT_ULL(order);
>  
>                       if (!i915_syncmap_is_later(&sync, context, 0)) {
> -                             pr_err("2: context %llx (order=%d, step=%d) not 
> found\n",
> -                                    context, order, step);
> +                             drm_err(&i915->drm,
> +                                     "2: context %llx (order=%d, step=%d) 
> not found\n",
> +                                     context, order, step);
>                               err = -EINVAL;
>                               goto out;
>                       }
> @@ -394,11 +418,12 @@ static int igt_syncmap_join_below(void *arg)
>       }
>  
>  out:
> -     return dump_syncmap(sync, err);
> +     return dump_syncmap(sync, err, i915);
>  }
>  
>  static int igt_syncmap_neighbours(void *arg)
>  {
> +     struct drm_i915_private *i915 = arg;
>       I915_RND_STATE(prng);
>       IGT_TIMEOUT(end_time);
>       struct i915_syncmap *sync;
> @@ -423,28 +448,31 @@ static int igt_syncmap_neighbours(void *arg)
>                               goto out;
>  
>                       if (sync->height) {
> -                             pr_err("Inserting context=%llx did not return 
> leaf (height=%d, prefix=%llx\n",
> -                                    context, sync->height, sync->prefix);
> +                             drm_err(&i915->drm,
> +                                     "Inserting context=%llx did not return 
> leaf (height=%d, prefix=%llx\n",
> +                                     context, sync->height, sync->prefix);
>                               err = -EINVAL;
>                               goto out;
>                       }
>  
>                       if (sync->bitmap != BIT(idx + 1) - 1) {
> -                             pr_err("Inserting neighbouring 
> context=0x%llx+%d, did not fit into the same leaf bitmap=%x (%d), expected 
> %lx (%d)\n",
> -                                    context, idx,
> -                                    sync->bitmap, hweight32(sync->bitmap),
> -                                    BIT(idx + 1) - 1, idx + 1);
> +                             drm_err(&i915->drm,
> +                                     "Inserting neighbouring 
> context=0x%llx+%d, did not fit into the same leaf bitmap=%x (%d), expected 
> %lx (%d)\n",
> +                                     context, idx,
> +                                     sync->bitmap, hweight32(sync->bitmap),
> +                                     BIT(idx + 1) - 1, idx + 1);
>                               err = -EINVAL;
>                               goto out;
>                       }
>               }
>       } while (!__igt_timeout(end_time, NULL));
>  out:
> -     return dump_syncmap(sync, err);
> +     return dump_syncmap(sync, err, i915);
>  }
>  
>  static int igt_syncmap_compact(void *arg)
>  {
> +     struct drm_i915_private *i915 = arg;
>       struct i915_syncmap *sync;
>       unsigned int idx, order;
>       int err = -ENODEV;
> @@ -460,7 +488,7 @@ static int igt_syncmap_compact(void *arg)
>        * leaf holding the single id.
>        */
>       for (order = SHIFT; order < 64; order += SHIFT) {
> -             err = check_syncmap_free(&sync);
> +             err = check_syncmap_free(&sync, i915);
>               if (err)
>                       goto out;
>  
> @@ -473,9 +501,10 @@ static int igt_syncmap_compact(void *arg)
>                               goto out;
>  
>                       if (sync->height) {
> -                             pr_err("Inserting context=%llx (order=%d, 
> idx=%d) did not return leaf (height=%d, prefix=%llx\n",
> -                                    context, order, idx,
> -                                    sync->height, sync->prefix);
> +                             drm_err(&i915->drm,
> +                                     "Inserting context=%llx (order=%d, 
> idx=%d) did not return leaf (height=%d, prefix=%llx\n",
> +                                     context, order, idx,
> +                                     sync->height, sync->prefix);
>                               err = -EINVAL;
>                               goto out;
>                       }
> @@ -483,22 +512,25 @@ static int igt_syncmap_compact(void *arg)
>  
>               sync = sync->parent;
>               if (sync->parent) {
> -                     pr_err("Parent (join) of last leaf was not the 
> sync!\n");
> +                     drm_err(&i915->drm,
> +                             "Parent (join) of last leaf was not the 
> sync!\n");
>                       err = -EINVAL;
>                       goto out;
>               }
>  
>               if (sync->height != order) {
> -                     pr_err("Join does not have the expected height, found 
> %d, expected %d\n",
> -                            sync->height, order);
> +                     drm_err(&i915->drm,
> +                             "Join does not have the expected height, found 
> %d, expected %d\n",
> +                             sync->height, order);
>                       err = -EINVAL;
>                       goto out;
>               }
>  
>               if (sync->bitmap != BIT(KSYNCMAP) - 1) {
> -                     pr_err("Join is not full!, found %x (%d) expected %lx 
> (%d)\n",
> -                            sync->bitmap, hweight32(sync->bitmap),
> -                            BIT(KSYNCMAP) - 1, KSYNCMAP);
> +                     drm_err(&i915->drm,
> +                             "Join is not full!, found %x (%d) expected %lx 
> (%d)\n",
> +                             sync->bitmap, hweight32(sync->bitmap),
> +                             BIT(KSYNCMAP) - 1, KSYNCMAP);
>                       err = -EINVAL;
>                       goto out;
>               }
> @@ -508,39 +540,42 @@ static int igt_syncmap_compact(void *arg)
>                       struct i915_syncmap *leaf = __sync_child(sync)[idx];
>  
>                       if (leaf->height) {
> -                             pr_err("Child %d is a not leaf!\n", idx);
> +                             drm_err(&i915->drm, "Child %d is a not 
> leaf!\n", idx);
>                               err = -EINVAL;
>                               goto out;
>                       }
>  
>                       if (leaf->parent != sync) {
> -                             pr_err("Child %d is not attached to us!\n",
> -                                    idx);
> +                             drm_err(&i915->drm,
> +                                     "Child %d is not attached to us!\n", 
> idx);
>                               err = -EINVAL;
>                               goto out;
>                       }
>  
>                       if (!is_power_of_2(leaf->bitmap)) {
> -                             pr_err("Child %d holds more than one id, found 
> %x (%d)\n",
> -                                    idx, leaf->bitmap, 
> hweight32(leaf->bitmap));
> +                             drm_err(&i915->drm,
> +                                     "Child %d holds more than one id, found 
> %x (%d)\n",
> +                                     idx, leaf->bitmap, 
> hweight32(leaf->bitmap));
>                               err = -EINVAL;
>                               goto out;
>                       }
>  
>                       if (leaf->bitmap != BIT(idx)) {
> -                             pr_err("Child %d has wrong seqno idx, found %d, 
> expected %d\n",
> -                                    idx, ilog2(leaf->bitmap), idx);
> +                             drm_err(&i915->drm,
> +                                     "Child %d has wrong seqno idx, found 
> %d, expected %d\n",
> +                                     idx, ilog2(leaf->bitmap), idx);
>                               err = -EINVAL;
>                               goto out;
>                       }
>               }
>       }
>  out:
> -     return dump_syncmap(sync, err);
> +     return dump_syncmap(sync, err, i915);
>  }
>  
>  static int igt_syncmap_random(void *arg)
>  {
> +     struct drm_i915_private *i915 = arg;
>       I915_RND_STATE(prng);
>       IGT_TIMEOUT(end_time);
>       struct i915_syncmap *sync;
> @@ -582,8 +617,9 @@ static int igt_syncmap_random(void *arg)
>                       u64 context = i915_prandom_u64_state(&ctx);
>  
>                       if (i915_syncmap_is_later(&sync, context, seqno) != 
> expect) {
> -                             pr_err("context=%llu, last=%u this=%u did not 
> match expectation (%d)\n",
> -                                    context, last_seqno, seqno, expect);
> +                             drm_err(&i915->drm,
> +                                     "context=%llu, last=%u this=%u did not 
> match expectation (%d)\n",
> +                                     context, last_seqno, seqno, expect);
>                               err = -EINVAL;
>                               goto out;
>                       }
> @@ -595,13 +631,17 @@ static int igt_syncmap_random(void *arg)
>  
>               phase++;
>       } while (!__igt_timeout(end_time, NULL));
> -     pr_debug("Completed %lu passes, each of %lu contexts\n", phase, count);
> +     drm_dbg(&i915->drm, "Completed %lu passes, each of %lu contexts\n",
> +             phase, count);
>  out:
> -     return dump_syncmap(sync, err);
> +     return dump_syncmap(sync, err, i915);
>  }
>  
>  int i915_syncmap_mock_selftests(void)
>  {
> +     struct drm_i915_private *i915;
> +     int err;
> +
>       static const struct i915_subtest tests[] = {
>               SUBTEST(igt_syncmap_init),
>               SUBTEST(igt_syncmap_one),
> @@ -612,5 +652,12 @@ int i915_syncmap_mock_selftests(void)
>               SUBTEST(igt_syncmap_random),
>       };
>  
> -     return i915_subtests(tests, NULL);
> +     i915 = mock_gem_device();
> +     if (IS_ERR(i915))
> +             return PTR_ERR(i915);
> +
> +     err = i915_subtests(tests, i915);
> +     mock_destroy_device(i915);
> +
> +     return err;
>  }
> diff --git a/drivers/gpu/drm/i915/selftests/scatterlist.c 
> b/drivers/gpu/drm/i915/selftests/scatterlist.c
> index 7e59591bbed6..3228bdcea1f2 100644
> --- a/drivers/gpu/drm/i915/selftests/scatterlist.c
> +++ b/drivers/gpu/drm/i915/selftests/scatterlist.c
> @@ -24,8 +24,12 @@
>  #include <linux/prime_numbers.h>
>  #include <linux/prandom.h>
>  
> +#include <drm/drm_print.h>
> +
> +#include "i915_drv.h"
>  #include "i915_selftest.h"
>  #include "i915_utils.h"
> +#include "mock_gem_device.h"
>  
>  #define PFN_BIAS (1 << 10)
>  
> @@ -39,6 +43,7 @@ typedef unsigned int (*npages_fn_t)(unsigned long n,
>                                   struct rnd_state *rnd);
>  
>  static noinline int expect_pfn_sg(struct pfn_table *pt,
> +                               struct drm_i915_private *i915,
>                                 npages_fn_t npages_fn,
>                                 struct rnd_state *rnd,
>                                 const char *who,
> @@ -53,14 +58,16 @@ static noinline int expect_pfn_sg(struct pfn_table *pt,
>               unsigned int npages = npages_fn(n, pt->st.nents, rnd);
>  
>               if (page_to_pfn(page) != pfn) {
> -                     pr_err("%s: %s left pages out of order, expected pfn 
> %lu, found pfn %lu (using for_each_sg)\n",
> -                            __func__, who, pfn, page_to_pfn(page));
> +                     drm_err(&i915->drm,
> +                             "%s: %s left pages out of order, expected pfn 
> %lu, found pfn %lu (using for_each_sg)\n",
> +                             __func__, who, pfn, page_to_pfn(page));
>                       return -EINVAL;
>               }
>  
>               if (sg->length != npages * PAGE_SIZE) {
> -                     pr_err("%s: %s copied wrong sg length, expected size 
> %lu, found %u (using for_each_sg)\n",
> -                            __func__, who, npages * PAGE_SIZE, sg->length);
> +                     drm_err(&i915->drm,
> +                             "%s: %s copied wrong sg length, expected size 
> %lu, found %u (using for_each_sg)\n",
> +                             __func__, who, npages * PAGE_SIZE, sg->length);
>                       return -EINVAL;
>               }
>  
> @@ -70,8 +77,9 @@ static noinline int expect_pfn_sg(struct pfn_table *pt,
>               pfn += npages;
>       }
>       if (pfn != pt->end) {
> -             pr_err("%s: %s finished on wrong pfn, expected %lu, found 
> %lu\n",
> -                    __func__, who, pt->end, pfn);
> +             drm_err(&i915->drm,
> +                     "%s: %s finished on wrong pfn, expected %lu, found 
> %lu\n",
> +                     __func__, who, pt->end, pfn);
>               return -EINVAL;
>       }
>  
> @@ -79,6 +87,7 @@ static noinline int expect_pfn_sg(struct pfn_table *pt,
>  }
>  
>  static noinline int expect_pfn_sg_page_iter(struct pfn_table *pt,
> +                                         struct drm_i915_private *i915,
>                                           const char *who,
>                                           unsigned long timeout)
>  {
> @@ -90,8 +99,9 @@ static noinline int expect_pfn_sg_page_iter(struct 
> pfn_table *pt,
>               struct page *page = sg_page_iter_page(&sgiter);
>  
>               if (page != pfn_to_page(pfn)) {
> -                     pr_err("%s: %s left pages out of order, expected pfn 
> %lu, found pfn %lu (using for_each_sg_page)\n",
> -                            __func__, who, pfn, page_to_pfn(page));
> +                     drm_err(&i915->drm,
> +                             "%s: %s left pages out of order, expected pfn 
> %lu, found pfn %lu (using for_each_sg_page)\n",
> +                             __func__, who, pfn, page_to_pfn(page));
>                       return -EINVAL;
>               }
>  
> @@ -101,8 +111,9 @@ static noinline int expect_pfn_sg_page_iter(struct 
> pfn_table *pt,
>               pfn++;
>       }
>       if (pfn != pt->end) {
> -             pr_err("%s: %s finished on wrong pfn, expected %lu, found 
> %lu\n",
> -                    __func__, who, pt->end, pfn);
> +             drm_err(&i915->drm,
> +                     "%s: %s finished on wrong pfn, expected %lu, found 
> %lu\n",
> +                     __func__, who, pt->end, pfn);
>               return -EINVAL;
>       }
>  
> @@ -110,6 +121,7 @@ static noinline int expect_pfn_sg_page_iter(struct 
> pfn_table *pt,
>  }
>  
>  static noinline int expect_pfn_sgtiter(struct pfn_table *pt,
> +                                    struct drm_i915_private *i915,
>                                      const char *who,
>                                      unsigned long timeout)
>  {
> @@ -120,8 +132,9 @@ static noinline int expect_pfn_sgtiter(struct pfn_table 
> *pt,
>       pfn = pt->start;
>       for_each_sgt_page(page, sgt, &pt->st) {
>               if (page != pfn_to_page(pfn)) {
> -                     pr_err("%s: %s left pages out of order, expected pfn 
> %lu, found pfn %lu (using for_each_sgt_page)\n",
> -                            __func__, who, pfn, page_to_pfn(page));
> +                     drm_err(&i915->drm,
> +                             "%s: %s left pages out of order, expected pfn 
> %lu, found pfn %lu (using for_each_sgt_page)\n",
> +                             __func__, who, pfn, page_to_pfn(page));
>                       return -EINVAL;
>               }
>  
> @@ -131,8 +144,9 @@ static noinline int expect_pfn_sgtiter(struct pfn_table 
> *pt,
>               pfn++;
>       }
>       if (pfn != pt->end) {
> -             pr_err("%s: %s finished on wrong pfn, expected %lu, found 
> %lu\n",
> -                    __func__, who, pt->end, pfn);
> +             drm_err(&i915->drm,
> +                     "%s: %s finished on wrong pfn, expected %lu, found 
> %lu\n",
> +                     __func__, who, pt->end, pfn);
>               return -EINVAL;
>       }
>  
> @@ -140,6 +154,7 @@ static noinline int expect_pfn_sgtiter(struct pfn_table 
> *pt,
>  }
>  
>  static int expect_pfn_sgtable(struct pfn_table *pt,
> +                           struct drm_i915_private *i915,
>                             npages_fn_t npages_fn,
>                             struct rnd_state *rnd,
>                             const char *who,
> @@ -147,15 +162,15 @@ static int expect_pfn_sgtable(struct pfn_table *pt,
>  {
>       int err;
>  
> -     err = expect_pfn_sg(pt, npages_fn, rnd, who, timeout);
> +     err = expect_pfn_sg(pt, i915, npages_fn, rnd, who, timeout);
>       if (err)
>               return err;
>  
> -     err = expect_pfn_sg_page_iter(pt, who, timeout);
> +     err = expect_pfn_sg_page_iter(pt, i915, who, timeout);
>       if (err)
>               return err;
>  
> -     err = expect_pfn_sgtiter(pt, who, timeout);
> +     err = expect_pfn_sgtiter(pt, i915, who, timeout);
>       if (err)
>               return err;
>  
> @@ -275,8 +290,9 @@ static const npages_fn_t npages_funcs[] = {
>       NULL,
>  };
>  
> -static int igt_sg_alloc(void *ignored)
> +static int igt_sg_alloc(void *arg)
>  {
> +     struct drm_i915_private *i915 = arg;
>       IGT_TIMEOUT(end_time);
>       const unsigned long max_order = 20; /* approximating a 4GiB object */
>       struct rnd_state prng;
> @@ -305,7 +321,7 @@ static int igt_sg_alloc(void *ignored)
>  
>                               prandom_seed_state(&prng,
>                                                  i915_selftest.random_seed);
> -                             err = expect_pfn_sgtable(&pt, *npages, &prng,
> +                             err = expect_pfn_sgtable(&pt, i915, *npages, 
> &prng,
>                                                        "sg_alloc_table",
>                                                        end_time);
>                               sg_free_table(&pt.st);
> @@ -322,8 +338,9 @@ static int igt_sg_alloc(void *ignored)
>       return 0;
>  }
>  
> -static int igt_sg_trim(void *ignored)
> +static int igt_sg_trim(void *arg)
>  {
> +     struct drm_i915_private *i915 = arg;
>       IGT_TIMEOUT(end_time);
>       const unsigned long max = PAGE_SIZE; /* not prime! */
>       struct pfn_table pt;
> @@ -348,13 +365,14 @@ static int igt_sg_trim(void *ignored)
>                       if (i915_sg_trim(&pt.st)) {
>                               if (pt.st.orig_nents != prime ||
>                                   pt.st.nents != prime) {
> -                                     pr_err("i915_sg_trim failed (nents %u, 
> orig_nents %u), expected %lu\n",
> -                                            pt.st.nents, pt.st.orig_nents, 
> prime);
> +                                     drm_err(&i915->drm,
> +                                             "i915_sg_trim failed (nents %u, 
> orig_nents %u), expected %lu\n",
> +                                             pt.st.nents, pt.st.orig_nents, 
> prime);
>                                       err = -EINVAL;
>                               } else {
>                                       prandom_seed_state(&prng,
>                                                          
> i915_selftest.random_seed);
> -                                     err = expect_pfn_sgtable(&pt,
> +                                     err = expect_pfn_sgtable(&pt, i915,
>                                                                *npages, &prng,
>                                                                "i915_sg_trim",
>                                                                end_time);
> @@ -379,6 +397,15 @@ int scatterlist_mock_selftests(void)
>               SUBTEST(igt_sg_alloc),
>               SUBTEST(igt_sg_trim),
>       };
> +     struct drm_i915_private *i915;
> +     int err;
> +
> +     i915 = mock_gem_device();
> +     if (!i915)
> +             return -ENOMEM;
> +
> +     err = i915_subtests(tests, i915);
> +     mock_destroy_device(i915);
>  
> -     return i915_subtests(tests, NULL);
> +     return err;
>  }

-- 
Jani Nikula, Intel

Reply via email to