Messages in this thread Patch in this message | | | From | Waiman Long <> | Subject | [PATCH-tip v2] locking/lockdep: Cleanup reinit_class() | Date | Mon, 14 Feb 2022 15:07:12 -0500 |
| |
Replace the duplicated WARN_ON_ONCE() tests in reinit_class() with BUILD_BUG_ON() which have the same effect of making sure that those lists aren't cleared accidentally because of their placements in the lock_class structure.
Signed-off-by: Waiman Long <longman@redhat.com> --- include/linux/lockdep_types.h | 4 ++++ kernel/locking/lockdep.c | 8 +++++--- 2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/include/linux/lockdep_types.h b/include/linux/lockdep_types.h index d22430840b53..446d981ae3a2 100644 --- a/include/linux/lockdep_types.h +++ b/include/linux/lockdep_types.h @@ -108,6 +108,10 @@ struct lock_class { */ struct list_head locks_after, locks_before; + /* + * All the fields that require re-initialization after being zapped + * must be put after "key". + */ const struct lockdep_subclass_key *key; unsigned int subclass; unsigned int dep_gen_id; diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c index 2e6892ec3756..5fb015dc1686 100644 --- a/kernel/locking/lockdep.c +++ b/kernel/locking/lockdep.c @@ -6011,13 +6011,15 @@ static void zap_class(struct pending_free *pf, struct lock_class *class) static void reinit_class(struct lock_class *class) { + const unsigned int key_offset = offsetof(struct lock_class, key); + WARN_ON_ONCE(!class->lock_entry.next); WARN_ON_ONCE(!list_empty(&class->locks_after)); WARN_ON_ONCE(!list_empty(&class->locks_before)); + BUILD_BUG_ON(offsetof(struct lock_class, lock_entry) > key_offset); + BUILD_BUG_ON(offsetof(struct lock_class, locks_after) > key_offset); + BUILD_BUG_ON(offsetof(struct lock_class, locks_before) > key_offset); memset_startat(class, 0, key); - WARN_ON_ONCE(!class->lock_entry.next); - WARN_ON_ONCE(!list_empty(&class->locks_after)); - WARN_ON_ONCE(!list_empty(&class->locks_before)); } static inline int within(const void *addr, void *start, unsigned long size) -- 2.27.0
| |