Question about dec_lock_cnt method in Context class

Adam Lackorzynski adam at os.inf.tu-dresden.de
Tue Sep 9 23:03:16 CEST 2014


On Mon Sep 08, 2014 at 11:54:32 -0400, Yuxin Ren wrote:
> Unfortunately this modification does not help.
> I have a question about the switch_lock code.
> 
> PRIVATE inline
> bool NO_INSTRUMENT
> Switch_lock::set_lock_owner(Context *o)
> {
>   bool have_no_locks = o->_lock_cnt < 1;
> 
>   if (have_no_locks)
>     {
>       assert_kdb (current_cpu() == o->home_cpu());
>       for (;;)
>         {
>           if (EXPECT_FALSE(access_once(&o->_running_under_lock)))
>             continue;
>           if (EXPECT_TRUE(mp_cas(&o->_running_under_lock, Mword(false),
> Mword(true))))
>             break;
>         }
>     }
>     ...
> }
> 
> In which case, the variable "_running_under_lock"  is set to true but the
> lock_cnt is 0?
> Now in my test, the kernel goes into this dead loop.

Do you know when it was set to true? Maybe that would help finding out
why it is stuck there?



Adam
-- 
Adam                 adam at os.inf.tu-dresden.de
  Lackorzynski         http://os.inf.tu-dresden.de/~adam/



More information about the l4-hackers mailing list