diff options
Diffstat (limited to 'debian/patches-rt/drm-ttm-tests-Let-ttm_bo_test-consider-different-ww_.patch')
-rw-r--r-- | debian/patches-rt/drm-ttm-tests-Let-ttm_bo_test-consider-different-ww_.patch | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/debian/patches-rt/drm-ttm-tests-Let-ttm_bo_test-consider-different-ww_.patch b/debian/patches-rt/drm-ttm-tests-Let-ttm_bo_test-consider-different-ww_.patch new file mode 100644 index 0000000000..13ce972247 --- /dev/null +++ b/debian/patches-rt/drm-ttm-tests-Let-ttm_bo_test-consider-different-ww_.patch @@ -0,0 +1,52 @@ +From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +Date: Thu, 4 Apr 2024 12:25:34 +0200 +Subject: [PATCH] drm/ttm/tests: Let ttm_bo_test consider different ww_mutex + implementation. +Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.9/older/patches-6.9-rt5.tar.xz + +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. + +Fixes: 995279d280d1e ("drm/ttm/tests: Add tests for ttm_bo functions") +Link: https://lore.kernel.org/r/20240404102534.QTa80QPY@linutronix.de +Signed-off-by: Sebastian Andrzej Siewior <bigeasy@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); |