On Wed, Jul 07, 2010 at 11:59:58AM -0500, ktckd wrote:
> Attaching the serial with the grub options mentioned below. Do let me know
> if you need any other information.
>
> I was using 2.6.18.8 when I tried xen 3.4.0
OK, that is an ancient Dom0. You can try to re-use this Dom0 (2.6.31.x) with
that
Xen 3.4.0 and see if it works.. but
> BUG: unable to handle kernel NULL pointer dereference at (null)
> IP: [<ffffffff8102f6cf>] add_pin_to_irq_node+0x24/0xaf
> PGD 0
> Oops: 0000 [#1] SMP
> last sysfs file:
> CPU 0
> Modules linked in:
> Pid: 1, comm: swapper Not tainted 2.6.31.13-xen #1 HP EliteBook 8740w
> RIP: e030:[<ffffffff8102f6cf>] [<ffffffff8102f6cf>]
> add_pin_to_irq_node+0x24/0xaf
> RSP: e02b:ffff88016d4b1d90 EFLAGS: 00010246
> RAX: 0000000000000000 RBX: 0000000000000009 RCX: 0000000000000009
> RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
> RBP: 0000000000000000 R08: 0000000000000001 R09: 0000000000000001
> R10: 000000000000000f R11: 0000000000000002 R12: 0000000000000009
> R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000009
> FS: 0000000000000000(0000) GS:ffffc90000000000(0000) knlGS:0000000000000000
> CS: e033 DS: 0000 ES: 0000 CR0: 000000008005003b
> CR2: 0000000000000000 CR3: 0000000001001000 CR4: 0000000000002660
> DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
> DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
> Process swapper (pid: 1, threadinfo ffff88016d4b0000, task ffff88016d4a8000)
> Stack:
> ffff88016d688f50 ffffffff811699c1 0000000060629933 0000000000000009
> <0> 0000000000000000 0000000000000001 ffffffff8156b900 ffffffff81030e36
> <0> ffffffffffffffff 0000000000000049 0000000060629933 0000000000000009
> Call Trace:
> [<ffffffff811699c1>] ? internal_create_group+0xf4/0x174
> [<ffffffff81030e36>] ? setup_IO_APIC_irq_extra+0xcd/0x153
> [<ffffffff8121c4ba>] ? acpi_ev_sci_xrupt_handler+0x0/0x4a
> [<ffffffff8102a863>] ? acpi_gsi_to_irq+0x24/0x40
> [<ffffffff8120aa37>] ? acpi_os_install_interrupt_handler+0x36/0xbd
> [<ffffffff81694658>] ? acpi_init+0x0/0x27f
> [<ffffffff8121b89e>] ? acpi_ev_install_xrupt_handlers+0x1a/0x79
> [<ffffffff81694658>] ? acpi_init+0x0/0x27f
> [<ffffffff816946d8>] ? acpi_init+0x80/0x27f
> [<ffffffff81694658>] ? acpi_init+0x0/0x27f
.. looking at this stack trace and the source code and the serial output
(thank you very much), this caught my eye:
ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
ACPI: IRQ0 used by override.
ACPI: IRQ2 used by override.
ACPI: IRQ9 used by override.
[ which looks to me that pin 0 and pin 2 of the IOAPIC are routed to the
same spot ]
and:
xen: registering gsi 0 triggering 1 polarity 0
xen: --> irq=0
xen_set_ioapic_routing: irq 0 gsi 0 vector 0 ioapic 0 pin 0 triggering 0
polarity 0
xen: registering gsi 1 triggering 1 polarity 0
xen: --> irq=1
xen_set_ioapic_routing: irq 1 gsi 1 vector 1 ioapic 0 pin 1 triggering 0
polarity 0
xen: registering gsi 3 triggering 1 polarity 0
xen: --> irq=3
The lack of IRQ 2 is the worrying part. The reason for that is b/c the
bus_irq (0) != for GSI IRQ 2 (2) so we end up in acpi_get_override_irq
going over the 16 IRQs and return -1. Hence xen_setup_pirqs fails to setup
an IRQ handler for IRQ 2.
Which would explain why the 'add_pin_to_irq_node' would fail. In one part
it tries to do "entry = cfg->irq_2_pin;" which would throw a NULL
pointer exception as 'cfg' for IRQ 2 has not been defined.
This is all just a speculation. But we can try testing this out with
this hack patch:
NOTE: You might need to change the polarity to zero instead of 1.
diff --git a/arch/x86/xen/pci.c b/arch/x86/xen/pci.c
index 1af81dd..1d3cc7f 100644
--- a/arch/x86/xen/pci.c
+++ b/arch/x86/xen/pci.c
@@ -77,6 +77,7 @@ int xen_register_gsi(u32 gsi, int triggering, int polarity)
void __init xen_setup_pirqs(void)
{
int irq;
+ int rc;
if (0 == nr_ioapics) {
for (irq = 0; irq < NR_IRQS_LEGACY; irq++)
@@ -88,9 +89,15 @@ void __init xen_setup_pirqs(void)
for (irq = 0; irq < NR_IRQS_LEGACY; irq++) {
int trigger, polarity;
- if (acpi_get_override_irq(irq, &trigger, &polarity) == -1)
- continue;
+ rc = acpi_get_override_irq(irq, &trigger, &polarity);
+ if (rc == -1) {
+ printk(KERN_INFO "%s: IRQ: %d bus_irq !=
global_irq!\n", __FUNCTION__, irq);
+ if (irq != 2)
+ continue;
+ trigger = 1; /* level */
+ polarity = 1; /* low, not sure if should be high? */
+ }
xen_register_gsi(irq,
trigger ? ACPI_LEVEL_SENSITIVE : ACPI_EDGE_SENSITIVE,
polarity ? ACPI_ACTIVE_LOW : ACPI_ACTIVE_HIGH);
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|