On Mon, 2025-07-07 at 11:46 -0300, Maíra Canal wrote:
> Add a test to submit a single job against a scheduler with the
> timeout
> configured and verify that if the job is still running, the timeout
> handler will skip the reset and allow the job to complete.
> 
> Signed-off-by: Maíra Canal <[email protected]>
> Reviewed-by: Tvrtko Ursulin <[email protected]>

Reviewed-by: Philipp Stanner <[email protected]>


> ---
>  drivers/gpu/drm/scheduler/tests/mock_scheduler.c |  5 +++
>  drivers/gpu/drm/scheduler/tests/sched_tests.h    |  1 +
>  drivers/gpu/drm/scheduler/tests/tests_basic.c    | 47
> ++++++++++++++++++++++++
>  3 files changed, 53 insertions(+)
> 
> diff --git a/drivers/gpu/drm/scheduler/tests/mock_scheduler.c
> b/drivers/gpu/drm/scheduler/tests/mock_scheduler.c
> index
> 998162202972eb5919dfff4c8784ecc22c00ec9d..b3b33f85b7ae30c8e6bba97866a
> 74978b0a96fa7 100644
> --- a/drivers/gpu/drm/scheduler/tests/mock_scheduler.c
> +++ b/drivers/gpu/drm/scheduler/tests/mock_scheduler.c
> @@ -231,6 +231,11 @@ mock_sched_timedout_job(struct drm_sched_job
> *sched_job)
>       drm_sched_job_cleanup(sched_job);
>       /* Mock job itself is freed by the kunit framework. */
>  
> +     if (job->flags & DRM_MOCK_SCHED_JOB_DONT_RESET) {
> +             job->flags &= ~DRM_MOCK_SCHED_JOB_DONT_RESET;
> +             return DRM_GPU_SCHED_STAT_NO_HANG;
> +     }
> +
>       return DRM_GPU_SCHED_STAT_RESET;
>  }
>  
> diff --git a/drivers/gpu/drm/scheduler/tests/sched_tests.h
> b/drivers/gpu/drm/scheduler/tests/sched_tests.h
> index
> fbba38137f0c324cf2472fe5b3a8a78ec016e829..4adf961e1930203fe94241a8a0a
> e5f7817874a39 100644
> --- a/drivers/gpu/drm/scheduler/tests/sched_tests.h
> +++ b/drivers/gpu/drm/scheduler/tests/sched_tests.h
> @@ -98,6 +98,7 @@ struct drm_mock_sched_job {
>  
>  #define DRM_MOCK_SCHED_JOB_DONE              0x1
>  #define DRM_MOCK_SCHED_JOB_TIMEDOUT  0x2
> +#define DRM_MOCK_SCHED_JOB_DONT_RESET        0x4
>       unsigned long           flags;
>  
>       struct list_head        link;
> diff --git a/drivers/gpu/drm/scheduler/tests/tests_basic.c
> b/drivers/gpu/drm/scheduler/tests/tests_basic.c
> index
> 41c648782f4548e202bd8711b45d28eead9bd0b2..91c0449590ed24c3da18ab7d930
> cca47d7c317c7 100644
> --- a/drivers/gpu/drm/scheduler/tests/tests_basic.c
> +++ b/drivers/gpu/drm/scheduler/tests/tests_basic.c
> @@ -246,8 +246,55 @@ static void drm_sched_basic_timeout(struct kunit
> *test)
>       drm_mock_sched_entity_free(entity);
>  }
>  
> +static void drm_sched_skip_reset(struct kunit *test)
> +{
> +     struct drm_mock_scheduler *sched = test->priv;
> +     struct drm_mock_sched_entity *entity;
> +     struct drm_mock_sched_job *job;
> +     unsigned int i;
> +     bool done;
> +
> +     /*
> +      * Submit a single job against a scheduler with the timeout
> configured
> +      * and verify that if the job is still running, the timeout
> handler
> +      * will skip the reset and allow the job to complete.
> +      */
> +
> +     entity = drm_mock_sched_entity_new(test,
> +                                       
> DRM_SCHED_PRIORITY_NORMAL,
> +                                        sched);
> +     job = drm_mock_sched_job_new(test, entity);
> +
> +     job->flags = DRM_MOCK_SCHED_JOB_DONT_RESET;
> +
> +     drm_mock_sched_job_submit(job);
> +
> +     done = drm_mock_sched_job_wait_scheduled(job, HZ);
> +     KUNIT_ASSERT_TRUE(test, done);
> +
> +     done = drm_mock_sched_job_wait_finished(job, 2 *
> MOCK_TIMEOUT);
> +     KUNIT_ASSERT_FALSE(test, done);
> +
> +     KUNIT_ASSERT_EQ(test,
> +                     job->flags & DRM_MOCK_SCHED_JOB_TIMEDOUT,
> +                     DRM_MOCK_SCHED_JOB_TIMEDOUT);
> +
> +     KUNIT_ASSERT_EQ(test,
> +                     job->flags & DRM_MOCK_SCHED_JOB_DONT_RESET,
> +                     0);
> +
> +     i = drm_mock_sched_advance(sched, 1);
> +     KUNIT_ASSERT_EQ(test, i, 1);
> +
> +     done = drm_mock_sched_job_wait_finished(job, HZ);
> +     KUNIT_ASSERT_TRUE(test, done);
> +
> +     drm_mock_sched_entity_free(entity);
> +}
> +
>  static struct kunit_case drm_sched_timeout_tests[] = {
>       KUNIT_CASE(drm_sched_basic_timeout),
> +     KUNIT_CASE(drm_sched_skip_reset),
>       {}
>  };
>  
> 

Reply via email to