bpf: Add kernel test functions for fentry testing
[linux-2.6-microblaze.git] / net / bpf / test_run.c
index 0be4497..6293327 100644 (file)
@@ -105,6 +105,40 @@ out:
        return err;
 }
 
+/* Integer types of various sizes and pointer combinations cover variety of
+ * architecture dependent calling conventions. 7+ can be supported in the
+ * future.
+ */
+int noinline bpf_fentry_test1(int a)
+{
+       return a + 1;
+}
+
+int noinline bpf_fentry_test2(int a, u64 b)
+{
+       return a + b;
+}
+
+int noinline bpf_fentry_test3(char a, int b, u64 c)
+{
+       return a + b + c;
+}
+
+int noinline bpf_fentry_test4(void *a, char b, int c, u64 d)
+{
+       return (long)a + b + c + d;
+}
+
+int noinline bpf_fentry_test5(u64 a, void *b, short c, int d, u64 e)
+{
+       return a + (long)b + c + d + e;
+}
+
+int noinline bpf_fentry_test6(u64 a, void *b, short c, int d, void *e, u64 f)
+{
+       return a + (long)b + c + d + (long)e + f;
+}
+
 static void *bpf_test_init(const union bpf_attr *kattr, u32 size,
                           u32 headroom, u32 tailroom)
 {
@@ -122,6 +156,13 @@ static void *bpf_test_init(const union bpf_attr *kattr, u32 size,
                kfree(data);
                return ERR_PTR(-EFAULT);
        }
+       if (bpf_fentry_test1(1) != 2 ||
+           bpf_fentry_test2(2, 3) != 5 ||
+           bpf_fentry_test3(4, 5, 6) != 15 ||
+           bpf_fentry_test4((void *)7, 8, 9, 10) != 34 ||
+           bpf_fentry_test5(11, (void *)12, 13, 14, 15) != 65 ||
+           bpf_fentry_test6(16, (void *)17, 18, 19, (void *)20, 21) != 111)
+               return ERR_PTR(-EFAULT);
        return data;
 }