At 2016-09-23 05:31:52, "Adam Lackorzynski" adam@os.inf.tu-dresden.de wrote:
On Thu Sep 22, 2016 at 22:32:28 +0800, li94575 wrote:
Hi, adam
On Mon Sep 19, 2016 at 22:55:52 +0800, li94575 wrote:
I compiled the l4re-snapshot-2014092821 with the default modules.list, and everything seems goes
well. However, L4Linux would stop at "Calibrating delay loop ...", because the value of jiffies did not change. Timer thread has not generate soft interrupt? If I entered jdb via ESC at this time, and quit via "g", then l4linux can run again. It makes me confused so much. Any help or suggestion will be very welcome.
This behavior typically indicates that there's an issue with Fiasco's timer interrupt or with the user-level one in L4Linux. For a start you could add e.g. a printk(".\n") in timer_thread in arch/l4/kernel/timer.c to see if it really does something. Does 'hello' work? Although it's a bit of work you could also compare the code of your snapshot and a recent one if there's any significant change (i.e. fix) that might be relevant. Check arch/l4/kernel/timer.c and src/kern/arm/timer-arm-generic.cpp and src/kern/arm/generic_timer.cpp in the Fiasco kernel.
'Hello' can work well, which prints "Hello World!" circularly. I add printk(".\n") in timer_thread in arch/l4/kernel/timer.c, and found timer_thread stop at l4_ipc_reply_and_wait(u, t, &l, to) afterinitializing the variable ¡®increment¡¯.
printk and any other Linux functionaliy cannot be used in this function because the timer_thread isn't run in a Linux context. It's run in an L4 thread next to Linux. (Sorry for my mistake of writing printk above, I actually really meant to write LOG_printf.)
However, if I use LOG_printf() for printing, the phenomenon is different, that timer_thread trigers a soft interrupt once. I have checked src/kern/arm/timer-arm-generic.cpp and src/kern/arm/generic_timer.cpp in the Fiasco kernel, there is less likely to be a problem with them.
So there's still a problem somewhere. Do you think you could try with a more recent L4Re version? I remember vaguely that I might have already seen this behavior but this would be long ago.
I have to admit that there may be a problem with the configuration of the generic timer, but I donot know where the problem. Before this, the generic timer can run well with fiasco.oc-r56+genode+l4linux3.9, I do not make any changes and move the bsp codefor this newer fiasco version.I replace generic timer with Aptimer, then l4linux can run well. So, If I want to assign anAptimer for each CPU, is there any ready-made case for reference?