Bugs in Semaphore implementation in Fiasco.OC?

Chen Tian chen.tian at acm.org
Tue Nov 22 22:36:37 CET 2011


Hello,

I wonder if the following two problems are bugs.

1. In u_semaphore.cpp, function wakeup_locked, (around line 189):
w->state_change_dirty(~Thread_ipc_mask, Thread_ready);
If thread w is running on a different core than thread c, assertion in
function state_change_dirty will fail.
I think it should be
 w->state_change_dirty(~Thread_ipc_mask, Thread_ready, false);

2.  In u_semaphore.cpp, function block_locked, (around line 146):
c->state_del_dirty(~Thread_ipc_mask)
should be
 c->state_del_dirty(Thread_ipc_mask).

Otherwise, wrong bits will be cleared, which cause the assertion in
assert_irq_entry() to fail.

Best,
Chen




More information about the l4-hackers mailing list