|
[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
Hi Stefano,
On 2017/3/15 8:45, Stefano Stabellini wrote:
> 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 .
>
Ok.
>> 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
>
Ok.
>
>> categorizing the SErrors. And then reduce the overhead of dsb/isb.
> ^ remove ^ remove
>
Ok.
>
>> 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.
>
Thanks for reorganization.
>
>> +In order to distinguish guest-generated SErrors from hypervisor-generated
>> +SErrors. We have to place SError checking code in every EL1 -> EL2 paths.
> ^remove .
>
Ok.
>> +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
>
Thanks.
>> +need to categorize the SErrors. For example, a host that is running with
> ^ remove the
>
Ok.
>> +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
>
Ok.
>> +reduce the overhead of dsb/isb.
>> +
>> +We provided following 3 options to administrator to determine how to handle
> ^ the following ^ administrators
>
Ok.
>> +the SErrors:
> ^ remove the
Ok.
>
>
>> +
>> +* `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
>
Ok.
>> + It requires:
>> + 1. Place dsb/isb on all EL1 -> EL2 trap entries to categorize SErrors
> ^ remove Place
Ok.
>> + correctly.
>> + 2. Place dsb/isb on EL2 -> EL1 return paths to prevent slipping hypervisor
> ^ remove Place
Ok.
>> + SErrors to guests.
>> + 3. Place dsb/isb in context switch to isolate the SErrors between 2 vCPUs.
> ^ remove Place ^ remove the
Ok.
>> +
>> +* `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
>
Ok.
>> + SErrors, so we have to crash the whole system when we get SErros with idle
> ^
> the idle
>
Ok.
>> + 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.
>
Ok.
> Please make these changes to the commit message too, when applicable.
> With these changes:
>
I will do it in next version.
> 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
>>
>
--
Regards,
Wei Chen
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |