From: Julien Grall <julien.grall@linaro.org>
To: Ian Campbell <Ian.Campbell@citrix.com>
Cc: stefano.stabellini@eu.citrix.com, patches@linaro.org,
xen-devel@lists.xen.org
Subject: Re: [PATCH 7/7] xen/arm: Use the hardware ID TMP boot correctly secondary cpus
Date: Tue, 10 Sep 2013 17:24:48 +0100 [thread overview]
Message-ID: <522F47D0.7020202@linaro.org> (raw)
In-Reply-To: <1378734017.19967.138.camel@kazak.uk.xensource.com>
On 09/09/2013 02:40 PM, Ian Campbell wrote:
> On Fri, 2013-08-30 at 14:30 +0100, Julien Grall wrote:
>
> TMP in subject == "to"?
Yes. I didn't pay attention when I sent this patch. I will fix it.
>
>> Secondary CPUs will spin in head.S until their MPIDR[23:0] correspond to
>> the smp_up_cpu. Actually Xen will set the value with the logical CPU ID
>> which is wrong. Use the cpu_logical_map to get the correct CPU ID.
>>
>> Acked-by: Julien Grall <julien.grall@linaro.org>
>
> S-o-b?
Same here :/
>
>> ---
>> xen/arch/arm/smpboot.c | 20 +++++++++++++++-----
>> 1 file changed, 15 insertions(+), 5 deletions(-)
>>
>> diff --git a/xen/arch/arm/smpboot.c b/xen/arch/arm/smpboot.c
>> index c0d25de..1952287 100644
>> --- a/xen/arch/arm/smpboot.c
>> +++ b/xen/arch/arm/smpboot.c
>> @@ -124,8 +124,7 @@ make_cpus_ready(unsigned int max_cpus, unsigned long boot_phys_offset)
>> for ( i = 1; i < max_cpus; i++ )
>> {
>> /* Tell the next CPU to get ready */
>> - /* TODO: handle boards where CPUIDs are not contiguous */
>> - *gate = i;
>> + *gate = cpu_logical_map(i);
>> flush_xen_dcache(*gate);
>> isb();
>> sev();
>> @@ -139,11 +138,22 @@ make_cpus_ready(unsigned int max_cpus, unsigned long boot_phys_offset)
>> /* Boot the current CPU */
>> void __cpuinit start_secondary(unsigned long boot_phys_offset,
>> unsigned long fdt_paddr,
>> - unsigned long cpuid)
>> + unsigned long hwid)
>> {
>> + unsigned int cpuid;
>> +
>> memset(get_cpu_info(), 0, sizeof (struct cpu_info));
>>
>> - /* TODO: handle boards where CPUIDs are not contiguous */
>> + /* Browse the logical map and find the associate logical cpu ID */
>> + for ( cpuid = 1; cpuid < nr_cpu_ids; cpuid++ )
>> + {
>> + if ( cpu_logical_map(cpuid) == hwid )
>> + break;
>> + }
>> +
>> + if ( cpuid == nr_cpu_ids )
>> + panic("Can't find logical CPU id for cpu MPIDR[23:0] = 0x%lx\n", hwid);
>
> We could stumble on without this cpu.
No. The boot cpu will wait forever the secondary cpu because we don't
have timeout in __cpu_up.
>
>> +
>> set_processor_id(cpuid);
>>
>> current_cpu_data = boot_cpu_data;
>> @@ -232,7 +242,7 @@ int __cpu_up(unsigned int cpu)
>>
>> /* Unblock the CPU. It should be waiting in the loop in head.S
>> * for an event to arrive when smp_up_cpu matches its cpuid. */
>> - smp_up_cpu = cpu;
>> + smp_up_cpu = cpu_logical_map(cpu);
>> /* we need to make sure that the change to smp_up_cpu is visible to
>> * secondary cpus with D-cache off */
>> flush_xen_dcache(smp_up_cpu);
>
>
--
Julien Grall
prev parent reply other threads:[~2013-09-10 16:24 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-30 13:30 [PATCH 0/7] Dissociate logical and gic/hardware CPUD ID Julien Grall
2013-08-30 13:30 ` [PATCH 1/7] xen/arm: Introduce MPIDR_HWID_MASK Julien Grall
2013-09-09 13:09 ` Ian Campbell
2013-09-09 14:06 ` Ian Campbell
2013-08-30 13:30 ` [PATCH 2/7] xen/arm: use cpumask_t to describe cpu mask in gic_route_dt_irq Julien Grall
2013-09-09 13:14 ` Ian Campbell
2013-09-10 15:09 ` Julien Grall
2013-08-30 13:30 ` [PATCH 3/7] xen/arm: Initialize correctly IRQ routing Julien Grall
2013-09-09 13:17 ` Ian Campbell
2013-09-10 15:26 ` Julien Grall
2013-09-10 15:29 ` Julien Grall
2013-09-10 15:36 ` Ian Campbell
2013-08-30 13:30 ` [PATCH 4/7] xen/arm: gic: Use the correct CPU ID Julien Grall
2013-09-09 13:28 ` Ian Campbell
2013-09-10 15:42 ` Julien Grall
2013-09-10 15:52 ` Ian Campbell
2013-09-10 16:45 ` Julien Grall
2013-09-10 16:48 ` Ian Campbell
2013-08-30 13:30 ` [PATCH 5/7] xen/arm: Fix assert in send_SGI_one Julien Grall
2013-09-09 13:30 ` Ian Campbell
2013-09-10 15:47 ` Julien Grall
2013-08-30 13:30 ` [PATCH 6/7] xen/arm: Dissociate logical and hardware CPU ID Julien Grall
2013-09-09 13:38 ` Ian Campbell
2013-09-10 16:18 ` Julien Grall
2013-08-30 13:30 ` [PATCH 7/7] xen/arm: Use the hardware ID TMP boot correctly secondary cpus Julien Grall
2013-09-09 13:40 ` Ian Campbell
2013-09-10 16:24 ` Julien Grall [this message]
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=522F47D0.7020202@linaro.org \
--to=julien.grall@linaro.org \
--cc=Ian.Campbell@citrix.com \
--cc=patches@linaro.org \
--cc=stefano.stabellini@eu.citrix.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.