locking/lockdep: Fix lockdep_init_map_*() confusion
[ Upstream commit eae6d58d67d9739be5f7ae2dbead1d0ef6528243 ] Commit dfd5e3f5fe27 ("locking/lockdep: Mark local_lock_t") added yet another lockdep_init_map_*() variant, but forgot to update all the existing users of the most complicated version. This could lead to a loss of lock_type and hence an incorrect report. Given the relative rarity of both local_lock and these annotations, this is unlikely to happen in practise, still, best fix things. Fixes: dfd5e3f5fe27 ("locking/lockdep: Mark local_lock_t") Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lkml.kernel.org/r/YqyEDtoan20K0CVD@worktop.programming.kicks-ass.net Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
5b418289b0
commit
e0067e6d54
@ -192,7 +192,7 @@ static inline void
|
||||
lockdep_init_map_waits(struct lockdep_map *lock, const char *name,
|
||||
struct lock_class_key *key, int subclass, u8 inner, u8 outer)
|
||||
{
|
||||
lockdep_init_map_type(lock, name, key, subclass, inner, LD_WAIT_INV, LD_LOCK_NORMAL);
|
||||
lockdep_init_map_type(lock, name, key, subclass, inner, outer, LD_LOCK_NORMAL);
|
||||
}
|
||||
|
||||
static inline void
|
||||
@ -215,24 +215,28 @@ static inline void lockdep_init_map(struct lockdep_map *lock, const char *name,
|
||||
* or they are too narrow (they suffer from a false class-split):
|
||||
*/
|
||||
#define lockdep_set_class(lock, key) \
|
||||
lockdep_init_map_waits(&(lock)->dep_map, #key, key, 0, \
|
||||
(lock)->dep_map.wait_type_inner, \
|
||||
(lock)->dep_map.wait_type_outer)
|
||||
lockdep_init_map_type(&(lock)->dep_map, #key, key, 0, \
|
||||
(lock)->dep_map.wait_type_inner, \
|
||||
(lock)->dep_map.wait_type_outer, \
|
||||
(lock)->dep_map.lock_type)
|
||||
|
||||
#define lockdep_set_class_and_name(lock, key, name) \
|
||||
lockdep_init_map_waits(&(lock)->dep_map, name, key, 0, \
|
||||
(lock)->dep_map.wait_type_inner, \
|
||||
(lock)->dep_map.wait_type_outer)
|
||||
lockdep_init_map_type(&(lock)->dep_map, name, key, 0, \
|
||||
(lock)->dep_map.wait_type_inner, \
|
||||
(lock)->dep_map.wait_type_outer, \
|
||||
(lock)->dep_map.lock_type)
|
||||
|
||||
#define lockdep_set_class_and_subclass(lock, key, sub) \
|
||||
lockdep_init_map_waits(&(lock)->dep_map, #key, key, sub,\
|
||||
(lock)->dep_map.wait_type_inner, \
|
||||
(lock)->dep_map.wait_type_outer)
|
||||
lockdep_init_map_type(&(lock)->dep_map, #key, key, sub, \
|
||||
(lock)->dep_map.wait_type_inner, \
|
||||
(lock)->dep_map.wait_type_outer, \
|
||||
(lock)->dep_map.lock_type)
|
||||
|
||||
#define lockdep_set_subclass(lock, sub) \
|
||||
lockdep_init_map_waits(&(lock)->dep_map, #lock, (lock)->dep_map.key, sub,\
|
||||
(lock)->dep_map.wait_type_inner, \
|
||||
(lock)->dep_map.wait_type_outer)
|
||||
lockdep_init_map_type(&(lock)->dep_map, #lock, (lock)->dep_map.key, sub,\
|
||||
(lock)->dep_map.wait_type_inner, \
|
||||
(lock)->dep_map.wait_type_outer, \
|
||||
(lock)->dep_map.lock_type)
|
||||
|
||||
#define lockdep_set_novalidate_class(lock) \
|
||||
lockdep_set_class_and_name(lock, &__lockdep_no_validate__, #lock)
|
||||
|
@ -5202,9 +5202,10 @@ __lock_set_class(struct lockdep_map *lock, const char *name,
|
||||
return 0;
|
||||
}
|
||||
|
||||
lockdep_init_map_waits(lock, name, key, 0,
|
||||
lock->wait_type_inner,
|
||||
lock->wait_type_outer);
|
||||
lockdep_init_map_type(lock, name, key, 0,
|
||||
lock->wait_type_inner,
|
||||
lock->wait_type_outer,
|
||||
lock->lock_type);
|
||||
class = register_lock_class(lock, subclass, 0);
|
||||
hlock->class_idx = class - lock_classes;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user