Message ID | 20180215150248.28922-17-julien.grall@arm.com |
---|---|
State | Superseded |
Headers | show |
Series | xen/arm: PSCI 1.1 and SMCCC-1.1 support and XSA-254 variant 2 update | expand |
On Thu, 15 Feb 2018, Julien Grall wrote: > PSCI 1.0 added the error return PSCI_INVALID_ADDRESS. It is used to > indicate the entry point address is known to be invalid. > > In Xen case, this error could be returned when a 64-bit vCPU is using a > Thumb entry address. > > For PSCI 0.1 implementation, return PSCI_INVALID_PARAMETERS instead. > > Suggested-by: mirela.simonovic@aggios.com > Signed-off-by: Julien Grall <julien.grall@arm.com> > Cc: mirela.simonovic@aggios.com Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> > --- > Changes in v3: > - Patch added > --- > xen/arch/arm/vpsci.c | 10 +++++++--- > xen/include/asm-arm/psci.h | 1 + > 2 files changed, 8 insertions(+), 3 deletions(-) > > diff --git a/xen/arch/arm/vpsci.c b/xen/arch/arm/vpsci.c > index 9a082aa6ee..1729f7071e 100644 > --- a/xen/arch/arm/vpsci.c > +++ b/xen/arch/arm/vpsci.c > @@ -38,7 +38,7 @@ static int do_common_cpu_on(register_t target_cpu, register_t entry_point, > > /* THUMB set is not allowed with 64-bit domain */ > if ( is_64bit_domain(d) && is_thumb ) > - return PSCI_INVALID_PARAMETERS; > + return PSCI_INVALID_ADDRESS; > > if ( !test_bit(_VPF_down, &v->pause_flags) ) > return PSCI_ALREADY_ON; > @@ -99,10 +99,14 @@ static int32_t do_psci_cpu_on(uint32_t vcpuid, register_t entry_point) > > ret = do_common_cpu_on(vcpuid, entry_point, 0); > /* > - * PSCI 0.1 does not define the return code PSCI_ALREADY_ON. > + * PSCI 0.1 does not define the return codes PSCI_ALREADY_ON and > + * PSCI_INVALID_ADDRESS. > * Instead, return PSCI_INVALID_PARAMETERS. > */ > - return (ret == PSCI_ALREADY_ON) ? PSCI_INVALID_PARAMETERS : ret; > + if ( ret == PSCI_ALREADY_ON || ret == PSCI_INVALID_ADDRESS ) > + ret = PSCI_INVALID_PARAMETERS; > + > + return ret; > } > > static int32_t do_psci_cpu_off(uint32_t power_state) > diff --git a/xen/include/asm-arm/psci.h b/xen/include/asm-arm/psci.h > index e2629eed01..9ac820e94a 100644 > --- a/xen/include/asm-arm/psci.h > +++ b/xen/include/asm-arm/psci.h > @@ -13,6 +13,7 @@ > #define PSCI_INTERNAL_FAILURE -6 > #define PSCI_NOT_PRESENT -7 > #define PSCI_DISABLED -8 > +#define PSCI_INVALID_ADDRESS -9 > > /* availability of PSCI on the host for SMP bringup */ > extern uint32_t psci_ver; > -- > 2.11.0 >
diff --git a/xen/arch/arm/vpsci.c b/xen/arch/arm/vpsci.c index 9a082aa6ee..1729f7071e 100644 --- a/xen/arch/arm/vpsci.c +++ b/xen/arch/arm/vpsci.c @@ -38,7 +38,7 @@ static int do_common_cpu_on(register_t target_cpu, register_t entry_point, /* THUMB set is not allowed with 64-bit domain */ if ( is_64bit_domain(d) && is_thumb ) - return PSCI_INVALID_PARAMETERS; + return PSCI_INVALID_ADDRESS; if ( !test_bit(_VPF_down, &v->pause_flags) ) return PSCI_ALREADY_ON; @@ -99,10 +99,14 @@ static int32_t do_psci_cpu_on(uint32_t vcpuid, register_t entry_point) ret = do_common_cpu_on(vcpuid, entry_point, 0); /* - * PSCI 0.1 does not define the return code PSCI_ALREADY_ON. + * PSCI 0.1 does not define the return codes PSCI_ALREADY_ON and + * PSCI_INVALID_ADDRESS. * Instead, return PSCI_INVALID_PARAMETERS. */ - return (ret == PSCI_ALREADY_ON) ? PSCI_INVALID_PARAMETERS : ret; + if ( ret == PSCI_ALREADY_ON || ret == PSCI_INVALID_ADDRESS ) + ret = PSCI_INVALID_PARAMETERS; + + return ret; } static int32_t do_psci_cpu_off(uint32_t power_state) diff --git a/xen/include/asm-arm/psci.h b/xen/include/asm-arm/psci.h index e2629eed01..9ac820e94a 100644 --- a/xen/include/asm-arm/psci.h +++ b/xen/include/asm-arm/psci.h @@ -13,6 +13,7 @@ #define PSCI_INTERNAL_FAILURE -6 #define PSCI_NOT_PRESENT -7 #define PSCI_DISABLED -8 +#define PSCI_INVALID_ADDRESS -9 /* availability of PSCI on the host for SMP bringup */ extern uint32_t psci_ver;
PSCI 1.0 added the error return PSCI_INVALID_ADDRESS. It is used to indicate the entry point address is known to be invalid. In Xen case, this error could be returned when a 64-bit vCPU is using a Thumb entry address. For PSCI 0.1 implementation, return PSCI_INVALID_PARAMETERS instead. Suggested-by: mirela.simonovic@aggios.com Signed-off-by: Julien Grall <julien.grall@arm.com> Cc: mirela.simonovic@aggios.com --- Changes in v3: - Patch added --- xen/arch/arm/vpsci.c | 10 +++++++--- xen/include/asm-arm/psci.h | 1 + 2 files changed, 8 insertions(+), 3 deletions(-)