mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-07-05 21:35:46 +02:00
tracing: Use refcount for trace_event_file reference counter
Instead of using an atomic counter for the trace_event_file reference counter, use the refcount interface. It has various checks to make sure the reference counting is correct, and will warn if it detects an error (like refcount_inc() on '0'). Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Link: https://lore.kernel.org/20240726144208.687cce24@rorschach.local.home Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
This commit is contained in:
parent
b156040869
commit
6e2fdceffd
|
@ -680,7 +680,7 @@ struct trace_event_file {
|
||||||
* caching and such. Which is mostly OK ;-)
|
* caching and such. Which is mostly OK ;-)
|
||||||
*/
|
*/
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
atomic_t ref; /* ref count for opened files */
|
refcount_t ref; /* ref count for opened files */
|
||||||
atomic_t sm_ref; /* soft-mode reference counter */
|
atomic_t sm_ref; /* soft-mode reference counter */
|
||||||
atomic_t tm_ref; /* trigger-mode reference counter */
|
atomic_t tm_ref; /* trigger-mode reference counter */
|
||||||
};
|
};
|
||||||
|
|
|
@ -992,18 +992,18 @@ static void remove_subsystem(struct trace_subsystem_dir *dir)
|
||||||
|
|
||||||
void event_file_get(struct trace_event_file *file)
|
void event_file_get(struct trace_event_file *file)
|
||||||
{
|
{
|
||||||
atomic_inc(&file->ref);
|
refcount_inc(&file->ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
void event_file_put(struct trace_event_file *file)
|
void event_file_put(struct trace_event_file *file)
|
||||||
{
|
{
|
||||||
if (WARN_ON_ONCE(!atomic_read(&file->ref))) {
|
if (WARN_ON_ONCE(!refcount_read(&file->ref))) {
|
||||||
if (file->flags & EVENT_FILE_FL_FREED)
|
if (file->flags & EVENT_FILE_FL_FREED)
|
||||||
kmem_cache_free(file_cachep, file);
|
kmem_cache_free(file_cachep, file);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (atomic_dec_and_test(&file->ref)) {
|
if (refcount_dec_and_test(&file->ref)) {
|
||||||
/* Count should only go to zero when it is freed */
|
/* Count should only go to zero when it is freed */
|
||||||
if (WARN_ON_ONCE(!(file->flags & EVENT_FILE_FL_FREED)))
|
if (WARN_ON_ONCE(!(file->flags & EVENT_FILE_FL_FREED)))
|
||||||
return;
|
return;
|
||||||
|
@ -3003,7 +3003,7 @@ trace_create_new_event(struct trace_event_call *call,
|
||||||
atomic_set(&file->tm_ref, 0);
|
atomic_set(&file->tm_ref, 0);
|
||||||
INIT_LIST_HEAD(&file->triggers);
|
INIT_LIST_HEAD(&file->triggers);
|
||||||
list_add(&file->list, &tr->events);
|
list_add(&file->list, &tr->events);
|
||||||
event_file_get(file);
|
refcount_set(&file->ref, 1);
|
||||||
|
|
||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user