[igt-dev] [PATCH i-g-t] i915/gem_exec_schedule: Rebuild signal handler in child

Joonas Lahtinen joonas.lahtinen at linux.intel.com
Fri Feb 8 08:59:53 UTC 2019


Quoting Chris Wilson (2019-02-07 23:03:08)
> Make sure that the SIGARLM handler is captured so that we don't
> accidentally shoot ourselves in the foot instead of merely waking up the
> execbuf.
> 
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

Warming up the context ahead of time is reasonable for super low SKUs.

But the SIGALRM handler should be inherted, so that's a red herring.

With the commit message and title adjusted for warming up the context:

Reviewed-by: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>

Regards, Joonas

> ---
>  tests/i915/gem_exec_schedule.c | 19 +++++++++++++------
>  1 file changed, 13 insertions(+), 6 deletions(-)
> 
> diff --git a/tests/i915/gem_exec_schedule.c b/tests/i915/gem_exec_schedule.c
> index 0462ce84f..d11e57363 100644
> --- a/tests/i915/gem_exec_schedule.c
> +++ b/tests/i915/gem_exec_schedule.c
> @@ -1087,6 +1087,7 @@ static void test_pi_ringfull(int fd, unsigned int engine)
>         unsigned int last, count;
>         struct itimerval itv;
>         IGT_CORK_HANDLE(c);
> +       uint32_t vip;
>         bool *result;
>  
>         result = mmap(NULL, 4096, PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0);
> @@ -1101,9 +1102,16 @@ static void test_pi_ringfull(int fd, unsigned int engine)
>         execbuf.buffers_ptr = to_user_pointer(&obj[1]);
>         execbuf.buffer_count = 1;
>         execbuf.flags = engine;
> +
> +       /* Warm up both (hi/lo) contexts */
>         execbuf.rsvd1 = gem_context_create(fd);
> -       gem_context_set_priority(fd, execbuf.rsvd1, MIN_PRIO);
> +       gem_context_set_priority(fd, execbuf.rsvd1, MAX_PRIO);
> +       gem_execbuf(fd, &execbuf);
> +       gem_sync(fd, obj[1].handle);
> +       vip = execbuf.rsvd1;
>  
> +       execbuf.rsvd1 = gem_context_create(fd);
> +       gem_context_set_priority(fd, execbuf.rsvd1, MIN_PRIO);
>         gem_execbuf(fd, &execbuf);
>         gem_sync(fd, obj[1].handle);
>  
> @@ -1147,14 +1155,12 @@ static void test_pi_ringfull(int fd, unsigned int engine)
>         igt_fork(child, 1) {
>                 result[0] = true;
>  
> -               igt_debug("Creating HP context\n");
> -               execbuf.rsvd1 = gem_context_create(fd);
> -               gem_context_set_priority(fd, execbuf.rsvd1, MAX_PRIO);
> -
> +               igt_debug("Waking parent\n");
>                 kill(getppid(), SIGALRM);
>                 sched_yield();
>                 result[1] = true;
>  
> +               sigaction(SIGALRM, &sa, NULL);
>                 itv.it_value.tv_sec = 0;
>                 itv.it_value.tv_usec = 10000;
>                 setitimer(ITIMER_REAL, &itv, NULL);
> @@ -1163,8 +1169,8 @@ static void test_pi_ringfull(int fd, unsigned int engine)
>                  * able to add ourselves to *our* ring without interruption.
>                  */
>                 igt_debug("HP child executing\n");
> +               execbuf.rsvd1 = vip;
>                 result[2] = __execbuf(fd, &execbuf) == 0;
> -               gem_context_destroy(fd, execbuf.rsvd1);
>         }
>  
>         /* Relinquish CPU just to allow child to create a context */
> @@ -1186,6 +1192,7 @@ static void test_pi_ringfull(int fd, unsigned int engine)
>         igt_waitchildren();
>  
>         gem_context_destroy(fd, execbuf.rsvd1);
> +       gem_context_destroy(fd, vip);
>         gem_close(fd, obj[1].handle);
>         gem_close(fd, obj[0].handle);
>         munmap(result, 4096);
> -- 
> 2.20.1
> 
> _______________________________________________
> igt-dev mailing list
> igt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/igt-dev


More information about the igt-dev mailing list