[Kos-dev] Double Fault & Co

Thomas Petazzoni kos-dev@yoda.isnpro.com
Tue, 20 Feb 2001 12:59:10 +0100


salut,

resumons : pour gerer le double fault on a besoin de :

	- une task gate dans l'IDT, qui pointe sur le TSS appelle
double_fault_tss
	- deux descripteurs de segments dans la GDT, un pour le system_tss et
un pour le double_fault_tss
	- un system_tss qui permettra de sauvegarder le contexte courant lors
d'un double fault (gere par la task gate decrite plus haut), et qui
permettra certainement aux threads CPL3 de trouver l'adresse de leur
pile CPL0 lors d'un syscall ou d'une autre interruption.
	- un double_fault_tss qui permet d'executer un code qui allouera une
nouvelle page physique pour la pile du thread courant.

toutes ces structures sont actuellement mises en place, mais evidemment
ca ne fonctionne pas.

j'ai bien realiser un LTR pour charger le system_tss (et dire que c'est
le TSS courant). David, cette instruction (dixit doc intel) ne lance pas
la tache pointee par le TSS, donc pas besoin de se faire chier.

le truc qui faisait foirer le LTR est simple : pour dire c'est tel
segment de la GDT, il faut pas uniquement dire c'est tel segment parce
qu'un descripteur de segment contient 3 choses : sur 2 bits, le RPL, sur
1 bit le choix GDT/LDT et sur 13 bits le numero de segment dans la table
choisie.

le LTR fonctionne donc. et lorsque plex86 plante, il me donne bien des
bonnes valeurs pourle registre TR. donc de ce cote la ca a l'air
d'aller.

maintenant, j'ai contacte christophe au sujet du bug de Bochs. il m'a
confirme son existence, mais ne retrouve plus le patch qu'il avait
realise. il va regarder ca dans les jours qui viennent. d'autre part, il
ne sait pas si le bug est present dans plex86.
ce bug ferait foirer notre truc (generation de trois pages fault, au
lieu d'un suivi d'un double fault).

voila voila.

amicalement,

thomas
-- 
PETAZZONI Thomas
thomas.petazzoni@meridon.com     UIN : 34937744
Projet KOS : http://kos.enix.org