Lines Matching refs:u

160 	struct unwindme *u = unwindme;  in kretprobe_ret_handler()  local
162 if (!(u->flags & UWM_KRETPROBE_HANDLER)) in kretprobe_ret_handler()
165 u->ret = test_unwind(NULL, (u->flags & UWM_REGS) ? regs : NULL, in kretprobe_ret_handler()
166 (u->flags & UWM_SP) ? u->sp : 0); in kretprobe_ret_handler()
171 static noinline notrace int test_unwind_kretprobed_func(struct unwindme *u) in test_unwind_kretprobed_func() argument
175 if (!(u->flags & UWM_KRETPROBE)) in test_unwind_kretprobed_func()
179 return test_unwind(NULL, (u->flags & UWM_REGS) ? &regs : NULL, in test_unwind_kretprobed_func()
180 (u->flags & UWM_SP) ? u->sp : 0); in test_unwind_kretprobed_func()
183 static noinline int test_unwind_kretprobed_func_caller(struct unwindme *u) in test_unwind_kretprobed_func_caller() argument
185 return test_unwind_kretprobed_func(u); in test_unwind_kretprobed_func_caller()
188 static int test_unwind_kretprobe(struct unwindme *u) in test_unwind_kretprobe() argument
196 u->ret = -1; /* make sure kprobe is called */ in test_unwind_kretprobe()
197 unwindme = u; in test_unwind_kretprobe()
211 ret = test_unwind_kretprobed_func_caller(u); in test_unwind_kretprobe()
214 if (u->flags & UWM_KRETPROBE_HANDLER) in test_unwind_kretprobe()
215 ret = u->ret; in test_unwind_kretprobe()
221 struct unwindme *u = unwindme; in kprobe_pre_handler() local
223 u->ret = test_unwind(NULL, (u->flags & UWM_REGS) ? regs : NULL, in kprobe_pre_handler()
224 (u->flags & UWM_SP) ? u->sp : 0); in kprobe_pre_handler()
239 static int test_unwind_kprobe(struct unwindme *u) in test_unwind_kprobe() argument
246 if (!IS_ENABLED(CONFIG_KPROBES_ON_FTRACE) && u->flags & UWM_KPROBE_ON_FTRACE) in test_unwind_kprobe()
249 u->ret = -1; /* make sure kprobe is called */ in test_unwind_kprobe()
250 unwindme = u; in test_unwind_kprobe()
253 kp.addr = u->flags & UWM_KPROBE_ON_FTRACE ? in test_unwind_kprobe()
265 return u->ret; in test_unwind_kprobe()
273 struct unwindme *u = (struct unwindme *)arch_ftrace_regs(fregs)->regs.gprs[2]; in test_unwind_ftrace_handler() local
275 u->ret = test_unwind(NULL, (u->flags & UWM_REGS) ? &arch_ftrace_regs(fregs)->regs : NULL, in test_unwind_ftrace_handler()
276 (u->flags & UWM_SP) ? u->sp : 0); in test_unwind_ftrace_handler()
279 static noinline int test_unwind_ftraced_func(struct unwindme *u) in test_unwind_ftraced_func() argument
281 return READ_ONCE(u)->ret; in test_unwind_ftraced_func()
284 static int test_unwind_ftrace(struct unwindme *u) in test_unwind_ftrace() argument
308 ret = test_unwind_ftraced_func(u); in test_unwind_ftrace()
319 static noinline int unwindme_func4(struct unwindme *u) in unwindme_func4() argument
321 if (!(u->flags & UWM_CALLER)) in unwindme_func4()
322 u->sp = current_frame_address(); in unwindme_func4()
323 if (u->flags & UWM_THREAD) { in unwindme_func4()
324 complete(&u->task_ready); in unwindme_func4()
325 wait_event(u->task_wq, kthread_should_park()); in unwindme_func4()
328 } else if (u->flags & (UWM_PGM | UWM_KPROBE_ON_FTRACE)) { in unwindme_func4()
329 return test_unwind_kprobe(u); in unwindme_func4()
330 } else if (u->flags & (UWM_KRETPROBE | UWM_KRETPROBE_HANDLER)) { in unwindme_func4()
331 return test_unwind_kretprobe(u); in unwindme_func4()
332 } else if (u->flags & UWM_FTRACE) { in unwindme_func4()
333 return test_unwind_ftrace(u); in unwindme_func4()
338 (u->flags & UWM_REGS) ? &regs : NULL, in unwindme_func4()
339 (u->flags & UWM_SP) ? u->sp : 0); in unwindme_func4()
344 static noinline int unwindme_func3(struct unwindme *u) in unwindme_func3() argument
346 u->sp = current_frame_address(); in unwindme_func3()
347 return unwindme_func4(u); in unwindme_func3()
351 static noinline int unwindme_func2(struct unwindme *u) in unwindme_func2() argument
356 if (u->flags & UWM_SWITCH_STACK) { in unwindme_func2()
360 int, unwindme_func3, struct unwindme *, u); in unwindme_func2()
365 return unwindme_func3(u); in unwindme_func2()
370 static noinline int unwindme_func1(void *u) in unwindme_func1() argument
372 return unwindme_func2((struct unwindme *)u); in unwindme_func1()
377 struct unwindme *u = READ_ONCE(unwindme); in unwindme_timer_fn() local
379 if (u) { in unwindme_timer_fn()
381 u->task = NULL; in unwindme_timer_fn()
382 u->ret = unwindme_func1(u); in unwindme_timer_fn()
383 complete(&u->task_ready); in unwindme_timer_fn()
389 static int test_unwind_irq(struct unwindme *u) in test_unwind_irq() argument
391 unwindme = u; in test_unwind_irq()
392 init_completion(&u->task_ready); in test_unwind_irq()
395 wait_for_completion(&u->task_ready); in test_unwind_irq()
396 return u->ret; in test_unwind_irq()
400 static int test_unwind_task(struct unwindme *u) in test_unwind_task() argument
406 init_completion(&u->task_ready); in test_unwind_task()
407 init_waitqueue_head(&u->task_wq); in test_unwind_task()
413 task = kthread_run(unwindme_func1, u, "%s", __func__); in test_unwind_task()
422 wait_for_completion(&u->task_ready); in test_unwind_task()
425 ret = test_unwind(task, NULL, (u->flags & UWM_SP) ? u->sp : 0); in test_unwind_task()
496 struct unwindme u; in test_unwind_flags() local
501 u.flags = params->flags; in test_unwind_flags()
502 if (u.flags & UWM_THREAD) in test_unwind_flags()
503 KUNIT_EXPECT_EQ(test, 0, test_unwind_task(&u)); in test_unwind_flags()
504 else if (u.flags & UWM_IRQ) in test_unwind_flags()
505 KUNIT_EXPECT_EQ(test, 0, test_unwind_irq(&u)); in test_unwind_flags()
507 KUNIT_EXPECT_EQ(test, 0, unwindme_func1(&u)); in test_unwind_flags()