[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v4 09/11] arm: vsmc: remove 64 bit mode check in PSCI handler
PSCI handling code had helper routine that checked calling convention. It does not needed anymore, because: - Generic handler checks that 64 bit calls can be made only by 64 bit guests. - SMCCC requires that 64-bit handler should support both 32 and 64 bit calls even if they originate from 64 bit caller. This patch removes that extra check. Signed-off-by: Volodymyr Babchuk <volodymyr_babchuk@xxxxxxxx> Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> --- * Used case xxx: { } formatting as Julien suggested --- xen/arch/arm/vsmc.c | 63 +++++++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 33 deletions(-) diff --git a/xen/arch/arm/vsmc.c b/xen/arch/arm/vsmc.c index 46a2fde..673b23c 100644 --- a/xen/arch/arm/vsmc.c +++ b/xen/arch/arm/vsmc.c @@ -99,12 +99,6 @@ static bool handle_psci_0_x(struct cpu_user_regs *regs) return false; } -/* helper function for checking arm mode 32/64 bit */ -static inline int psci_mode_check(struct domain *d, register_t fid) -{ - return is_64bit_domain(d) || !ARM_SMCCC_IS_64(fid); -} - /* PSCI 0.2 interface and other Standard Secure Calls */ static bool handle_sssc(struct cpu_user_regs *regs) { @@ -126,8 +120,7 @@ static bool handle_sssc(struct cpu_user_regs *regs) return true; case PSCI_0_2_FUNC_MIGRATE_INFO_UP_CPU: perfc_incr(vpsci_migrate_info_up_cpu); - if ( psci_mode_check(current->domain, fid) ) - PSCI_SET_RESULT(regs, do_psci_0_2_migrate_info_up_cpu()); + PSCI_SET_RESULT(regs, do_psci_0_2_migrate_info_up_cpu()); return true; case PSCI_0_2_FUNC_SYSTEM_OFF: perfc_incr(vpsci_system_off); @@ -140,42 +133,46 @@ static bool handle_sssc(struct cpu_user_regs *regs) PSCI_SET_RESULT(regs, PSCI_INTERNAL_FAILURE); return true; case PSCI_0_2_FUNC_CPU_ON: + { + register_t vcpuid = PSCI_ARG(regs,1); + register_t epoint = PSCI_ARG(regs,2); + register_t cid = PSCI_ARG(regs,3); + perfc_incr(vpsci_cpu_on); - if ( psci_mode_check(current->domain, fid) ) - { - register_t vcpuid = PSCI_ARG(regs, 1); - register_t epoint = PSCI_ARG(regs, 2); - register_t cid = PSCI_ARG(regs, 3); - PSCI_SET_RESULT(regs, do_psci_0_2_cpu_on(vcpuid, epoint, cid)); - } + + PSCI_SET_RESULT(regs, do_psci_0_2_cpu_on(vcpuid, epoint, cid)); return true; + } case PSCI_0_2_FUNC_CPU_SUSPEND: + { + uint32_t pstate = PSCI_ARG32(regs,1); + register_t epoint = PSCI_ARG(regs,2); + register_t cid = PSCI_ARG(regs,3); + perfc_incr(vpsci_cpu_suspend); - if ( psci_mode_check(current->domain, fid) ) - { - uint32_t pstate = PSCI_ARG32(regs, 1); - register_t epoint = PSCI_ARG(regs, 2); - register_t cid = PSCI_ARG(regs, 3); - PSCI_SET_RESULT(regs, do_psci_0_2_cpu_suspend(pstate, epoint, cid)); - } + + PSCI_SET_RESULT(regs, do_psci_0_2_cpu_suspend(pstate, epoint, cid)); return true; + } case PSCI_0_2_FUNC_AFFINITY_INFO: + { + register_t taff = PSCI_ARG(regs,1); + uint32_t laff = PSCI_ARG32(regs,2); + perfc_incr(vpsci_cpu_affinity_info); - if ( psci_mode_check(current->domain, fid) ) - { - register_t taff = PSCI_ARG(regs, 1); - uint32_t laff = PSCI_ARG32(regs, 2); - PSCI_SET_RESULT(regs, do_psci_0_2_affinity_info(taff, laff)); - } + + PSCI_SET_RESULT(regs, do_psci_0_2_affinity_info(taff, laff)); return true; + } case PSCI_0_2_FUNC_MIGRATE: + { + uint32_t tcpu = PSCI_ARG32(regs,1); + perfc_incr(vpsci_cpu_migrate); - if ( psci_mode_check(current->domain, fid) ) - { - uint32_t tcpu = PSCI_ARG32(regs, 1); - PSCI_SET_RESULT(regs, do_psci_0_2_migrate(tcpu)); - } + + PSCI_SET_RESULT(regs, do_psci_0_2_migrate(tcpu)); return true; + } case ARM_SMCCC_FUNC_CALL_COUNT: set_user_reg(regs, 0, SSSC_SMCCC_FUNCTION_COUNT); return true; -- 2.7.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |