On 03/10/2010 11:44 AM, M. Nunberg wrote:
On Mon, 2010-03-08 at 15:02 -0500, Konrad Rzeszutek Wilk wrote:
make sure it was indeed being called. I think this might have something
to do with what Jeremy mentioned about my SCI being on 9 and not 20, but
honestly, I haven't a clue. I have the full log if you need more.
I am attaching a debug patch that will help in troubleshooting this and
potentially fix this.
Couple of things:
1). Turn the Enable ACPI SCI in the BIOS to Enable.
2). Compile your Linux kernel with the attached patch and these two options:
CONFIG_ACPI_DEBUG=y
CONFIG_ACPI_DEBUG_FUNC_TRACE=y
Do use your old .config that was triggering the failure in the first
case.
3). Edit your kernel line to have:
debug initcall_debug acpi.debug_level=0xffffffff acpi.debug_layer=0x2
xen_sci=fun
4). Boot your kernel. You should see something like this:
... snip..
[ 0.000000] acpi_sci_ioapic_setup: 0 -> 9 (3, 1)
acpi_sci_ioapic_setup: 0 -> 20 (3, 3)
...
[ 1.483956] xen_setup_pirqs: FADT.SCI: 9 ACPI.SCI:9. Using 9 IRQ,
[ 1.490025] xen_setup_pirqs: SCI override: trigger: level->level,
polarity: high->high
[ 1.497824] xen: registering gsi 9 triggering 0 polarity 0
[ 1.503282] xen_allocate_pirq: returning irq 9 for gsi 9
[ 1.508572] xen: --> irq=9
NR_IRQS:4352 nr_irqs:4096
xen: registering gsi 0 triggering 1 polarity 0
xen: --> irq=0
Already setup the GSI :0
xen: registering gsi 1 triggering 1 polarity 0
xen: --> irq=1
Already setup the GSI :1
xen: registering gsi 2 triggering 1 polarity 0
xen: --> irq=2
Already setup the GSI :2
xen: registering gsi 3 triggering 1 polarity 0
xen: --> irq=3
Already setup the GSI :3
xen: registering gsi 4 triggering 1 polarity 0
xen: --> irq=4
Already setup the GSI :4
xen: registering gsi 5 triggering 1 polarity 0
xen: --> irq=5
Already setup the GSI :5
xen: registering gsi 6 triggering 1 polarity 0
xen: --> irq=6
Already setup the GSI :6
xen: registering gsi 7 triggering 1 polarity 0
xen: --> irq=7
Already setup the GSI :7
xen: registering gsi 8 triggering 1 polarity 0
xen: --> irq=8
Already setup the GSI :8
xen: registering gsi 9 triggering 1 polarity 0
xen: --> irq=9
Already setup the GSI :9
xen: registering gsi 10 triggering 1 polarity 0
xen: --> irq=10
Already setup the GSI :10
xen: registering gsi 11 triggering 1 polarity 0
xen: --> irq=11
Already setup the GSI :11
xen: registering gsi 12 triggering 1 polarity 0
xen: --> irq=12
Already setup the GSI :12
xen: registering gsi 13 triggering 1 polarity 0
xen: --> irq=13
Already setup the GSI :13
xen: registering gsi 14 triggering 1 polarity 0
xen: --> irq=14
Already setup the GSI :14
xen: registering gsi 15 triggering 1 polarity 0
xen: --> irq=15
Already setup the GSI :15
xen_setup_pirqs: FADT.SCI: 9 ACPI.SCI:20. Using IRQ 20.
xen_setup_pirqs: acpi_get_override_irq fails for 20.
xen_setup_pirqs: SCI override: trigger: level->edge, polarity: high->low
xen: registering gsi 20 triggering 0 polarity 1
alloc irq_desc for 20 on node 0
alloc kstat_irqs on node 0
xen: --> irq=20
(XEN) IOAPIC[0]: Set PCI routing entry (8-20 -> 0x98 -> IRQ 20 Mode:1
Active:1)
Console: colour VGA+ 80x25
....
[ 1.511254] Already setup the GSI :9
And as you predicted, this line did not show up for 20
.. and then later:
[ 3.058890] ACPI: Core revision 20090903
[ 3.084701] acpi_early_init: FADT.SCI = 9
s/9/20, again
.. and then lots of ACPI debug stuff.
In the log.
Thought in your case, the IRQ that should show up is 20 and the 'Already
setup the GSI :20' might not show up.
Please e-mail the full serial log (even if it does work).
All in all, I think it did work. From a novice's perspective (like mine), This
message:
ACPI: Interpreter enabled
was missing when SCI was enabled in the BIOS, but with your patch, it is
present.
I am attaching the full log as a bz2 compressed textfile, as the last time I
tried to send something with wide lines, something gobbled it up, though I
think the relevant info is inline
Could you try this patch? (Already committed to xen/next, as it works
for me.)
Thanks,
J
From 06ab9af4e7beaf2bcafae4e390b4a51908dfd29e Mon Sep 17 00:00:00 2001
From: Jeremy Fitzhardinge<jeremy.fitzhardinge@xxxxxxxxxx>
Date: Wed, 10 Mar 2010 15:44:21 -0800
Subject: [PATCH] Merge branch 'xen/dom0/apic-next' into xen/next
* xen/dom0/apic-next:
xen: parse MADT to get information to set up ACPI SCI
: abulafia:pts/0; git show d02659fd69312e5ff9890c1c7ca2bea9a782ad57
From d02659fd69312e5ff9890c1c7ca2bea9a782ad57 Mon Sep 17 00:00:00 2001
From: Jeremy Fitzhardinge<jeremy.fitzhardinge@xxxxxxxxxx>
Date: Wed, 10 Mar 2010 13:07:15 -0800
Subject: [PATCH] xen: parse MADT to get information to set up ACPI SCI
If the SCI is not in its traditional place of irq 9/gsi 9, then we
need to set it up properly.
Signed-off-by: Jeremy Fitzhardinge<jeremy.fitzhardinge@xxxxxxxxxx>
diff --git a/arch/x86/xen/pci.c b/arch/x86/xen/pci.c
index f999ad8..a2accf4 100644
--- a/arch/x86/xen/pci.c
+++ b/arch/x86/xen/pci.c
@@ -70,6 +70,97 @@ int xen_register_gsi(u32 gsi, int triggering, int polarity)
return irq;
}
+#ifdef CONFIG_ACPI
+#define BAD_MADT_ENTRY(entry, end) ( \
+ (!entry) || (unsigned long)entry + sizeof(*entry)> end || \
+ ((struct acpi_subtable_header *)entry)->length< sizeof(*entry))
+
+
+static int __init
+xen_acpi_parse_int_src_ovr(struct acpi_subtable_header * header,
+ const unsigned long end)
+{
+ struct acpi_madt_interrupt_override *intsrc = NULL;
+
+ intsrc = (struct acpi_madt_interrupt_override *)header;
+
+ if (BAD_MADT_ENTRY(intsrc, end))
+ return -EINVAL;
+
+ acpi_table_print_madt_entry(header);
+
+ if (intsrc->source_irq == acpi_gbl_FADT.sci_interrupt) {
+ int gsi;
+ int trigger, polarity;
+
+ trigger = intsrc->inti_flags& ACPI_MADT_TRIGGER_MASK;
+ polarity = intsrc->inti_flags& ACPI_MADT_POLARITY_MASK;
+
+ /* Command-line over-ride via acpi_sci= */
+ if (acpi_sci_flags& ACPI_MADT_TRIGGER_MASK)
+ trigger = acpi_sci_flags& ACPI_MADT_TRIGGER_MASK;
+
+ if (acpi_sci_flags& ACPI_MADT_POLARITY_MASK)
+ polarity = acpi_sci_flags& ACPI_MADT_POLARITY_MASK;
+
+ printk("xen: sci override: source_irq=%d global_irq=%d trigger=%x
polarity=%x\n",
+ intsrc->source_irq, intsrc->global_irq,
+ trigger, polarity);
+
+ switch (polarity) {
+ case ACPI_MADT_POLARITY_CONFORMS:
+ case ACPI_MADT_POLARITY_ACTIVE_LOW:
+ polarity = ACPI_ACTIVE_LOW;
+ break;
+
+ case ACPI_MADT_POLARITY_ACTIVE_HIGH:
+ polarity = ACPI_ACTIVE_HIGH;
+ break;
+
+ default:
+ return 0;
+ }
+
+ switch (trigger) {
+ case ACPI_MADT_TRIGGER_CONFORMS:
+ case ACPI_MADT_TRIGGER_LEVEL:
+ trigger = ACPI_LEVEL_SENSITIVE;
+ break;
+
+ case ACPI_MADT_TRIGGER_EDGE:
+ trigger = ACPI_EDGE_SENSITIVE;
+ break;
+
+ default:
+ return 0;
+ }
+
+ gsi = xen_register_gsi(intsrc->global_irq,
+ trigger, polarity);
+ /*
+ * stash over-ride to indicate we've been here
+ * and for later update of acpi_gbl_FADT
+ */
+ acpi_sci_override_gsi = gsi;
+
+ printk("xen: acpi sci %d\n", gsi);
+ }
+
+ return 0;
+}
+
+static __init void xen_setup_acpi_sci(void)
+{
+ acpi_table_parse_madt(ACPI_MADT_TYPE_INTERRUPT_OVERRIDE,
+ xen_acpi_parse_int_src_ovr,
+ nr_irqs);
+}
+#else
+static __init void xen_setup_acpi_sci(void)
+{
+}
+#endif
+
void __init xen_setup_pirqs(void)
{
int irq;
@@ -91,6 +182,8 @@ void __init xen_setup_pirqs(void)
trigger ? ACPI_LEVEL_SENSITIVE : ACPI_EDGE_SENSITIVE,
polarity ? ACPI_ACTIVE_LOW : ACPI_ACTIVE_HIGH);
}
+
+ xen_setup_acpi_sci();
}
#ifdef CONFIG_PCI_MSI
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|