Re: [PATCH 05/10] fault injection: mutex_trylock() fault injection
On Sun, Oct 16, 2016 at 05:56:07PM +0200, Vegard Nossum wrote: > Cc: Peter Zijlstra> Cc: Ingo Molnar > Signed-off-by: Vegard Nossum NAK, -ENOCHANGELOG
Re: [PATCH 05/10] fault injection: mutex_trylock() fault injection
On Sun, Oct 16, 2016 at 05:56:07PM +0200, Vegard Nossum wrote: > Cc: Peter Zijlstra > Cc: Ingo Molnar > Signed-off-by: Vegard Nossum NAK, -ENOCHANGELOG
[PATCH 05/10] fault injection: mutex_trylock() fault injection
Cc: Peter ZijlstraCc: Ingo Molnar Signed-off-by: Vegard Nossum --- kernel/locking/mutex.c | 32 lib/Kconfig.debug | 6 ++ 2 files changed, 38 insertions(+) diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c index a70b90d..0651ca6 100644 --- a/kernel/locking/mutex.c +++ b/kernel/locking/mutex.c @@ -17,6 +17,7 @@ * * Also see Documentation/locking/mutex-design.txt. */ +#include #include #include #include @@ -887,6 +888,34 @@ static inline int __mutex_trylock_slowpath(atomic_t *lock_count) return prev == 1; } +#ifdef CONFIG_FAIL_MUTEX +DECLARE_FAULT_ATTR(fail_mutex); + +static int __init setup_fail_mutex(char *str) +{ + return setup_fault_attr(_mutex, str); +} +__setup("fail_mutex=", setup_fail_mutex); + +static int __init fail_mutex_debugfs(void) +{ + struct dentry *dir = fault_create_debugfs_attr("fail_mutex", + NULL, _mutex); + return PTR_ERR_OR_ZERO(dir); +} +late_initcall(fail_mutex_debugfs); + +static inline bool should_fail_mutex(struct mutex *lock) +{ + return should_fail(_mutex, 1); +} +#else +static inline bool should_fail_mutex(struct mutex *lock) +{ + return false; +} +#endif + /** * mutex_trylock - try to acquire the mutex, without waiting * @lock: the mutex to be acquired @@ -905,6 +934,9 @@ int __sched mutex_trylock(struct mutex *lock) { int ret; + if (should_fail_mutex(lock)) + return 0; + ret = __mutex_fastpath_trylock(>count, __mutex_trylock_slowpath); if (ret) mutex_set_owner(lock); diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 861fc1d..7e9a9b2e 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -1657,6 +1657,12 @@ config FAIL_FUTEX help Provide fault-injection capability for futexes. +config FAIL_MUTEX + bool "Fault-injection capability for mutexes" + depends on FAULT_INJECTION + help + Provide fault-injection capability for mutex_trylock(). + config FAULT_INJECTION_DEBUG_FS bool "Debugfs entries for fault-injection capabilities" depends on FAULT_INJECTION && SYSFS && DEBUG_FS -- 2.10.0.479.g221bd91
[PATCH 05/10] fault injection: mutex_trylock() fault injection
Cc: Peter Zijlstra Cc: Ingo Molnar Signed-off-by: Vegard Nossum --- kernel/locking/mutex.c | 32 lib/Kconfig.debug | 6 ++ 2 files changed, 38 insertions(+) diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c index a70b90d..0651ca6 100644 --- a/kernel/locking/mutex.c +++ b/kernel/locking/mutex.c @@ -17,6 +17,7 @@ * * Also see Documentation/locking/mutex-design.txt. */ +#include #include #include #include @@ -887,6 +888,34 @@ static inline int __mutex_trylock_slowpath(atomic_t *lock_count) return prev == 1; } +#ifdef CONFIG_FAIL_MUTEX +DECLARE_FAULT_ATTR(fail_mutex); + +static int __init setup_fail_mutex(char *str) +{ + return setup_fault_attr(_mutex, str); +} +__setup("fail_mutex=", setup_fail_mutex); + +static int __init fail_mutex_debugfs(void) +{ + struct dentry *dir = fault_create_debugfs_attr("fail_mutex", + NULL, _mutex); + return PTR_ERR_OR_ZERO(dir); +} +late_initcall(fail_mutex_debugfs); + +static inline bool should_fail_mutex(struct mutex *lock) +{ + return should_fail(_mutex, 1); +} +#else +static inline bool should_fail_mutex(struct mutex *lock) +{ + return false; +} +#endif + /** * mutex_trylock - try to acquire the mutex, without waiting * @lock: the mutex to be acquired @@ -905,6 +934,9 @@ int __sched mutex_trylock(struct mutex *lock) { int ret; + if (should_fail_mutex(lock)) + return 0; + ret = __mutex_fastpath_trylock(>count, __mutex_trylock_slowpath); if (ret) mutex_set_owner(lock); diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 861fc1d..7e9a9b2e 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -1657,6 +1657,12 @@ config FAIL_FUTEX help Provide fault-injection capability for futexes. +config FAIL_MUTEX + bool "Fault-injection capability for mutexes" + depends on FAULT_INJECTION + help + Provide fault-injection capability for mutex_trylock(). + config FAULT_INJECTION_DEBUG_FS bool "Debugfs entries for fault-injection capabilities" depends on FAULT_INJECTION && SYSFS && DEBUG_FS -- 2.10.0.479.g221bd91
Re: [PATCH 05/10] fault injection: mutex_trylock() fault injection
Hi Vegard, [auto build test ERROR on linus/master] [also build test ERROR on v4.7 next-20160803] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Vegard-Nossum/fault-injection-fix-a-few-documentation-errors/20160803-233940 config: openrisc-or1ksim_defconfig (attached as .config) compiler: or32-linux-gcc (GCC) 4.5.1-or32-1.0rc1 reproduce: wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=openrisc All errors (new ones prefixed by >>): In file included from kernel/locking/mutex.c:20:0: >> include/linux/fault-inject.h:67:20: error: expected '=', ',', ';', 'asm' or >> '__attribute__' before 'should_failslab' vim +67 include/linux/fault-inject.h 6ff1cb35 Akinobu Mita 2006-12-08 61 6ff1cb35 Akinobu Mita 2006-12-08 62 #endif /* CONFIG_FAULT_INJECTION */ 6ff1cb35 Akinobu Mita 2006-12-08 63 773ff60e Akinobu Mita 2008-12-23 64 #ifdef CONFIG_FAILSLAB fab9963a Jesper Dangaard Brouer 2016-03-15 65 extern bool should_failslab(struct kmem_cache *s, gfp_t gfpflags); 773ff60e Akinobu Mita 2008-12-23 66 #else fab9963a Jesper Dangaard Brouer 2016-03-15 @67 static inline bool should_failslab(struct kmem_cache *s, gfp_t gfpflags) 773ff60e Akinobu Mita 2008-12-23 68 { 773ff60e Akinobu Mita 2008-12-23 69 return false; 773ff60e Akinobu Mita 2008-12-23 70 } :: The code at line 67 was first introduced by commit :: fab9963a69dbd71304357dbfe4ec5345f14cebdd mm: fault-inject take over bootstrap kmem_cache check :: TO: Jesper Dangaard Brouer:: CC: Linus Torvalds --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation .config.gz Description: Binary data
Re: [PATCH 05/10] fault injection: mutex_trylock() fault injection
Hi Vegard, [auto build test ERROR on linus/master] [also build test ERROR on v4.7 next-20160803] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Vegard-Nossum/fault-injection-fix-a-few-documentation-errors/20160803-233940 config: openrisc-or1ksim_defconfig (attached as .config) compiler: or32-linux-gcc (GCC) 4.5.1-or32-1.0rc1 reproduce: wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=openrisc All errors (new ones prefixed by >>): In file included from kernel/locking/mutex.c:20:0: >> include/linux/fault-inject.h:67:20: error: expected '=', ',', ';', 'asm' or >> '__attribute__' before 'should_failslab' vim +67 include/linux/fault-inject.h 6ff1cb35 Akinobu Mita 2006-12-08 61 6ff1cb35 Akinobu Mita 2006-12-08 62 #endif /* CONFIG_FAULT_INJECTION */ 6ff1cb35 Akinobu Mita 2006-12-08 63 773ff60e Akinobu Mita 2008-12-23 64 #ifdef CONFIG_FAILSLAB fab9963a Jesper Dangaard Brouer 2016-03-15 65 extern bool should_failslab(struct kmem_cache *s, gfp_t gfpflags); 773ff60e Akinobu Mita 2008-12-23 66 #else fab9963a Jesper Dangaard Brouer 2016-03-15 @67 static inline bool should_failslab(struct kmem_cache *s, gfp_t gfpflags) 773ff60e Akinobu Mita 2008-12-23 68 { 773ff60e Akinobu Mita 2008-12-23 69 return false; 773ff60e Akinobu Mita 2008-12-23 70 } :: The code at line 67 was first introduced by commit :: fab9963a69dbd71304357dbfe4ec5345f14cebdd mm: fault-inject take over bootstrap kmem_cache check :: TO: Jesper Dangaard Brouer :: CC: Linus Torvalds --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation .config.gz Description: Binary data
Re: [PATCH 05/10] fault injection: mutex_trylock() fault injection
Hi Vegard, [auto build test ERROR on linus/master] [also build test ERROR on v4.7 next-20160803] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Vegard-Nossum/fault-injection-fix-a-few-documentation-errors/20160803-233940 config: x86_64-randconfig-x015-201631 (attached as .config) compiler: gcc-6 (Debian 6.1.1-9) 6.1.1 20160705 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): In file included from kernel/locking/mutex.c:20:0: >> include/linux/fault-inject.h:67:15: error: unknown type name 'bool' static inline bool should_failslab(struct kmem_cache *s, gfp_t gfpflags) ^~~~ >> include/linux/fault-inject.h:67:58: error: unknown type name 'gfp_t' static inline bool should_failslab(struct kmem_cache *s, gfp_t gfpflags) ^ vim +/bool +67 include/linux/fault-inject.h 6ff1cb35 Akinobu Mita 2006-12-08 61 6ff1cb35 Akinobu Mita 2006-12-08 62 #endif /* CONFIG_FAULT_INJECTION */ 6ff1cb35 Akinobu Mita 2006-12-08 63 773ff60e Akinobu Mita 2008-12-23 64 #ifdef CONFIG_FAILSLAB fab9963a Jesper Dangaard Brouer 2016-03-15 65 extern bool should_failslab(struct kmem_cache *s, gfp_t gfpflags); 773ff60e Akinobu Mita 2008-12-23 66 #else fab9963a Jesper Dangaard Brouer 2016-03-15 @67 static inline bool should_failslab(struct kmem_cache *s, gfp_t gfpflags) 773ff60e Akinobu Mita 2008-12-23 68 { 773ff60e Akinobu Mita 2008-12-23 69 return false; 773ff60e Akinobu Mita 2008-12-23 70 } :: The code at line 67 was first introduced by commit :: fab9963a69dbd71304357dbfe4ec5345f14cebdd mm: fault-inject take over bootstrap kmem_cache check :: TO: Jesper Dangaard Brouer:: CC: Linus Torvalds --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation .config.gz Description: Binary data
Re: [PATCH 05/10] fault injection: mutex_trylock() fault injection
Hi Vegard, [auto build test ERROR on linus/master] [also build test ERROR on v4.7 next-20160803] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Vegard-Nossum/fault-injection-fix-a-few-documentation-errors/20160803-233940 config: x86_64-randconfig-x015-201631 (attached as .config) compiler: gcc-6 (Debian 6.1.1-9) 6.1.1 20160705 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): In file included from kernel/locking/mutex.c:20:0: >> include/linux/fault-inject.h:67:15: error: unknown type name 'bool' static inline bool should_failslab(struct kmem_cache *s, gfp_t gfpflags) ^~~~ >> include/linux/fault-inject.h:67:58: error: unknown type name 'gfp_t' static inline bool should_failslab(struct kmem_cache *s, gfp_t gfpflags) ^ vim +/bool +67 include/linux/fault-inject.h 6ff1cb35 Akinobu Mita 2006-12-08 61 6ff1cb35 Akinobu Mita 2006-12-08 62 #endif /* CONFIG_FAULT_INJECTION */ 6ff1cb35 Akinobu Mita 2006-12-08 63 773ff60e Akinobu Mita 2008-12-23 64 #ifdef CONFIG_FAILSLAB fab9963a Jesper Dangaard Brouer 2016-03-15 65 extern bool should_failslab(struct kmem_cache *s, gfp_t gfpflags); 773ff60e Akinobu Mita 2008-12-23 66 #else fab9963a Jesper Dangaard Brouer 2016-03-15 @67 static inline bool should_failslab(struct kmem_cache *s, gfp_t gfpflags) 773ff60e Akinobu Mita 2008-12-23 68 { 773ff60e Akinobu Mita 2008-12-23 69 return false; 773ff60e Akinobu Mita 2008-12-23 70 } :: The code at line 67 was first introduced by commit :: fab9963a69dbd71304357dbfe4ec5345f14cebdd mm: fault-inject take over bootstrap kmem_cache check :: TO: Jesper Dangaard Brouer :: CC: Linus Torvalds --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation .config.gz Description: Binary data
[PATCH 05/10] fault injection: mutex_trylock() fault injection
Cc: Peter ZijlstraCc: Ingo Molnar Signed-off-by: Vegard Nossum --- kernel/locking/mutex.c | 32 lib/Kconfig.debug | 6 ++ 2 files changed, 38 insertions(+) diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c index a70b90d..0651ca6 100644 --- a/kernel/locking/mutex.c +++ b/kernel/locking/mutex.c @@ -17,6 +17,7 @@ * * Also see Documentation/locking/mutex-design.txt. */ +#include #include #include #include @@ -887,6 +888,34 @@ static inline int __mutex_trylock_slowpath(atomic_t *lock_count) return prev == 1; } +#ifdef CONFIG_FAIL_MUTEX +DECLARE_FAULT_ATTR(fail_mutex); + +static int __init setup_fail_mutex(char *str) +{ + return setup_fault_attr(_mutex, str); +} +__setup("fail_mutex=", setup_fail_mutex); + +static int __init fail_mutex_debugfs(void) +{ + struct dentry *dir = fault_create_debugfs_attr("fail_mutex", + NULL, _mutex); + return PTR_ERR_OR_ZERO(dir); +} +late_initcall(fail_mutex_debugfs); + +static inline bool should_fail_mutex(struct mutex *lock) +{ + return should_fail(_mutex, 1); +} +#else +static inline bool should_fail_mutex(struct mutex *lock) +{ + return false; +} +#endif + /** * mutex_trylock - try to acquire the mutex, without waiting * @lock: the mutex to be acquired @@ -905,6 +934,9 @@ int __sched mutex_trylock(struct mutex *lock) { int ret; + if (should_fail_mutex(lock)) + return 0; + ret = __mutex_fastpath_trylock(>count, __mutex_trylock_slowpath); if (ret) mutex_set_owner(lock); diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 5896b6f..0043e66 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -1657,6 +1657,12 @@ config FAIL_FUTEX help Provide fault-injection capability for futexes. +config FAIL_MUTEX + bool "Fault-injection capability for mutexes" + depends on FAULT_INJECTION + help + Provide fault-injection capability for mutex_trylock(). + config FAULT_INJECTION_DEBUG_FS bool "Debugfs entries for fault-injection capabilities" depends on FAULT_INJECTION && SYSFS && DEBUG_FS -- 1.9.1
[PATCH 05/10] fault injection: mutex_trylock() fault injection
Cc: Peter Zijlstra Cc: Ingo Molnar Signed-off-by: Vegard Nossum --- kernel/locking/mutex.c | 32 lib/Kconfig.debug | 6 ++ 2 files changed, 38 insertions(+) diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c index a70b90d..0651ca6 100644 --- a/kernel/locking/mutex.c +++ b/kernel/locking/mutex.c @@ -17,6 +17,7 @@ * * Also see Documentation/locking/mutex-design.txt. */ +#include #include #include #include @@ -887,6 +888,34 @@ static inline int __mutex_trylock_slowpath(atomic_t *lock_count) return prev == 1; } +#ifdef CONFIG_FAIL_MUTEX +DECLARE_FAULT_ATTR(fail_mutex); + +static int __init setup_fail_mutex(char *str) +{ + return setup_fault_attr(_mutex, str); +} +__setup("fail_mutex=", setup_fail_mutex); + +static int __init fail_mutex_debugfs(void) +{ + struct dentry *dir = fault_create_debugfs_attr("fail_mutex", + NULL, _mutex); + return PTR_ERR_OR_ZERO(dir); +} +late_initcall(fail_mutex_debugfs); + +static inline bool should_fail_mutex(struct mutex *lock) +{ + return should_fail(_mutex, 1); +} +#else +static inline bool should_fail_mutex(struct mutex *lock) +{ + return false; +} +#endif + /** * mutex_trylock - try to acquire the mutex, without waiting * @lock: the mutex to be acquired @@ -905,6 +934,9 @@ int __sched mutex_trylock(struct mutex *lock) { int ret; + if (should_fail_mutex(lock)) + return 0; + ret = __mutex_fastpath_trylock(>count, __mutex_trylock_slowpath); if (ret) mutex_set_owner(lock); diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 5896b6f..0043e66 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -1657,6 +1657,12 @@ config FAIL_FUTEX help Provide fault-injection capability for futexes. +config FAIL_MUTEX + bool "Fault-injection capability for mutexes" + depends on FAULT_INJECTION + help + Provide fault-injection capability for mutex_trylock(). + config FAULT_INJECTION_DEBUG_FS bool "Debugfs entries for fault-injection capabilities" depends on FAULT_INJECTION && SYSFS && DEBUG_FS -- 1.9.1