[Kos-dev] double fault.... c'est dur mais ca vient

Christophe Avoinne (Club-Internet) kos-dev@enix.org
Sun, 8 Apr 2001 20:20:38 +0200


----- Original Message -----
From: "Thomas Petazzoni" <thomas.petazzoni@ifrance.com>
To: <kos-dev@enix.org>
Sent: Sunday, April 08, 2001 1:19 PM
Subject: [Kos-dev] double fault.... c'est dur mais ca vient


> salut a tous,
>
> bon j'ai vire le system_tss->eip++ parce que je me suis rendu compte en
> desassemblant qu'en faisant ca on sautait non pas le hlt, mais
> l'instruction qui suivait le hlt. en gros c'etait mauvais.
> maintenant on a des double faults qui sont generes a l'infini : le
> twiddle du double fault tourne, celui du timer 0 aussi. et encore mieux,
> les 20 autres threads fonctionnent encore.
>
Ok, je pensais que l'exception #DF faisait pointer sur l'instruction fautive
comme c'était le cas avec des instructions qui manipulaient la pile système
déficiente. Mais 'hlt' n'est pas une instruction aussi fautive que ça. Et ça
se comprend : quand un IRQ se passe, l'interruption va enregistrer non pas
l'adresse du 'hlt' mais bien celle de l'instruction suivante. Mea Culpa
donc.

> bref, hlide que reste-t-il a verifier avant de mettre tout ca au propre
> ?

Le fait que tu fasses tourner les 20 autres threads ne garantit pas que
l'IRQ #0 ait aussi lieu dans notre thread à #DF infini.

Donc ne les lances pas ! il faut qu'il n'y ait que le thread à #DF infini
pour s'assurer que le timer continue d'avoir lieu. Bref, tourne en
mono-tâche.

Hlide.