All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marc Zyngier <maz@kernel.org>
To: Vincent Donnefort <vdonnefort@google.com>
Cc: rostedt@goodmis.org, mhiramat@kernel.org,
	mathieu.desnoyers@efficios.com,
	linux-trace-kernel@vger.kernel.org, oliver.upton@linux.dev,
	joey.gouly@arm.com, suzuki.poulose@arm.com, yuzenghui@huawei.com,
	kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
	jstultz@google.com, qperret@google.com, will@kernel.org,
	aneesh.kumar@kernel.org, kernel-team@android.com,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v9 28/30] KVM: arm64: Add hyp_enter/hyp_exit events to nVHE/pKVM hyp
Date: Wed, 07 Jan 2026 14:37:35 +0000	[thread overview]
Message-ID: <86a4ypmqts.wl-maz@kernel.org> (raw)
In-Reply-To: <20251202093623.2337860-29-vdonnefort@google.com>

On Tue, 02 Dec 2025 09:36:21 +0000,
Vincent Donnefort <vdonnefort@google.com> wrote:
> 
> The hyp_enter and hyp_exit events are logged by the hypervisor any time
> it is entered and exited.
> 
> Signed-off-by: Vincent Donnefort <vdonnefort@google.com>
> 
> diff --git a/arch/arm64/include/asm/kvm_hypevents.h b/arch/arm64/include/asm/kvm_hypevents.h
> index d6e033c96c52..268b3cd7a1b2 100644
> --- a/arch/arm64/include/asm/kvm_hypevents.h
> +++ b/arch/arm64/include/asm/kvm_hypevents.h
> @@ -7,4 +7,39 @@
>  #include <nvhe/trace.h>
>  #endif
>  
> +#ifndef __HYP_ENTER_EXIT_REASON
> +#define __HYP_ENTER_EXIT_REASON
> +enum hyp_enter_exit_reason {
> +	HYP_REASON_SMC,
> +	HYP_REASON_HVC,
> +	HYP_REASON_PSCI,
> +	HYP_REASON_HOST_ABORT,
> +	HYP_REASON_GUEST_EXIT,
> +	HYP_REASON_ERET_HOST,
> +	HYP_REASON_ERET_GUEST,
> +	HYP_REASON_UNKNOWN	/* Must be last */
> +};
> +#endif
> +
> +HYP_EVENT(hyp_enter,
> +	HE_PROTO(u8 reason),
> +	HE_STRUCT(
> +		he_field(u8, reason)
> +	),
> +	HE_ASSIGN(
> +		__entry->reason = reason;
> +	),
> +	HE_PRINTK("reason=%s", __hyp_enter_exit_reason_str(__entry->reason))
> +);
> +
> +HYP_EVENT(hyp_exit,
> +	HE_PROTO(u8 reason),
> +	HE_STRUCT(
> +		he_field(u8, reason)
> +	),
> +	HE_ASSIGN(
> +		__entry->reason = reason;
> +	),
> +	HE_PRINTK("reason=%s", __hyp_enter_exit_reason_str(__entry->reason))
> +);
>  #endif
> diff --git a/arch/arm64/kvm/hyp/include/nvhe/arm-smccc.h b/arch/arm64/kvm/hyp/include/nvhe/arm-smccc.h
> new file mode 100644
> index 000000000000..7cd0f701f3c9
> --- /dev/null
> +++ b/arch/arm64/kvm/hyp/include/nvhe/arm-smccc.h
> @@ -0,0 +1,23 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +#ifndef __ARM64_KVM_HYP_NVHE_ARM_SMCCC_H__
> +#define __ARM64_KVM_HYP_NVHE_ARM_SMCCC_H__
> +
> +#include <asm/kvm_hypevents.h>
> +
> +#include <linux/arm-smccc.h>
> +
> +#define hyp_smccc_1_1_smc(...)					\
> +	do {							\
> +		trace_hyp_exit(HYP_REASON_SMC);			\
> +		arm_smccc_1_1_smc(__VA_ARGS__);			\
> +		trace_hyp_enter(HYP_REASON_SMC);		\
> +	} while (0)
> +
> +#define hyp_smccc_1_2_smc(...)					\
> +	do {							\
> +		trace_hyp_exit(HYP_REASON_SMC);			\
> +		arm_smccc_1_2_smc(__VA_ARGS__);			\
> +		trace_hyp_enter(HYP_REASON_SMC);		\
> +	} while (0)
> +
> +#endif /* __ARM64_KVM_HYP_NVHE_ARM_SMCCC_H__ */
> diff --git a/arch/arm64/kvm/hyp/nvhe/ffa.c b/arch/arm64/kvm/hyp/nvhe/ffa.c
> index 58b7d0c477d7..73d79f9de850 100644
> --- a/arch/arm64/kvm/hyp/nvhe/ffa.c
> +++ b/arch/arm64/kvm/hyp/nvhe/ffa.c
> @@ -26,10 +26,10 @@
>   * the duration and are therefore serialised.
>   */
>  
> -#include <linux/arm-smccc.h>
>  #include <linux/arm_ffa.h>
>  #include <asm/kvm_pkvm.h>
>  
> +#include <nvhe/arm-smccc.h>
>  #include <nvhe/ffa.h>
>  #include <nvhe/mem_protect.h>
>  #include <nvhe/memory.h>
> @@ -147,7 +147,7 @@ static int ffa_map_hyp_buffers(u64 ffa_page_count)
>  {
>  	struct arm_smccc_1_2_regs res;
>  
> -	arm_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
> +	hyp_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
>  		.a0 = FFA_FN64_RXTX_MAP,
>  		.a1 = hyp_virt_to_phys(hyp_buffers.tx),
>  		.a2 = hyp_virt_to_phys(hyp_buffers.rx),
> @@ -161,7 +161,7 @@ static int ffa_unmap_hyp_buffers(void)
>  {
>  	struct arm_smccc_1_2_regs res;
>  
> -	arm_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
> +	hyp_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
>  		.a0 = FFA_RXTX_UNMAP,
>  		.a1 = HOST_FFA_ID,
>  	}, &res);
> @@ -172,7 +172,7 @@ static int ffa_unmap_hyp_buffers(void)
>  static void ffa_mem_frag_tx(struct arm_smccc_1_2_regs *res, u32 handle_lo,
>  			     u32 handle_hi, u32 fraglen, u32 endpoint_id)
>  {
> -	arm_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
> +	hyp_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
>  		.a0 = FFA_MEM_FRAG_TX,
>  		.a1 = handle_lo,
>  		.a2 = handle_hi,
> @@ -184,7 +184,7 @@ static void ffa_mem_frag_tx(struct arm_smccc_1_2_regs *res, u32 handle_lo,
>  static void ffa_mem_frag_rx(struct arm_smccc_1_2_regs *res, u32 handle_lo,
>  			     u32 handle_hi, u32 fragoff)
>  {
> -	arm_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
> +	hyp_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
>  		.a0 = FFA_MEM_FRAG_RX,
>  		.a1 = handle_lo,
>  		.a2 = handle_hi,
> @@ -196,7 +196,7 @@ static void ffa_mem_frag_rx(struct arm_smccc_1_2_regs *res, u32 handle_lo,
>  static void ffa_mem_xfer(struct arm_smccc_1_2_regs *res, u64 func_id, u32 len,
>  			  u32 fraglen)
>  {
> -	arm_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
> +	hyp_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
>  		.a0 = func_id,
>  		.a1 = len,
>  		.a2 = fraglen,
> @@ -206,7 +206,7 @@ static void ffa_mem_xfer(struct arm_smccc_1_2_regs *res, u64 func_id, u32 len,
>  static void ffa_mem_reclaim(struct arm_smccc_1_2_regs *res, u32 handle_lo,
>  			     u32 handle_hi, u32 flags)
>  {
> -	arm_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
> +	hyp_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
>  		.a0 = FFA_MEM_RECLAIM,
>  		.a1 = handle_lo,
>  		.a2 = handle_hi,
> @@ -216,7 +216,7 @@ static void ffa_mem_reclaim(struct arm_smccc_1_2_regs *res, u32 handle_lo,
>  
>  static void ffa_retrieve_req(struct arm_smccc_1_2_regs *res, u32 len)
>  {
> -	arm_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
> +	hyp_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
>  		.a0 = FFA_FN64_MEM_RETRIEVE_REQ,
>  		.a1 = len,
>  		.a2 = len,
> @@ -225,7 +225,7 @@ static void ffa_retrieve_req(struct arm_smccc_1_2_regs *res, u32 len)
>  
>  static void ffa_rx_release(struct arm_smccc_1_2_regs *res)
>  {
> -	arm_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
> +	hyp_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
>  		.a0 = FFA_RX_RELEASE,
>  	}, res);
>  }
> @@ -728,7 +728,7 @@ static int hyp_ffa_post_init(void)
>  	size_t min_rxtx_sz;
>  	struct arm_smccc_1_2_regs res;
>  
> -	arm_smccc_1_2_smc(&(struct arm_smccc_1_2_regs){
> +	hyp_smccc_1_2_smc(&(struct arm_smccc_1_2_regs){
>  		.a0 = FFA_ID_GET,
>  	}, &res);
>  	if (res.a0 != FFA_SUCCESS)
> @@ -737,7 +737,7 @@ static int hyp_ffa_post_init(void)
>  	if (res.a2 != HOST_FFA_ID)
>  		return -EINVAL;
>  
> -	arm_smccc_1_2_smc(&(struct arm_smccc_1_2_regs){
> +	hyp_smccc_1_2_smc(&(struct arm_smccc_1_2_regs){
>  		.a0 = FFA_FEATURES,
>  		.a1 = FFA_FN64_RXTX_MAP,
>  	}, &res);
> @@ -788,7 +788,7 @@ static void do_ffa_version(struct arm_smccc_1_2_regs *res,
>  	 * first if TEE supports it.
>  	 */
>  	if (FFA_MINOR_VERSION(ffa_req_version) < FFA_MINOR_VERSION(hyp_ffa_version)) {
> -		arm_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
> +		hyp_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
>  			.a0 = FFA_VERSION,
>  			.a1 = ffa_req_version,
>  		}, res);
> @@ -824,7 +824,7 @@ static void do_ffa_part_get(struct arm_smccc_1_2_regs *res,
>  		goto out_unlock;
>  	}
>  
> -	arm_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
> +	hyp_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
>  		.a0 = FFA_PARTITION_INFO_GET,
>  		.a1 = uuid0,
>  		.a2 = uuid1,
> @@ -939,7 +939,7 @@ int hyp_ffa_init(void *pages)
>  	if (kvm_host_psci_config.smccc_version < ARM_SMCCC_VERSION_1_2)
>  		return 0;
>  
> -	arm_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
> +	hyp_smccc_1_2_smc(&(struct arm_smccc_1_2_regs) {
>  		.a0 = FFA_VERSION,
>  		.a1 = FFA_VERSION_1_2,
>  	}, &res);
> diff --git a/arch/arm64/kvm/hyp/nvhe/hyp-main.c b/arch/arm64/kvm/hyp/nvhe/hyp-main.c
> index 446603cdad7b..ffda4850022f 100644
> --- a/arch/arm64/kvm/hyp/nvhe/hyp-main.c
> +++ b/arch/arm64/kvm/hyp/nvhe/hyp-main.c
> @@ -12,6 +12,7 @@
>  #include <asm/kvm_emulate.h>
>  #include <asm/kvm_host.h>
>  #include <asm/kvm_hyp.h>
> +#include <asm/kvm_hypevents.h>
>  #include <asm/kvm_mmu.h>
>  
>  #include <nvhe/ffa.h>
> @@ -728,7 +729,9 @@ static void handle_host_hcall(struct kvm_cpu_context *host_ctxt)
>  
>  static void default_host_smc_handler(struct kvm_cpu_context *host_ctxt)
>  {
> +	trace_hyp_exit(HYP_REASON_SMC);
>  	__kvm_hyp_host_forward_smc(host_ctxt);
> +	trace_hyp_enter(HYP_REASON_SMC);
>  }
>  
>  static void handle_host_smc(struct kvm_cpu_context *host_ctxt)
> @@ -752,18 +755,24 @@ void handle_trap(struct kvm_cpu_context *host_ctxt)
>  {
>  	u64 esr = read_sysreg_el2(SYS_ESR);
>  
> +
>  	switch (ESR_ELx_EC(esr)) {
>  	case ESR_ELx_EC_HVC64:
> +		trace_hyp_enter(HYP_REASON_HVC);
>  		handle_host_hcall(host_ctxt);
>  		break;
>  	case ESR_ELx_EC_SMC64:
> +		trace_hyp_enter(HYP_REASON_SMC);
>  		handle_host_smc(host_ctxt);
>  		break;
>  	case ESR_ELx_EC_IABT_LOW:
>  	case ESR_ELx_EC_DABT_LOW:
> +		trace_hyp_enter(HYP_REASON_HOST_ABORT);
>  		handle_host_mem_abort(host_ctxt);
>  		break;
>  	default:
>  		BUG();
>  	}
> +
> +	trace_hyp_exit(HYP_REASON_ERET_HOST);
>  }
> diff --git a/arch/arm64/kvm/hyp/nvhe/psci-relay.c b/arch/arm64/kvm/hyp/nvhe/psci-relay.c
> index c3e196fb8b18..58658e09c372 100644
> --- a/arch/arm64/kvm/hyp/nvhe/psci-relay.c
> +++ b/arch/arm64/kvm/hyp/nvhe/psci-relay.c
> @@ -6,11 +6,12 @@
>  
>  #include <asm/kvm_asm.h>
>  #include <asm/kvm_hyp.h>
> +#include <asm/kvm_hypevents.h>
>  #include <asm/kvm_mmu.h>
> -#include <linux/arm-smccc.h>
>  #include <linux/kvm_host.h>
>  #include <uapi/linux/psci.h>
>  
> +#include <nvhe/arm-smccc.h>
>  #include <nvhe/memory.h>
>  #include <nvhe/trap_handler.h>
>  
> @@ -65,7 +66,7 @@ static unsigned long psci_call(unsigned long fn, unsigned long arg0,
>  {
>  	struct arm_smccc_res res;
>  
> -	arm_smccc_1_1_smc(fn, arg0, arg1, arg2, &res);
> +	hyp_smccc_1_1_smc(fn, arg0, arg1, arg2, &res);
>  	return res.a0;
>  }
>  
> @@ -205,6 +206,7 @@ asmlinkage void __noreturn __kvm_host_psci_cpu_entry(bool is_cpu_on)
>  	struct psci_boot_args *boot_args;
>  	struct kvm_cpu_context *host_ctxt;
>  
> +	trace_hyp_enter(HYP_REASON_PSCI);
>  	host_ctxt = host_data_ptr(host_ctxt);
>  
>  	if (is_cpu_on)
> @@ -221,6 +223,7 @@ asmlinkage void __noreturn __kvm_host_psci_cpu_entry(bool is_cpu_on)
>  	write_sysreg_el1(INIT_SCTLR_EL1_MMU_OFF, SYS_SCTLR);
>  	write_sysreg(INIT_PSTATE_EL1, SPSR_EL2);
>  
> +	trace_hyp_exit(HYP_REASON_PSCI);
>  	__host_enter(host_ctxt);
>  }
>  
> diff --git a/arch/arm64/kvm/hyp/nvhe/switch.c b/arch/arm64/kvm/hyp/nvhe/switch.c
> index d3b9ec8a7c28..3dc2bbab4bfc 100644
> --- a/arch/arm64/kvm/hyp/nvhe/switch.c
> +++ b/arch/arm64/kvm/hyp/nvhe/switch.c
> @@ -7,7 +7,6 @@
>  #include <hyp/switch.h>
>  #include <hyp/sysreg-sr.h>
>  
> -#include <linux/arm-smccc.h>
>  #include <linux/kvm_host.h>
>  #include <linux/types.h>
>  #include <linux/jump_label.h>
> @@ -21,6 +20,7 @@
>  #include <asm/kvm_asm.h>
>  #include <asm/kvm_emulate.h>
>  #include <asm/kvm_hyp.h>
> +#include <asm/kvm_hypevents.h>
>  #include <asm/kvm_mmu.h>
>  #include <asm/fpsimd.h>
>  #include <asm/debug-monitors.h>
> @@ -308,10 +308,13 @@ int __kvm_vcpu_run(struct kvm_vcpu *vcpu)
>  	__debug_switch_to_guest(vcpu);
>  
>  	do {
> +		trace_hyp_exit(HYP_REASON_ERET_GUEST);
> +
>  		/* Jump in the fire! */
>  		exit_code = __guest_enter(vcpu);
>  
>  		/* And we're baaack! */
> +		trace_hyp_enter(HYP_REASON_GUEST_EXIT);

nit: seeing these two events back to back makes me think that one of
them is misnamed. Either the first should be GUEST_ENTER, or the
second should be GUEST_EXCEPT... Preference for the former.

>  	} while (fixup_guest_exit(vcpu, &exit_code));
>  
>  	__sysreg_save_state_nvhe(guest_ctxt);
> diff --git a/arch/arm64/kvm/hyp_trace.c b/arch/arm64/kvm/hyp_trace.c
> index 0144cd26703e..1ad6a55ba95c 100644
> --- a/arch/arm64/kvm/hyp_trace.c
> +++ b/arch/arm64/kvm/hyp_trace.c
> @@ -364,8 +364,26 @@ static struct trace_remote_callbacks trace_remote_callbacks = {
>  	.enable_event		= hyp_trace_enable_event,
>  };
>  
> +static const char *__hyp_enter_exit_reason_str(u8 reason);
> +
>  #include <asm/kvm_define_hypevents.h>
>  
> +static const char *__hyp_enter_exit_reason_str(u8 reason)

That's one ugly hack... :-(

> +{
> +	static const char strs[][12] = {
> +		"smc",
> +		"hvc",
> +		"psci",
> +		"host_abort",
> +		"guest_exit",
> +		"eret_host",
> +		"eret_guest",
> +		"unknown",
> +	};
> +
> +	return strs[min(reason, HYP_REASON_UNKNOWN)];
> +}
> +
>  static void __init hyp_trace_init_events(void)
>  {
>  	struct hyp_event_id *hyp_event_id = __hyp_event_ids_start;

Thanks,

	M.

-- 
Without deviation from the norm, progress is not possible.

  reply	other threads:[~2026-01-07 14:37 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-02  9:35 [PATCH v9 00/30] Tracefs support for pKVM Vincent Donnefort
2025-12-02  9:35 ` [PATCH v9 01/30] ring-buffer: Add page statistics to the meta-page Vincent Donnefort
2025-12-02  9:35 ` [PATCH v9 02/30] ring-buffer: Store bpage pointers into subbuf_ids Vincent Donnefort
2025-12-02  9:35 ` [PATCH v9 03/30] ring-buffer: Introduce ring-buffer remotes Vincent Donnefort
2025-12-02  9:35 ` [PATCH v9 04/30] ring-buffer: Add non-consuming read for " Vincent Donnefort
2025-12-02  9:35 ` [PATCH v9 05/30] tracing: Introduce trace remotes Vincent Donnefort
2025-12-02  9:35 ` [PATCH v9 06/30] tracing: Add reset to " Vincent Donnefort
2025-12-02  9:36 ` [PATCH v9 07/30] tracing: Add non-consuming read " Vincent Donnefort
2025-12-02  9:36 ` [PATCH v9 08/30] tracing: Add init callback " Vincent Donnefort
2025-12-02  9:36 ` [PATCH v9 09/30] tracing: Add events " Vincent Donnefort
2025-12-02  9:36 ` [PATCH v9 10/30] tracing: Add events/ root files " Vincent Donnefort
2025-12-02  9:36 ` [PATCH v9 11/30] tracing: Add helpers to create trace remote events Vincent Donnefort
2025-12-02  9:36 ` [PATCH v9 12/30] ring-buffer: Export buffer_data_page and macros Vincent Donnefort
2025-12-02  9:36 ` [PATCH v9 13/30] tracing: Introduce simple_ring_buffer Vincent Donnefort
2025-12-02  9:36 ` [PATCH v9 14/30] tracing: Add a trace remote module for testing Vincent Donnefort
2025-12-02  9:36 ` [PATCH v9 15/30] tracing: selftests: Add trace remote tests Vincent Donnefort
2025-12-02  9:36 ` [PATCH v9 16/30] Documentation: tracing: Add tracing remotes Vincent Donnefort
2025-12-02  9:36 ` [PATCH v9 17/30] tracing: load/unload page callbacks for simple_ring_buffer Vincent Donnefort
2025-12-02  9:36 ` [PATCH v9 18/30] tracing: Check for undefined symbols in simple_ring_buffer Vincent Donnefort
2025-12-02  9:36 ` [PATCH v9 19/30] KVM: arm64: Add PKVM_DISABLE_STAGE2_ON_PANIC Vincent Donnefort
2025-12-02  9:36 ` [PATCH v9 20/30] KVM: arm64: Add clock support to nVHE/pKVM hyp Vincent Donnefort
2025-12-02  9:36 ` [PATCH v9 21/30] KVM: arm64: Initialise hyp_nr_cpus for nVHE hyp Vincent Donnefort
2026-01-07 13:45   ` Marc Zyngier
2025-12-02  9:36 ` [PATCH v9 22/30] KVM: arm64: Support unaligned fixmap in the pKVM hyp Vincent Donnefort
2025-12-02  9:36 ` [PATCH v9 23/30] KVM: arm64: Add tracing capability for the nVHE/pKVM hyp Vincent Donnefort
2025-12-02  9:36 ` [PATCH v9 24/30] KVM: arm64: Add trace remote " Vincent Donnefort
2025-12-02  9:36 ` [PATCH v9 25/30] KVM: arm64: Sync boot clock with " Vincent Donnefort
2026-01-07 14:23   ` Marc Zyngier
2026-01-23 12:12     ` Vincent Donnefort
2025-12-02  9:36 ` [PATCH v9 26/30] KVM: arm64: Add trace reset to " Vincent Donnefort
2025-12-02  9:36 ` [PATCH v9 27/30] KVM: arm64: Add event support to the nVHE/pKVM hyp and trace remote Vincent Donnefort
2025-12-02  9:36 ` [PATCH v9 28/30] KVM: arm64: Add hyp_enter/hyp_exit events to nVHE/pKVM hyp Vincent Donnefort
2026-01-07 14:37   ` Marc Zyngier [this message]
2026-01-07 16:36     ` Steven Rostedt
2025-12-02  9:36 ` [PATCH v9 29/30] KVM: arm64: Add selftest event support " Vincent Donnefort
2026-01-07 15:40   ` Marc Zyngier
2026-01-23 12:14     ` Vincent Donnefort
2026-01-23 12:21       ` Vincent Donnefort
2026-01-23 12:47         ` Marc Zyngier
2026-01-23 12:47       ` Marc Zyngier
2025-12-02  9:36 ` [PATCH v9 30/30] tracing: selftests: Add hypervisor trace remote tests Vincent Donnefort
2026-01-07 16:00 ` [PATCH v9 00/30] Tracefs support for pKVM Marc Zyngier
2026-01-07 16:59   ` Steven Rostedt
2026-01-16 10:08     ` Marc Zyngier

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=86a4ypmqts.wl-maz@kernel.org \
    --to=maz@kernel.org \
    --cc=aneesh.kumar@kernel.org \
    --cc=joey.gouly@arm.com \
    --cc=jstultz@google.com \
    --cc=kernel-team@android.com \
    --cc=kvmarm@lists.linux.dev \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mhiramat@kernel.org \
    --cc=oliver.upton@linux.dev \
    --cc=qperret@google.com \
    --cc=rostedt@goodmis.org \
    --cc=suzuki.poulose@arm.com \
    --cc=vdonnefort@google.com \
    --cc=will@kernel.org \
    --cc=yuzenghui@huawei.com \
    /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.