[PATCH] lockdep: constify usage of struct lock_class_key where possible

From: Heiner Kallweit

Date: Tue Apr 28 2026 - 17:05:35 EST


Constify usage of struct lock_class_key where possible. This requires
to constify also usage of struct lockdep_subclass_key in two places.

Especially relevant is constification of lockdep_map.key, as it makes
clear that the key isn't changed during lifetime of struct lockdep_map.

Signed-off-by: Heiner Kallweit <hkallweit1@xxxxxxxxx>
---
include/linux/lockdep.h | 18 ++++++++++--------
include/linux/lockdep_types.h | 2 +-
kernel/locking/lockdep.c | 12 ++++++------
3 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
index 621566345..3fa2b62f2 100644
--- a/include/linux/lockdep.h
+++ b/include/linux/lockdep.h
@@ -125,25 +125,27 @@ extern void lockdep_unregister_key(struct lock_class_key *key);
* to lockdep:
*/

-extern void lockdep_init_map_type(struct lockdep_map *lock, const char *name,
- struct lock_class_key *key, int subclass, u8 inner, u8 outer, u8 lock_type);
+void lockdep_init_map_type(struct lockdep_map *lock, const char *name,
+ const struct lock_class_key *key, int subclass,
+ u8 inner, u8 outer, u8 lock_type);

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)
+ const struct lock_class_key *key, int subclass,
+ u8 inner, u8 outer)
{
lockdep_init_map_type(lock, name, key, subclass, inner, outer, LD_LOCK_NORMAL);
}

static inline void
lockdep_init_map_wait(struct lockdep_map *lock, const char *name,
- struct lock_class_key *key, int subclass, u8 inner)
+ const struct lock_class_key *key, int subclass, u8 inner)
{
lockdep_init_map_waits(lock, name, key, subclass, inner, LD_WAIT_INV);
}

static inline void lockdep_init_map(struct lockdep_map *lock, const char *name,
- struct lock_class_key *key, int subclass)
+ const struct lock_class_key *key, int subclass)
{
lockdep_init_map_wait(lock, name, key, subclass, LD_WAIT_INV);
}
@@ -252,9 +254,9 @@ static inline int lock_is_held(const struct lockdep_map *lock)
#define lockdep_is_held(lock) lock_is_held(&(lock)->dep_map)
#define lockdep_is_held_type(lock, r) lock_is_held_type(&(lock)->dep_map, (r))

-extern void lock_set_class(struct lockdep_map *lock, const char *name,
- struct lock_class_key *key, unsigned int subclass,
- unsigned long ip);
+void lock_set_class(struct lockdep_map *lock, const char *name,
+ const struct lock_class_key *key, unsigned int subclass,
+ unsigned long ip);

#define lock_set_novalidate_class(l, n, i) \
lock_set_class(l, n, &__lockdep_no_validate__, 0, i)
diff --git a/include/linux/lockdep_types.h b/include/linux/lockdep_types.h
index eae115a26..0d3df9019 100644
--- a/include/linux/lockdep_types.h
+++ b/include/linux/lockdep_types.h
@@ -184,7 +184,7 @@ void clear_lock_stats(struct lock_class *class);
* This is embedded into specific lock instances:
*/
struct lockdep_map {
- struct lock_class_key *key;
+ const struct lock_class_key *key;
struct lock_class *class_cache[NR_LOCKDEP_CACHING_CLASSES];
const char *name;
u8 wait_type_outer; /* can be taken in this context */
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
index f13883162..fe1415260 100644
--- a/kernel/locking/lockdep.c
+++ b/kernel/locking/lockdep.c
@@ -888,7 +888,7 @@ static int count_matching_names(struct lock_class *new_class)
static noinstr struct lock_class *
look_up_lock_class(const struct lockdep_map *lock, unsigned int subclass)
{
- struct lockdep_subclass_key *key;
+ const struct lockdep_subclass_key *key;
struct hlist_head *hash_head;
struct lock_class *class;

@@ -1286,7 +1286,7 @@ static bool is_dynamic_key(const struct lock_class_key *key)
static struct lock_class *
register_lock_class(struct lockdep_map *lock, unsigned int subclass, int force)
{
- struct lockdep_subclass_key *key;
+ const struct lockdep_subclass_key *key;
struct hlist_head *hash_head;
struct lock_class *class;
int idx;
@@ -4937,8 +4937,8 @@ static inline int check_wait_context(struct task_struct *curr,
* Initialize a lock instance's lock-class mapping info:
*/
void lockdep_init_map_type(struct lockdep_map *lock, const char *name,
- struct lock_class_key *key, int subclass,
- u8 inner, u8 outer, u8 lock_type)
+ const struct lock_class_key *key, int subclass,
+ u8 inner, u8 outer, u8 lock_type)
{
int i;

@@ -5408,7 +5408,7 @@ static int reacquire_held_locks(struct task_struct *curr, unsigned int depth,

static int
__lock_set_class(struct lockdep_map *lock, const char *name,
- struct lock_class_key *key, unsigned int subclass,
+ const struct lock_class_key *key, unsigned int subclass,
unsigned long ip)
{
struct task_struct *curr = current;
@@ -5733,7 +5733,7 @@ static noinstr void check_flags(unsigned long flags)
}

void lock_set_class(struct lockdep_map *lock, const char *name,
- struct lock_class_key *key, unsigned int subclass,
+ const struct lock_class_key *key, unsigned int subclass,
unsigned long ip)
{
unsigned long flags;
--
2.54.0