|
@@ -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);
|
|
|
|