Hello,
thanks for your investigations. With respect to bug 1, I can confirm it. This is obviously wrong. For a clean solution, I would change the declaration/implementation of 'l4x_irq_save' in ports-foc/contrib/l4linux/arch/l4/kernel/main.c:386 too:
void l4x_irq_save(unsigned long *flags) { local_irq_save(*flags); }
as well as all caller contexts. Just for clarification: this oversight comes from the fact that we can't include linux kernel headers into our C++/Genode backend. Therefore there are very few Linux function declarations made in /ports-foc/src/lib/l4lx/include/linux.h. But 'local_irq_save' is a macro no C-function. Therefore it is used correctly with just a long-value (no pointer) as argument within the Linux kernel, but that can't copy'n pasted into 'l4x_irq_save' which I've shamefully done :-(. I'll fix that soon.
With regard to the second bug. I've opened a new issue in our issue-tracker at github:
https://github.com/genodelabs/genode/issues/395
Maybe we can transfer the discussion to the issue-tracker? It would be great if you could provide more details that help us to reproduce the bug (e.g. a run-script, the linux commands that triggered the deadlock situation).
Best regards Stefan
On 08.10.2012 14:52, i.ismagilov wrote:
Thanks for fast fixing of ‘SD card doesn’t start due to I/O pages caching’ bug.
But SD card still doesnÂ’t normally work on PandaBoard.
It seems that there are 2 more problems with it.
*Bug 1.*
File cache subsystem generates an interrupt processing error _at intensive read/write access to SD card_: in Vcpu interrupts are disabled in the place where they should be allowed (/ports-foc/contrib/l4linux/fs/buffer.c:1231/).
The same error occurs in qemu in other sub-system (/ports-foc/contrib/l4linux/kernel/softirq.c:159/)
*Solution:* Function prototype in /ports-foc/src/lib/l4lx/include/linux.h/:
/FASTCALL void l4x_irq_save(unsigned long *flags*); /should be:
/FASTCALL void l4x_irq_save(unsigned long **flags*);/
So, value of interrupt state (enabling/disabling) was not properly stored before above correction.
*Bug 2.*
L4Linux ‘hangs’ because of problem with its virtual block device _at intensive read/write access to SD card on PandaBoard_.
In Genode block driver memory for storing of packages sent via IPC sometimes is over /(ports-foc/src/lib/l4lx/genode_block.cc:281)/.
In such case L4Linux virtual block driver is blocked on semaphore /(ports-foc/src/drivers/genode_block.c:98)/.
When memory for IPC packages storage in Genode block driver becomes ready for use, driver sends signal to the thread ‘*blk-signal-thread*’ /(ports-foc/src/lib/l4lx/genode_block.cc:126)/.
Thread ‘blk-signal-thread’ catches the signal and generates interrupt by calling function ‘*l4_irq_trigger*’ /(ports-foc/src/lib/l4lx/genode_block.cc:154)/.
But, L4Linux doesnÂ’t catch the interrupt and hangs.
In normal case interrupt is to be catched and interrupt handler ‘*event_interrupt*’ /(ports-foc/src/drivers/genode_block.c:172)/ should be called; increment semaphore counter by 1 (/ports-foc/src/drivers/genode_block.c:146/) and thus un-block L4Linux driver.
Don't let slow site performance ruin your business. Deploy New Relic APM Deploy New Relic app performance management and know exactly what is happening inside your Ruby, Python, PHP, Java, and .NET app Try New Relic at no cost today and get our sweet Data Nerd shirt too! http://p.sf.net/sfu/newrelic-dev2dev
Genode-main mailing list Genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main