lib/test_fprobe: Add private entry_data testcases
Add test cases for checking whether private entry_data is correctly passed or not. Link: https://lkml.kernel.org/r/167526697074.433354.17790288501657876219.stgit@mhiramat.roam.corp.google.com Cc: Florent Revest <revest@chromium.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Will Deacon <will@kernel.org> Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
This commit is contained in:
Родитель
76d0de5729
Коммит
34cabf8fd1
|
@ -38,6 +38,12 @@ static notrace void fp_entry_handler(struct fprobe *fp, unsigned long ip,
|
|||
if (ip != target_ip)
|
||||
KUNIT_EXPECT_EQ(current_test, ip, target2_ip);
|
||||
entry_val = (rand1 / div_factor);
|
||||
if (fp->entry_data_size) {
|
||||
KUNIT_EXPECT_NOT_NULL(current_test, data);
|
||||
if (data)
|
||||
*(u32 *)data = entry_val;
|
||||
} else
|
||||
KUNIT_EXPECT_NULL(current_test, data);
|
||||
}
|
||||
|
||||
static notrace void fp_exit_handler(struct fprobe *fp, unsigned long ip,
|
||||
|
@ -53,6 +59,12 @@ static notrace void fp_exit_handler(struct fprobe *fp, unsigned long ip,
|
|||
KUNIT_EXPECT_EQ(current_test, ret, (rand1 / div_factor));
|
||||
KUNIT_EXPECT_EQ(current_test, entry_val, (rand1 / div_factor));
|
||||
exit_val = entry_val + div_factor;
|
||||
if (fp->entry_data_size) {
|
||||
KUNIT_EXPECT_NOT_NULL(current_test, data);
|
||||
if (data)
|
||||
KUNIT_EXPECT_EQ(current_test, *(u32 *)data, entry_val);
|
||||
} else
|
||||
KUNIT_EXPECT_NULL(current_test, data);
|
||||
}
|
||||
|
||||
/* Test entry only (no rethook) */
|
||||
|
@ -134,6 +146,23 @@ static void test_fprobe_syms(struct kunit *test)
|
|||
KUNIT_EXPECT_EQ(test, 0, unregister_fprobe(&fp));
|
||||
}
|
||||
|
||||
/* Test private entry_data */
|
||||
static void test_fprobe_data(struct kunit *test)
|
||||
{
|
||||
struct fprobe fp = {
|
||||
.entry_handler = fp_entry_handler,
|
||||
.exit_handler = fp_exit_handler,
|
||||
.entry_data_size = sizeof(u32),
|
||||
};
|
||||
|
||||
current_test = test;
|
||||
KUNIT_EXPECT_EQ(test, 0, register_fprobe(&fp, "fprobe_selftest_target", NULL));
|
||||
|
||||
target(rand1);
|
||||
|
||||
KUNIT_EXPECT_EQ(test, 0, unregister_fprobe(&fp));
|
||||
}
|
||||
|
||||
static unsigned long get_ftrace_location(void *func)
|
||||
{
|
||||
unsigned long size, addr = (unsigned long)func;
|
||||
|
@ -159,6 +188,7 @@ static struct kunit_case fprobe_testcases[] = {
|
|||
KUNIT_CASE(test_fprobe_entry),
|
||||
KUNIT_CASE(test_fprobe),
|
||||
KUNIT_CASE(test_fprobe_syms),
|
||||
KUNIT_CASE(test_fprobe_data),
|
||||
{}
|
||||
};
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче