|
Description
|
Booting/Installing from CD fails (Nevada+OpenSolaris) on Sun W1100z.
Output from Kernel debugger can be found here:
http://defect.opensolaris.org/bz/attachment.cgi?id=1408
Jurgen Keil wrote:
Hmm, seems as if ioapic_read() is called for an IOAPIC with
index 255 (0xff), but the code only supports a maximum of 32
IOAPICs in a system. ioapic_read() references an illegal array
element, which happens to be a NULL pointer - and panics...
Most likely the IOAPIC index 255 is wrong.
It should be crashing at line 2873 in
usr/src/uts/i86pc/io/mp_platform_common.c
2865 /*
2866 * If we are about to change the interrupt vector for this
interrupt,
2867 * and this interrupt is level-triggered, attached to an
IOAPIC,
2868 * has been delivered to a CPU and that CPU has not handled it
2869 * yet, we cannot reprogram the IOAPIC now.
2870 */
2871 if (!APIC_IS_MSI_OR_MSIX_INDEX(irq_ptr->airq_mps_intr_index)) {
2872
2873 rdt_entry =
READ_IOAPIC_RDT_ENTRY_LOW_DWORD(ioapicindex,
2874 intin_no);
The index is read from data referenced by the first pointer argument for the
apic_rebind() function; in the "$c" stacktrace that was ffffff0148f2a540
$c
...
pcplusmp`ioapic_read+0x1f(ff, 20e)
pcplusmp`apic_rebind+0xaa(ffffff0148f2a540, 0, 0)
^^^^^^^^^^^^^^^^
pcplusmp`apic_setup_io_intr+0x49(ffffff0148f2a540, ff, 0)
...
To collect more information, print the data structure referenced
by the first argument for apic_rebind, like this
ffffff0148f2a540::print apic_irq_t
(replace ffffff0148f2a540 with the address that you'll find in the
$c stack backtrace after the panic)
More information:
http://defect.opensolaris.org/bz/show_bug.cgi?id=6837
Same problem with OpenSolaris dev nv121 booting in vmware: pcplusmp dereferences a bogus pointer when an instance of pcieb enables interrupts. This is an existing nv118 vm image-updated to nv121.
|