mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-16 17:57:38 -04:00
lib: split codetag_lock_module_list()
Letting a function argument indicate whether a lock or unlock operation
should be performed is incompatible with compile-time analysis of locking
operations by sparse and Clang. Hence, split codetag_lock_module_list()
into two functions: a function that locks cttype->mod_lock and another
function that unlocks cttype->mod_lock. No functionality has been
changed. See also commit 916cc5167c ("lib: code tagging framework").
Link: https://lore.kernel.org/20260324214226.3684605-1-bvanassche@acm.org
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Acked-by: Suren Baghdasaryan <surenb@google.com>
Cc: Kent Overstreet <kent.overstreet@linux.dev>
Cc: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
committed by
Andrew Morton
parent
2956268efc
commit
67c2696cf7
@@ -74,8 +74,9 @@ struct codetag_iterator {
|
||||
.flags = 0, \
|
||||
}
|
||||
|
||||
void codetag_lock_module_list(struct codetag_type *cttype, bool lock);
|
||||
void codetag_lock_module_list(struct codetag_type *cttype);
|
||||
bool codetag_trylock_module_list(struct codetag_type *cttype);
|
||||
void codetag_unlock_module_list(struct codetag_type *cttype);
|
||||
struct codetag_iterator codetag_get_ct_iter(struct codetag_type *cttype);
|
||||
struct codetag *codetag_next_ct(struct codetag_iterator *iter);
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ static void *allocinfo_start(struct seq_file *m, loff_t *pos)
|
||||
loff_t node = *pos;
|
||||
|
||||
priv = (struct allocinfo_private *)m->private;
|
||||
codetag_lock_module_list(alloc_tag_cttype, true);
|
||||
codetag_lock_module_list(alloc_tag_cttype);
|
||||
if (node == 0) {
|
||||
priv->print_header = true;
|
||||
priv->iter = codetag_get_ct_iter(alloc_tag_cttype);
|
||||
@@ -82,7 +82,7 @@ static void *allocinfo_next(struct seq_file *m, void *arg, loff_t *pos)
|
||||
|
||||
static void allocinfo_stop(struct seq_file *m, void *arg)
|
||||
{
|
||||
codetag_lock_module_list(alloc_tag_cttype, false);
|
||||
codetag_unlock_module_list(alloc_tag_cttype);
|
||||
}
|
||||
|
||||
static void print_allocinfo_header(struct seq_buf *buf)
|
||||
@@ -141,7 +141,7 @@ size_t alloc_tag_top_users(struct codetag_bytes *tags, size_t count, bool can_sl
|
||||
return 0;
|
||||
|
||||
if (can_sleep)
|
||||
codetag_lock_module_list(alloc_tag_cttype, true);
|
||||
codetag_lock_module_list(alloc_tag_cttype);
|
||||
else if (!codetag_trylock_module_list(alloc_tag_cttype))
|
||||
return 0;
|
||||
|
||||
@@ -166,7 +166,7 @@ size_t alloc_tag_top_users(struct codetag_bytes *tags, size_t count, bool can_sl
|
||||
}
|
||||
}
|
||||
|
||||
codetag_lock_module_list(alloc_tag_cttype, false);
|
||||
codetag_unlock_module_list(alloc_tag_cttype);
|
||||
|
||||
return nr;
|
||||
}
|
||||
|
||||
@@ -35,12 +35,9 @@ struct codetag_module {
|
||||
static DEFINE_MUTEX(codetag_lock);
|
||||
static LIST_HEAD(codetag_types);
|
||||
|
||||
void codetag_lock_module_list(struct codetag_type *cttype, bool lock)
|
||||
void codetag_lock_module_list(struct codetag_type *cttype)
|
||||
{
|
||||
if (lock)
|
||||
down_read(&cttype->mod_lock);
|
||||
else
|
||||
up_read(&cttype->mod_lock);
|
||||
down_read(&cttype->mod_lock);
|
||||
}
|
||||
|
||||
bool codetag_trylock_module_list(struct codetag_type *cttype)
|
||||
@@ -48,6 +45,11 @@ bool codetag_trylock_module_list(struct codetag_type *cttype)
|
||||
return down_read_trylock(&cttype->mod_lock) != 0;
|
||||
}
|
||||
|
||||
void codetag_unlock_module_list(struct codetag_type *cttype)
|
||||
{
|
||||
up_read(&cttype->mod_lock);
|
||||
}
|
||||
|
||||
struct codetag_iterator codetag_get_ct_iter(struct codetag_type *cttype)
|
||||
{
|
||||
struct codetag_iterator iter = {
|
||||
|
||||
Reference in New Issue
Block a user