Hi All!

I just subscribe to the mailing list to ask you for a few insight on my 
potential problem.

I'm having the same behaviour that Andreas Galauner observed on his board 
and since there have been no news since April, I'm restarting this 
thread...

I'm currently developping for a custom designed board based on a Zynq 
7c020 and hoped to use Xenomai 3.0 on it.
Standard Linux (Xilinx version not Vanilla) is running fine on the board 
but if I use the cobalt core, I'm having the same behaviour previously 
described ie the system seems to hang for a random duration then becomes 
responsive again as if nothing happened (several times).
It happens at each boot during: 
- kernel decompression
- VFS/Rootfs mount
- console access
And after, it occurs randomly on command entered on console...

Also, it seems that network is not working with cobalt core enabled in 
kernel (but with random freezes, I can't look at this issue for the 
moment)

I'm suspecting some timer issue as Gilles supposed previously but I can't 
find the beginning of a solution: I've followed the Guide "Porting Xenomai 
dual kernel to a new ARM SoC" but as the arm core of the Zynq is a Cortex 
A9, in theory, I've practically nothing to modify to have it working...

I've also enabled debug in I-Pipe and Xenoami and got no trace at all...

What I've seen so far is an enormous amount of interruptions on the twd 
timer (and this is just after the boot!):

# cat /proc/interrupts
           CPU0       CPU1
 27:          0          0       GIC  27  gt
 29:   37426949   16329631       GIC  29  twd
 35:          0          0       GIC  35  f800c000.ocmc
 39:         43          0       GIC  39  f8007100.adc
 40:          0          0       GIC  40  f8007000.devcfg
 41:          0          0       GIC  41  f8005000.watchdog
 43:          0          0       GIC  43  ttc_clockevent
 45:          0          0       GIC  45  f8003000.dmac
 46:          0          0       GIC  46  f8003000.dmac
 47:          0          0       GIC  47  f8003000.dmac
 48:          0          0       GIC  48  f8003000.dmac
 49:          0          0       GIC  49  f8003000.dmac
 51:          0          0       GIC  51  e000d000.spi
 54:          0          0       GIC  54  eth0
 72:          0          0       GIC  72  f8003000.dmac
 73:          0          0       GIC  73  f8003000.dmac
 74:          0          0       GIC  74  f8003000.dmac
 75:          0          0       GIC  75  f8003000.dmac
 82:         49          0       GIC  82  xuartps
IPI1:          0          0  Timer broadcast interrupts
IPI2:        559        435  Rescheduling interrupts
IPI3:          0          0  Function call interrupts
IPI4:         25          8  Single function call interrupts
IPI5:          0          0  CPU stop interrupts
IPI6:          0          0  IRQ work interrupts
IPI7:          0          0  completion interrupts
Err:          0

To be more precise about my system, I'm using Linux 3.18.20 with the Adeos 
I-Pipe patch for arm found in Xenomai 3.0 (Exact Zero) tarball on a 
busybox-based rootfs.
I've taken a look at branch for-ipipe-3.18 in ipipe-gch.git but it seems 
to be the same as  Xenomai 3.0's patch...

Does anyone have some idea where to look for a way to attack this issue?

Thanks in advance,

PS: If necessary I can post the kernel's config, but I did not want to put 
too much data in this mail

----------------
Ph. Corbel


On Fri, Apr 10, 2015 at 04:35:07PM +0200, Andreas Galauner wrote:
> On a sidenote: That patch
> 
https://git.xenomai.org/ipipe-gch.git/commit/?h=for-ipipe-3.18&id=f98b6d95359ea0429307d98759357d54dcfba7e8

> makes the board stop directly after the bootloader jumps into the
> kernel.

Please try branch for-ipipe-3.18 in ipipe-gch.git, it contains a
totally untested, not even compiled patch for fixing this particular
issue.

In short, I believe kmalloc may be using percpu, so ends-up using
ipipe_processor_id() which ends up dereferencing the NULL
__cpu_reverse_map, so I temporarily set __cpu_reverse_map to
__cpu_logical_map before calling kmalloc. 

This is correct, because at this point in the code we can rely on
__cpu_logical_map to contain what is necessary to be used as a
reverse map.

If the kernel still crashes, then the problem does not come from
kmalloc using per-cpu data.

-- 
      Gilles.
_______________________________________________
Xenomai mailing list
[email protected]
http://xenomai.org/mailman/listinfo/xenomai

Reply via email to