summaryrefslogtreecommitdiffstats
path: root/kernel/locking/mutex.c
diff options
context:
space:
mode:
authorJoel Stanley <joel@jms.id.au>2016-08-04 13:24:41 +0930
committerJoel Stanley <joel@jms.id.au>2016-08-04 13:24:41 +0930
commitb916113d820adc856aad6b8ebc1a25403ff7f293 (patch)
treeabddf239d912c4868faf9fbc69c67d980f74c7df /kernel/locking/mutex.c
parent2e4db6c6be91ade074c1a150a6db2aeb4920e25c (diff)
parentb05965f284db3e086022f4e318e46cb5bffb1376 (diff)
downloadtalos-obmc-linux-openbmc-4.4-20160804-1.tar.gz
talos-obmc-linux-openbmc-4.4-20160804-1.zip
Merge tag 'v4.4.16' into dev-4.4openbmc-4.4-20160804-1
This is the 4.4.16 stable release Signed-off-by: Joel Stanley <joel@jms.id.au>
Diffstat (limited to 'kernel/locking/mutex.c')
-rw-r--r--kernel/locking/mutex.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c
index 0551c219c40e..89350f924c85 100644
--- a/kernel/locking/mutex.c
+++ b/kernel/locking/mutex.c
@@ -486,9 +486,6 @@ __ww_mutex_lock_check_stamp(struct mutex *lock, struct ww_acquire_ctx *ctx)
if (!hold_ctx)
return 0;
- if (unlikely(ctx == hold_ctx))
- return -EALREADY;
-
if (ctx->stamp - hold_ctx->stamp <= LONG_MAX &&
(ctx->stamp != hold_ctx->stamp || ctx > hold_ctx)) {
#ifdef CONFIG_DEBUG_MUTEXES
@@ -514,6 +511,12 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
unsigned long flags;
int ret;
+ if (use_ww_ctx) {
+ struct ww_mutex *ww = container_of(lock, struct ww_mutex, base);
+ if (unlikely(ww_ctx == READ_ONCE(ww->ctx)))
+ return -EALREADY;
+ }
+
preempt_disable();
mutex_acquire_nest(&lock->dep_map, subclass, 0, nest_lock, ip);
OpenPOWER on IntegriCloud