From: Philippe Gerum <rpm@xenomai.org>
To: GP Orcullo <kinsamanka@gmail.com>
Cc: "xenomai@xenomai.org" <xenomai@xenomai.org>
Subject: Re: [Xenomai] Boot failure when CONFIG_XENOMAI is enabled
Date: Sat, 28 Mar 2015 19:08:26 +0100 [thread overview]
Message-ID: <5516EE1A.109@xenomai.org> (raw)
In-Reply-To: <5516EBB6.6030208@xenomai.org>
On 03/28/2015 06:58 PM, Philippe Gerum wrote:
> On 03/28/2015 04:05 PM, Gilles Chanteperdrix wrote:
>> On Sat, Mar 28, 2015 at 01:31:49PM +0100, Philippe Gerum wrote:
>>> On 03/28/2015 12:36 PM, Gilles Chanteperdrix wrote:
>>>> On Sat, Mar 28, 2015 at 10:51:30AM +0100, Philippe Gerum wrote:
>>>>> On 03/28/2015 10:05 AM, GP Orcullo wrote:
>>>>>> On Fri, Mar 27, 2015 at 8:12 PM, GP Orcullo <kinsamanka@gmail.com> wrote:
>>>>>>> On Fri, Mar 27, 2015 at 6:19 PM, GP Orcullo <kinsamanka@gmail.com> wrote:
>>>>>>>> What happens in between the clocksource switch and head domain registration?
>>>>>>>>
>>>>>>>> [ 0.090129] DMA: preallocated 4096 KiB pool for atomic coherent
>>>>>>>> allocations
>>>>>>>> [ 0.095333] Switching to clocksource ipipe_tsc
>>>>>>>> [ 0.122397] I-pipe: head domain Xenomai registered.
>>>>>>>> [ 0.124618] Xenomai: hal/arm started.
>>>>>>>>
>>>>>>>> I'm trying to trace the code to find out where it stops. I tried
>>>>>>>> adding printk to to the set and request functions and the code never
>>>>>>>> runs when CONFIG_SMP is enabled.
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>>
>>>>>>>> GP Orcullo
>>>>>>>
>>>>>>> It gets stuck on the call to ipipe_critical_enter:
>>>>>>> http://git.xenomai.org/ipipe-gch.git/tree/kernel/ipipe/timer.c?id=ipipe-core-3.10.32-arm-7#n279
>>>>>>>
>>>>>>> Which then gets stuck on ipipe_send_ipi:
>>>>>>> http://git.xenomai.org/ipipe-gch.git/tree/kernel/ipipe/core.c?id=ipipe-core-3.10.32-arm-7#n1533
>>>>>>>
>>>>>>
>>>>>> I've traced the issue to the ipipe_processor_id() function. It returns
>>>>>> the value 512 for processor 0. This value comes from cpu node property
>>>>>> of the DT file.
>>>>>>
>>>>>> Changing ipipe_processor_id() to return 0 instead of 512 allows the
>>>>>> kernel to boot but it fails the switchtest regression test.
>>>>>>
>>>>>> Changing the cpu0 reg value on the DT file allows the kernel to boot
>>>>>> and pass all the xenomai regression tests but it generates the
>>>>>> following warning at boot:
>>>>>
>>>>> No, this property for armv7 must match MPIDR[23:0], i.e. the physical id
>>>>> of the core.
>>>>>
>>>>>> What's the proper way of fixing this?
>>>>>>
>>>>>
>>>>> By fixing ipipe_processor_id() in the CONFIG_LEGACY case, it's broken.
>>>>> It assumes __cpu_logical_map[] is a hw->logical map, but it is actually
>>>>> the opposite.
>>>>>
>>>>> We may have been lucky until now because the physical mapping seems to
>>>>> have always matched the logical order on the SMP SoCs people used with
>>>>> Xenomai so far, it looks like your A5 core does not follow this order.
>>>>
>>>> No, cpu_logical_map works both ways, it simply exchanges 0 with
>>>> whatever number the boot cpu has
>>>> so, since cpu_logical_map[0] == 512 and cpu_logical_map[512] == 0
>>>> it should work both ways.
>>>
>>> It does not make sense. We just cannot do this with DT.
>>
>> In fact we can. The "only" downside is that we have to have
>> cpu_logical_map big enough to allow setting cpu_logical_map[512] to
>> 0, so to have NR_CPUS at least 513. Setting up a separate
>> reverse map avoids this issue of course, so I will merge that patch
>> when it has been tested.
>>
>>>
>>>> At least, that was true before DT.
>>>
>>> That is the issue with this code.
>>
>> No the issue is that 512 is larger than 255 and given the way we
>> mask in hard_smp_processor_id(), this causes hard_smp_processor_id()
>> to return 0 instead of 512 for the boot cpu. The size of the MPIDR
>> mask has varied over time, and hard_smp_processor_id() was not
>> updated to reflect that change.
>>
>
> The fact that we might change the semantics of __cpu_logical_map[] to
> make it a double-entry map does not make it a proper solution. The
> regular kernel defines it as a logical->hardware identity mapping array,
> I'd rather prefer your latest change which introduces a reverse map instead.
>
> The calculations and masks used to extract the MPIDR fields have
> obviously never changed over time, since this reflects hardware properties.
>
> What has changed over time is the size of the logical map. The fact that
> it could be capped to small values of NR_CPUS - which is a logical count
> of CPUs by definition - is a strong hint that we cannot use hw ids as
> indexes into this map.
>
> Therefore, the introduction you have just made of the reverse map is a
> not only a good idea, but is actually required.
>
> -int __cpu_logical_map[NR_CPUS];
> +#if NR_CPUS > 16
> +u32 __cpu_logical_map[NR_CPUS] = { [0 ... NR_CPUS-1] = MPIDR_INVALID };
> +#else
> +u32 __cpu_logical_map[16] = { [0 ... 15] = MPIDR_INVALID };
> +#endif
>
> commit dca463daa0151c5bbbd8ec8fd42882a3966d3c44
> Author: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Date: Thu Nov 15 17:30:32 2012 +0000
>
> ARM: kernel: enhance MPIDR macro definitions
>
> Kernel subsystems other than the topology layer need the MPIDR
> mask definitions to access the MPIDR without relying on hardcoded
> masks. This patch moves the MPIDR register masks definition to
> a header file and defines a macro to simplify access to MPIDR bit fields
> representing affinity levels.
>
> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Acked-by: Will Deacon <will.deacon@arm.com>
> Acked-by: Nicolas Pitre <nico@linaro.org>
>
Btw, this issue with the pipeline only exists because the legacy mode
has to be enabled with Xenomai 2.x (CONFIG_IPIPE_LEGACY). Xenomai 3.x
does not have this requirement for an intermediate hardware->logical
mapping in order to implement ipipe_processor_id(), and will happily
work with the regular current_thread_info()->cpu value.
--
Philippe.
next prev parent reply other threads:[~2015-03-28 18:08 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-18 14:11 [Xenomai] Boot failure when CONFIG_XENOMAI is enabled GP Orcullo
2015-03-18 14:21 ` Gilles Chanteperdrix
2015-03-18 14:48 ` GP Orcullo
2015-03-18 14:56 ` Gilles Chanteperdrix
2015-03-25 14:48 ` GP Orcullo
2015-03-25 14:57 ` Gilles Chanteperdrix
2015-03-25 15:25 ` GP Orcullo
2015-03-25 16:08 ` Gilles Chanteperdrix
2015-03-25 23:44 ` GP Orcullo
2015-03-27 10:19 ` GP Orcullo
2015-03-27 12:12 ` GP Orcullo
2015-03-28 9:05 ` GP Orcullo
2015-03-28 9:51 ` Philippe Gerum
2015-03-28 11:36 ` Gilles Chanteperdrix
2015-03-28 12:27 ` GP Orcullo
2015-03-28 13:06 ` Gilles Chanteperdrix
2015-03-28 13:12 ` Gilles Chanteperdrix
2015-03-28 13:22 ` Gilles Chanteperdrix
2015-03-28 13:37 ` Gilles Chanteperdrix
2015-03-28 15:20 ` GP Orcullo
2015-03-28 17:23 ` Gilles Chanteperdrix
2015-03-28 19:14 ` Gilles Chanteperdrix
2015-03-28 13:53 ` Gilles Chanteperdrix
2015-03-28 14:56 ` Gilles Chanteperdrix
2015-03-28 15:17 ` GP Orcullo
2015-03-28 15:19 ` Gilles Chanteperdrix
2015-03-28 15:56 ` GP Orcullo
2015-03-28 16:02 ` Gilles Chanteperdrix
2015-03-28 18:59 ` Gilles Chanteperdrix
2015-03-28 22:38 ` GP Orcullo
2015-03-29 11:06 ` Gilles Chanteperdrix
2015-03-29 11:59 ` GP Orcullo
2015-03-29 12:02 ` Gilles Chanteperdrix
2015-03-29 12:09 ` Gilles Chanteperdrix
2015-03-29 12:38 ` GP Orcullo
2015-03-29 12:44 ` Gilles Chanteperdrix
2015-03-29 12:56 ` GP Orcullo
2015-03-30 15:21 ` GP Orcullo
2015-03-30 15:28 ` Gilles Chanteperdrix
2015-04-10 20:08 ` Henry Bausley
2015-04-10 21:33 ` Gilles Chanteperdrix
2015-04-10 21:39 ` Gilles Chanteperdrix
2015-03-29 12:18 ` Gilles Chanteperdrix
2015-03-28 12:31 ` Philippe Gerum
2015-03-28 15:05 ` Gilles Chanteperdrix
2015-03-28 17:58 ` Philippe Gerum
2015-03-28 18:08 ` Philippe Gerum [this message]
2015-03-28 22:29 ` GP Orcullo
2015-03-28 18:10 ` Gilles Chanteperdrix
2015-03-28 18:18 ` Philippe Gerum
2015-03-28 18:28 ` Gilles Chanteperdrix
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=5516EE1A.109@xenomai.org \
--to=rpm@xenomai.org \
--cc=kinsamanka@gmail.com \
--cc=xenomai@xenomai.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.