Re: [Xen-devel] Bisected Linux regression: ACPI powerbutton events don't work under Xen since commit b81975eade8c6495f3c4d6746d22bdc95f617777
Friday, December 19, 2014, 3:55:00 PM, you wrote: > Hi Sander, > Could you please help to test attached patch? It works > on native but I have no Xen environment at hand. > Thanks! > Gerry Hi Gerry, First of all thanks for the swift response ! Just tested this patch and i can report that it fixes my issue. (i don't know if the xen-folks / Thomas have any comment on the way it is fixed. But when this is final, it should probably be CC'd for -stable since it's broken in both 3.17 and 3.18 afaik) Thanks again, -- Sander > On 2014/12/19 21:16, Sander Eikelenboom wrote: >> Hi, >> >> When running under Xen, ACPI powerbutton events don't work anymore, >> there is no reaction when pressing the powerbutton. >> >> On baremetal everything works fine, acpid gets the event and the >> machine powers down perfectly. The machine is an Intel NUC. >> >> Bisection has lead to: >> >> b81975eade8c6495f3c4d6746d22bdc95f61 is the first bad commit >> commit b81975eade8c6495f3c4d6746d22bdc95f61 >> Author: Jiang Liu >> Date: Mon Jun 9 16:20:11 2014 +0800 >> >> x86, irq: Clean up irqdomain transition code >> >> Now we have completely switched to irqdomain, so clean up transition code >> in IOAPIC drivers. >> >> Signed-off-by: Jiang Liu >> Cc: Konrad Rzeszutek Wilk >> Cc: Tony Luck >> Cc: Joerg Roedel >> Cc: Paul Gortmaker >> Cc: Greg Kroah-Hartman >> Cc: Benjamin Herrenschmidt >> Cc: Grant Likely >> Cc: Rafael J. Wysocki >> Cc: Bjorn Helgaas >> Cc: Randy Dunlap >> Cc: Yinghai Lu >> Link: >> http://lkml.kernel.org/r/1402302011-23642-43-git-send-email-jiang@linux.intel.com >> Signed-off-by: Thomas Gleixner >> >> Reverting this specific commit on linux-tip (3.19-mw) gets things working >> again under Xen. >> Kernel .config is attached. >> >> -- >> Sander >> ___ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
Re: [Xen-devel] Bisected Linux regression: ACPI powerbutton events don't work under Xen since commit b81975eade8c6495f3c4d6746d22bdc95f617777
Hi Sander, Could you please help to test attached patch? It works on native but I have no Xen environment at hand. Thanks! Gerry On 2014/12/19 21:16, Sander Eikelenboom wrote: > Hi, > > When running under Xen, ACPI powerbutton events don't work anymore, > there is no reaction when pressing the powerbutton. > > On baremetal everything works fine, acpid gets the event and the > machine powers down perfectly. The machine is an Intel NUC. > > Bisection has lead to: > > b81975eade8c6495f3c4d6746d22bdc95f61 is the first bad commit > commit b81975eade8c6495f3c4d6746d22bdc95f61 > Author: Jiang Liu > Date: Mon Jun 9 16:20:11 2014 +0800 > > x86, irq: Clean up irqdomain transition code > > Now we have completely switched to irqdomain, so clean up transition code > in IOAPIC drivers. > > Signed-off-by: Jiang Liu > Cc: Konrad Rzeszutek Wilk > Cc: Tony Luck > Cc: Joerg Roedel > Cc: Paul Gortmaker > Cc: Greg Kroah-Hartman > Cc: Benjamin Herrenschmidt > Cc: Grant Likely > Cc: Rafael J. Wysocki > Cc: Bjorn Helgaas > Cc: Randy Dunlap > Cc: Yinghai Lu > Link: > http://lkml.kernel.org/r/1402302011-23642-43-git-send-email-jiang@linux.intel.com > Signed-off-by: Thomas Gleixner > > Reverting this specific commit on linux-tip (3.19-mw) gets things working > again under Xen. > Kernel .config is attached. > > -- > Sander > >From a6928b3c93a5119c79b8a7aec953579c87d2a4cc Mon Sep 17 00:00:00 2001 From: Jiang Liu Date: Fri, 19 Dec 2014 22:33:56 +0800 Subject: [PATCH] x86/apic: Fix xen failure caused by commit b81975eade8c Commit b81975eade8c "x86, irq: Clean up irqdomain transition code" breaks Xen because xen_smp_prepare_cpus() doesn't call setup_IO_APIC() so mp_map_pin_to_irq() fails at the very beginning. Signed-off-by: Jiang Liu --- arch/x86/include/asm/hw_irq.h|2 +- arch/x86/include/asm/smpboot_hooks.h |6 +++--- arch/x86/kernel/apic/apic.c |6 +++--- arch/x86/kernel/apic/io_apic.c | 32 +++- arch/x86/xen/smp.c |3 +++ 5 files changed, 25 insertions(+), 24 deletions(-) diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h index 4615906d83df..0c6530dfd817 100644 --- a/arch/x86/include/asm/hw_irq.h +++ b/arch/x86/include/asm/hw_irq.h @@ -98,7 +98,7 @@ extern void trace_call_function_single_interrupt(void); #define IO_APIC_IRQ(x) (((x) >= NR_IRQS_LEGACY) || ((1<<(x)) & io_apic_irqs)) extern unsigned long io_apic_irqs; -extern void setup_IO_APIC(void); +extern void setup_IO_APIC(bool xen_smp); extern void disable_IO_APIC(void); struct io_apic_irq_attr { diff --git a/arch/x86/include/asm/smpboot_hooks.h b/arch/x86/include/asm/smpboot_hooks.h index 0da7409f0bec..76e5731b03cb 100644 --- a/arch/x86/include/asm/smpboot_hooks.h +++ b/arch/x86/include/asm/smpboot_hooks.h @@ -52,9 +52,9 @@ static inline void __init smpboot_setup_io_apic(void) * Here we can be sure that there is an IO-APIC in the system. Let's * go and set it up: */ - if (!skip_ioapic_setup && nr_ioapics) - setup_IO_APIC(); - else { + if (!skip_ioapic_setup && nr_ioapics) { + setup_IO_APIC(false); + } else { nr_ioapics = 0; } #endif diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index ba6cc041edb1..33ba1f97abea 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -1912,9 +1912,9 @@ int __init APIC_init_uniprocessor(void) bsp_end_local_APIC_setup(); #ifdef CONFIG_X86_IO_APIC - if (smp_found_config && !skip_ioapic_setup && nr_ioapics) - setup_IO_APIC(); - else { + if (smp_found_config && !skip_ioapic_setup && nr_ioapics) { + setup_IO_APIC(false); + } else { nr_ioapics = 0; } #endif diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index a6745e756729..5879ac58c3b6 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c @@ -2965,31 +2965,29 @@ static int mp_irqdomain_create(int ioapic) return 0; } -void __init setup_IO_APIC(void) +void __init setup_IO_APIC(bool xen_smp) { int ioapic; - /* - * calling enable_IO_APIC() is moved to setup_local_APIC for BP - */ - io_apic_irqs = nr_legacy_irqs() ? ~PIC_IRQS : ~0UL; + if (!xen_smp) { + apic_printk(APIC_VERBOSE, "ENABLING IO-APIC IRQs\n"); + io_apic_irqs = nr_legacy_irqs() ? ~PIC_IRQS : ~0UL; + + /* Set up IO-APIC IRQ routing. */ + x86_init.mpparse.setup_ioapic_ids(); + sync_Arb_IDs(); + } - apic_printk(APIC_VERBOSE, "ENABLING IO-APIC IRQs\n"); for_each_ioapic(ioapic) BUG_ON(mp_irqdomain_create(ioapic)); - - /* - * Set up IO-APIC IRQ routing. - */ - x86_init.mpparse.setup_ioapic_ids(); - - sync_Arb_IDs(); setup_IO_APIC_irqs(); - init_IO_APIC_traps(); - if (nr_legacy_irqs()) - check_timer(); - ioapic_initialized = 1; + + if (!xen_smp) { + init_IO_APIC_traps(); + if (nr_legacy_irqs()) + check_timer(); + } } /* diff --git
Re: [Xen-devel] Bisected Linux regression: ACPI powerbutton events don't work under Xen since commit b81975eade8c6495f3c4d6746d22bdc95f617777
Hi Sander, Found the root cause now, but still need some time to find a solution for this issue. xen_smp_prepare_cpus() doesn't call: smpboot_setup_io_apic()->setup_IO_APIC() So no irqdomain structure for IOAPIC created, then mp_map_pin_to_irq() fails at the very beginning. The most simple solution is to revert following change, but it doesn't seem the best solution. I will try to find a hook point to create irqdomain for IOAPIC from xen_smp_prepare_cpus(). Regards! Gerry @@ -1034,13 +1035,8 @@ static int mp_map_pin_to_irq(u32 gsi, int idx, int ioapic, int pin, struct irq_domain *domain = mp_ioapic_irqdomain(ioapic); struct mp_pin_info *info = mp_pin_info(ioapic, pin); - if (!domain) { - /* -* Provide an identity mapping of gsi == irq except on truly -* weird platforms that have non isa irqs in the first 16 gsis. -*/ - return gsi >= nr_legacy_irqs() ? gsi : gsi_top + gsi; - } + if (!domain) + return -1; mutex_lock(&ioapic_mutex); On 2014/12/19 21:16, Sander Eikelenboom wrote: > Hi, > > When running under Xen, ACPI powerbutton events don't work anymore, > there is no reaction when pressing the powerbutton. > > On baremetal everything works fine, acpid gets the event and the > machine powers down perfectly. The machine is an Intel NUC. > > Bisection has lead to: > > b81975eade8c6495f3c4d6746d22bdc95f61 is the first bad commit > commit b81975eade8c6495f3c4d6746d22bdc95f61 > Author: Jiang Liu > Date: Mon Jun 9 16:20:11 2014 +0800 > > x86, irq: Clean up irqdomain transition code > > Now we have completely switched to irqdomain, so clean up transition code > in IOAPIC drivers. > > Signed-off-by: Jiang Liu > Cc: Konrad Rzeszutek Wilk > Cc: Tony Luck > Cc: Joerg Roedel > Cc: Paul Gortmaker > Cc: Greg Kroah-Hartman > Cc: Benjamin Herrenschmidt > Cc: Grant Likely > Cc: Rafael J. Wysocki > Cc: Bjorn Helgaas > Cc: Randy Dunlap > Cc: Yinghai Lu > Link: > http://lkml.kernel.org/r/1402302011-23642-43-git-send-email-jiang@linux.intel.com > Signed-off-by: Thomas Gleixner > > Reverting this specific commit on linux-tip (3.19-mw) gets things working > again under Xen. > Kernel .config is attached. > > -- > Sander > ___ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
Re: [Xen-devel] Bisected Linux regression: ACPI powerbutton events don't work under Xen since commit b81975eade8c6495f3c4d6746d22bdc95f617777
Hi Sander, Sorry for the trouble, I will investigate on next Monday. Regards! Gerry On 2014/12/19 21:16, Sander Eikelenboom wrote: > Hi, > > When running under Xen, ACPI powerbutton events don't work anymore, > there is no reaction when pressing the powerbutton. > > On baremetal everything works fine, acpid gets the event and the > machine powers down perfectly. The machine is an Intel NUC. > > Bisection has lead to: > > b81975eade8c6495f3c4d6746d22bdc95f61 is the first bad commit > commit b81975eade8c6495f3c4d6746d22bdc95f61 > Author: Jiang Liu > Date: Mon Jun 9 16:20:11 2014 +0800 > > x86, irq: Clean up irqdomain transition code > > Now we have completely switched to irqdomain, so clean up transition code > in IOAPIC drivers. > > Signed-off-by: Jiang Liu > Cc: Konrad Rzeszutek Wilk > Cc: Tony Luck > Cc: Joerg Roedel > Cc: Paul Gortmaker > Cc: Greg Kroah-Hartman > Cc: Benjamin Herrenschmidt > Cc: Grant Likely > Cc: Rafael J. Wysocki > Cc: Bjorn Helgaas > Cc: Randy Dunlap > Cc: Yinghai Lu > Link: > http://lkml.kernel.org/r/1402302011-23642-43-git-send-email-jiang@linux.intel.com > Signed-off-by: Thomas Gleixner > > Reverting this specific commit on linux-tip (3.19-mw) gets things working > again under Xen. > Kernel .config is attached. > > -- > Sander > ___ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
[Xen-devel] Bisected Linux regression: ACPI powerbutton events don't work under Xen since commit b81975eade8c6495f3c4d6746d22bdc95f617777
Hi, When running under Xen, ACPI powerbutton events don't work anymore, there is no reaction when pressing the powerbutton. On baremetal everything works fine, acpid gets the event and the machine powers down perfectly. The machine is an Intel NUC. Bisection has lead to: b81975eade8c6495f3c4d6746d22bdc95f61 is the first bad commit commit b81975eade8c6495f3c4d6746d22bdc95f61 Author: Jiang Liu Date: Mon Jun 9 16:20:11 2014 +0800 x86, irq: Clean up irqdomain transition code Now we have completely switched to irqdomain, so clean up transition code in IOAPIC drivers. Signed-off-by: Jiang Liu Cc: Konrad Rzeszutek Wilk Cc: Tony Luck Cc: Joerg Roedel Cc: Paul Gortmaker Cc: Greg Kroah-Hartman Cc: Benjamin Herrenschmidt Cc: Grant Likely Cc: Rafael J. Wysocki Cc: Bjorn Helgaas Cc: Randy Dunlap Cc: Yinghai Lu Link: http://lkml.kernel.org/r/1402302011-23642-43-git-send-email-jiang@linux.intel.com Signed-off-by: Thomas Gleixner Reverting this specific commit on linux-tip (3.19-mw) gets things working again under Xen. Kernel .config is attached. -- Sander dot-config Description: Binary data ___ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel