From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: Re: [PATCH V6 03/10] xen/arm: Use the new functions for vCPUID/vaffinity transformation Date: Fri, 5 Jun 2015 16:56:07 +0100 Message-ID: <1433519767.7108.327.camel@citrix.com> References: <1433163388-16970-1-git-send-email-cbz@baozis.org> <1433163388-16970-4-git-send-email-cbz@baozis.org> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1Z0tzu-0001BT-QX for xen-devel@lists.xenproject.org; Fri, 05 Jun 2015 15:57:30 +0000 In-Reply-To: <1433163388-16970-4-git-send-email-cbz@baozis.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Chen Baozi Cc: Julien Grall , xen-devel@lists.xenproject.org, Chen Baozi List-Id: xen-devel@lists.xenproject.org On Mon, 2015-06-01 at 20:56 +0800, Chen Baozi wrote: > From: Chen Baozi > > 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 > - Also make the code for PSCI 0.1 use MPIDR-like value as the cpuid. Does this "- Also ..." not need to be done at the same time as the change to how we describe things in the FDT? Since that is where the guest gets the parameter from, isn't it? > Signed-off-by: Chen Baozi > Reviewed-by: Julien Grall > --- > 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 2bde26e..0cf147c 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 540f85f..ef9a71a 100644 > --- a/xen/arch/arm/vgic-v3.c > +++ b/xen/arch/arm/vgic-v3.c > @@ -61,7 +61,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 5d899be..aebe1e2 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;