[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Re: "ACPI: Unable to start the ACPI Interpreter"
On Tue, Jun 28, 2011 at 11:33:17AM -0700, Liwei wrote: > On 29 June 2011 02:12, Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> wrote: > > On Tue, Jun 28, 2011 at 05:09:55AM +0800, Liwei wrote: > >> Hmm, here's the mapped IRQ list, interestingly IRQ 20 is on the list but > >> not 9? > > > > Looks like it. You are also in luck - I found a machine that has the same > > exact problem and while it does not bail out when installing the ACPI > > interpreter > > it does get the wrong IRQs for the rest of the devices. > > > > In other words, I can reproduce it here. > > > > Good to hear. > > Would you be able to CC me when you have a patch available so that I Of course. > can test it out? I found out that the 3.0 kernel is somehow much more Here it is. diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c index aac866e..09077b3 100644 --- a/arch/x86/pci/xen.c +++ b/arch/x86/pci/xen.c @@ -344,6 +344,7 @@ static int xen_register_pirq(u32 gsi, int triggering) struct physdev_map_pirq map_irq; int shareable = 0; char *name; + bool gsi_override = false; if (!xen_pv_domain()) return -1; @@ -360,11 +361,23 @@ static int xen_register_pirq(u32 gsi, int triggering) if (pirq < 0) goto out; - irq = xen_bind_pirq_gsi_to_irq(gsi, pirq, shareable, name); + /* We are installing the ACPI SCI */ + if (gsi == acpi_sci_override_gsi) { + /* Check whether the GSI != IRQ */ + acpi_gsi_to_irq(gsi, &irq); + printk(KERN_DEBUG "ACPI SCI GSI is %d, and ACPI IRQ thinks it is %d\n", gsi, irq); + if (irq != gsi) + /* Bugger, we MUST have that IRQ. */ + gsi_override = true; + } + if (gsi_override) + irq = xen_bind_pirq_gsi_to_irq(irq, pirq, shareable, name); + else + irq = xen_bind_pirq_gsi_to_irq(gsi, pirq, shareable, name); if (irq < 0) goto out; - printk(KERN_DEBUG "xen: --> pirq=%d -> irq=%d\n", pirq, irq); + printk(KERN_DEBUG "xen: --> pirq=%d -> gsi=%d -> irq=%d\n", pirq, gsi, irq); map_irq.domid = DOMID_SELF; map_irq.type = MAP_PIRQ_TYPE_GSI; @@ -414,6 +427,7 @@ static __init void xen_setup_acpi_sci(void) int rc; int trigger, polarity; int gsi = acpi_sci_override_gsi; + int irq = gsi; if (!gsi) return; @@ -426,12 +440,14 @@ static __init void xen_setup_acpi_sci(void) } trigger = trigger ? ACPI_LEVEL_SENSITIVE : ACPI_EDGE_SENSITIVE; polarity = polarity ? ACPI_ACTIVE_LOW : ACPI_ACTIVE_HIGH; - + + acpi_gsi_to_irq(gsi, &irq); + printk(KERN_INFO "xen: sci override: global_irq=%d trigger=%d " - "polarity=%d\n", gsi, trigger, polarity); + "polarity=%d irq %d\n", gsi, trigger, polarity, irq); gsi = xen_register_gsi(gsi, trigger, polarity); - printk(KERN_INFO "xen: acpi sci %d\n", gsi); + printk(KERN_INFO "xen: acpi sci %d -> irq %d\n", gsi, irq); return; } _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |