[Xen-devel] Bisected Linux regression: ACPI powerbutton events don't work under Xen since commit b81975eade8c6495f3c4d6746d22bdc95f617777

2014-12-19 Thread Sander Eikelenboom
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 jiang@linux.intel.com
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 jiang@linux.intel.com
Cc: Konrad Rzeszutek Wilk konrad.w...@oracle.com
Cc: Tony Luck tony.l...@intel.com
Cc: Joerg Roedel j...@8bytes.org
Cc: Paul Gortmaker paul.gortma...@windriver.com
Cc: Greg Kroah-Hartman gre...@linuxfoundation.org
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Cc: Grant Likely grant.lik...@linaro.org
Cc: Rafael J. Wysocki r...@rjwysocki.net
Cc: Bjorn Helgaas bhelg...@google.com
Cc: Randy Dunlap rdun...@infradead.org
Cc: Yinghai Lu ying...@kernel.org
Link: 
http://lkml.kernel.org/r/1402302011-23642-43-git-send-email-jiang@linux.intel.com
Signed-off-by: Thomas Gleixner t...@linutronix.de

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


Re: [Xen-devel] Bisected Linux regression: ACPI powerbutton events don't work under Xen since commit b81975eade8c6495f3c4d6746d22bdc95f617777

2014-12-19 Thread Jiang Liu
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 jiang@linux.intel.com
 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 jiang@linux.intel.com
 Cc: Konrad Rzeszutek Wilk konrad.w...@oracle.com
 Cc: Tony Luck tony.l...@intel.com
 Cc: Joerg Roedel j...@8bytes.org
 Cc: Paul Gortmaker paul.gortma...@windriver.com
 Cc: Greg Kroah-Hartman gre...@linuxfoundation.org
 Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
 Cc: Grant Likely grant.lik...@linaro.org
 Cc: Rafael J. Wysocki r...@rjwysocki.net
 Cc: Bjorn Helgaas bhelg...@google.com
 Cc: Randy Dunlap rdun...@infradead.org
 Cc: Yinghai Lu ying...@kernel.org
 Link: 
 http://lkml.kernel.org/r/1402302011-23642-43-git-send-email-jiang@linux.intel.com
 Signed-off-by: Thomas Gleixner t...@linutronix.de
 
 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

2014-12-19 Thread Jiang Liu
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 jiang@linux.intel.com
 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 jiang@linux.intel.com
 Cc: Konrad Rzeszutek Wilk konrad.w...@oracle.com
 Cc: Tony Luck tony.l...@intel.com
 Cc: Joerg Roedel j...@8bytes.org
 Cc: Paul Gortmaker paul.gortma...@windriver.com
 Cc: Greg Kroah-Hartman gre...@linuxfoundation.org
 Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
 Cc: Grant Likely grant.lik...@linaro.org
 Cc: Rafael J. Wysocki r...@rjwysocki.net
 Cc: Bjorn Helgaas bhelg...@google.com
 Cc: Randy Dunlap rdun...@infradead.org
 Cc: Yinghai Lu ying...@kernel.org
 Link: 
 http://lkml.kernel.org/r/1402302011-23642-43-git-send-email-jiang@linux.intel.com
 Signed-off-by: Thomas Gleixner t...@linutronix.de
 
 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

2014-12-19 Thread Jiang Liu
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 jiang@linux.intel.com
 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 jiang@linux.intel.com
 Cc: Konrad Rzeszutek Wilk konrad.w...@oracle.com
 Cc: Tony Luck tony.l...@intel.com
 Cc: Joerg Roedel j...@8bytes.org
 Cc: Paul Gortmaker paul.gortma...@windriver.com
 Cc: Greg Kroah-Hartman gre...@linuxfoundation.org
 Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
 Cc: Grant Likely grant.lik...@linaro.org
 Cc: Rafael J. Wysocki r...@rjwysocki.net
 Cc: Bjorn Helgaas bhelg...@google.com
 Cc: Randy Dunlap rdun...@infradead.org
 Cc: Yinghai Lu ying...@kernel.org
 Link: 
 http://lkml.kernel.org/r/1402302011-23642-43-git-send-email-jiang@linux.intel.com
 Signed-off-by: Thomas Gleixner t...@linutronix.de
 
 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 jiang@linux.intel.com
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 jiang@linux.intel.com
---
 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.
- */
-