The "int check" argument of lock_acquire() and held_lock->check
are misleading and unneeded. This is only used as a boolean, 2
denotes "true", everything else is "false". And this boolean is
always equal to prove_locking.

The only exception is __lockdep_no_validate__ which should make
this condition "false" in validate_chain().

This patch kills this member and removes the argument from
__lock_acquire(), the next patch will remove the now unused arg
from lock_acquire() and update its callers.

Signed-off-by: Oleg Nesterov <o...@redhat.com>
---
 include/linux/lockdep.h  |    1 -
 kernel/locking/lockdep.c |   22 ++++++++--------------
 2 files changed, 8 insertions(+), 15 deletions(-)

diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
index 92b1bfc..13bd13d 100644
--- a/include/linux/lockdep.h
+++ b/include/linux/lockdep.h
@@ -252,7 +252,6 @@ struct held_lock {
        unsigned int trylock:1;                                         /* 16 
bits */
 
        unsigned int read:2;        /* see lock_acquire() comment */
-       unsigned int check:2;       /* see lock_acquire() comment */
        unsigned int hardirqs_off:1;
        unsigned int references:11;                                     /* 32 
bits */
 };
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
index 576ba75..32ba948 100644
--- a/kernel/locking/lockdep.c
+++ b/kernel/locking/lockdep.c
@@ -2096,7 +2096,8 @@ static int validate_chain(struct task_struct *curr, 
struct lockdep_map *lock,
         * (If lookup_chain_cache() returns with 1 it acquires
         * graph_lock for us)
         */
-       if (!hlock->trylock && (hlock->check == 2) &&
+       if (!hlock->trylock && prove_locking &&
+           hlock_class(hlock)->key != __lockdep_no_validate__.subkeys &&
            lookup_chain_cache(curr, hlock, chain_key)) {
                /*
                 * Check whether last held lock:
@@ -3041,7 +3042,7 @@ static int __lock_is_held(struct lockdep_map *lock);
  * We maintain the dependency maps and validate the locking attempt:
  */
 static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass,
-                         int trylock, int read, int check, int hardirqs_off,
+                         int trylock, int read, int hardirqs_off,
                          struct lockdep_map *nest_lock, unsigned long ip,
                          int references)
 {
@@ -3053,9 +3054,6 @@ static int __lock_acquire(struct lockdep_map *lock, 
unsigned int subclass,
        int class_idx;
        u64 chain_key;
 
-       if (!prove_locking)
-               check = 1;
-
        if (unlikely(!debug_locks))
                return 0;
 
@@ -3067,9 +3065,6 @@ static int __lock_acquire(struct lockdep_map *lock, 
unsigned int subclass,
        if (DEBUG_LOCKS_WARN_ON(!irqs_disabled()))
                return 0;
 
-       if (lock->key == &__lockdep_no_validate__)
-               check = 1;
-
        if (subclass < NR_LOCKDEP_CACHING_CLASSES)
                class = lock->class_cache[subclass];
        /*
@@ -3128,7 +3123,6 @@ static int __lock_acquire(struct lockdep_map *lock, 
unsigned int subclass,
        hlock->nest_lock = nest_lock;
        hlock->trylock = trylock;
        hlock->read = read;
-       hlock->check = check;
        hlock->hardirqs_off = !!hardirqs_off;
        hlock->references = references;
 #ifdef CONFIG_LOCK_STAT
@@ -3136,7 +3130,7 @@ static int __lock_acquire(struct lockdep_map *lock, 
unsigned int subclass,
        hlock->holdtime_stamp = lockstat_clock();
 #endif
 
-       if (check == 2 && !mark_irqflags(curr, hlock))
+       if (prove_locking && !mark_irqflags(curr, hlock))
                return 0;
 
        /* mark it as used: */
@@ -3338,7 +3332,7 @@ found_it:
                hlock = curr->held_locks + i;
                if (!__lock_acquire(hlock->instance,
                        hlock_class(hlock)->subclass, hlock->trylock,
-                               hlock->read, hlock->check, hlock->hardirqs_off,
+                               hlock->read, hlock->hardirqs_off,
                                hlock->nest_lock, hlock->acquire_ip,
                                hlock->references))
                        return 0;
@@ -3422,7 +3416,7 @@ found_it:
                hlock = curr->held_locks + i;
                if (!__lock_acquire(hlock->instance,
                        hlock_class(hlock)->subclass, hlock->trylock,
-                               hlock->read, hlock->check, hlock->hardirqs_off,
+                               hlock->read, hlock->hardirqs_off,
                                hlock->nest_lock, hlock->acquire_ip,
                                hlock->references))
                        return 0;
@@ -3598,8 +3592,8 @@ void lock_acquire(struct lockdep_map *lock, unsigned int 
subclass,
 
        current->lockdep_recursion = 1;
        trace_lock_acquire(lock, subclass, trylock, read, check, nest_lock, ip);
-       __lock_acquire(lock, subclass, trylock, read, check,
-                      irqs_disabled_flags(flags), nest_lock, ip, 0);
+       __lock_acquire(lock, subclass, trylock, read,
+                       irqs_disabled_flags(flags), nest_lock, ip, 0);
        current->lockdep_recursion = 0;
        raw_local_irq_restore(flags);
 }
-- 
1.5.5.1


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to