From bc5deb5930e7207e386999537512f0c737219263 Mon Sep 17 00:00:00 2001 From: Chen Baozi Date: Tue, 30 Jun 2015 16:00:17 +0800 Subject: [PATCH] xen/arm: Use the new functions for vCPUID/vaffinity transformation There are 3 places to change: * Initialise vMPIDR value in vcpu_initialise() * Find the vCPU from vMPIDR affinity information when accessing GICD registers in vGIC * Find the vCPU from vMPIDR affinity information when booting with vPSCI in vGIC - Both PSCI 0.1 and PSCI 0.2 are modified to respect the MPIDR like. Signed-off-by: Chen Baozi Reviewed-by: Julien Grall Acked-by: Ian Campbell --- xen/arch/arm/domain.c | 6 +----- xen/arch/arm/vgic-v3.c | 2 +- xen/arch/arm/vpsci.c | 5 +---- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c index 21a03dfe35..7ed6db8bac 100644 --- a/xen/arch/arm/domain.c +++ b/xen/arch/arm/domain.c @@ -501,11 +501,7 @@ int vcpu_initialise(struct vcpu *v) v->arch.sctlr = SCTLR_GUEST_INIT; - /* - * By default exposes an SMP system with AFF0 set to the VCPU ID - * TODO: Handle multi-threading processor and cluster - */ - v->arch.vmpidr = MPIDR_SMP | (v->vcpu_id << MPIDR_AFF0_SHIFT); + v->arch.vmpidr = MPIDR_SMP | vcpuid_to_vaffinity(v->vcpu_id); v->arch.actlr = READ_SYSREG32(ACTLR_EL1); diff --git a/xen/arch/arm/vgic-v3.c b/xen/arch/arm/vgic-v3.c index 77428c5411..8b9d7e1ed6 100644 --- a/xen/arch/arm/vgic-v3.c +++ b/xen/arch/arm/vgic-v3.c @@ -82,7 +82,7 @@ static struct vcpu *vgic_v3_irouter_to_vcpu(struct domain *d, uint64_t irouter) if ( irouter & GICD_IROUTER_SPI_MODE_ANY ) return d->vcpu[0]; - vcpu_id = irouter & MPIDR_AFF0_MASK; + vcpu_id = vaffinity_to_vcpuid(irouter); if ( vcpu_id >= d->max_vcpus ) return NULL; diff --git a/xen/arch/arm/vpsci.c b/xen/arch/arm/vpsci.c index 5d899be3fe..aebe1e2054 100644 --- a/xen/arch/arm/vpsci.c +++ b/xen/arch/arm/vpsci.c @@ -32,10 +32,7 @@ static int do_common_cpu_on(register_t target_cpu, register_t entry_point, int is_thumb = entry_point & 1; register_t vcpuid; - if( ver == XEN_PSCI_V_0_2 ) - vcpuid = (target_cpu & MPIDR_HWID_MASK); - else - vcpuid = target_cpu; + vcpuid = vaffinity_to_vcpuid(target_cpu); if ( vcpuid >= d->max_vcpus || (v = d->vcpu[vcpuid]) == NULL ) return PSCI_INVALID_PARAMETERS; -- 2.39.5