OpenSolaris

Printable Version Enter a New Search
Bug ID 6820576
Synopsis Kernel panic when booting Nevada and OpenSolaris
State 3-Accepted (Yes, that is a problem)
Category:Subcategory kernel:ddi
Keywords
Responsible Engineer Phi Tran
Reported Against snv_121 , snv_123
Duplicate Of
Introduced In
Commit to Fix
Fixed In
Release Fixed
Related Bugs 6806540 , 6820826 , 6821736 , 6871231
Submit Date 22-March-2009
Last Update Date 3-September-2009
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.
Work Around
For VMware (only), disable pcieb by adding -B disable-pcieb=true to the kernel command line (assumes you don't need any virtual devices that are behind the virtual PCIe bridges.
Comments
N/A