[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V4 3/8] xen/arm: Use the new functions for vCPUID/vaffinity transformation
Hi Chen, On 28/05/15 11:15, Chen Baozi wrote: > From: Chen Baozi <baozich@xxxxxxxxx> > > 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 > > Signed-off-by: Chen Baozi <baozich@xxxxxxxxx> > --- > xen/arch/arm/domain.c | 6 +----- > xen/arch/arm/vgic-v3.c | 2 +- > xen/arch/arm/vpsci.c | 2 +- > 3 files changed, 3 insertions(+), 7 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..1c1e7de 100644 > --- a/xen/arch/arm/vpsci.c > +++ b/xen/arch/arm/vpsci.c > @@ -33,7 +33,7 @@ static int do_common_cpu_on(register_t target_cpu, > register_t entry_point, > register_t vcpuid; > > if( ver == XEN_PSCI_V_0_2 ) > - vcpuid = (target_cpu & MPIDR_HWID_MASK); > + vcpuid = vaffinity_to_vcpuid(target_cpu); > else > vcpuid = target_cpu; I read more closely the spec of PSCI 0.1 Section 6.3 (ARM DEN 0022A): "Ideally platform discovery mechanism such as firmware tables would be used by secure firmware to describe the set of valid CPUIDs to the hypervisor or Rich OS, if the former is not present. The hypervisor in turn can create and supply virtual discovery mechanisms to its guests." It looks like to me that the CPUID is equal to the "reg" field in the CPU node which is an MPIDR-like value. So I think the affinity should be called in both case. Please retain my comment in the next version (maybe after ---) in order to avoid pushing the code without any double confirmation... Regards, -- Julien Grall _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |