[Kos-dev] "Race condition" 1

d2 kos-dev@enix.org
26 May 2003 11:00:47 +0200


>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@enix.org> writes:
    >> desactivees. Il serait pas inutile d'ailleurs de mettre un test
    >> du type ASSERT_FATAL sur le IE a 0 du eflags du to_context dans
    >> cpl0_switch_no_return_internal et cpl0_switch_with_return .

    Thomas> pas n'importe quoi, mais appeler ASSERT_FATAL depuis du
    Thomas> code assembleur, hum ;-)

D'ou le "du type"...  Ceci dit, il me semblerait une bonne chose de
faire comme pour cp0_switch "normal" : avoir un wrapper "C" pour la
version assembleur "_internal", meme si le wrapper "C" ne fait
absolument rien d'autre qu'appeler le _internal. 

    Thomas> Je retiens donc ta solution : au lieu d'initialiser Eflags
    Thomas> à 514 lors de la création du thread on l'initialise à 2
    Thomas> (== (514 & ~(1<<9)), et on fait ensuite comme tu as dit
    Thomas> dans execute_thread.

C'est quoi le bit 1 du eflags ?

    Thomas> #define write_spin_lock(spinlock,flags) \ do {

    Thomas> Cette définition suppose qu'on a accès *directement* à la
    Thomas> structure spinlock_t, et non pas à un (spinlock_t *). Or,
    Thomas> si on veut que kwaitqueue_add_* relache un spinlock au bon
    Thomas> moment, il faut passer un pointeur dessus.

write_spin_lock(*ptr_spin, flags) ? non ?

-- 
d2