[Kos-dev] Double fault, maj du handler
Thomas Petazzoni
kos-dev@enix.org
Thu, 28 Jun 2001 10:52:31 +0200
salut,
j'ai remis a jour le handler de double fault. Voici maintenant ce que ca
donne en gros :
SI (adresse de la pile fautive < cpl0_stack_addr + MARGE - PAGE_SIZE||
adresse de la pile fautive > cpl0_stack_addr + STACK_SIZE)
=> ON ARRETE LE SYSTEME
SI (les masques IRQ sont pas tous a 0 <=> une IRQ a eu lieu)
SI(adresse pile < cpl0_stack_addr + MARGE)
=> Thread place dans l'etat DELETED
SI(DF pdt les pushs implicites)
=> On trifouille le TSS et la pile pour qu'on retourne dans le
IRQ
handler. Ici pas de probleme, on est au debut du IRQ handler, celui ci
va pouvoir s'executer, mais le reschedule final va elire un autre thread
si le thread courant a ete place a l'etat DELETED precedemment.
SINON (pas pdt les pushs implicites)
=> on alloue de la pile. le hic ici c'est que si DF a eu lieu
apres le
reschedule (ou pendant) de l'IRQ, eh ben le thread qui vient
eventuellement d'etre place a l'etat DELETED va continuer a s'executer.
pas bien. mais je vois pas quel reschedule faire ici pour forcer a
refaire un reschedule avec l'histoire de la reentrance.
SINON (pas pdt un IRQ)
SI(adresse pile < cpl0_stack_addr + MARGE)
=> Thread place a l'etat DELETED
=> reschedule pour elire un autre thread
=> bidouillage du TSS pour retourner dans ce nouveau thread
SINON
=> on alloue simplement de la pile et on poursuit l'execution du
thread
Comme vous pouvez le voir, le seul truc qui coince encore, c'est
lorsqu'on arrive pres du bord de la pile, et qu'on est au cours de
l'IRQ, apres le reschedule. Bref, probabilite faible mais non nulle.
J'ai code (enfin je sais pas si c bien fait) le machin de d2 pour faire
la reentrance, mais pour qu'il ait reentrance faut appeler 2 fois
reschedule. Or dans mon handler de double fault, je vois pas pourquoi
dans le cas precis qui chie j'irais appeler le reschedule. A quoi ca me
sert, je lui donne quoi en argument ? Je fais quoi du resultat ?
Bref je suis encore un peu dans le flou !
Amicalement,
thomas
--
PETAZZONI Thomas
thomas.petazzoni@meridon.com
ICQ : 34937744
Projet KOS : http://kos.enix.org