[PATCH REPOST] drm/ttm/tests: Let ttm_bo_test consider different ww_mutex implementation.

Christian König christian.koenig at amd.com
Thu Jun 13 12:33:51 UTC 2024


Am 13.06.24 um 08:47 schrieb Sebastian Andrzej Siewior:
> PREEMPT_RT has a different locking implementation for ww_mutex. The
> base mutex of struct ww_mutex is declared as struct WW_MUTEX_BASE. The
> latter is defined as `mutex' for non-PREEMPT_RT builds and `rt_mutex'
> for PREEMPT_RT builds.
>
> Using mutex_lock() directly on the base mutex in
> ttm_bo_reserve_deadlock() leads to compile error on PREEMPT_RT.
>
> The locking-selftest has its own defines to deal with this and it is
> probably best to defines the needed one within the test program since
> their usefulness is limited outside of well known selftests.
>
> Provide ww_mutex_base_lock() which points to the correct function for
> PREEMPT_RT and non-PREEMPT_RT builds.

In general good that somebody is looking into this, but I can't even 
judge why ww_mutex would use rt_mutex in the first place.

So I don't feel well reviewing this.

Regards,
Christian.

>
> Fixes: 995279d280d1e ("drm/ttm/tests: Add tests for ttm_bo functions")
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
> ---
> Repost of https://lore.kernel.org/r/20240404102534.QTa80QPY@linutronix.de
>
>   drivers/gpu/drm/ttm/tests/ttm_bo_test.c |    8 +++++++-
>   1 file changed, 7 insertions(+), 1 deletion(-)
>
> --- a/drivers/gpu/drm/ttm/tests/ttm_bo_test.c
> +++ b/drivers/gpu/drm/ttm/tests/ttm_bo_test.c
> @@ -18,6 +18,12 @@
>   
>   #define BO_SIZE		SZ_8K
>   
> +#ifdef CONFIG_PREEMPT_RT
> +#define ww_mutex_base_lock(b)			rt_mutex_lock(b)
> +#else
> +#define ww_mutex_base_lock(b)			mutex_lock(b)
> +#endif
> +
>   struct ttm_bo_test_case {
>   	const char *description;
>   	bool interruptible;
> @@ -142,7 +148,7 @@ static void ttm_bo_reserve_deadlock(stru
>   	bo2 = ttm_bo_kunit_init(test, test->priv, BO_SIZE);
>   
>   	ww_acquire_init(&ctx1, &reservation_ww_class);
> -	mutex_lock(&bo2->base.resv->lock.base);
> +	ww_mutex_base_lock(&bo2->base.resv->lock.base);
>   
>   	/* The deadlock will be caught by WW mutex, don't warn about it */
>   	lock_release(&bo2->base.resv->lock.base.dep_map, 1);



More information about the dri-devel mailing list