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.