@Georg
Quote:
Is everything completely frozen or are other things (not using/affected directly or indirectly by gfx) still running in the system? Like if you create a (high pri) task that every second kprintfs something to debug output.
Good question. The rest of the OS is still running, so things like timer interrupts still work. So, the problem really is that external interrupts stop making it through to the interrupt handler(s).
Here's a new log showing where it goes wrong:
pic_update_irq master 0 imr 45 irr 2 padd 0
pic_update_irq master 1 imr 249 irr 5 padd 0
ppc_deliver_interrupt
powerpc_excp_74xx
pic_update_irq master 1 imr 249 irr 5 padd 0
=> Interrupt handling starts
- Not a VirtioGPU interrupt (in emulator)
virtio_pci_notify: 65535
virtio_pci_notify: 65535
virtio_pci_notify: 65535
<= Interrupt handling ends (in emulator)
virtio_pci_notify: 65535
virtio_pci_notify: 65535
pic_update_irq master 0 imr 45 irr 128 padd 0
pic_update_irq master 1 imr 249 irr 5 padd 0
ppc_deliver_interrupt
powerpc_excp_74xx
pic_update_irq master 1 imr 249 irr 5 padd 0
pic_update_irq master 0 imr 45 irr 128 padd 0
pic_update_irq master 1 imr 249 irr 5 padd 0
ppc_deliver_interrupt
powerpc_excp_74xx
The "virtio_pci_notify" log entries are the VirtioGPU triggering an interrupt. So, the failure starts with the VirtioGPU triggering an interrupt while AmigaOS is processing a previous interrupt. The OS has interrupts disabled at this point. It looks like the interrupts are triggered once the OS enables interrupts again, but the PIC's Interrupt Request Register (IRR) has a different value.
I'll have to look at the PIC's documentation again. It wasn't clear to me how the IRR register is supposed to behave.
Hans