[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/