Re: [PATCH v5 13/17] rv: Add KUnit mock for current
Gabriele Monaco <[email protected]> Thu, 30 Jul 2026 05:13:22 +0000
| Newsgroups | org.kernel.vger.linux-trace-kernel,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
Il 29 luglio 2026 18:17:31 UTC, Wen Yang <[email protected]> ha scritto: >> +#define rv_get_current() (unlikely(kunit_get_current_test()) ? rv_get_mock_current() : current) ... >> +/* >> + * rv_get_mock_current() is called only if we are running from a KUnit test. >> + * This can occur from a legitimate RV test or any unrelated test running when >> + * a real RV monitor is active and triggering events. >> + * We assume the former case is the only one where mock_current is not NULL and >> + * can occur only sequentially (KUnit doesn't run tests in parallel). >> + * We cannot rely on the test's context because there is no way to safely >> + * understand from which test we are running and KUnit utilities require >> + * locking, which is unsafe from NMI or scheduling context. >> + * Note that it is not possible for a real RV monitor to run when the RV KUnit >> + * tests are running (see rv_set_testing()). >> + */ >> +static struct task_struct *mock_current; >> + >> +void rv_mock_current(struct task_struct *tsk) >> +{ >> + mock_current = tsk; >> +} >> +EXPORT_SYMBOL_IF_KUNIT(rv_mock_current); >> + >> +struct task_struct *rv_get_mock_current(void) >> +{ >> + return mock_current ?: current; >> +} >> +EXPORT_SYMBOL_GPL(rv_get_mock_current); >> #endif > >rv_mock_current() uses EXPORT_SYMBOL_IF_KUNIT, but rv_get_mock_current() uses EXPORT_SYMBOL_GPL. Both are defined inside the same CONFIG_RV_MONITORS_KUNIT_TEST block, so rv_get_mock_current should use EXPORT_SYMBOL_IF_KUNIT as well, otherwise it leaks a test-only symbol into production builds. > >With that fixed: >Reviewed-by: Wen Yang <[email protected]> Thanks for the review. This was intentional however: rv_get_current() can be called by any monitor, those don't have to be KUnit. Since rv_get_current() is a macro also calling rv_get_mock_current() we need to be able to link that too. The idea is that a "real" (non-kunit) monitor handler could be run when interrupting a KUnit test (not an RV one, we make sure of that). In that case we do call rv_get_mock_current() and return current after the function call. rv_mock_current() CANNOT be called outside of the RV KUnit test cases, it uses a global variable (for problems I tried to explain in the comment), so should be exported only to KUnit and called directly from the test case. Does it make sense to you? Thanks, Gabriele