[Kos-dev] double fault, retour... le retour !

Thomas Petazzoni kos-dev@yoda.isnpro.com
Fri, 04 Jun 1999 01:26:33 +0200


salut,

bon j'en suis a essayer de revenir du double fault, ce qui me semble
indispensable :
1. si on utilise des piles dynamiques, bin y'a pas trop le choix.
2. si on utilise des piles statiques, ca serait bien que le systeme
puisse continuer a fonctionner, meme si un thread a fait un usage un peu
trop consequent de la pile (on le detruit, puis on relance le
scheduler).

l'adresse EIP  du TSS pointe par le Back Link du TSS courant (celui du
double fault) a ete mise a jour (elle est a 0 avant l'execution d'un
double fault), et semble etre correcte (elle est a l'interieur de
l'identity mapping). Je ne sais pas si c'est la bonne adresse, mais je
vois pas pourquoi il mettrait un truc presque vrai, au pif. Ca serait
con de sa part.

En fait, j'ai remarque que si on mettait pas le champ ESP du TSS du
double fault a une bonne adresse, celui ci se lancait quand meme mais
avec une adresse de pile egale à 0xFFFFFFFF. il devait donc ecraser le
PD present a cette adresse, sympa nan ?

en fait dans le TSS, les champs ESP et ESP0 sont importants : si on est
deja en CPL0, et qu'on reste en CPL0, apparement il utilise le champ
ESP, mais a mon avis, si on est en CPL3, et qu'on passe en CPL0 il doit
surement utiliser l'adresse dans le champ ESP0.

maintenant le probleme est de retourner de ce handler de double fault.
il y a des choses presentes sur la pile, mais pas bcp. pas de EIP, juste
un EFLAGS a une valeur de 0x1000. j'ai pas verifie ce que signifiait
cette valeur.

si on fait fais juste un return comme ca ca marche pas. j'ai mis  ajour
dans la pile ce qui devrait etre EIP, mais ca chie aussi....
le hic c'est que je sais pas ce que le proc empile sur la nouvelle pile
pointee par le nouveau TSS. et j'ai pas trouve ou c'etait dans la doc
Intel. est-ce que ca marche comme normalement pour une interruption, ou
alors il empile plus de choses ? ou moins ?

bref, je crois que c'est surtout une question pour Hlide :o) mais si les
autres veulent donner leur avis, aucun probleme.

amicalement,

thomas