Skip to content

Commit 9a75bd0

Browse files
Sebastian Andrzej SiewiorPeter Zijlstra
authored andcommitted
lockdep/selftests: Adapt ww-tests for PREEMPT_RT
The ww-mutex selftest operates directly on ww_mutex::base and assumes its type is struct mutex. This isn't true on PREEMPT_RT which turns the mutex into a rtmutex. Add a ww_mutex_base_ abstraction which maps to the relevant mutex_ or rt_mutex_ function. Change the CONFIG_DEBUG_MUTEXES ifdef to DEBUG_WW_MUTEXES. The latter is true for the MUTEX and RTMUTEX implementation of WW-MUTEX. The assignment is required in order to pass the tests. Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lore.kernel.org/r/20211129174654.668506-10-bigeasy@linutronix.de
1 parent a529f8d commit 9a75bd0

1 file changed

Lines changed: 46 additions & 30 deletions

File tree

lib/locking-selftest.c

Lines changed: 46 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1700,6 +1700,22 @@ static void ww_test_fail_acquire(void)
17001700
#endif
17011701
}
17021702

1703+
#ifdef CONFIG_PREEMPT_RT
1704+
#define ww_mutex_base_lock(b) rt_mutex_lock(b)
1705+
#define ww_mutex_base_trylock(b) rt_mutex_trylock(b)
1706+
#define ww_mutex_base_lock_nest_lock(b, b2) rt_mutex_lock_nest_lock(b, b2)
1707+
#define ww_mutex_base_lock_interruptible(b) rt_mutex_lock_interruptible(b)
1708+
#define ww_mutex_base_lock_killable(b) rt_mutex_lock_killable(b)
1709+
#define ww_mutex_base_unlock(b) rt_mutex_unlock(b)
1710+
#else
1711+
#define ww_mutex_base_lock(b) mutex_lock(b)
1712+
#define ww_mutex_base_trylock(b) mutex_trylock(b)
1713+
#define ww_mutex_base_lock_nest_lock(b, b2) mutex_lock_nest_lock(b, b2)
1714+
#define ww_mutex_base_lock_interruptible(b) mutex_lock_interruptible(b)
1715+
#define ww_mutex_base_lock_killable(b) mutex_lock_killable(b)
1716+
#define ww_mutex_base_unlock(b) mutex_unlock(b)
1717+
#endif
1718+
17031719
static void ww_test_normal(void)
17041720
{
17051721
int ret;
@@ -1714,50 +1730,50 @@ static void ww_test_normal(void)
17141730

17151731
/* mutex_lock (and indirectly, mutex_lock_nested) */
17161732
o.ctx = (void *)~0UL;
1717-
mutex_lock(&o.base);
1718-
mutex_unlock(&o.base);
1733+
ww_mutex_base_lock(&o.base);
1734+
ww_mutex_base_unlock(&o.base);
17191735
WARN_ON(o.ctx != (void *)~0UL);
17201736

17211737
/* mutex_lock_interruptible (and *_nested) */
17221738
o.ctx = (void *)~0UL;
1723-
ret = mutex_lock_interruptible(&o.base);
1739+
ret = ww_mutex_base_lock_interruptible(&o.base);
17241740
if (!ret)
1725-
mutex_unlock(&o.base);
1741+
ww_mutex_base_unlock(&o.base);
17261742
else
17271743
WARN_ON(1);
17281744
WARN_ON(o.ctx != (void *)~0UL);
17291745

17301746
/* mutex_lock_killable (and *_nested) */
17311747
o.ctx = (void *)~0UL;
1732-
ret = mutex_lock_killable(&o.base);
1748+
ret = ww_mutex_base_lock_killable(&o.base);
17331749
if (!ret)
1734-
mutex_unlock(&o.base);
1750+
ww_mutex_base_unlock(&o.base);
17351751
else
17361752
WARN_ON(1);
17371753
WARN_ON(o.ctx != (void *)~0UL);
17381754

17391755
/* trylock, succeeding */
17401756
o.ctx = (void *)~0UL;
1741-
ret = mutex_trylock(&o.base);
1757+
ret = ww_mutex_base_trylock(&o.base);
17421758
WARN_ON(!ret);
17431759
if (ret)
1744-
mutex_unlock(&o.base);
1760+
ww_mutex_base_unlock(&o.base);
17451761
else
17461762
WARN_ON(1);
17471763
WARN_ON(o.ctx != (void *)~0UL);
17481764

17491765
/* trylock, failing */
17501766
o.ctx = (void *)~0UL;
1751-
mutex_lock(&o.base);
1752-
ret = mutex_trylock(&o.base);
1767+
ww_mutex_base_lock(&o.base);
1768+
ret = ww_mutex_base_trylock(&o.base);
17531769
WARN_ON(ret);
1754-
mutex_unlock(&o.base);
1770+
ww_mutex_base_unlock(&o.base);
17551771
WARN_ON(o.ctx != (void *)~0UL);
17561772

17571773
/* nest_lock */
17581774
o.ctx = (void *)~0UL;
1759-
mutex_lock_nest_lock(&o.base, &t);
1760-
mutex_unlock(&o.base);
1775+
ww_mutex_base_lock_nest_lock(&o.base, &t);
1776+
ww_mutex_base_unlock(&o.base);
17611777
WARN_ON(o.ctx != (void *)~0UL);
17621778
}
17631779

@@ -1770,7 +1786,7 @@ static void ww_test_two_contexts(void)
17701786
static void ww_test_diff_class(void)
17711787
{
17721788
WWAI(&t);
1773-
#ifdef CONFIG_DEBUG_MUTEXES
1789+
#ifdef DEBUG_WW_MUTEXES
17741790
t.ww_class = NULL;
17751791
#endif
17761792
WWL(&o, &t);
@@ -1834,7 +1850,7 @@ static void ww_test_edeadlk_normal(void)
18341850
{
18351851
int ret;
18361852

1837-
mutex_lock(&o2.base);
1853+
ww_mutex_base_lock(&o2.base);
18381854
o2.ctx = &t2;
18391855
mutex_release(&o2.base.dep_map, _THIS_IP_);
18401856

@@ -1850,7 +1866,7 @@ static void ww_test_edeadlk_normal(void)
18501866

18511867
o2.ctx = NULL;
18521868
mutex_acquire(&o2.base.dep_map, 0, 1, _THIS_IP_);
1853-
mutex_unlock(&o2.base);
1869+
ww_mutex_base_unlock(&o2.base);
18541870
WWU(&o);
18551871

18561872
WWL(&o2, &t);
@@ -1860,7 +1876,7 @@ static void ww_test_edeadlk_normal_slow(void)
18601876
{
18611877
int ret;
18621878

1863-
mutex_lock(&o2.base);
1879+
ww_mutex_base_lock(&o2.base);
18641880
mutex_release(&o2.base.dep_map, _THIS_IP_);
18651881
o2.ctx = &t2;
18661882

@@ -1876,7 +1892,7 @@ static void ww_test_edeadlk_normal_slow(void)
18761892

18771893
o2.ctx = NULL;
18781894
mutex_acquire(&o2.base.dep_map, 0, 1, _THIS_IP_);
1879-
mutex_unlock(&o2.base);
1895+
ww_mutex_base_unlock(&o2.base);
18801896
WWU(&o);
18811897

18821898
ww_mutex_lock_slow(&o2, &t);
@@ -1886,7 +1902,7 @@ static void ww_test_edeadlk_no_unlock(void)
18861902
{
18871903
int ret;
18881904

1889-
mutex_lock(&o2.base);
1905+
ww_mutex_base_lock(&o2.base);
18901906
o2.ctx = &t2;
18911907
mutex_release(&o2.base.dep_map, _THIS_IP_);
18921908

@@ -1902,7 +1918,7 @@ static void ww_test_edeadlk_no_unlock(void)
19021918

19031919
o2.ctx = NULL;
19041920
mutex_acquire(&o2.base.dep_map, 0, 1, _THIS_IP_);
1905-
mutex_unlock(&o2.base);
1921+
ww_mutex_base_unlock(&o2.base);
19061922

19071923
WWL(&o2, &t);
19081924
}
@@ -1911,7 +1927,7 @@ static void ww_test_edeadlk_no_unlock_slow(void)
19111927
{
19121928
int ret;
19131929

1914-
mutex_lock(&o2.base);
1930+
ww_mutex_base_lock(&o2.base);
19151931
mutex_release(&o2.base.dep_map, _THIS_IP_);
19161932
o2.ctx = &t2;
19171933

@@ -1927,7 +1943,7 @@ static void ww_test_edeadlk_no_unlock_slow(void)
19271943

19281944
o2.ctx = NULL;
19291945
mutex_acquire(&o2.base.dep_map, 0, 1, _THIS_IP_);
1930-
mutex_unlock(&o2.base);
1946+
ww_mutex_base_unlock(&o2.base);
19311947

19321948
ww_mutex_lock_slow(&o2, &t);
19331949
}
@@ -1936,7 +1952,7 @@ static void ww_test_edeadlk_acquire_more(void)
19361952
{
19371953
int ret;
19381954

1939-
mutex_lock(&o2.base);
1955+
ww_mutex_base_lock(&o2.base);
19401956
mutex_release(&o2.base.dep_map, _THIS_IP_);
19411957
o2.ctx = &t2;
19421958

@@ -1957,7 +1973,7 @@ static void ww_test_edeadlk_acquire_more_slow(void)
19571973
{
19581974
int ret;
19591975

1960-
mutex_lock(&o2.base);
1976+
ww_mutex_base_lock(&o2.base);
19611977
mutex_release(&o2.base.dep_map, _THIS_IP_);
19621978
o2.ctx = &t2;
19631979

@@ -1978,11 +1994,11 @@ static void ww_test_edeadlk_acquire_more_edeadlk(void)
19781994
{
19791995
int ret;
19801996

1981-
mutex_lock(&o2.base);
1997+
ww_mutex_base_lock(&o2.base);
19821998
mutex_release(&o2.base.dep_map, _THIS_IP_);
19831999
o2.ctx = &t2;
19842000

1985-
mutex_lock(&o3.base);
2001+
ww_mutex_base_lock(&o3.base);
19862002
mutex_release(&o3.base.dep_map, _THIS_IP_);
19872003
o3.ctx = &t2;
19882004

@@ -2004,11 +2020,11 @@ static void ww_test_edeadlk_acquire_more_edeadlk_slow(void)
20042020
{
20052021
int ret;
20062022

2007-
mutex_lock(&o2.base);
2023+
ww_mutex_base_lock(&o2.base);
20082024
mutex_release(&o2.base.dep_map, _THIS_IP_);
20092025
o2.ctx = &t2;
20102026

2011-
mutex_lock(&o3.base);
2027+
ww_mutex_base_lock(&o3.base);
20122028
mutex_release(&o3.base.dep_map, _THIS_IP_);
20132029
o3.ctx = &t2;
20142030

@@ -2029,7 +2045,7 @@ static void ww_test_edeadlk_acquire_wrong(void)
20292045
{
20302046
int ret;
20312047

2032-
mutex_lock(&o2.base);
2048+
ww_mutex_base_lock(&o2.base);
20332049
mutex_release(&o2.base.dep_map, _THIS_IP_);
20342050
o2.ctx = &t2;
20352051

@@ -2054,7 +2070,7 @@ static void ww_test_edeadlk_acquire_wrong_slow(void)
20542070
{
20552071
int ret;
20562072

2057-
mutex_lock(&o2.base);
2073+
ww_mutex_base_lock(&o2.base);
20582074
mutex_release(&o2.base.dep_map, _THIS_IP_);
20592075
o2.ctx = &t2;
20602076

0 commit comments

Comments
 (0)