Julien Grall
2013-Jul-24 17:01 UTC
[PATCH] xen/arm: Initialize PERCPU variables at the beginning of start_xen
PERCPU variables rely on HTPIDR (TPIDR_EL2) which is in an unknown state when a processor boot. For the boot CPU, the first use of PERCPU is in setup_pagetables. So initialize PERCPU and set the processor ID before. Signed-off-by: Julien Grall <julien.grall@linaro.org> --- xen/arch/arm/setup.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c index 2f9fdc8..1ec5e38 100644 --- a/xen/arch/arm/setup.c +++ b/xen/arch/arm/setup.c @@ -428,6 +428,9 @@ void __init start_xen(unsigned long boot_phys_offset, setup_cache(); + percpu_init_areas(); + set_processor_id(0); /* needed early, for smp_processor_id() */ + smp_clear_cpu_maps(); device_tree_flattened = (void *)BOOT_MISC_VIRT_START @@ -458,8 +461,6 @@ void __init start_xen(unsigned long boot_phys_offset, gic_init(); make_cpus_ready(cpus, boot_phys_offset); - percpu_init_areas(); - set_processor_id(0); /* needed early, for smp_processor_id() */ set_current((struct vcpu *)0xfffff000); /* debug sanity */ idle_vcpu[0] = current; -- 1.7.10.4
Tim Deegan
2013-Jul-29 15:34 UTC
Re: [PATCH] xen/arm: Initialize PERCPU variables at the beginning of start_xen
At 18:01 +0100 on 24 Jul (1374688896), Julien Grall wrote:> PERCPU variables rely on HTPIDR (TPIDR_EL2) which is in an unknown state when > a processor boot. > > For the boot CPU, the first use of PERCPU is in setup_pagetables. So > initialize PERCPU and set the processor ID before. > > Signed-off-by: Julien Grall <julien.grall@linaro.org>Acked-by: Tim Deegan <tim@xen.org>> --- > xen/arch/arm/setup.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c > index 2f9fdc8..1ec5e38 100644 > --- a/xen/arch/arm/setup.c > +++ b/xen/arch/arm/setup.c > @@ -428,6 +428,9 @@ void __init start_xen(unsigned long boot_phys_offset, > > setup_cache(); > > + percpu_init_areas(); > + set_processor_id(0); /* needed early, for smp_processor_id() */ > + > smp_clear_cpu_maps(); > > device_tree_flattened = (void *)BOOT_MISC_VIRT_START > @@ -458,8 +461,6 @@ void __init start_xen(unsigned long boot_phys_offset, > gic_init(); > make_cpus_ready(cpus, boot_phys_offset); > > - percpu_init_areas(); > - set_processor_id(0); /* needed early, for smp_processor_id() */ > set_current((struct vcpu *)0xfffff000); /* debug sanity */ > idle_vcpu[0] = current; > > -- > 1.7.10.4 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel
Ian Campbell
2013-Jul-29 15:56 UTC
Re: [PATCH] xen/arm: Initialize PERCPU variables at the beginning of start_xen
On Wed, 2013-07-24 at 18:01 +0100, Julien Grall wrote:> PERCPU variables rely on HTPIDR (TPIDR_EL2) which is in an unknown state when > a processor boot. > > For the boot CPU, the first use of PERCPU is in setup_pagetables. So > initialize PERCPU and set the processor ID before. > > Signed-off-by: Julien Grall <julien.grall@linaro.org>Acked + Tim''s Ack + applied. I modified the commit message to a) note that Banvor sent a very similar patch and b) to note that this had a realworld impact on sun6i.> --- > xen/arch/arm/setup.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c > index 2f9fdc8..1ec5e38 100644 > --- a/xen/arch/arm/setup.c > +++ b/xen/arch/arm/setup.c > @@ -428,6 +428,9 @@ void __init start_xen(unsigned long boot_phys_offset, > > setup_cache(); > > + percpu_init_areas(); > + set_processor_id(0); /* needed early, for smp_processor_id() */ > + > smp_clear_cpu_maps(); > > device_tree_flattened = (void *)BOOT_MISC_VIRT_START > @@ -458,8 +461,6 @@ void __init start_xen(unsigned long boot_phys_offset, > gic_init(); > make_cpus_ready(cpus, boot_phys_offset); > > - percpu_init_areas(); > - set_processor_id(0); /* needed early, for smp_processor_id() */ > set_current((struct vcpu *)0xfffff000); /* debug sanity */ > idle_vcpu[0] = current; >