Re: Question about dec_lock_cnt method in Context class
Adam Lackorzynski <[email protected]>
| Newsgroups | gmane.comp.micro-kernel.l4.devel |
|---|---|
| Message-ID | <[email protected]> |
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 [email protected]
Lackorzynski http://os.inf.tu-dresden.de/~adam/