Merge tag 'fbdev-v5.2' of git://github.com/bzolnier/linux
[sfrench/cifs-2.6.git] / include / trace / bpf_probe.h
index 505dae0bed80bd83373811c60ce4ac60d54ee8af..d6e556c0a0852df0c357361dfbb642bdbf3e58bf 100644 (file)
@@ -69,8 +69,7 @@ __bpf_trace_##call(void *__data, proto)                                       \
  * to make sure that if the tracepoint handling changes, the
  * bpf probe will fail to compile unless it too is updated.
  */
-#undef DEFINE_EVENT
-#define DEFINE_EVENT(template, call, proto, args)                      \
+#define __DEFINE_EVENT(template, call, proto, args, size)              \
 static inline void bpf_test_probe_##call(void)                         \
 {                                                                      \
        check_trace_callback_type_##call(__bpf_trace_##template);       \
@@ -81,12 +80,36 @@ __bpf_trace_tp_map_##call = {                                               \
        .tp             = &__tracepoint_##call,                         \
        .bpf_func       = (void *)__bpf_trace_##template,               \
        .num_args       = COUNT_ARGS(args),                             \
+       .writable_size  = size,                                         \
 };
 
+#define FIRST(x, ...) x
+
+#undef DEFINE_EVENT_WRITABLE
+#define DEFINE_EVENT_WRITABLE(template, call, proto, args, size)       \
+static inline void bpf_test_buffer_##call(void)                                \
+{                                                                      \
+       /* BUILD_BUG_ON() is ignored if the code is completely eliminated, but \
+        * BUILD_BUG_ON_ZERO() uses a different mechanism that is not   \
+        * dead-code-eliminated.                                        \
+        */                                                             \
+       FIRST(proto);                                                   \
+       (void)BUILD_BUG_ON_ZERO(size != sizeof(*FIRST(args)));          \
+}                                                                      \
+__DEFINE_EVENT(template, call, PARAMS(proto), PARAMS(args), size)
+
+#undef DEFINE_EVENT
+#define DEFINE_EVENT(template, call, proto, args)                      \
+       __DEFINE_EVENT(template, call, PARAMS(proto), PARAMS(args), 0)
 
 #undef DEFINE_EVENT_PRINT
 #define DEFINE_EVENT_PRINT(template, name, proto, args, print) \
        DEFINE_EVENT(template, name, PARAMS(proto), PARAMS(args))
 
 #include TRACE_INCLUDE(TRACE_INCLUDE_FILE)
+
+#undef DEFINE_EVENT_WRITABLE
+#undef __DEFINE_EVENT
+#undef FIRST
+
 #endif /* CONFIG_BPF_EVENTS */