l4linux block driver bugs

Stefan Kalkowski stefan.kalkowski at ...1...
Tue Oct 9 09:42:57 CEST 2012


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 at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/genode-main
> 

-- 
Stefan Kalkowski
Genode Labs

http://www.genode-labs.com/ · http://genode.org/




More information about the users mailing list