Hi All,

I've spent a lot of time trying to get my spare hardware setup using Hurd/Rumpdisk. I had confidence that the disk driver should work after installing NetBSD to good success. The legacy BIOS is configured to use SATA/AHCI. The machine has 4 CPUs but all testing has used uni-processor gnumach.

There are a number of issues that I am investigating but they all relate to lost interrupts.

The first discovery relates to the implementation of rumpcomp_pci_irq_establish() in the rumpkernel/pci-userspace/src-gnu/pci_user.gnu.c.

In my case, the rump kernel discovers that IRQ11 is associated with the AHCI and reports as such via rumpcomp_pci_irq_map(). Nevertheless, within the implementation of rumpcomp_pci_irq_establish(), the first call to irqhelp_install_interrupt_handler passes -1 rather than irq->intrline. That results in a call to the ACPI process via acpi_get_pci_irq() which returns 10 and uses that for the the user_interrupt_handler. I haven't studied why it returns 10 rather than 11.

I was wondering why the IRQ supplied by rumpkernel isn't simply accepted? By changing the 1st call to use interrupt 'irq->intrline' I can boot successfully on my hardware using either:

32 bit Hurd/Gnumach compiled with --enable-linux-groups

or

32 bit Hurd/Gnumach compiled with --disable-apic --disable-linux-groups

I have had no success yet with 64 bit on this hardware. Nor on 32 bit with only  --disable-linux-groups which by default configures APIC. It seems likely therefore that something in the APIC code is not configuring interrupt delivery on my machine.  I added various diagnostics to the asm interrupt handlers and there is no evidence that the interrupt 11 is ever received when APIC is enabled.

I'll now start to investigate the APIC configuration to see if I can narrow it down further.

Regards,

Mike.



Reply via email to