[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 07/18] xen/arm: Introduce a command line parameter for SErrors/Aborts
On Mon, 13 Mar 2017, Wei Chen wrote: > In order to distinguish guest-generated SErrors from hypervisor-generated > SErrors. We have to place SError checking code in every EL1 -> EL2 paths. ^ remove . > That will be an overhead on entries caused by dsb/isb. > > But not all platforms want to categorize the SErrors. For example, a host > that is running with trusted guests. The administrator can confirm that > all guests that are running on the host will not trigger such SErrors. In > this user scene, we should provide some options to administrator to avoid ^use-case > categorizing the SErrors. And then reduce the overhead of dsb/isb. ^ remove ^ remove > We provided following 3 options to administrator to determine how to handle > the SErrors: > > * `diverse`: > The hypervisor will distinguish guest SErrors from hypervisor SErrors. > The guest generated SErrors will be forwarded to guests, the hypervisor > generated SErrors will cause the whole system crash. > It requires: > 1. Place dsb/isb on all EL1 -> EL2 trap entries to categorize SErrors > correctly. > 2. Place dsb/isb on EL2 -> EL1 return paths to prevent slipping hypervisor > SErrors to guests. > 3. Place dsb/isb in context switch to isolate the SErrors between 2 vCPUs. > > * `forward`: > The hypervisor will not distinguish guest SErrors from hypervisor SErrors. > All SErrors will be forwarded to guests, except the SErrors generated when > idle vCPU is running. The idle domain doesn't have the ability to hanle the > SErrors, so we have to crash the whole system when we get SErros with idle > vCPU. This option will avoid most overhead of the dsb/isb, except the > dsb/isb > in context switch which is used to isolate the SErrors between 2 vCPUs. > > * `panic`: > The hypervisor will not distinguish guest SErrors from hypervisor SErrors. > All SErrors will crash the whole system. This option will avoid all overhead > of the dsb/isb. > > Signed-off-by: Wei Chen <Wei.Chen@xxxxxxx> > > --- > About adding dsb/isb to prevent slipping Hypervisor SErrors to Guests if the > selected option is "diverse". Some Hypervisor SErrors could not be avoid by > software, for example ECC Error. But I don't know whether it's worth adding > the overhead by default. > --- > docs/misc/xen-command-line.markdown | 44 > +++++++++++++++++++++++++++++++++++++ > xen/arch/arm/traps.c | 19 ++++++++++++++++ > 2 files changed, 63 insertions(+) > > diff --git a/docs/misc/xen-command-line.markdown > b/docs/misc/xen-command-line.markdown > index 4daf5b5..79554ce 100644 > --- a/docs/misc/xen-command-line.markdown > +++ b/docs/misc/xen-command-line.markdown > @@ -1481,6 +1481,50 @@ enabling more sockets and cores to go into deeper > sleep states. > > Set the serial transmit buffer size. > > +### serrors (ARM) > +> `= diverse | forward | panic` > + > +> Default: `diverse` > + > +This parameter is provided to administrator to determine how to handle the > +SErrors. This parameter is provided to administrators to determine how the hypervisors handle SErrors. > +In order to distinguish guest-generated SErrors from hypervisor-generated > +SErrors. We have to place SError checking code in every EL1 -> EL2 paths. ^remove . > +That will be an overhead on entries caused by dsb/isb. But not all platforms That will cause overhead on entries due to dsb/isb. However, not all platforms > +need to categorize the SErrors. For example, a host that is running with ^ remove the > +trusted guests. The administrator can confirm that all guests that are > +running on the host will not trigger such SErrors. In this case, the > +administrator can use this parameter to skip categorizing the SErrors. And ^ remove ^ remove > +reduce the overhead of dsb/isb. > + > +We provided following 3 options to administrator to determine how to handle ^ the following ^ administrators > +the SErrors: ^ remove the > + > +* `diverse`: > + The hypervisor will distinguish guest SErrors from hypervisor SErrors. > + The guest generated SErrors will be forwarded to guests, the hypervisor > + generated SErrors will cause the whole system crash. ^ to crash > + It requires: > + 1. Place dsb/isb on all EL1 -> EL2 trap entries to categorize SErrors ^ remove Place > + correctly. > + 2. Place dsb/isb on EL2 -> EL1 return paths to prevent slipping hypervisor ^ remove Place > + SErrors to guests. > + 3. Place dsb/isb in context switch to isolate the SErrors between 2 vCPUs. ^ remove Place ^ remove the > + > +* `forward`: > + The hypervisor will not distinguish guest SErrors from hypervisor SErrors. > + All SErrors will be forwarded to guests, except the SErrors generated when > + idle vCPU is running. The idle domain doesn't have the ability to hanle the ^ the idle ^ handle ^ remove the > + SErrors, so we have to crash the whole system when we get SErros with idle ^ the idle > + vCPU. This option will avoid most overhead of the dsb/isb, except the > dsb/isb > + in context switch which is used to isolate the SErrors between 2 vCPUs. > + > +* `panic`: > + The hypervisor will not distinguish guest SErrors from hypervisor SErrors. > + All SErrors will crash the whole system. This option will avoid all > overhead > + of the dsb/isb. of the dsb/isb pairs. Please make these changes to the commit message too, when applicable. With these changes: Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> > ### smap > > `= <boolean> | hvm` > > diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c > index e425832..5e31699 100644 > --- a/xen/arch/arm/traps.c > +++ b/xen/arch/arm/traps.c > @@ -115,6 +115,25 @@ static void __init parse_vwfi(const char *s) > } > custom_param("vwfi", parse_vwfi); > > +static enum { > + SERRORS_DIVERSE, > + SERRORS_FORWARD, > + SERRORS_PANIC, > +} serrors_op; > + > +static void __init parse_serrors_behavior(const char *str) > +{ > + if ( !strcmp(str, "forward") ) > + serrors_op = SERRORS_FORWARD; > + else if ( !strcmp(str, "panic") ) > + serrors_op = SERRORS_PANIC; > + else > + serrors_op = SERRORS_DIVERSE; > + > + return; > +} > +custom_param("serrors", parse_serrors_behavior); > + > register_t get_default_hcr_flags(void) > { > return (HCR_PTW|HCR_BSU_INNER|HCR_AMO|HCR_IMO|HCR_FMO|HCR_VM| > -- > 2.7.4 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > https://lists.xen.org/xen-devel > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |