Adam Lackorzynski wrote: </snip> cool
Additional threads >= 5, one for each IRQ (virtual not implemented yet)
virtual not implemented yet?
apparently not, but for my setup this hasn't really been a problem:
/* * _virt functions are empty for now. */ unsigned int l4lx_irq_dev_startup_virt(unsigned int irq) { printk("%s(%d) unimplemented\n", __func__, irq); return 0; } void l4lx_irq_dev_shutdown_virt(unsigned int irq) { printk("%s(%d) unimplemented\n", __func__, irq); } void l4lx_irq_dev_ack_virt(unsigned int irq) { printk("%s(%d) unimplemented\n", __func__, irq); } void l4lx_irq_dev_end_virt(unsigned int irq) { printk("%s(%d) unimplemented\n", __func__, irq); } void l4lx_irq_dev_enable_virt(unsigned int irq) { printk("%s(%d) unimplemented\n", __func__, irq); } void l4lx_irq_dev_disable_virt(unsigned int irq) { printk("%s(%d) unimplemented\n", __func__, irq); }
the entry functions for these threads are irq_dev_thread --- the main handler l4lx_irq_dev_startup_hw --- gets irq_dev_thread started l4lx_irq_dev_shutdown_hw l4lx_irq_dev_enable_hw l4lx_irq_dev_disable_hw l4lx_irq_dev_ack_hw l4lx_irq_dev_end_hw l4lx_irq_dev_startup_virt l4lx_irq_dev_shutdown_virt l4lx_irq_dev_enable_virt l4lx_irq_dev_disable_virt l4lx_irq_dev_ack_virt l4lx_irq_dev_end_virt
Not only irq threads but also all other threads that may be allocated by stubs etc.
okay, so I think I found the easiest solution to my question, which is to grep through the L4Linux source for l4lx_thread_create. I assume that all L4 threads in L4Linux are created through that API except threads 0 and 1 which you explained are created by the L4Env startup.
Anything wrong with that description? What does thread 1 do? I can't seem to track it down.
All l4env apps have thread0 (region manager thread) and thread1 (semaphore), real work starts in thread2.
gotcha
Also, which thread is responsible for handling system calls?
thread3, it actually runs the Linux kernel.
Is that what thread 1 does maybe? Which L4Linux function does the system call handler function start?
Maybe you mean l4x_user_dispatcher()?
ah, yes. that looks like the important function that I was thinking should exist somewhere.
excellent, Thanks!
Julian