Add KUNIT_STATIC_STUB_REDIRECT to allow those functions to be stubbed in
a KUnit test. This is useful to catch reaction without creating a custom
reactor and going through the effort of setting it from a test.
rv_{get/put}_task_monitor_slot() rely on a lock, but this isn't
necessary during a unit test, so simply skip the calls.Signed-off-by: Gabriele Monaco <[email protected]> --- kernel/trace/rv/rv.c | 5 +++++ kernel/trace/rv/rv_reactors.c | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/kernel/trace/rv/rv.c b/kernel/trace/rv/rv.c index ee4e68102f17..f59385a24fa1 100644 --- a/kernel/trace/rv/rv.c +++ b/kernel/trace/rv/rv.c @@ -142,6 +142,7 @@ #include <linux/module.h> #include <linux/init.h> #include <linux/slab.h> +#include <kunit/static_stub.h> #ifdef CONFIG_RV_MON_EVENTS #define CREATE_TRACE_POINTS @@ -171,6 +172,8 @@ int rv_get_task_monitor_slot(void) { int i; + KUNIT_STATIC_STUB_REDIRECT(rv_get_task_monitor_slot); + lockdep_assert_held(&rv_interface_lock); if (task_monitor_count == CONFIG_RV_PER_TASK_MONITORS) @@ -192,6 +195,8 @@ int rv_get_task_monitor_slot(void) void rv_put_task_monitor_slot(int slot) { + KUNIT_STATIC_STUB_REDIRECT(rv_put_task_monitor_slot, slot); + lockdep_assert_held(&rv_interface_lock); if (slot < 0 || slot >= CONFIG_RV_PER_TASK_MONITORS) { diff --git a/kernel/trace/rv/rv_reactors.c b/kernel/trace/rv/rv_reactors.c index 460af07f7aba..3435dcedc7ee 100644 --- a/kernel/trace/rv/rv_reactors.c +++ b/kernel/trace/rv/rv_reactors.c @@ -63,6 +63,7 @@ #include <linux/lockdep.h> #include <linux/slab.h> +#include <kunit/static_stub.h> #include "rv.h" @@ -468,6 +469,12 @@ void rv_react(struct rv_monitor *monitor, const char *msg, ...) static DEFINE_WAIT_OVERRIDE_MAP(rv_react_map, LD_WAIT_FREE); va_list args; + __diag_push(); + __diag_ignore(GCC, all, "-Wsuggest-attribute=format", + "Not a valid __printf() conversion candidate."); + KUNIT_STATIC_STUB_REDIRECT(rv_react, monitor, msg); + __diag_pop(); + if (!rv_reacting_on() || !monitor->react) return; -- 2.54.0
