Hi Sergey,

On 01/31/2013 08:32 AM, Сергей Грехов wrote:
> Hello to everyone!
> The question is about method l4lx_thread_create() from 
> ports-foc/src/lib/l4lx/l4lx_thread.cc.
> According to the thread creation procedure in L4lx library, the pointer to 
> VCPU instances are saved in a static array
>                    static L4lx::Vcpu* vcpus[L4LX_THREAD_NO_THREADS];
> The index within this array is defined by passing UTCB address to function 
> thread_id(). Now, if enable SMP and set two VCPUs, one can see the following 
> strange thing:
> 
> //creating cpu0
> l4lx_thread_create: (vc->utcb() = 44000400) thread_id() = 00000002 TID = 
> 00011000
> //everything is fine: pointer to Vcpu instance is saved under id=2
> 
> //creating timer
> l4lx_thread_create: (vc->utcb() = 44000600) thread_id() = 00000001 TID = 
> 00015000
> //everything is fine here too: pointer to Vcpu instance is saved under id=1
> 
> //creating cpu1
> l4lx_thread_create: (vc->utcb() = 44000800) thread_id() = 00000002 TID = 
> 00019000
> //something weird is happening here: pointer to Vcpu instance is saved under 
> id=2, previous pointer is lost.
> 
> Looking inside thread_id() one can find that it uses utcb_base_addr() [which 
> is equal to l4_utcb()] to calculate required index in array. Is it a bug? 
> Should not the utcb_base_addr() be something similar to following expression:
>                 (Genode::Native_config::context_area_virtual_base() + 
> THREAD_MAX * Genode::Native_config::context_virtual_size()) ?
> 

Well, the wrong behaviour, you've described initially, obviously is a
bug. I'll open an issue in the issue tracker.

Using the UTCB address of each thread to calculate the thread id is no
bug. In contrast to calculating the thread id out of the Thread's
context area, we do not need to handle the first thread (main thread)
especially. When using context areas you've to be aware that
concurrently there is no context area for the main thread.
This is something, which hopefully will be fixed soon. If all threads
are located in the context area, you're right it's more convenient to
use your calculation.

Best Regards
Stefan

PS: I think the bug in "thread_id" is probably a missing 'static' modifier.

-- 
Stefan Kalkowski
Genode Labs

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

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_jan
_______________________________________________
Genode-main mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/genode-main

Reply via email to