From: Boqun Feng <boqun.feng@gmail.com>
To: Alice Ryhl <aliceryhl@google.com>
Cc: "Steven Rostedt" <rostedt@goodmis.org>,
"Masami Hiramatsu" <mhiramat@kernel.org>,
"Mathieu Desnoyers" <mathieu.desnoyers@efficios.com>,
"Peter Zijlstra" <peterz@infradead.org>,
"Josh Poimboeuf" <jpoimboe@kernel.org>,
"Jason Baron" <jbaron@akamai.com>,
"Ard Biesheuvel" <ardb@kernel.org>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Alex Gaynor" <alex.gaynor@gmail.com>,
"Wedson Almeida Filho" <wedsonaf@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <benno.lossin@proton.me>,
"Andreas Hindborg" <a.hindborg@samsung.com>,
linux-trace-kernel@vger.kernel.org,
rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org,
"Arnd Bergmann" <arnd@arndb.de>,
linux-arch@vger.kernel.org,
"Thomas Gleixner" <tglx@linutronix.de>,
"Ingo Molnar" <mingo@redhat.com>,
"Borislav Petkov" <bp@alien8.de>,
"Dave Hansen" <dave.hansen@linux.intel.com>,
x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
"Sean Christopherson" <seanjc@google.com>,
"Uros Bizjak" <ubizjak@gmail.com>,
"Catalin Marinas" <catalin.marinas@arm.com>,
"Will Deacon" <will@kernel.org>, "Marc Zyngier" <maz@kernel.org>,
"Oliver Upton" <oliver.upton@linux.dev>,
"Mark Rutland" <mark.rutland@arm.com>,
"Ryan Roberts" <ryan.roberts@arm.com>,
"Fuad Tabba" <tabba@google.com>,
linux-arm-kernel@lists.infradead.org,
"Paul Walmsley" <paul.walmsley@sifive.com>,
"Palmer Dabbelt" <palmer@dabbelt.com>,
"Albert Ou" <aou@eecs.berkeley.edu>,
"Anup Patel" <apatel@ventanamicro.com>,
"Andrew Jones" <ajones@ventanamicro.com>,
"Alexandre Ghiti" <alexghiti@rivosinc.com>,
"Conor Dooley" <conor.dooley@microchip.com>,
"Samuel Holland" <samuel.holland@sifive.com>,
linux-riscv@lists.infradead.org,
"Huacai Chen" <chenhuacai@kernel.org>,
"WANG Xuerui" <kernel@xen0n.name>,
"Bibo Mao" <maobibo@loongson.cn>,
"Tiezhu Yang" <yangtiezhu@loongson.cn>,
"Andrew Morton" <akpm@linux-foundation.org>,
"Tianrui Zhao" <zhaotianrui@loongson.cn>,
loongarch@lists.linux.dev, "Carlos Llamas" <cmllamas@google.com>
Subject: Re: [PATCH v8 2/5] rust: add tracepoint support
Date: Thu, 22 Aug 2024 07:38:10 -0700 [thread overview]
Message-ID: <ZsdNUofUSSNv9jTR@boqun-archlinux> (raw)
In-Reply-To: <20240822-tracepoint-v8-2-f0c5899e6fd3@google.com>
On Thu, Aug 22, 2024 at 12:04:14PM +0000, Alice Ryhl wrote:
> Make it possible to have Rust code call into tracepoints defined by C
> code. It is still required that the tracepoint is declared in a C
> header, and that this header is included in the input to bindgen.
>
> Instead of calling __DO_TRACE directly, the exported rust_do_trace_
> function calls an inline helper function. This is because the `cond`
> argument does not exist at the callsite of DEFINE_RUST_DO_TRACE.
>
> __DECLARE_TRACE always emits an inline static and an extern declaration
> that is only used when CREATE_RUST_TRACE_POINTS is set. These should not
> end up in the final binary so it is not a problem that they sometimes
> are emitted without a user.
>
> Reviewed-by: Carlos Llamas <cmllamas@google.com>
> Reviewed-by: Gary Guo <gary@garyguo.net>
> Signed-off-by: Alice Ryhl <aliceryhl@google.com>
Reviewed-by: Boqun Feng <boqun.feng@gmail.com>
Regards,
Boqun
> ---
> include/linux/tracepoint.h | 22 +++++++++++++++++-
> include/trace/define_trace.h | 12 ++++++++++
> rust/bindings/bindings_helper.h | 1 +
> rust/kernel/lib.rs | 1 +
> rust/kernel/tracepoint.rs | 49 +++++++++++++++++++++++++++++++++++++++++
> 5 files changed, 84 insertions(+), 1 deletion(-)
>
> diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h
> index 6be396bb4297..5042ca588e41 100644
> --- a/include/linux/tracepoint.h
> +++ b/include/linux/tracepoint.h
> @@ -237,6 +237,18 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
> #define __DECLARE_TRACE_RCU(name, proto, args, cond)
> #endif
>
> +/*
> + * Declare an exported function that Rust code can call to trigger this
> + * tracepoint. This function does not include the static branch; that is done
> + * in Rust to avoid a function call when the tracepoint is disabled.
> + */
> +#define DEFINE_RUST_DO_TRACE(name, proto, args)
> +#define __DEFINE_RUST_DO_TRACE(name, proto, args) \
> + notrace void rust_do_trace_##name(proto) \
> + { \
> + __rust_do_trace_##name(args); \
> + }
> +
> /*
> * Make sure the alignment of the structure in the __tracepoints section will
> * not add unwanted padding between the beginning of the section and the
> @@ -252,6 +264,13 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
> extern int __traceiter_##name(data_proto); \
> DECLARE_STATIC_CALL(tp_func_##name, __traceiter_##name); \
> extern struct tracepoint __tracepoint_##name; \
> + extern void rust_do_trace_##name(proto); \
> + static inline void __rust_do_trace_##name(proto) \
> + { \
> + __DO_TRACE(name, \
> + TP_ARGS(args), \
> + TP_CONDITION(cond), 0); \
> + } \
> static inline void trace_##name(proto) \
> { \
> if (static_key_false(&__tracepoint_##name.key)) \
> @@ -336,7 +355,8 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
> void __probestub_##_name(void *__data, proto) \
> { \
> } \
> - DEFINE_STATIC_CALL(tp_func_##_name, __traceiter_##_name);
> + DEFINE_STATIC_CALL(tp_func_##_name, __traceiter_##_name); \
> + DEFINE_RUST_DO_TRACE(_name, TP_PROTO(proto), TP_ARGS(args))
>
> #define DEFINE_TRACE(name, proto, args) \
> DEFINE_TRACE_FN(name, NULL, NULL, PARAMS(proto), PARAMS(args));
> diff --git a/include/trace/define_trace.h b/include/trace/define_trace.h
> index 00723935dcc7..8159294c2041 100644
> --- a/include/trace/define_trace.h
> +++ b/include/trace/define_trace.h
> @@ -72,6 +72,13 @@
> #define DECLARE_TRACE(name, proto, args) \
> DEFINE_TRACE(name, PARAMS(proto), PARAMS(args))
>
> +/* If requested, create helpers for calling these tracepoints from Rust. */
> +#ifdef CREATE_RUST_TRACE_POINTS
> +#undef DEFINE_RUST_DO_TRACE
> +#define DEFINE_RUST_DO_TRACE(name, proto, args) \
> + __DEFINE_RUST_DO_TRACE(name, PARAMS(proto), PARAMS(args))
> +#endif
> +
> #undef TRACE_INCLUDE
> #undef __TRACE_INCLUDE
>
> @@ -129,6 +136,11 @@
> # undef UNDEF_TRACE_INCLUDE_PATH
> #endif
>
> +#ifdef CREATE_RUST_TRACE_POINTS
> +# undef DEFINE_RUST_DO_TRACE
> +# define DEFINE_RUST_DO_TRACE(name, proto, args)
> +#endif
> +
> /* We may be processing more files */
> #define CREATE_TRACE_POINTS
>
> diff --git a/rust/bindings/bindings_helper.h b/rust/bindings/bindings_helper.h
> index 8fd092e1b809..fc6f94729789 100644
> --- a/rust/bindings/bindings_helper.h
> +++ b/rust/bindings/bindings_helper.h
> @@ -20,6 +20,7 @@
> #include <linux/refcount.h>
> #include <linux/sched.h>
> #include <linux/slab.h>
> +#include <linux/tracepoint.h>
> #include <linux/wait.h>
> #include <linux/workqueue.h>
>
> diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs
> index 91af9f75d121..d00a44b000b6 100644
> --- a/rust/kernel/lib.rs
> +++ b/rust/kernel/lib.rs
> @@ -51,6 +51,7 @@
> pub mod sync;
> pub mod task;
> pub mod time;
> +pub mod tracepoint;
> pub mod types;
> pub mod uaccess;
> pub mod workqueue;
> diff --git a/rust/kernel/tracepoint.rs b/rust/kernel/tracepoint.rs
> new file mode 100644
> index 000000000000..cf2d9ad15912
> --- /dev/null
> +++ b/rust/kernel/tracepoint.rs
> @@ -0,0 +1,49 @@
> +// SPDX-License-Identifier: GPL-2.0
> +
> +// Copyright (C) 2024 Google LLC.
> +
> +//! Logic for tracepoints.
> +
> +/// Declare the Rust entry point for a tracepoint.
> +///
> +/// This macro generates an unsafe function that calls into C, and its safety requirements will be
> +/// whatever the relevant C code requires. To document these safety requirements, you may add
> +/// doc-comments when invoking the macro.
> +#[macro_export]
> +macro_rules! declare_trace {
> + ($($(#[$attr:meta])* $pub:vis unsafe fn $name:ident($($argname:ident : $argtyp:ty),* $(,)?);)*) => {$(
> + $( #[$attr] )*
> + #[inline(always)]
> + $pub unsafe fn $name($($argname : $argtyp),*) {
> + #[cfg(CONFIG_TRACEPOINTS)]
> + {
> + // SAFETY: It's always okay to query the static key for a tracepoint.
> + let should_trace = unsafe {
> + $crate::macros::paste! {
> + $crate::jump_label::static_key_false!(
> + $crate::bindings::[< __tracepoint_ $name >],
> + $crate::bindings::tracepoint,
> + key
> + )
> + }
> + };
> +
> + if should_trace {
> + $crate::macros::paste! {
> + // SAFETY: The caller guarantees that it is okay to call this tracepoint.
> + unsafe { $crate::bindings::[< rust_do_trace_ $name >]($($argname),*) };
> + }
> + }
> + }
> +
> + #[cfg(not(CONFIG_TRACEPOINTS))]
> + {
> + // If tracepoints are disabled, insert a trivial use of each argument
> + // to avoid unused argument warnings.
> + $( let _unused = $argname; )*
> + }
> + }
> + )*}
> +}
> +
> +pub use declare_trace;
>
> --
> 2.46.0.184.g6999bdac58-goog
>
WARNING: multiple messages have this Message-ID (diff)
From: Boqun Feng <boqun.feng@gmail.com>
To: Alice Ryhl <aliceryhl@google.com>
Cc: "Steven Rostedt" <rostedt@goodmis.org>,
"Masami Hiramatsu" <mhiramat@kernel.org>,
"Mathieu Desnoyers" <mathieu.desnoyers@efficios.com>,
"Peter Zijlstra" <peterz@infradead.org>,
"Josh Poimboeuf" <jpoimboe@kernel.org>,
"Jason Baron" <jbaron@akamai.com>,
"Ard Biesheuvel" <ardb@kernel.org>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Alex Gaynor" <alex.gaynor@gmail.com>,
"Wedson Almeida Filho" <wedsonaf@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <benno.lossin@proton.me>,
"Andreas Hindborg" <a.hindborg@samsung.com>,
linux-trace-kernel@vger.kernel.org,
rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org,
"Arnd Bergmann" <arnd@arndb.de>,
linux-arch@vger.kernel.org,
"Thomas Gleixner" <tglx@linutronix.de>,
"Ingo Molnar" <mingo@redhat.com>,
"Borislav Petkov" <bp@alien8.de>,
"Dave Hansen" <dave.hansen@linux.intel.com>,
x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
"Sean Christopherson" <seanjc@google.com>,
"Uros Bizjak" <ubizjak@gmail.com>,
"Catalin Marinas" <catalin.marinas@arm.com>,
"Will Deacon" <will@kernel.org>, "Marc Zyngier" <maz@kernel.org>,
"Oliver Upton" <oliver.upton@linux.dev>,
"Mark Rutland" <mark.rutland@arm.com>,
"Ryan Roberts" <ryan.roberts@arm.com>,
"Fuad Tabba" <tabba@google.com>,
linux-arm-kernel@lists.infradead.org,
"Paul Walmsley" <paul.walmsley@sifive.com>,
"Palmer Dabbelt" <palmer@dabbelt.com>,
"Albert Ou" <aou@eecs.berkeley.edu>,
"Anup Patel" <apatel@ventanamicro.com>,
"Andrew Jones" <ajones@ventanamicro.com>,
"Alexandre Ghiti" <alexghiti@rivosinc.com>,
"Conor Dooley" <conor.dooley@microchip.com>,
"Samuel Holland" <samuel.holland@sifive.com>,
linux-riscv@lists.infradead.org,
"Huacai Chen" <chenhuacai@kernel.org>,
"WANG Xuerui" <kernel@xen0n.name>,
"Bibo Mao" <maobibo@loongson.cn>,
"Tiezhu Yang" <yangtiezhu@loongson.cn>,
"Andrew Morton" <akpm@linux-foundation.org>,
"Tianrui Zhao" <zhaotianrui@loongson.cn>,
loongarch@lists.linux.dev, "Carlos Llamas" <cmllamas@google.com>
Subject: Re: [PATCH v8 2/5] rust: add tracepoint support
Date: Thu, 22 Aug 2024 07:38:10 -0700 [thread overview]
Message-ID: <ZsdNUofUSSNv9jTR@boqun-archlinux> (raw)
In-Reply-To: <20240822-tracepoint-v8-2-f0c5899e6fd3@google.com>
On Thu, Aug 22, 2024 at 12:04:14PM +0000, Alice Ryhl wrote:
> Make it possible to have Rust code call into tracepoints defined by C
> code. It is still required that the tracepoint is declared in a C
> header, and that this header is included in the input to bindgen.
>
> Instead of calling __DO_TRACE directly, the exported rust_do_trace_
> function calls an inline helper function. This is because the `cond`
> argument does not exist at the callsite of DEFINE_RUST_DO_TRACE.
>
> __DECLARE_TRACE always emits an inline static and an extern declaration
> that is only used when CREATE_RUST_TRACE_POINTS is set. These should not
> end up in the final binary so it is not a problem that they sometimes
> are emitted without a user.
>
> Reviewed-by: Carlos Llamas <cmllamas@google.com>
> Reviewed-by: Gary Guo <gary@garyguo.net>
> Signed-off-by: Alice Ryhl <aliceryhl@google.com>
Reviewed-by: Boqun Feng <boqun.feng@gmail.com>
Regards,
Boqun
> ---
> include/linux/tracepoint.h | 22 +++++++++++++++++-
> include/trace/define_trace.h | 12 ++++++++++
> rust/bindings/bindings_helper.h | 1 +
> rust/kernel/lib.rs | 1 +
> rust/kernel/tracepoint.rs | 49 +++++++++++++++++++++++++++++++++++++++++
> 5 files changed, 84 insertions(+), 1 deletion(-)
>
> diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h
> index 6be396bb4297..5042ca588e41 100644
> --- a/include/linux/tracepoint.h
> +++ b/include/linux/tracepoint.h
> @@ -237,6 +237,18 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
> #define __DECLARE_TRACE_RCU(name, proto, args, cond)
> #endif
>
> +/*
> + * Declare an exported function that Rust code can call to trigger this
> + * tracepoint. This function does not include the static branch; that is done
> + * in Rust to avoid a function call when the tracepoint is disabled.
> + */
> +#define DEFINE_RUST_DO_TRACE(name, proto, args)
> +#define __DEFINE_RUST_DO_TRACE(name, proto, args) \
> + notrace void rust_do_trace_##name(proto) \
> + { \
> + __rust_do_trace_##name(args); \
> + }
> +
> /*
> * Make sure the alignment of the structure in the __tracepoints section will
> * not add unwanted padding between the beginning of the section and the
> @@ -252,6 +264,13 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
> extern int __traceiter_##name(data_proto); \
> DECLARE_STATIC_CALL(tp_func_##name, __traceiter_##name); \
> extern struct tracepoint __tracepoint_##name; \
> + extern void rust_do_trace_##name(proto); \
> + static inline void __rust_do_trace_##name(proto) \
> + { \
> + __DO_TRACE(name, \
> + TP_ARGS(args), \
> + TP_CONDITION(cond), 0); \
> + } \
> static inline void trace_##name(proto) \
> { \
> if (static_key_false(&__tracepoint_##name.key)) \
> @@ -336,7 +355,8 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
> void __probestub_##_name(void *__data, proto) \
> { \
> } \
> - DEFINE_STATIC_CALL(tp_func_##_name, __traceiter_##_name);
> + DEFINE_STATIC_CALL(tp_func_##_name, __traceiter_##_name); \
> + DEFINE_RUST_DO_TRACE(_name, TP_PROTO(proto), TP_ARGS(args))
>
> #define DEFINE_TRACE(name, proto, args) \
> DEFINE_TRACE_FN(name, NULL, NULL, PARAMS(proto), PARAMS(args));
> diff --git a/include/trace/define_trace.h b/include/trace/define_trace.h
> index 00723935dcc7..8159294c2041 100644
> --- a/include/trace/define_trace.h
> +++ b/include/trace/define_trace.h
> @@ -72,6 +72,13 @@
> #define DECLARE_TRACE(name, proto, args) \
> DEFINE_TRACE(name, PARAMS(proto), PARAMS(args))
>
> +/* If requested, create helpers for calling these tracepoints from Rust. */
> +#ifdef CREATE_RUST_TRACE_POINTS
> +#undef DEFINE_RUST_DO_TRACE
> +#define DEFINE_RUST_DO_TRACE(name, proto, args) \
> + __DEFINE_RUST_DO_TRACE(name, PARAMS(proto), PARAMS(args))
> +#endif
> +
> #undef TRACE_INCLUDE
> #undef __TRACE_INCLUDE
>
> @@ -129,6 +136,11 @@
> # undef UNDEF_TRACE_INCLUDE_PATH
> #endif
>
> +#ifdef CREATE_RUST_TRACE_POINTS
> +# undef DEFINE_RUST_DO_TRACE
> +# define DEFINE_RUST_DO_TRACE(name, proto, args)
> +#endif
> +
> /* We may be processing more files */
> #define CREATE_TRACE_POINTS
>
> diff --git a/rust/bindings/bindings_helper.h b/rust/bindings/bindings_helper.h
> index 8fd092e1b809..fc6f94729789 100644
> --- a/rust/bindings/bindings_helper.h
> +++ b/rust/bindings/bindings_helper.h
> @@ -20,6 +20,7 @@
> #include <linux/refcount.h>
> #include <linux/sched.h>
> #include <linux/slab.h>
> +#include <linux/tracepoint.h>
> #include <linux/wait.h>
> #include <linux/workqueue.h>
>
> diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs
> index 91af9f75d121..d00a44b000b6 100644
> --- a/rust/kernel/lib.rs
> +++ b/rust/kernel/lib.rs
> @@ -51,6 +51,7 @@
> pub mod sync;
> pub mod task;
> pub mod time;
> +pub mod tracepoint;
> pub mod types;
> pub mod uaccess;
> pub mod workqueue;
> diff --git a/rust/kernel/tracepoint.rs b/rust/kernel/tracepoint.rs
> new file mode 100644
> index 000000000000..cf2d9ad15912
> --- /dev/null
> +++ b/rust/kernel/tracepoint.rs
> @@ -0,0 +1,49 @@
> +// SPDX-License-Identifier: GPL-2.0
> +
> +// Copyright (C) 2024 Google LLC.
> +
> +//! Logic for tracepoints.
> +
> +/// Declare the Rust entry point for a tracepoint.
> +///
> +/// This macro generates an unsafe function that calls into C, and its safety requirements will be
> +/// whatever the relevant C code requires. To document these safety requirements, you may add
> +/// doc-comments when invoking the macro.
> +#[macro_export]
> +macro_rules! declare_trace {
> + ($($(#[$attr:meta])* $pub:vis unsafe fn $name:ident($($argname:ident : $argtyp:ty),* $(,)?);)*) => {$(
> + $( #[$attr] )*
> + #[inline(always)]
> + $pub unsafe fn $name($($argname : $argtyp),*) {
> + #[cfg(CONFIG_TRACEPOINTS)]
> + {
> + // SAFETY: It's always okay to query the static key for a tracepoint.
> + let should_trace = unsafe {
> + $crate::macros::paste! {
> + $crate::jump_label::static_key_false!(
> + $crate::bindings::[< __tracepoint_ $name >],
> + $crate::bindings::tracepoint,
> + key
> + )
> + }
> + };
> +
> + if should_trace {
> + $crate::macros::paste! {
> + // SAFETY: The caller guarantees that it is okay to call this tracepoint.
> + unsafe { $crate::bindings::[< rust_do_trace_ $name >]($($argname),*) };
> + }
> + }
> + }
> +
> + #[cfg(not(CONFIG_TRACEPOINTS))]
> + {
> + // If tracepoints are disabled, insert a trivial use of each argument
> + // to avoid unused argument warnings.
> + $( let _unused = $argname; )*
> + }
> + }
> + )*}
> +}
> +
> +pub use declare_trace;
>
> --
> 2.46.0.184.g6999bdac58-goog
>
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2024-08-22 14:38 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-22 12:04 [PATCH v8 0/5] Tracepoints and static branch in Rust Alice Ryhl
2024-08-22 12:04 ` Alice Ryhl
2024-08-22 12:04 ` [PATCH v8 1/5] rust: add generic static_key_false Alice Ryhl
2024-08-22 12:04 ` Alice Ryhl
2024-08-22 12:08 ` [PATCH v8 1/5 alt] " Alice Ryhl
2024-08-22 12:08 ` Alice Ryhl
2024-08-22 13:43 ` Boqun Feng
2024-08-22 13:43 ` Boqun Feng
2024-08-22 12:04 ` [PATCH v8 2/5] rust: add tracepoint support Alice Ryhl
2024-08-22 12:04 ` Alice Ryhl
2024-08-22 14:38 ` Boqun Feng [this message]
2024-08-22 14:38 ` Boqun Feng
2024-08-22 12:04 ` [PATCH v8 3/5] rust: samples: add tracepoint to Rust sample Alice Ryhl
2024-08-22 12:04 ` Alice Ryhl
2024-08-22 17:19 ` Boqun Feng
2024-08-22 17:19 ` Boqun Feng
2024-08-22 12:04 ` [PATCH v8 4/5] jump_label: adjust inline asm to be consistent Alice Ryhl
2024-08-22 12:04 ` Alice Ryhl
2024-08-22 12:04 ` [PATCH v8 5/5] rust: add arch_static_branch Alice Ryhl
2024-08-22 12:04 ` Alice Ryhl
2024-10-01 13:15 ` [PATCH v8 0/5] Tracepoints and static branch in Rust Steven Rostedt
2024-10-01 13:15 ` Steven Rostedt
2024-10-01 13:32 ` Alice Ryhl
2024-10-01 13:32 ` Alice Ryhl
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZsdNUofUSSNv9jTR@boqun-archlinux \
--to=boqun.feng@gmail.com \
--cc=a.hindborg@samsung.com \
--cc=ajones@ventanamicro.com \
--cc=akpm@linux-foundation.org \
--cc=alex.gaynor@gmail.com \
--cc=alexghiti@rivosinc.com \
--cc=aliceryhl@google.com \
--cc=aou@eecs.berkeley.edu \
--cc=apatel@ventanamicro.com \
--cc=ardb@kernel.org \
--cc=arnd@arndb.de \
--cc=benno.lossin@proton.me \
--cc=bjorn3_gh@protonmail.com \
--cc=bp@alien8.de \
--cc=catalin.marinas@arm.com \
--cc=chenhuacai@kernel.org \
--cc=cmllamas@google.com \
--cc=conor.dooley@microchip.com \
--cc=dave.hansen@linux.intel.com \
--cc=gary@garyguo.net \
--cc=hpa@zytor.com \
--cc=jbaron@akamai.com \
--cc=jpoimboe@kernel.org \
--cc=kernel@xen0n.name \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=loongarch@lists.linux.dev \
--cc=maobibo@loongson.cn \
--cc=mark.rutland@arm.com \
--cc=mathieu.desnoyers@efficios.com \
--cc=maz@kernel.org \
--cc=mhiramat@kernel.org \
--cc=mingo@redhat.com \
--cc=ojeda@kernel.org \
--cc=oliver.upton@linux.dev \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=ryan.roberts@arm.com \
--cc=samuel.holland@sifive.com \
--cc=seanjc@google.com \
--cc=tabba@google.com \
--cc=tglx@linutronix.de \
--cc=ubizjak@gmail.com \
--cc=wedsonaf@gmail.com \
--cc=will@kernel.org \
--cc=x86@kernel.org \
--cc=yangtiezhu@loongson.cn \
--cc=zhaotianrui@loongson.cn \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.