[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] xen/arm: Implement MPIDR per VCPU
On Mon, 2013-07-15 at 15:41 +0100, Julien Grall wrote: > Use different affinity for each VCPU and always expose an SMP systems to > the guest. > > Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx> Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> I would apply but it looks like it depends on your ACTLR patch, which I had a comment on. > > --- > Changes in v2: > - Create a virtual MPIDR during the VCPU initialization > --- > xen/arch/arm/domain.c | 10 ++++++++-- > xen/include/asm-arm/domain.h | 2 +- > xen/include/asm-arm/processor.h | 6 ++++++ > 3 files changed, 15 insertions(+), 3 deletions(-) > > diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c > index 6937abf..bcf1755 100644 > --- a/xen/arch/arm/domain.c > +++ b/xen/arch/arm/domain.c > @@ -140,7 +140,7 @@ static void ctxt_switch_to(struct vcpu *n) > isb(); > > WRITE_SYSREG32(n->domain->arch.vpidr, VPIDR_EL2); > - WRITE_SYSREG(n->domain->arch.vmpidr, VMPIDR_EL2); > + WRITE_SYSREG(n->arch.vmpidr, VMPIDR_EL2); > > /* VGIC */ > gic_restore_state(n); > @@ -451,7 +451,14 @@ int vcpu_initialise(struct vcpu *v) > return rc; > > v->arch.sctlr = SCTLR_BASE; > + /* > + * By default exposes an SMP system with AFFO 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.actlr = READ_SYSREG32(ACTLR_EL1); > + > /* XXX: Handle other than CA15 cpus */ > if ( v->domain->max_vcpus > 1 ) > v->arch.actlr |= ACTLR_CA15_SMP; > @@ -490,7 +497,6 @@ int arch_domain_create(struct domain *d, unsigned int > domcr_flags) > > /* Default the virtual ID to match the physical */ > d->arch.vpidr = boot_cpu_data.midr.bits; > - d->arch.vmpidr = boot_cpu_data.mpidr.bits; > > clear_page(d->shared_info); > share_xen_page_with_guest( > diff --git a/xen/include/asm-arm/domain.h b/xen/include/asm-arm/domain.h > index 339b6e6..425eb71 100644 > --- a/xen/include/asm-arm/domain.h > +++ b/xen/include/asm-arm/domain.h > @@ -68,7 +68,6 @@ struct arch_domain > > /* Virtual CPUID */ > uint32_t vpidr; > - register_t vmpidr; > > struct { > uint64_t offset; > @@ -194,6 +193,7 @@ struct arch_vcpu > > /* CP 15 */ > uint32_t csselr; > + uint32_t vmpidr; > > uint32_t gic_hcr, gic_vmcr, gic_apr; > uint32_t gic_lr[64]; > diff --git a/xen/include/asm-arm/processor.h b/xen/include/asm-arm/processor.h > index 1c9d793..5181e7b 100644 > --- a/xen/include/asm-arm/processor.h > +++ b/xen/include/asm-arm/processor.h > @@ -6,6 +6,12 @@ > /* MIDR Main ID Register */ > #define MIDR_MASK 0xff0ffff0 > > +/* MPIDR Multiprocessor Affinity Register */ > +#define MPIDR_UP (1 << 30) > +#define MPIDR_SMP (1 << 31) > +#define MPIDR_AFF0_SHIFT (0) > +#define MPIDR_AFF0_MASK (0xff << MPIDR_AFF0_SHIFT) > + > /* TTBCR Translation Table Base Control Register */ > #define TTBCR_EAE 0x80000000 > #define TTBCR_N_MASK 0x07 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |