l4linux block driver bugs

i.ismagilov i.ismagilov at ...60...
Wed Oct 10 11:32:53 CEST 2012


Hello!

Function prototype in ports-foc/src/lib/l4lx/include/linux.h:
FASTCALL void l4x_migrate_lock(unsigned long flags);

should be:
FASTCALL void l4x_migrate_lock(unsigned long *flags);

like l4x_irq_save function prototype.

On 10/09/2012 11:42 AM, Stefan Kalkowski wrote:
> 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
>>






More information about the users mailing list