projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
[firefly-linux-kernel-4.4.55.git]
/
kernel
/
lockdep.c
diff --git
a/kernel/lockdep.c
b/kernel/lockdep.c
index 723bd9f9255687f7820b0e151ae23a3d5ca81e7b..81a4e4a3f087adfc650eb6baf2c05147f209e062 100644
(file)
--- a/
kernel/lockdep.c
+++ b/
kernel/lockdep.c
@@
-779,6
+779,10
@@
register_lock_class(struct lockdep_map *lock, unsigned int subclass, int force)
* parallel walking of the hash-list safe:
*/
list_add_tail_rcu(&class->hash_entry, hash_head);
* parallel walking of the hash-list safe:
*/
list_add_tail_rcu(&class->hash_entry, hash_head);
+ /*
+ * Add it to the global list of classes:
+ */
+ list_add_tail_rcu(&class->lock_entry, &all_lock_classes);
if (verbose(class)) {
graph_unlock();
if (verbose(class)) {
graph_unlock();
@@
-2282,10
+2286,6
@@
static int mark_lock(struct task_struct *curr, struct held_lock *this,
return 0;
break;
case LOCK_USED:
return 0;
break;
case LOCK_USED:
- /*
- * Add it to the global list of classes:
- */
- list_add_tail_rcu(&this->class->lock_entry, &all_lock_classes);
debug_atomic_dec(&nr_unused_locks);
break;
default:
debug_atomic_dec(&nr_unused_locks);
break;
default:
@@
-2932,7
+2932,7
@@
static void zap_class(struct lock_class *class)
}
}
-static inline int within(void *addr, void *start, unsigned long size)
+static inline int within(
const
void *addr, void *start, unsigned long size)
{
return addr >= start && addr < start + size;
}
{
return addr >= start && addr < start + size;
}
@@
-2943,9
+2943,10
@@
void lockdep_free_key_range(void *start, unsigned long size)
struct list_head *head;
unsigned long flags;
int i;
struct list_head *head;
unsigned long flags;
int i;
+ int locked;
raw_local_irq_save(flags);
raw_local_irq_save(flags);
- graph_lock();
+
locked =
graph_lock();
/*
* Unhash all classes that were created by this module:
/*
* Unhash all classes that were created by this module:
@@
-2954,12
+2955,16
@@
void lockdep_free_key_range(void *start, unsigned long size)
head = classhash_table + i;
if (list_empty(head))
continue;
head = classhash_table + i;
if (list_empty(head))
continue;
- list_for_each_entry_safe(class, next, head, hash_entry)
+ list_for_each_entry_safe(class, next, head, hash_entry)
{
if (within(class->key, start, size))
zap_class(class);
if (within(class->key, start, size))
zap_class(class);
+ else if (within(class->name, start, size))
+ zap_class(class);
+ }
}
}
- graph_unlock();
+ if (locked)
+ graph_unlock();
raw_local_irq_restore(flags);
}
raw_local_irq_restore(flags);
}
@@
-2969,6
+2974,7
@@
void lockdep_reset_lock(struct lockdep_map *lock)
struct list_head *head;
unsigned long flags;
int i, j;
struct list_head *head;
unsigned long flags;
int i, j;
+ int locked;
raw_local_irq_save(flags);
raw_local_irq_save(flags);
@@
-2987,7
+2993,7
@@
void lockdep_reset_lock(struct lockdep_map *lock)
* Debug check: in the end all mapped classes should
* be gone.
*/
* Debug check: in the end all mapped classes should
* be gone.
*/
- graph_lock();
+
locked =
graph_lock();
for (i = 0; i < CLASSHASH_SIZE; i++) {
head = classhash_table + i;
if (list_empty(head))
for (i = 0; i < CLASSHASH_SIZE; i++) {
head = classhash_table + i;
if (list_empty(head))
@@
-3000,7
+3006,8
@@
void lockdep_reset_lock(struct lockdep_map *lock)
}
}
}
}
}
}
- graph_unlock();
+ if (locked)
+ graph_unlock();
out_restore:
raw_local_irq_restore(flags);
out_restore:
raw_local_irq_restore(flags);
@@
-3199,7
+3206,11
@@
retry:
EXPORT_SYMBOL_GPL(debug_show_all_locks);
EXPORT_SYMBOL_GPL(debug_show_all_locks);
-void debug_show_held_locks(struct task_struct *task)
+/*
+ * Careful: only use this function if you are sure that
+ * the task cannot run in parallel!
+ */
+void __debug_show_held_locks(struct task_struct *task)
{
if (unlikely(!debug_locks)) {
printk("INFO: lockdep is turned off.\n");
{
if (unlikely(!debug_locks)) {
printk("INFO: lockdep is turned off.\n");
@@
-3207,6
+3218,12
@@
void debug_show_held_locks(struct task_struct *task)
}
lockdep_print_held_locks(task);
}
}
lockdep_print_held_locks(task);
}
+EXPORT_SYMBOL_GPL(__debug_show_held_locks);
+
+void debug_show_held_locks(struct task_struct *task)
+{
+ __debug_show_held_locks(task);
+}
EXPORT_SYMBOL_GPL(debug_show_held_locks);
EXPORT_SYMBOL_GPL(debug_show_held_locks);