From: Julien Grall <julien.grall@linaro.org>
To: Ian Campbell <ian.campbell@citrix.com>
Cc: stefano.stabellini@eu.citrix.com, tim@xen.org, xen-devel@lists.xen.org
Subject: Re: [PATCH v3 08/11] xen: arm: rewrite start of day page table and cpu bring up
Date: Fri, 27 Sep 2013 14:30:45 +0100 [thread overview]
Message-ID: <52458885.9080705@linaro.org> (raw)
In-Reply-To: <1380277240-27900-8-git-send-email-ian.campbell@citrix.com>
On 09/27/2013 11:20 AM, Ian Campbell wrote:
[..]
> -static void __init init_cpus_maps(void)
> +static void __init smp_init_cpus(void)
> {
> register_t mpidr;
> struct dt_device_node *cpus = dt_find_node_by_path("/cpus");
> @@ -530,6 +530,14 @@ static void __init init_cpus_maps(void)
> [0 ... NR_CPUS - 1] = MPIDR_INVALID
> };
> bool_t bootcpu_valid = 0;
> + int rc;
> +
> + if ( (rc = arch_smp_init()) < 0 )
> + {
> + printk(XENLOG_WARNING "SMP init failed (%d)\n"
> + "Using only 1 CPU\n", rc);
> + return;
> + }
>
> mpidr = boot_cpu_data.mpidr.bits & MPIDR_HWID_MASK;
>
> @@ -581,6 +589,12 @@ static void __init init_cpus_maps(void)
> }
> }
>
> + if ( (rc = arch_cpu_init(hwid, cpu)) < 0 )
As I understand your patch #6, arch_cpu_init take a logical cpu id (on
ARM64 it's used as an index in an array).
So you should used j here.
Also, do we really need to call arch_cpu_init on the boot CPU?
> + {
> + printk("cpu init failed (hwid %x): %d\n", hwid, rc);
> + continue;
> + }
> +
> /*
> * Build a stashed array of MPIDR values. Numbering scheme requires
> * that if detected the boot CPU must be assigned logical id 0. Other
> @@ -599,7 +613,8 @@ static void __init init_cpus_maps(void)
>
> if ( cpuidx > NR_CPUS )
> {
> - printk(XENLOG_WARNING "DT /cpu %u node greater than max cores %u, capping them\n",
> + printk(XENLOG_WARNING
> + "DT /cpu %u node greater than max cores %u, capping them\n",
> cpuidx, NR_CPUS);
> cpuidx = NR_CPUS;
> break;
> @@ -657,15 +672,14 @@ void __init start_xen(unsigned long boot_phys_offset,
>
> processor_id();
>
> - init_cpus_maps();
> - cpus = smp_get_max_cpus();
> -
> platform_init();
>
> + smp_init_cpus();
> + cpus = smp_get_max_cpus();
> +
> init_xen_time();
>
> gic_init();
> - make_cpus_ready(cpus, boot_phys_offset);
>
> set_current((struct vcpu *)0xfffff000); /* debug sanity */
> idle_vcpu[0] = current;
> diff --git a/xen/arch/arm/smpboot.c b/xen/arch/arm/smpboot.c
> index 234748e..7b4ad8a 100644
> --- a/xen/arch/arm/smpboot.c
> +++ b/xen/arch/arm/smpboot.c
> @@ -56,12 +56,10 @@ struct init_info __initdata init_data =
> };
>
> /* Shared state for coordinating CPU bringup */
> -unsigned long smp_up_cpu = 0;
> +unsigned long smp_up_cpu = ~0UL;
MPIDR_INVALID?
[..]
> /* Boot the current CPU */
> void __cpuinit start_secondary(unsigned long boot_phys_offset,
> unsigned long fdt_paddr,
> @@ -176,6 +147,7 @@ void __cpuinit start_secondary(unsigned long boot_phys_offset,
> wmb();
>
> /* Now report this CPU is up */
> + smp_up_cpu = ~0UL;
smp_up_cpu = MPIDR_INVALID?
Also, perhaps a dsb is needed here to ensure to update smp_up_cpu before
cpumask_set_cpu is updated.
> cpumask_set_cpu(cpuid, &cpu_online_map);
> wmb();
--
Julien Grall
next prev parent reply other threads:[~2013-09-27 13:30 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-27 10:16 [PATCH v3 00/11] xen: arm: rework early bring up Ian Campbell
2013-09-27 10:20 ` [PATCH v3 01/11] xen: arm: Load xen under 4GB on 32-bit Ian Campbell
2013-09-27 10:20 ` [PATCH v3 02/11] xen: arm: build platform support only on the relevant arch Ian Campbell
2013-09-27 12:19 ` Julien Grall
2013-09-27 10:20 ` [PATCH v3 03/11] xen: arm: Log the raw MIDR on boot Ian Campbell
2013-09-27 10:20 ` [PATCH v3 04/11] xen: arm: make sure we stay within the memory bank during mm setup Ian Campbell
2013-09-27 10:20 ` [PATCH v3 05/11] xen: arm: add two new device tree helpers Ian Campbell
2013-09-27 10:20 ` [PATCH v3 06/11] xen: arm: implement arch/platform SMP and CPU initialisation framework Ian Campbell
2013-09-27 12:23 ` Julien Grall
2013-09-27 12:35 ` Ian Campbell
2013-09-27 10:20 ` [PATCH v3 07/11] xen: arm: implement smp initialisation callbacks for exynos5 Ian Campbell
2013-09-27 10:20 ` [PATCH v3 08/11] xen: arm: rewrite start of day page table and cpu bring up Ian Campbell
2013-09-27 12:30 ` Julien Grall
2013-09-27 12:37 ` Ian Campbell
2013-09-27 13:30 ` Julien Grall [this message]
2013-09-27 14:10 ` Ian Campbell
2013-09-27 14:21 ` Julien Grall
2013-09-27 14:23 ` Ian Campbell
2013-09-27 14:26 ` Ian Campbell
2013-09-27 14:21 ` Ian Campbell
2013-09-27 14:31 ` Julien Grall
2013-09-27 14:38 ` Ian Campbell
2013-09-27 15:17 ` Ian Campbell
2013-09-27 15:30 ` Julien Grall
2013-09-27 15:52 ` Ian Campbell
2013-09-27 10:20 ` [PATCH v3 09/11] xen: arm: use symbolic names for MPIDR bits Ian Campbell
2013-09-27 10:20 ` [PATCH v3 10/11] xen: arm: configure TCR_EL2 for 40 bit physical address space Ian Campbell
2013-09-27 10:20 ` [PATCH v3 11/11] xen: arm: split cpu0's domheap mapping PTs out from xen_second Ian Campbell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52458885.9080705@linaro.org \
--to=julien.grall@linaro.org \
--cc=ian.campbell@citrix.com \
--cc=stefano.stabellini@eu.citrix.com \
--cc=tim@xen.org \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).