From: john strange <johnstra10@gmail.com>
To: qemu-devel@nongnu.org
Subject: Re: [PATCH 1/2] accel/kvm: Define KVM_ARCH_HAVE_MCE_INJECTION in each target
Date: Wed, 24 Jan 2024 15:35:52 -0800 [thread overview]
Message-ID: <b60c850d-bbc8-45dd-92c5-f16273740225@gmail.com> (raw)
In-Reply-To: <20240124155425.73195-2-philmd@linaro.org>
It might be good to replace "MCE" in kvm-all.c with a generic
abstraction for error injection to avoid carrying the MCE constructs
into non-x86 sigbus handlers.
thanks,
-john
On 1/24/24 07:54, Philippe Mathieu-Daudé wrote:
> Instead of having KVM_HAVE_MCE_INJECTION optionally defined,
> always define KVM_ARCH_HAVE_MCE_INJECTION for each target,
> and set KVM_HAVE_MCE_INJECTION if it is not zero.
>
> It is now clearer for KVM targets to detect if they lack the
> MCE injection implementation. Also, moving headers around
> is no more painful, because if a target neglects to define
> KVM_ARCH_HAVE_MCE_INJECTION, the build will fail.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> I'd rather keep "cpu-param.h" simple/short.
>
> Is a per-target "kvm-param.h" any better?
> Or per-target "accel-param.h"? For example TCG_GUEST_DEFAULT_MO
> is TCG specific and could also go there. Otherwise it will go
> in "cpu-param.h".
> ---
> include/sysemu/kvm.h | 5 +++++
> target/arm/cpu-param.h | 5 +++++
> target/arm/cpu.h | 4 ----
> target/i386/cpu-param.h | 2 ++
> target/i386/cpu.h | 2 --
> target/loongarch/cpu-param.h | 2 ++
> target/mips/cpu-param.h | 2 ++
> target/ppc/cpu-param.h | 2 ++
> target/riscv/cpu-param.h | 2 ++
> target/s390x/cpu-param.h | 2 ++
> 10 files changed, 22 insertions(+), 6 deletions(-)
>
> diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h
> index d614878164..2e9aa2fc53 100644
> --- a/include/sysemu/kvm.h
> +++ b/include/sysemu/kvm.h
> @@ -212,6 +212,7 @@ int kvm_on_sigbus(int code, void *addr);
>
> #ifdef NEED_CPU_H
> #include "cpu.h"
> +#include "cpu-param.h"
>
> void kvm_flush_coalesced_mmio_buffer(void);
>
> @@ -349,6 +350,10 @@ bool kvm_vcpu_id_is_valid(int vcpu_id);
> /* Returns VCPU ID to be used on KVM_CREATE_VCPU ioctl() */
> unsigned long kvm_arch_vcpu_id(CPUState *cpu);
>
> +#if KVM_ARCH_HAVE_MCE_INJECTION
> +#define KVM_HAVE_MCE_INJECTION
> +#endif
> +
> #ifdef KVM_HAVE_MCE_INJECTION
> void kvm_arch_on_sigbus_vcpu(CPUState *cpu, int code, void *addr);
> #endif
> diff --git a/target/arm/cpu-param.h b/target/arm/cpu-param.h
> index f9b462a98f..d71cc29864 100644
> --- a/target/arm/cpu-param.h
> +++ b/target/arm/cpu-param.h
> @@ -30,7 +30,12 @@
> */
> # define TARGET_PAGE_BITS_VARY
> # define TARGET_PAGE_BITS_MIN 10
> +#endif
>
> +#ifdef TARGET_AARCH64
> +#define KVM_ARCH_HAVE_MCE_INJECTION 1
> +#else
> +#define KVM_ARCH_HAVE_MCE_INJECTION 0
> #endif
>
> #endif
> diff --git a/target/arm/cpu.h b/target/arm/cpu.h
> index ec276fcd57..f92c8d3b88 100644
> --- a/target/arm/cpu.h
> +++ b/target/arm/cpu.h
> @@ -30,10 +30,6 @@
> /* ARM processors have a weak memory model */
> #define TCG_GUEST_DEFAULT_MO (0)
>
> -#ifdef TARGET_AARCH64
> -#define KVM_HAVE_MCE_INJECTION 1
> -#endif
> -
> #define EXCP_UDEF 1 /* undefined instruction */
> #define EXCP_SWI 2 /* software interrupt */
> #define EXCP_PREFETCH_ABORT 3
> diff --git a/target/i386/cpu-param.h b/target/i386/cpu-param.h
> index 911b4cd51b..5933b0b756 100644
> --- a/target/i386/cpu-param.h
> +++ b/target/i386/cpu-param.h
> @@ -24,4 +24,6 @@
> #endif
> #define TARGET_PAGE_BITS 12
>
> +#define KVM_ARCH_HAVE_MCE_INJECTION 1
> +
> #endif
> diff --git a/target/i386/cpu.h b/target/i386/cpu.h
> index 7f0786e8b9..230ab1cded 100644
> --- a/target/i386/cpu.h
> +++ b/target/i386/cpu.h
> @@ -33,8 +33,6 @@
> /* The x86 has a strong memory model with some store-after-load re-ordering */
> #define TCG_GUEST_DEFAULT_MO (TCG_MO_ALL & ~TCG_MO_ST_LD)
>
> -#define KVM_HAVE_MCE_INJECTION 1
> -
> /* support for self modifying code even if the modified instruction is
> close to the modifying instruction */
> #define TARGET_HAS_PRECISE_SMC
> diff --git a/target/loongarch/cpu-param.h b/target/loongarch/cpu-param.h
> index cfe195db4e..f69a94e6b5 100644
> --- a/target/loongarch/cpu-param.h
> +++ b/target/loongarch/cpu-param.h
> @@ -14,4 +14,6 @@
>
> #define TARGET_PAGE_BITS 12
>
> +#define KVM_ARCH_HAVE_MCE_INJECTION 0
> +
> #endif
> diff --git a/target/mips/cpu-param.h b/target/mips/cpu-param.h
> index 594c91a156..45c885e00e 100644
> --- a/target/mips/cpu-param.h
> +++ b/target/mips/cpu-param.h
> @@ -30,4 +30,6 @@
> #define TARGET_PAGE_BITS_MIN 12
> #endif
>
> +#define KVM_ARCH_HAVE_MCE_INJECTION 0
> +
> #endif
> diff --git a/target/ppc/cpu-param.h b/target/ppc/cpu-param.h
> index 0a0416e0a8..9975ae73ab 100644
> --- a/target/ppc/cpu-param.h
> +++ b/target/ppc/cpu-param.h
> @@ -33,4 +33,6 @@
> #endif
> #define TARGET_PAGE_BITS 12
>
> +#define KVM_ARCH_HAVE_MCE_INJECTION 0
> +
> #endif
> diff --git a/target/riscv/cpu-param.h b/target/riscv/cpu-param.h
> index b2a9396dec..e6199f4f6d 100644
> --- a/target/riscv/cpu-param.h
> +++ b/target/riscv/cpu-param.h
> @@ -28,4 +28,6 @@
> * - M mode HLV/HLVX/HSV 0b111
> */
>
> +#define KVM_ARCH_HAVE_MCE_INJECTION 0
> +
> #endif
> diff --git a/target/s390x/cpu-param.h b/target/s390x/cpu-param.h
> index 84ca08626b..4728b3957e 100644
> --- a/target/s390x/cpu-param.h
> +++ b/target/s390x/cpu-param.h
> @@ -13,4 +13,6 @@
> #define TARGET_PHYS_ADDR_SPACE_BITS 64
> #define TARGET_VIRT_ADDR_SPACE_BITS 64
>
> +#define KVM_ARCH_HAVE_MCE_INJECTION 0
> +
> #endif
next prev parent reply other threads:[~2024-01-24 23:36 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-24 15:54 [PATCH 0/2] accel/kvm: Sanitize KVM_HAVE_MCE_INJECTION definition Philippe Mathieu-Daudé
2024-01-24 15:54 ` [PATCH 1/2] accel/kvm: Define KVM_ARCH_HAVE_MCE_INJECTION in each target Philippe Mathieu-Daudé
2024-01-24 23:35 ` john strange [this message]
2024-01-24 15:54 ` [PATCH 2/2] accel/kvm: Directly check KVM_ARCH_HAVE_MCE_INJECTION value in place Philippe Mathieu-Daudé
2024-01-26 18:16 ` [PATCH 0/2] accel/kvm: Sanitize KVM_HAVE_MCE_INJECTION definition Paolo Bonzini
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=b60c850d-bbc8-45dd-92c5-f16273740225@gmail.com \
--to=johnstra10@gmail.com \
--cc=qemu-devel@nongnu.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).