[Kos-dev] Code non-intrusif pour Bochs

Thomas Petazzoni kos-dev@enix.org
Wed, 28 May 2003 09:56:34 +0200


This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enig694AEA2C2F3F7A75AA0C95DF
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit

Hello,

> Pour la race condition : l'idee est de tester le eflags du nouveau
> thread avant le iret. Et de verifier aussi que le eflags du thread
> courant est avec IE a 0 tant qu'a faire. Quand a avoir remarque que IE
> est a 1 tres tot sans pour autant que ca plante : c'est bon tu l'as
> trouve le probleme ! Ca plante pas parce que la section doit etre
> relativement courte et que la proba d'avoir une IT dans cette section
> est faible. Mais le bug est la quand meme, et faudrait regler CE
> probleme la, ie  corriger le fait que IE se retrouve a 1 !

Oui, maintenant la question est de savoir pourquoi on se retrouve avec
ce fichu IE à 1. Ce qui me semble bizarre c'est que les assertions ne
pètent pas, et que c'est seulement au moment ou deux threads se
terminent en même temps qu'on a le problème.

A priori, dans mon test, quand les threads de test se terminent, ce
n'est pas un nouveau thread qui est éxécuté, mais un thread qui avait
été interrompu auparavant, donc ça devrait passer par
cpl0_switch_with_return.

J'avoue vraiment avoir du mal à saisir d'ou peut venir le probleme, il
faudrait vérifier tous les appels à cpl0_switch_* voir si les IT sont
bien désactivées, mais je pense que c'est le cas, sinon on aurait des
problèmes même sans monter à 200 threads et en ayant 2 threads qui se
terminent en même temps.

> Pour bochs, le SMP simule n'est pas un vrai SMP je pense. Ca doit etre
> du multi-proc cooperatif : a vue de nez on fait qqch comme du
> round-robin sur les x procs a chaque instruction, et on fait avancer
> le temps qd on a fait le tour des x procs. En interdisant a la fois
> l'ecoulement du temps et les switches d'un proc a l'autre pendant la
> section non intrusive on doit s'en sortir, non ? A verifier...

Oui, c'est possible que ce ne soit pas du vrai SMP, c'est même surement
le cas, mais il faut voir comment ça fonctionne...

Thomas
-- 
PETAZZONI Thomas - thomas DOT petazzoni AT enix DOT org - UIN : 34937744
Web: http://www.enix.org/~thomas/
KOS: http://kos.enix.org/ - Lolut: http://lolut.utbm.info
Fingerprint : 0BE1 4CF3 CEA4 AC9D CC6E  1624 F653 CB30 98D3 F7A7

--------------enig694AEA2C2F3F7A75AA0C95DF
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQE+1Guy9lPLMJjT96cRAnfeAKC7mn65smHGFZKo2sdLKgdBcwBOkwCfYMGo
iE5NhdaW/07Yixr/99ooHA0=
=AQg6
-----END PGP SIGNATURE-----

--------------enig694AEA2C2F3F7A75AA0C95DF--