[Kos-dev] double fault fonctionnel !
Thomas Petazzoni
kos-dev@enix.org
Sat, 07 Apr 2001 15:28:16 +0200
> Humm... ça signifie que tu n'appelles qu'une fois le #DF ?! pas bon ça ! le
> but est qu'il appelle justement le #DF pour chaque IRQ0 !
>
> Cela dit, comme le démasquage des interuptions n'est pas automatique
> (nécessité de faire : "mov $0x20h,%al; out %al,$0x20"), on ne peut pas avoir
> plusieurs interruptions timer 0. D'où peut-être une deuxième exécution du
> "hlt" qui lui tourne à l'infini à cause du fait que l'on n'a libéré pas le
> premier IRQ 0. A mon avis c'est sûrement ça !
>
> Rajoute donc un genre : " mov $0x20,%al; out %al,$0x20 " dans le " if " du
> handler #DF. Ca devrait débloquer la situation.
voici le nouveau code du handler de #DF :
if (system_tss->esp == 0xDEADBEEF)
{
*(screen +1) = 6;
(*screen)++;
__bochs_printk("irq lost.. or not ?\n");
system_tss->esp = double_fault_tss->esp0 - 512;
system_tss->eip++; // saute l'instruction "hlt"
outb(0x20, 0x20);
return cpu_context;
}
else {
new_stack_addr = get_physical_page();
new_stack_addr += PAGE_SIZE-1;
show_all_thread_info();
}
et la le timer 0 et les threads continuent de tourner, mais le twiddle
du double fault ne tourne pas....
pourkoi donc ?
thomas
--
PETAZZONI Thomas
thomas.petazzoni@meridon.com UIN : 34937744
Projet KOS : http://kos.enix.org
Page Perso : http://www.enix.org/~thomas/