[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