From: Gabriele Monaco <gmonaco@redhat.com>
To: Nam Cao <namcao@linutronix.de>
Cc: Steven Rostedt <rostedt@goodmis.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/6] rv: Merge struct rv_monitor_def into struct rv_monitor
Date: Mon, 21 Jul 2025 16:13:21 +0200 [thread overview]
Message-ID: <d53d5bddaf9ac2d9ecbbc2153a2c24c0044096ab.camel@redhat.com> (raw)
In-Reply-To: <61a0bc99fae3a5222946b1786063ac03f6360e42.1753091084.git.namcao@linutronix.de>
On Mon, 2025-07-21 at 11:47 +0200, Nam Cao wrote:
> Each struct rv_monitor has a unique struct rv_monitor_def associated
> with
> it. struct rv_monitor is statically allocated, while struct
> rv_monitor_def
> is dynamically allocated.
>
> This makes the code more complicated than it should be:
>
> - Lookup is required to get the associated rv_monitor_def from
> rv_monitor
>
> - Dynamic memory allocation is required for rv_monitor_def. This is
> harder to get right compared to static memory. For instance,
> there is an existing mistake: rv_unregister_monitor() does not free
> the memory allocated by rv_register_monitor(). This is fortunately
> not a real memory leak problem, as rv_unregister_monitor() is never
> called.
>
> Simplify and merge rv_monitor_def into rv_monitor.
>
> Signed-off-by: Nam Cao <namcao@linutronix.de>
Right, I don't see a valid reason for keeping it separate, considering
that's also simplifying things.
Reviewed-by: Gabriele Monaco <gmonaco@redhat.com>
Thanks,
Gabriele
> ---
> include/linux/rv.h | 8 ++
> kernel/trace/rv/rv.c | 211 +++++++++++++++-----------------
> --
> kernel/trace/rv/rv.h | 27 ++---
> kernel/trace/rv/rv_reactors.c | 62 +++++-----
> 4 files changed, 140 insertions(+), 168 deletions(-)
>
> diff --git a/include/linux/rv.h b/include/linux/rv.h
> index 97baf58d88b2..dba53aecdfab 100644
> --- a/include/linux/rv.h
> +++ b/include/linux/rv.h
> @@ -7,6 +7,9 @@
> #ifndef _LINUX_RV_H
> #define _LINUX_RV_H
>
> +#include <linux/types.h>
> +#include <linux/list.h>
> +
> #define MAX_DA_NAME_LEN 32
>
> #ifdef CONFIG_RV
> @@ -98,8 +101,13 @@ struct rv_monitor {
> void (*disable)(void);
> void (*reset)(void);
> #ifdef CONFIG_RV_REACTORS
> + struct rv_reactor_def *rdef;
> __printf(1, 2) void (*react)(const char *msg, ...);
> + bool reacting;
> #endif
> + struct list_head list;
> + struct rv_monitor *parent;
> + struct dentry *root_d;
> };
>
> bool rv_monitoring_on(void);
> diff --git a/kernel/trace/rv/rv.c b/kernel/trace/rv/rv.c
> index 108429d16ec1..6c0be2fdc52d 100644
> --- a/kernel/trace/rv/rv.c
> +++ b/kernel/trace/rv/rv.c
> @@ -210,9 +210,9 @@ void rv_put_task_monitor_slot(int slot)
> * Monitors with a parent are nested,
> * Monitors without a parent could be standalone or containers.
> */
> -bool rv_is_nested_monitor(struct rv_monitor_def *mdef)
> +bool rv_is_nested_monitor(struct rv_monitor *mon)
> {
> - return mdef->parent != NULL;
> + return mon->parent != NULL;
> }
>
> /*
> @@ -223,16 +223,16 @@ bool rv_is_nested_monitor(struct rv_monitor_def
> *mdef)
> * for enable()/disable(). Use this condition to find empty
> containers.
> * Keep both conditions in case we have some non-compliant
> containers.
> */
> -bool rv_is_container_monitor(struct rv_monitor_def *mdef)
> +bool rv_is_container_monitor(struct rv_monitor *mon)
> {
> - struct rv_monitor_def *next;
> + struct rv_monitor *next;
>
> - if (list_is_last(&mdef->list, &rv_monitors_list))
> + if (list_is_last(&mon->list, &rv_monitors_list))
> return false;
>
> - next = list_next_entry(mdef, list);
> + next = list_next_entry(mon, list);
>
> - return next->parent == mdef->monitor || !mdef->monitor-
> >enable;
> + return next->parent == mon || !mon->enable;
> }
>
> /*
> @@ -241,10 +241,10 @@ bool rv_is_container_monitor(struct
> rv_monitor_def *mdef)
> static ssize_t monitor_enable_read_data(struct file *filp, char
> __user *user_buf, size_t count,
> loff_t *ppos)
> {
> - struct rv_monitor_def *mdef = filp->private_data;
> + struct rv_monitor *mon = filp->private_data;
> const char *buff;
>
> - buff = mdef->monitor->enabled ? "1\n" : "0\n";
> + buff = mon->enabled ? "1\n" : "0\n";
>
> return simple_read_from_buffer(user_buf, count, ppos, buff,
> strlen(buff)+1);
> }
> @@ -252,14 +252,14 @@ static ssize_t monitor_enable_read_data(struct
> file *filp, char __user *user_buf
> /*
> * __rv_disable_monitor - disabled an enabled monitor
> */
> -static int __rv_disable_monitor(struct rv_monitor_def *mdef, bool
> sync)
> +static int __rv_disable_monitor(struct rv_monitor *mon, bool sync)
> {
> lockdep_assert_held(&rv_interface_lock);
>
> - if (mdef->monitor->enabled) {
> - mdef->monitor->enabled = 0;
> - if (mdef->monitor->disable)
> - mdef->monitor->disable();
> + if (mon->enabled) {
> + mon->enabled = 0;
> + if (mon->disable)
> + mon->disable();
>
> /*
> * Wait for the execution of all events to finish.
> @@ -273,90 +273,90 @@ static int __rv_disable_monitor(struct
> rv_monitor_def *mdef, bool sync)
> return 0;
> }
>
> -static void rv_disable_single(struct rv_monitor_def *mdef)
> +static void rv_disable_single(struct rv_monitor *mon)
> {
> - __rv_disable_monitor(mdef, true);
> + __rv_disable_monitor(mon, true);
> }
>
> -static int rv_enable_single(struct rv_monitor_def *mdef)
> +static int rv_enable_single(struct rv_monitor *mon)
> {
> int retval;
>
> lockdep_assert_held(&rv_interface_lock);
>
> - if (mdef->monitor->enabled)
> + if (mon->enabled)
> return 0;
>
> - retval = mdef->monitor->enable();
> + retval = mon->enable();
>
> if (!retval)
> - mdef->monitor->enabled = 1;
> + mon->enabled = 1;
>
> return retval;
> }
>
> -static void rv_disable_container(struct rv_monitor_def *mdef)
> +static void rv_disable_container(struct rv_monitor *mon)
> {
> - struct rv_monitor_def *p = mdef;
> + struct rv_monitor *p = mon;
> int enabled = 0;
>
> list_for_each_entry_continue(p, &rv_monitors_list, list) {
> - if (p->parent != mdef->monitor)
> + if (p->parent != mon)
> break;
> enabled += __rv_disable_monitor(p, false);
> }
> if (enabled)
> tracepoint_synchronize_unregister();
> - mdef->monitor->enabled = 0;
> + mon->enabled = 0;
> }
>
> -static int rv_enable_container(struct rv_monitor_def *mdef)
> +static int rv_enable_container(struct rv_monitor *mon)
> {
> - struct rv_monitor_def *p = mdef;
> + struct rv_monitor *p = mon;
> int retval = 0;
>
> list_for_each_entry_continue(p, &rv_monitors_list, list) {
> - if (retval || p->parent != mdef->monitor)
> + if (retval || p->parent != mon)
> break;
> retval = rv_enable_single(p);
> }
> if (retval)
> - rv_disable_container(mdef);
> + rv_disable_container(mon);
> else
> - mdef->monitor->enabled = 1;
> + mon->enabled = 1;
> return retval;
> }
>
> /**
> * rv_disable_monitor - disable a given runtime monitor
> - * @mdef: Pointer to the monitor definition structure.
> + * @mon: Pointer to the monitor definition structure.
> *
> * Returns 0 on success.
> */
> -int rv_disable_monitor(struct rv_monitor_def *mdef)
> +int rv_disable_monitor(struct rv_monitor *mon)
> {
> - if (rv_is_container_monitor(mdef))
> - rv_disable_container(mdef);
> + if (rv_is_container_monitor(mon))
> + rv_disable_container(mon);
> else
> - rv_disable_single(mdef);
> + rv_disable_single(mon);
>
> return 0;
> }
>
> /**
> * rv_enable_monitor - enable a given runtime monitor
> - * @mdef: Pointer to the monitor definition structure.
> + * @mon: Pointer to the monitor definition structure.
> *
> * Returns 0 on success, error otherwise.
> */
> -int rv_enable_monitor(struct rv_monitor_def *mdef)
> +int rv_enable_monitor(struct rv_monitor *mon)
> {
> int retval;
>
> - if (rv_is_container_monitor(mdef))
> - retval = rv_enable_container(mdef);
> + if (rv_is_container_monitor(mon))
> + retval = rv_enable_container(mon);
> else
> - retval = rv_enable_single(mdef);
> + retval = rv_enable_single(mon);
>
> return retval;
> }
> @@ -367,7 +367,7 @@ int rv_enable_monitor(struct rv_monitor_def
> *mdef)
> static ssize_t monitor_enable_write_data(struct file *filp, const
> char __user *user_buf,
> size_t count, loff_t *ppos)
> {
> - struct rv_monitor_def *mdef = filp->private_data;
> + struct rv_monitor *mon = filp->private_data;
> int retval;
> bool val;
>
> @@ -378,9 +378,9 @@ static ssize_t monitor_enable_write_data(struct
> file *filp, const char __user *u
> mutex_lock(&rv_interface_lock);
>
> if (val)
> - retval = rv_enable_monitor(mdef);
> + retval = rv_enable_monitor(mon);
> else
> - retval = rv_disable_monitor(mdef);
> + retval = rv_disable_monitor(mon);
>
> mutex_unlock(&rv_interface_lock);
>
> @@ -399,12 +399,12 @@ static const struct file_operations
> interface_enable_fops = {
> static ssize_t monitor_desc_read_data(struct file *filp, char __user
> *user_buf, size_t count,
> loff_t *ppos)
> {
> - struct rv_monitor_def *mdef = filp->private_data;
> + struct rv_monitor *mon = filp->private_data;
> char buff[256];
>
> memset(buff, 0, sizeof(buff));
>
> - snprintf(buff, sizeof(buff), "%s\n", mdef->monitor-
> >description);
> + snprintf(buff, sizeof(buff), "%s\n", mon->description);
>
> return simple_read_from_buffer(user_buf, count, ppos, buff,
> strlen(buff) + 1);
> }
> @@ -419,37 +419,37 @@ static const struct file_operations
> interface_desc_fops = {
> * the monitor dir, where the specific options of the monitor
> * are exposed.
> */
> -static int create_monitor_dir(struct rv_monitor_def *mdef, struct
> rv_monitor_def *parent)
> +static int create_monitor_dir(struct rv_monitor *mon, struct
> rv_monitor *parent)
> {
> struct dentry *root = parent ? parent->root_d :
> get_monitors_root();
> - const char *name = mdef->monitor->name;
> + const char *name = mon->name;
> struct dentry *tmp;
> int retval;
>
> - mdef->root_d = rv_create_dir(name, root);
> - if (!mdef->root_d)
> + mon->root_d = rv_create_dir(name, root);
> + if (!mon->root_d)
> return -ENOMEM;
>
> - tmp = rv_create_file("enable", RV_MODE_WRITE, mdef->root_d,
> mdef, &interface_enable_fops);
> + tmp = rv_create_file("enable", RV_MODE_WRITE, mon->root_d,
> mon, &interface_enable_fops);
> if (!tmp) {
> retval = -ENOMEM;
> goto out_remove_root;
> }
>
> - tmp = rv_create_file("desc", RV_MODE_READ, mdef->root_d,
> mdef, &interface_desc_fops);
> + tmp = rv_create_file("desc", RV_MODE_READ, mon->root_d, mon,
> &interface_desc_fops);
> if (!tmp) {
> retval = -ENOMEM;
> goto out_remove_root;
> }
>
> - retval = reactor_populate_monitor(mdef);
> + retval = reactor_populate_monitor(mon);
> if (retval)
> goto out_remove_root;
>
> return 0;
>
> out_remove_root:
> - rv_remove(mdef->root_d);
> + rv_remove(mon->root_d);
> return retval;
> }
>
> @@ -458,13 +458,12 @@ static int create_monitor_dir(struct
> rv_monitor_def *mdef, struct rv_monitor_def
> */
> static int monitors_show(struct seq_file *m, void *p)
> {
> - struct rv_monitor_def *mon_def = p;
> + struct rv_monitor *mon = p;
>
> - if (mon_def->parent)
> - seq_printf(m, "%s:%s\n", mon_def->parent->name,
> - mon_def->monitor->name);
> + if (mon->parent)
> + seq_printf(m, "%s:%s\n", mon->parent->name, mon-
> >name);
> else
> - seq_printf(m, "%s\n", mon_def->monitor->name);
> + seq_printf(m, "%s\n", mon->name);
> return 0;
> }
>
> @@ -496,13 +495,13 @@ static void *available_monitors_next(struct
> seq_file *m, void *p, loff_t *pos)
> */
> static void *enabled_monitors_next(struct seq_file *m, void *p,
> loff_t *pos)
> {
> - struct rv_monitor_def *m_def = p;
> + struct rv_monitor *mon = p;
>
> (*pos)++;
>
> - list_for_each_entry_continue(m_def, &rv_monitors_list, list)
> {
> - if (m_def->monitor->enabled)
> - return m_def;
> + list_for_each_entry_continue(mon, &rv_monitors_list, list) {
> + if (mon->enabled)
> + return mon;
> }
>
> return NULL;
> @@ -510,7 +509,7 @@ static void *enabled_monitors_next(struct
> seq_file *m, void *p, loff_t *pos)
>
> static void *enabled_monitors_start(struct seq_file *m, loff_t *pos)
> {
> - struct rv_monitor_def *m_def;
> + struct rv_monitor *mon;
> loff_t l;
>
> mutex_lock(&rv_interface_lock);
> @@ -518,15 +517,15 @@ static void *enabled_monitors_start(struct
> seq_file *m, loff_t *pos)
> if (list_empty(&rv_monitors_list))
> return NULL;
>
> - m_def = list_entry(&rv_monitors_list, struct rv_monitor_def,
> list);
> + mon = list_entry(&rv_monitors_list, struct rv_monitor,
> list);
>
> for (l = 0; l <= *pos; ) {
> - m_def = enabled_monitors_next(m, m_def, &l);
> - if (!m_def)
> + mon = enabled_monitors_next(m, mon, &l);
> + if (!mon)
> break;
> }
>
> - return m_def;
> + return mon;
> }
>
> /*
> @@ -566,13 +565,13 @@ static const struct file_operations
> available_monitors_ops = {
> */
> static void disable_all_monitors(void)
> {
> - struct rv_monitor_def *mdef;
> + struct rv_monitor *mon;
> int enabled = 0;
>
> mutex_lock(&rv_interface_lock);
>
> - list_for_each_entry(mdef, &rv_monitors_list, list)
> - enabled += __rv_disable_monitor(mdef, false);
> + list_for_each_entry(mon, &rv_monitors_list, list)
> + enabled += __rv_disable_monitor(mon, false);
>
> if (enabled) {
> /*
> @@ -598,7 +597,7 @@ static ssize_t enabled_monitors_write(struct file
> *filp, const char __user *user
> size_t count, loff_t *ppos)
> {
> char buff[MAX_RV_MONITOR_NAME_SIZE + 2];
> - struct rv_monitor_def *mdef;
> + struct rv_monitor *mon;
> int retval = -EINVAL;
> bool enable = true;
> char *ptr, *tmp;
> @@ -633,17 +632,17 @@ static ssize_t enabled_monitors_write(struct
> file *filp, const char __user *user
> if (tmp)
> ptr = tmp+1;
>
> - list_for_each_entry(mdef, &rv_monitors_list, list) {
> - if (strcmp(ptr, mdef->monitor->name) != 0)
> + list_for_each_entry(mon, &rv_monitors_list, list) {
> + if (strcmp(ptr, mon->name) != 0)
> continue;
>
> /*
> * Monitor found!
> */
> if (enable)
> - retval = rv_enable_monitor(mdef);
> + retval = rv_enable_monitor(mon);
> else
> - retval = rv_disable_monitor(mdef);
> + retval = rv_disable_monitor(mon);
>
> if (!retval)
> retval = count;
> @@ -702,11 +701,11 @@ static void turn_monitoring_off(void)
>
> static void reset_all_monitors(void)
> {
> - struct rv_monitor_def *mdef;
> + struct rv_monitor *mon;
>
> - list_for_each_entry(mdef, &rv_monitors_list, list) {
> - if (mdef->monitor->enabled && mdef->monitor->reset)
> - mdef->monitor->reset();
> + list_for_each_entry(mon, &rv_monitors_list, list) {
> + if (mon->enabled && mon->reset)
> + mon->reset();
> }
> }
>
> @@ -768,10 +767,10 @@ static const struct file_operations
> monitoring_on_fops = {
> .read = monitoring_on_read_data,
> };
>
> -static void destroy_monitor_dir(struct rv_monitor_def *mdef)
> +static void destroy_monitor_dir(struct rv_monitor *mon)
> {
> - reactor_cleanup_monitor(mdef);
> - rv_remove(mdef->root_d);
> + reactor_cleanup_monitor(mon);
> + rv_remove(mon->root_d);
> }
>
> /**
> @@ -783,7 +782,7 @@ static void destroy_monitor_dir(struct
> rv_monitor_def *mdef)
> */
> int rv_register_monitor(struct rv_monitor *monitor, struct
> rv_monitor *parent)
> {
> - struct rv_monitor_def *r, *p = NULL;
> + struct rv_monitor *r;
> int retval = 0;
>
> if (strlen(monitor->name) >= MAX_RV_MONITOR_NAME_SIZE) {
> @@ -795,49 +794,31 @@ int rv_register_monitor(struct rv_monitor
> *monitor, struct rv_monitor *parent)
> mutex_lock(&rv_interface_lock);
>
> list_for_each_entry(r, &rv_monitors_list, list) {
> - if (strcmp(monitor->name, r->monitor->name) == 0) {
> + if (strcmp(monitor->name, r->name) == 0) {
> pr_info("Monitor %s is already
> registered\n", monitor->name);
> retval = -EEXIST;
> goto out_unlock;
> }
> }
>
> - if (parent) {
> - list_for_each_entry(r, &rv_monitors_list, list) {
> - if (strcmp(parent->name, r->monitor->name)
> == 0) {
> - p = r;
> - break;
> - }
> - }
> - }
> -
> - if (p && rv_is_nested_monitor(p)) {
> + if (parent && rv_is_nested_monitor(parent)) {
> pr_info("Parent monitor %s is already nested, cannot
> nest further\n",
> parent->name);
> retval = -EINVAL;
> goto out_unlock;
> }
>
> - r = kzalloc(sizeof(struct rv_monitor_def), GFP_KERNEL);
> - if (!r) {
> - retval = -ENOMEM;
> - goto out_unlock;
> - }
> -
> - r->monitor = monitor;
> - r->parent = parent;
> + monitor->parent = parent;
>
> - retval = create_monitor_dir(r, p);
> - if (retval) {
> - kfree(r);
> - goto out_unlock;
> - }
> + retval = create_monitor_dir(monitor, parent);
> + if (retval)
> + return retval;
>
> /* keep children close to the parent for easier
> visualisation */
> - if (p)
> - list_add(&r->list, &p->list);
> + if (parent)
> + list_add(&monitor->list, &parent->list);
> else
> - list_add_tail(&r->list, &rv_monitors_list);
> + list_add_tail(&monitor->list, &rv_monitors_list);
>
> out_unlock:
> mutex_unlock(&rv_interface_lock);
> @@ -852,17 +833,11 @@ int rv_register_monitor(struct rv_monitor
> *monitor, struct rv_monitor *parent)
> */
> int rv_unregister_monitor(struct rv_monitor *monitor)
> {
> - struct rv_monitor_def *ptr, *next;
> -
> mutex_lock(&rv_interface_lock);
>
> - list_for_each_entry_safe(ptr, next, &rv_monitors_list, list)
> {
> - if (strcmp(monitor->name, ptr->monitor->name) == 0)
> {
> - rv_disable_monitor(ptr);
> - list_del(&ptr->list);
> - destroy_monitor_dir(ptr);
> - }
> - }
> + rv_disable_monitor(monitor);
> + list_del(&monitor->list);
> + destroy_monitor_dir(monitor);
>
> mutex_unlock(&rv_interface_lock);
> return 0;
> diff --git a/kernel/trace/rv/rv.h b/kernel/trace/rv/rv.h
> index 873364094402..f039ec1c9156 100644
> --- a/kernel/trace/rv/rv.h
> +++ b/kernel/trace/rv/rv.h
> @@ -32,34 +32,23 @@ struct rv_reactor_def {
> };
> #endif
>
> -struct rv_monitor_def {
> - struct list_head list;
> - struct rv_monitor *monitor;
> - struct rv_monitor *parent;
> - struct dentry *root_d;
> -#ifdef CONFIG_RV_REACTORS
> - struct rv_reactor_def *rdef;
> - bool reacting;
> -#endif
> -};
> -
> struct dentry *get_monitors_root(void);
> -int rv_disable_monitor(struct rv_monitor_def *mdef);
> -int rv_enable_monitor(struct rv_monitor_def *mdef);
> -bool rv_is_container_monitor(struct rv_monitor_def *mdef);
> -bool rv_is_nested_monitor(struct rv_monitor_def *mdef);
> +int rv_disable_monitor(struct rv_monitor *mon);
> +int rv_enable_monitor(struct rv_monitor *mon);
> +bool rv_is_container_monitor(struct rv_monitor *mon);
> +bool rv_is_nested_monitor(struct rv_monitor *mon);
>
> #ifdef CONFIG_RV_REACTORS
> -int reactor_populate_monitor(struct rv_monitor_def *mdef);
> -void reactor_cleanup_monitor(struct rv_monitor_def *mdef);
> +int reactor_populate_monitor(struct rv_monitor *mon);
> +void reactor_cleanup_monitor(struct rv_monitor *mon);
> int init_rv_reactors(struct dentry *root_dir);
> #else
> -static inline int reactor_populate_monitor(struct rv_monitor_def
> *mdef)
> +static inline int reactor_populate_monitor(struct rv_monitor *mon)
> {
> return 0;
> }
>
> -static inline void reactor_cleanup_monitor(struct rv_monitor_def
> *mdef)
> +static inline void reactor_cleanup_monitor(struct rv_monitor *mon)
> {
> return;
> }
> diff --git a/kernel/trace/rv/rv_reactors.c
> b/kernel/trace/rv/rv_reactors.c
> index 740603670dd1..7cc620a1be1a 100644
> --- a/kernel/trace/rv/rv_reactors.c
> +++ b/kernel/trace/rv/rv_reactors.c
> @@ -138,10 +138,10 @@ static const struct file_operations
> available_reactors_ops = {
> */
> static int monitor_reactor_show(struct seq_file *m, void *p)
> {
> - struct rv_monitor_def *mdef = m->private;
> + struct rv_monitor *mon = m->private;
> struct rv_reactor_def *rdef = p;
>
> - if (mdef->rdef == rdef)
> + if (mon->rdef == rdef)
> seq_printf(m, "[%s]\n", rdef->reactor->name);
> else
> seq_printf(m, "%s\n", rdef->reactor->name);
> @@ -158,41 +158,41 @@ static const struct seq_operations
> monitor_reactors_seq_ops = {
> .show = monitor_reactor_show
> };
>
> -static void monitor_swap_reactors_single(struct rv_monitor_def
> *mdef,
> +static void monitor_swap_reactors_single(struct rv_monitor *mon,
> struct rv_reactor_def
> *rdef,
> bool reacting, bool nested)
> {
> bool monitor_enabled;
>
> /* nothing to do */
> - if (mdef->rdef == rdef)
> + if (mon->rdef == rdef)
> return;
>
> - monitor_enabled = mdef->monitor->enabled;
> + monitor_enabled = mon->enabled;
> if (monitor_enabled)
> - rv_disable_monitor(mdef);
> + rv_disable_monitor(mon);
>
> /* swap reactor's usage */
> - mdef->rdef->counter--;
> + mon->rdef->counter--;
> rdef->counter++;
>
> - mdef->rdef = rdef;
> - mdef->reacting = reacting;
> - mdef->monitor->react = rdef->reactor->react;
> + mon->rdef = rdef;
> + mon->reacting = reacting;
> + mon->react = rdef->reactor->react;
>
> /* enable only once if iterating through a container */
> if (monitor_enabled && !nested)
> - rv_enable_monitor(mdef);
> + rv_enable_monitor(mon);
> }
>
> -static void monitor_swap_reactors(struct rv_monitor_def *mdef,
> +static void monitor_swap_reactors(struct rv_monitor *mon,
> struct rv_reactor_def *rdef, bool
> reacting)
> {
> - struct rv_monitor_def *p = mdef;
> + struct rv_monitor *p = mon;
>
> - if (rv_is_container_monitor(mdef))
> + if (rv_is_container_monitor(mon))
> list_for_each_entry_continue(p, &rv_monitors_list,
> list) {
> - if (p->parent != mdef->monitor)
> + if (p->parent != mon)
> break;
> monitor_swap_reactors_single(p, rdef,
> reacting, true);
> }
> @@ -202,7 +202,7 @@ static void monitor_swap_reactors(struct
> rv_monitor_def *mdef,
> * All nested monitors are enabled also if they were off, we
> may refine
> * this logic in the future.
> */
> - monitor_swap_reactors_single(mdef, rdef, reacting, false);
> + monitor_swap_reactors_single(mon, rdef, reacting, false);
> }
>
> static ssize_t
> @@ -210,7 +210,7 @@ monitor_reactors_write(struct file *file, const
> char __user *user_buf,
> size_t count, loff_t *ppos)
> {
> char buff[MAX_RV_REACTOR_NAME_SIZE + 2];
> - struct rv_monitor_def *mdef;
> + struct rv_monitor *mon;
> struct rv_reactor_def *rdef;
> struct seq_file *seq_f;
> int retval = -EINVAL;
> @@ -237,7 +237,7 @@ monitor_reactors_write(struct file *file, const
> char __user *user_buf,
> * See monitor_reactors_open()
> */
> seq_f = file->private_data;
> - mdef = seq_f->private;
> + mon = seq_f->private;
>
> mutex_lock(&rv_interface_lock);
>
> @@ -252,7 +252,7 @@ monitor_reactors_write(struct file *file, const
> char __user *user_buf,
> else
> enable = true;
>
> - monitor_swap_reactors(mdef, rdef, enable);
> + monitor_swap_reactors(mon, rdef, enable);
>
> retval = count;
> break;
> @@ -268,7 +268,7 @@ monitor_reactors_write(struct file *file, const
> char __user *user_buf,
> */
> static int monitor_reactors_open(struct inode *inode, struct file
> *file)
> {
> - struct rv_monitor_def *mdef = inode->i_private;
> + struct rv_monitor *mon = inode->i_private;
> struct seq_file *seq_f;
> int ret;
>
> @@ -284,7 +284,7 @@ static int monitor_reactors_open(struct inode
> *inode, struct file *file)
> /*
> * Copy the create file "private" data to the seq_file
> private data.
> */
> - seq_f->private = mdef;
> + seq_f->private = mon;
>
> return 0;
> };
> @@ -454,37 +454,37 @@ static const struct file_operations
> reacting_on_fops = {
>
> /**
> * reactor_populate_monitor - creates per monitor reactors file
> - * @mdef: monitor's definition.
> + * @mon: The monitor.
> *
> * Returns 0 if successful, error otherwise.
> */
> -int reactor_populate_monitor(struct rv_monitor_def *mdef)
> +int reactor_populate_monitor(struct rv_monitor *mon)
> {
> struct dentry *tmp;
>
> - tmp = rv_create_file("reactors", RV_MODE_WRITE, mdef-
> >root_d, mdef, &monitor_reactors_ops);
> + tmp = rv_create_file("reactors", RV_MODE_WRITE, mon->root_d,
> mon, &monitor_reactors_ops);
> if (!tmp)
> return -ENOMEM;
>
> /*
> * Configure as the rv_nop reactor.
> */
> - mdef->rdef = get_reactor_rdef_by_name("nop");
> - mdef->rdef->counter++;
> - mdef->reacting = false;
> + mon->rdef = get_reactor_rdef_by_name("nop");
> + mon->rdef->counter++;
> + mon->reacting = false;
>
> return 0;
> }
>
> /**
> * reactor_cleanup_monitor - cleanup a monitor reference
> - * @mdef: monitor's definition.
> + * @mon: the monitor.
> */
> -void reactor_cleanup_monitor(struct rv_monitor_def *mdef)
> +void reactor_cleanup_monitor(struct rv_monitor *mon)
> {
> lockdep_assert_held(&rv_interface_lock);
> - mdef->rdef->counter--;
> - WARN_ON_ONCE(mdef->rdef->counter < 0);
> + mon->rdef->counter--;
> + WARN_ON_ONCE(mon->rdef->counter < 0);
> }
>
> /*
next prev parent reply other threads:[~2025-07-21 14:13 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-21 9:47 [PATCH 0/6] rv: Clean up & simplify Nam Cao
2025-07-21 9:47 ` [PATCH 1/6] rv: Remove unused field in struct rv_monitor_def Nam Cao
2025-07-21 13:01 ` Gabriele Monaco
2025-07-21 9:47 ` [PATCH 2/6] rv: Merge struct rv_monitor_def into struct rv_monitor Nam Cao
2025-07-21 14:13 ` Gabriele Monaco [this message]
2025-07-21 9:47 ` [PATCH 3/6] rv: Merge struct rv_reactor_def into struct rv_reactor Nam Cao
2025-07-21 14:29 ` Gabriele Monaco
2025-07-21 9:47 ` [PATCH 4/6] rv: Remove rv_reactor's reference counter Nam Cao
2025-07-21 13:20 ` Gabriele Monaco
2025-07-21 14:04 ` Nam Cao
2025-07-21 15:49 ` Gabriele Monaco
2025-07-22 8:27 ` Nam Cao
2025-07-22 8:30 ` Gabriele Monaco
2025-07-21 9:47 ` [PATCH 5/6] rv: Remove the nop reactor Nam Cao
2025-07-21 10:29 ` Gabriele Monaco
2025-07-21 14:10 ` Nam Cao
2025-07-21 9:47 ` [PATCH 6/6] rv: Remove struct rv_monitor::reacting Nam Cao
2025-07-21 14:38 ` Gabriele Monaco
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d53d5bddaf9ac2d9ecbbc2153a2c24c0044096ab.camel@redhat.com \
--to=gmonaco@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=namcao@linutronix.de \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.