|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [XEN v3 1/3] xen/arm: Introduce CONFIG_PARTIAL_EMULATION and "partial-emulation" cmd option
Hi Ayan,
On 05/01/2024 12:21, Ayan Kumar Halder wrote:
>
>
> There can be situations when the registers cannot be emulated to their full
> functionality. This can be due to the complexity involved. In such cases, one
> can emulate those registers as RAZ/WI. We call them as partial emulation.
I read this as if RAZ/WI was the only solution which is not true. I would add
e.g.
>
> A suitable example of this (as seen in subsequent patches) is emulation of
> DBGDTRTX_EL0 (on Arm64) and DBGDTRTXINT(on Arm32). These non-optional
> registers can be partially emulated as RAZ/WI and they can be enclosed
> within CONFIG_PARTIAL_EMULATION.
I think we are missing the purpose of this patch i.e. why we want to enable
partial
emulation instead of default behavior which is injecting undefined exception.
>
> Further, "partial-emulation" command line option enables us to
> enable/disable partial emulation at run time. While CONFIG_PARTIAL_EMULATION
> enables support for partial emulation at compile time (ie adds code for
> partial emulation), this option may be enabled or disabled by Yocto or other
> build systems. However if the build system turns this option on, customers
Users (in general) instead of customers?
> can use cripts like Imagebuilder to generate uboot-script which will append
s/cripts/scripts
> "partial-emulation=false" to xen command line to turn off the partial
> emulation. Thus, it helps to avoid rebuilding xen.
>
> By default, "CONFIG_PARTIAL_EMULATION=y" and "partial-emulation=false".
> This is done so that Xen supports partial emulation. However, customers are
> fully aware when they enable partial emulation.
It's important to note that enabling such support might result in
unwanted/non-spec
compliant behavior.
>
> Signed-off-by: Ayan Kumar Halder <ayan.kumar.halder@xxxxxxx>
> ---
> Changes from v1 :-
> 1. New patch introduced in v2.
>
> v2 :-
> 1. Reordered the patches so that the config and command line option is
> introduced in the first patch.
>
> docs/misc/xen-command-line.pandoc | 7 +++++++
> xen/arch/arm/Kconfig | 8 ++++++++
> xen/arch/arm/include/asm/regs.h | 6 ++++++
> xen/arch/arm/traps.c | 3 +++
> 4 files changed, 24 insertions(+)
>
> diff --git a/docs/misc/xen-command-line.pandoc
> b/docs/misc/xen-command-line.pandoc
> index 8e65f8bd18..dd2a76fb19 100644
> --- a/docs/misc/xen-command-line.pandoc
> +++ b/docs/misc/xen-command-line.pandoc
> @@ -1949,6 +1949,13 @@ This option is ignored in **pv-shim** mode.
>
> > Default: `on`
>
> +### partial-emulation (arm)
> +> `= <boolean>`
> +
> +> Default: `false`
> +
> +Flag to enable or disable partial emulation of registers
Missing dot at the end of sentence.
Also, I would add a warning that enabling this option might result in unwanted
behavior
and that it is only effective if CONFIG_PARTIAL_EMULATION is enabled.
> +
> ### pci
> = List of [ serr=<bool>, perr=<bool> ]
>
> diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig
> index 50e9bfae1a..8f25d9cba0 100644
> --- a/xen/arch/arm/Kconfig
> +++ b/xen/arch/arm/Kconfig
> @@ -225,6 +225,14 @@ config STATIC_EVTCHN
> This option enables establishing static event channel communication
> between domains on a dom0less system (domU-domU as well as
> domU-dom0).
>
> +config PARTIAL_EMULATION
> + bool "Enable partial emulation for registers"
Shouldn't we be more specific and write system/coprocessor registers?
> + default y
> + help
> + This option enabled partial emulation for registers to avoid guests
s/enabled/enables
> + crashing when accessing registers which are not optional but has not
> been
> + emulated to its complete functionality.
Ditto about the possible side effect.
Formatting is incorrect. bool, default, help should be indented by tab and help
text
by tab and 2 spaces.
> +
> endmenu
>
> menu "ARM errata workaround via the alternative framework"
> diff --git a/xen/arch/arm/include/asm/regs.h b/xen/arch/arm/include/asm/regs.h
> index f998aedff5..b71fa20f91 100644
> --- a/xen/arch/arm/include/asm/regs.h
> +++ b/xen/arch/arm/include/asm/regs.h
> @@ -13,6 +13,12 @@
>
> #define psr_mode(psr,m) (((psr) & PSR_MODE_MASK) == (m))
>
> +/*
> + * opt_partial_emulation: If true, partial emulation for registers will be
> + * enabled.
> + */
Description would better suit at the definition.
> +extern bool opt_partial_emulation;
> +
Given that parameter definition is in traps.c, I would add declaration in
traps.h.
> static inline bool regs_mode_is_32bit(const struct cpu_user_regs *regs)
> {
> #ifdef CONFIG_ARM_32
> diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
> index 9c10e8f78c..d5fb9c1035 100644
> --- a/xen/arch/arm/traps.c
> +++ b/xen/arch/arm/traps.c
> @@ -42,6 +42,9 @@
> #include <asm/vgic.h>
> #include <asm/vtimer.h>
>
> +bool opt_partial_emulation = false;
> +boolean_param("partial-emulation", opt_partial_emulation);
Looking at other patches, the partial emulation code will most often be used as
follows:
#ifdef CONFIG_PARTIAL_EMULATION
if ( opt_partial_emulation )
...
else
...
#endif
We could instead do:
#ifdef CONFIG_PARTIAL_EMULATION
#define partial_emulation_enabled opt_partial_emulation
#else
#define partial_emulation_enabled false
#endif
to reduce the number of checks and ifdefery (still could be used to compile out
some code in rare cases).
> +
> /* The base of the stack must always be double-word aligned, which means
> * that both the kernel half of struct cpu_user_regs (which is pushed in
> * entry.S) and struct cpu_info (which lives at the bottom of a Xen
> --
> 2.25.1
>
>
~Michal
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |