xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: ktckd <ktckd9@gmail.com>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>, xen-devel@lists.xensource.com
Subject: Re: Fwd: Xen4.0/FC8/Linux-2.6.31.13 hang on boot - global_irq != irq for INT_SRC_OVR
Date: Tue, 13 Jul 2010 11:06:24 -0400	[thread overview]
Message-ID: <20100713150624.GA5405@phenom.dumpdata.com> (raw)
In-Reply-To: <AANLkTimrkcGIpe1Hzy0BkbBFAoENgLkFwAcTsUkE4m5q@mail.gmail.com>

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);

  reply	other threads:[~2010-07-13 15:06 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <AANLkTim33Hbar2x0ey8R3hyQ97esu_C6ll7GuYQIb8i_@mail.gmail.com>
2010-07-02 15:19 ` Fwd: Xen4.0/FC8/Linux-2.6.31.13 hang on boot ktckd
2010-07-06 14:15   ` Konrad Rzeszutek Wilk
2010-07-07 16:59     ` ktckd
2010-07-13 15:06       ` Konrad Rzeszutek Wilk [this message]
2010-07-13 18:22       ` ktckd
2010-07-13 20:06         ` Konrad Rzeszutek Wilk
2010-07-14 20:47           ` ktckd
2010-07-15 13:31             ` Konrad Rzeszutek Wilk

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100713150624.GA5405@phenom.dumpdata.com \
    --to=konrad.wilk@oracle.com \
    --cc=jeremy@goop.org \
    --cc=ktckd9@gmail.com \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).