Re: [PATCH 05/10] fault injection: mutex_trylock() fault injection

2016-10-16 Thread Peter Zijlstra
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

2016-10-16 Thread Peter Zijlstra
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

2016-10-16 Thread Vegard Nossum
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



[PATCH 05/10] fault injection: mutex_trylock() fault injection

2016-10-16 Thread Vegard Nossum
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

2016-08-03 Thread kbuild test robot
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

2016-08-03 Thread kbuild test robot
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

2016-08-03 Thread kbuild test robot
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

2016-08-03 Thread kbuild test robot
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

2016-08-03 Thread Vegard Nossum
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



[PATCH 05/10] fault injection: mutex_trylock() fault injection

2016-08-03 Thread Vegard Nossum
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