[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [XEN v4 1/3] xen/arm: Introduce CONFIG_PARTIAL_EMULATION and "partial-emulation" cmd option
Hi Ayan, On 31/01/2024 13:10, 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 for example. We call them as partial > emulation. > > Some registers are non-optional and as such there is nothing preventing an OS > from accessing them. > Instead of injecting undefined exception (thus crashing a guest), one may want > to prefer a partial emulation to let the guest running (in some cases > accepting > the fact that it might result in unwanted behavior). > > 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 emulated as RAZ/WI and they can be enclosed within > CONFIG_PARTIAL_EMULATION. > > Further, "partial-emulation" command line option allows us to > enable/disable partial emulation at run time. While CONFIG_PARTIAL_EMULATION > enables support for partial emulation at compile time (i.e. 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, users > can use scripts like Imagebuilder to generate uboot-script which will append > "partial-emulation=false" to xen command line to turn off the partial NIT: given that the option is false by default, it would make more sense to give example with setting it to true to enable it. > 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. > > v3 :- > 1. Defined a macro 'partial_emulation' to reduce if-defs. > 2. Fixed style issues. > > docs/misc/xen-command-line.pandoc | 11 +++++++++++ > xen/arch/arm/Kconfig | 9 +++++++++ > xen/arch/arm/include/asm/traps.h | 6 ++++++ > xen/arch/arm/traps.c | 9 +++++++++ > 4 files changed, 35 insertions(+) > > diff --git a/docs/misc/xen-command-line.pandoc > b/docs/misc/xen-command-line.pandoc > index 8e65f8bd18..22c0d7c9f6 100644 > --- a/docs/misc/xen-command-line.pandoc > +++ b/docs/misc/xen-command-line.pandoc > @@ -1949,6 +1949,17 @@ This option is ignored in **pv-shim** mode. > > > Default: `on` > > +### partial-emulation (arm) > +> `= <boolean>` > + > +> Default: `false` > + > +Flag to enable or disable partial emulation of system/coprocessor registers. > +Only effective if CONFIG_PARTIAL_EMULATION is enabled. > + > +**WARNING: Enabling this option might result in unwanted/non-spec compliant > +behavior.** > + > ### pci > = List of [ serr=<bool>, perr=<bool> ] > > diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig > index 50e9bfae1a..8d8f668e7f 100644 > --- a/xen/arch/arm/Kconfig > +++ b/xen/arch/arm/Kconfig > @@ -225,6 +225,15 @@ 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 of system/coprocessor registers" > + default y > + help > + This option enables partial emulation of registers to prevent guests > + crashing when accessing registers which are not optional but have not > been > + emulated to its complete functionality. Enabling this might result in NIT: s/its/their Other than that: Reviewed-by: Michal Orzel <michal.orzel@xxxxxxx> ~Michal
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |