+/*
+ ******************************************************************************
+ * kprobe in kernel *
+ ******************************************************************************
+ */
+static int kfunc_cnt;
+
+static struct kprobe *kp_kfunc;
+static int kfunc_h(struct kprobe *kp, struct pt_regs *regs)
+{
+ if (cur_task == current)
+ ++kfunc_cnt;
+
+ return 0;
+}
+
+static void run_test_kfunc(void)
+{
+ find_module(KBUILD_MODNAME);
+}
+
+static void do_test_kfunc(void)
+{
+ kp_reg(kp_kfunc, "find_module", kfunc_h);
+
+ run_test_kfunc();
+
+ kp_unreg(kp_kfunc);
+}
+
+static void test_kfunc(void)
+{
+ olog("Kprob in kernel:\n");
+
+ kfunc_cnt = 0;
+
+ do_test_kfunc();
+
+ if (kfunc_cnt == 1)
+ olog(" OK\n");
+ else
+ olog(" ERROR: kfunc_cnt=%d\n", kfunc_cnt);
+}
+
+
+
+
+/*
+ ******************************************************************************
+ * kprobe in module *
+ ******************************************************************************
+ */
+static int mfunc_cnt;
+
+static struct kprobe *kp_mfunc;
+static int mfunc_h(struct kprobe *kp, struct pt_regs *regs)
+{
+ if (cur_task == current)
+ ++mfunc_cnt;
+
+ return 0;
+}
+
+static void run_test_mfunc(void)
+{
+ my_kfree(NULL);
+ my_kfree(NULL);
+ my_kfree(NULL);
+}
+
+static void do_test_mfunc(void)
+{
+ kp_reg(kp_mfunc, "my_kfree", mfunc_h);
+
+ run_test_mfunc();
+
+ kp_unreg(kp_mfunc);
+}
+
+static void test_mfunc(void)
+{
+ olog("Kprob in module:\n");
+
+ mfunc_cnt = 0;
+
+ do_test_mfunc();
+
+ if (mfunc_cnt == 3)
+ olog(" OK\n");
+ else
+ olog(" ERROR: mfunc_cnt=%d\n", mfunc_cnt);
+}
+
+
+
/*
******************************************************************************
{
cur_task = current;
+ test_kfunc();
+ test_mfunc();
test_recursion();
test_recursion_and_multiple_handlers();
test_recursion_and_multiple_handlers2();