From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH RFC] fix sun6i crash on setup_pagetables Date: Wed, 24 Jul 2013 19:33:17 +0100 Message-ID: <51F01DED.4020703@linaro.org> References: <1374668066-4413-1-git-send-email-bjzhang@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1374668066-4413-1-git-send-email-bjzhang@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Bamvor Jian Zhang Cc: Stefano Stabellini , Ian Campbell , xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org On 07/24/2013 01:14 PM, Bamvor Jian Zhang wrote: > this patch move set_processor_id in front of setup_pagetables > in order to fix crash when calling this_cpu in that functions. > the HPTIDR is unknown value according to ARM ARM 7AR(DDI0406C), > B4-1598. we should use it before using it. > > but i do not know why other board like arndale board. should > bootloader write this register? On the Arndale, by default the value of HPTIDR is equal to 0. So it works without any issue. During the afternoon, I have noticed this error and send a similar patch few minutes ago. I also moved percpu_init_areas earlier. For the next patches, could you add the appropriate people? It will avoid to loose your patch with the other mail of the mailing list :). > > Signed-off-by: Bamvor Jian Zhang > --- > xen/arch/arm/setup.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c > index 2f9fdc8..3bf1b40 100644 > --- a/xen/arch/arm/setup.c > +++ b/xen/arch/arm/setup.c > @@ -437,6 +437,7 @@ void __init start_xen(unsigned long boot_phys_offset, > cpus = smp_get_max_cpus(); > cmdline_parse(device_tree_bootargs(device_tree_flattened)); > > + set_processor_id(0); /* needed early, for this_cpu() */ > setup_pagetables(boot_phys_offset, get_xen_paddr()); > setup_mm(fdt_paddr, fdt_size); > > @@ -459,7 +460,6 @@ void __init start_xen(unsigned long boot_phys_offset, > make_cpus_ready(cpus, boot_phys_offset); > > percpu_init_areas(); I think you can also move percpu_init_areas earlier. > - set_processor_id(0); /* needed early, for smp_processor_id() */ > set_current((struct vcpu *)0xfffff000); /* debug sanity */ > idle_vcpu[0] = current; > >