linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Revert "x86/xen: Treat SCI interrupt as normal GSI interrupt"
@ 2015-02-15 22:25 Ville Syrjälä
  2015-02-16  2:11 ` [PATCH] x86, irq: Fix regression caused by commit b568b8601f05 Jiang Liu
  0 siblings, 1 reply; 7+ messages in thread
From: Ville Syrjälä @ 2015-02-15 22:25 UTC (permalink / raw)
  To: linux-acpi
  Cc: linux-kernel, Jiang Liu, Sander Eikelenboom, Rafael J. Wysocki,
	Len Brown, Thomas Gleixner, Ville Syrjälä

This reverts commit b568b8601f05a591a7ff09d8ee1cedb5b2e815fe.

The commit in question causes a nasty regression on HP/Compaq
nc6000 where we fail to register the ACPI interrupt, and thus
lose eg. thermal notifications leading a potentially overheated
machine.

wdiff of /proc/interrupts shows:
9:         [-98-]          {+6+}    XT-PIC  [-acpi-]

Cc: Jiang Liu <jiang.liu@linux.intel.com>
Cc: Sander Eikelenboom <linux@eikelenboom.it>
Cc: Rafael J. Wysocki <rjw@rjwysocki.net>
Cc: Len Brown <len.brown@intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ville Syrjälä <syrjala@sci.fi>
---
 arch/x86/kernel/acpi/boot.c | 26 ++++++++++++-------------
 arch/x86/pci/xen.c          | 47 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 60 insertions(+), 13 deletions(-)

diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index ae97ed0..5c40e9a 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -611,20 +611,20 @@ void __init acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger)
 
 int acpi_gsi_to_irq(u32 gsi, unsigned int *irqp)
 {
-	int rc, irq, trigger, polarity;
-
-	rc = acpi_get_override_irq(gsi, &trigger, &polarity);
-	if (rc == 0) {
-		trigger = trigger ? ACPI_LEVEL_SENSITIVE : ACPI_EDGE_SENSITIVE;
-		polarity = polarity ? ACPI_ACTIVE_LOW : ACPI_ACTIVE_HIGH;
-		irq = acpi_register_gsi(NULL, gsi, trigger, polarity);
-		if (irq >= 0) {
-			*irqp = irq;
-			return 0;
-		}
-	}
+	int irq;
 
-	return -1;
+	if (acpi_irq_model == ACPI_IRQ_MODEL_PIC) {
+		*irqp = gsi;
+	} else {
+		mutex_lock(&acpi_ioapic_lock);
+		irq = mp_map_gsi_to_irq(gsi,
+					IOAPIC_MAP_ALLOC | IOAPIC_MAP_CHECK);
+		mutex_unlock(&acpi_ioapic_lock);
+		if (irq < 0)
+			return -1;
+		*irqp = irq;
+	}
+	return 0;
 }
 EXPORT_SYMBOL_GPL(acpi_gsi_to_irq);
 
diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c
index d22f4b5..3db4de0 100644
--- a/arch/x86/pci/xen.c
+++ b/arch/x86/pci/xen.c
@@ -476,6 +476,52 @@ int __init pci_xen_hvm_init(void)
 }
 
 #ifdef CONFIG_XEN_DOM0
+static __init void xen_setup_acpi_sci(void)
+{
+	int rc;
+	int trigger, polarity;
+	int gsi = acpi_sci_override_gsi;
+	int irq = -1;
+	int gsi_override = -1;
+
+	if (!gsi)
+		return;
+
+	rc = acpi_get_override_irq(gsi, &trigger, &polarity);
+	if (rc) {
+		printk(KERN_WARNING "xen: acpi_get_override_irq failed for acpi"
+				" sci, rc=%d\n", rc);
+		return;
+	}
+	trigger = trigger ? ACPI_LEVEL_SENSITIVE : ACPI_EDGE_SENSITIVE;
+	polarity = polarity ? ACPI_ACTIVE_LOW : ACPI_ACTIVE_HIGH;
+
+	printk(KERN_INFO "xen: sci override: global_irq=%d trigger=%d "
+			"polarity=%d\n", gsi, trigger, polarity);
+
+	/* Before we bind the GSI to a Linux IRQ, check whether
+	 * we need to override it with bus_irq (IRQ) value. Usually for
+	 * IRQs below IRQ_LEGACY_IRQ this holds IRQ == GSI, as so:
+	 *  ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 low level)
+	 * but there are oddballs where the IRQ != GSI:
+	 *  ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 20 low level)
+	 * which ends up being: gsi_to_irq[9] == 20
+	 * (which is what acpi_gsi_to_irq ends up calling when starting the
+	 * the ACPI interpreter and keels over since IRQ 9 has not been
+	 * setup as we had setup IRQ 20 for it).
+	 */
+	if (acpi_gsi_to_irq(gsi, &irq) == 0) {
+		/* Use the provided value if it's valid. */
+		if (irq >= 0)
+			gsi_override = irq;
+	}
+
+	gsi = xen_register_gsi(gsi, gsi_override, trigger, polarity);
+	printk(KERN_INFO "xen: acpi sci %d\n", gsi);
+
+	return;
+}
+
 int __init pci_xen_initial_domain(void)
 {
 	int irq;
@@ -486,6 +532,7 @@ int __init pci_xen_initial_domain(void)
 	x86_msi.restore_msi_irqs = xen_initdom_restore_msi_irqs;
 	pci_msi_ignore_mask = 1;
 #endif
+	xen_setup_acpi_sci();
 	__acpi_register_gsi = acpi_register_gsi_xen;
 	__acpi_unregister_gsi = NULL;
 	/* Pre-allocate legacy irqs */
-- 
2.0.5


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH] x86, irq: Fix regression caused by commit b568b8601f05
  2015-02-15 22:25 [PATCH] Revert "x86/xen: Treat SCI interrupt as normal GSI interrupt" Ville Syrjälä
@ 2015-02-16  2:11 ` Jiang Liu
  2015-02-16 19:11   ` Ville Syrjälä
                     ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Jiang Liu @ 2015-02-16  2:11 UTC (permalink / raw)
  To: Ville Syrjälä,
	Rafael J. Wysocki, Len Brown, Pavel Machek, Thomas Gleixner,
	Ingo Molnar, H. Peter Anvin, x86
  Cc: Jiang Liu, Sander Eikelenboom, linux-acpi, linux-pm, linux-kernel

Commit b568b8601f05 ("Treat SCI interrupt as normal GSI interrupt")
accidently removes support of legacy PIC interrupt when fixing a
regression for Xen, which causes a nasty regression on HP/Compaq
nc6000 where we fail to register the ACPI interrupt, and thus
lose eg. thermal notifications leading a potentially overheated
machine.

So reintroduce support of legacy PIC based ACPI SCI interrupt.

Reported-by: Ville Syrjälä <syrjala@sci.fi>
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com>
---
Hi Ville,
	Could you please help to try this patch instead of revert commit
b568b8601f05?
Thanks!
Gerry
---
 arch/x86/kernel/acpi/boot.c |    5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index ae97ed0873c6..3d525c6124f6 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -613,6 +613,11 @@ int acpi_gsi_to_irq(u32 gsi, unsigned int *irqp)
 {
 	int rc, irq, trigger, polarity;
 
+	if (acpi_irq_model == ACPI_IRQ_MODEL_PIC) {
+		*irqp = gsi;
+		return 0;
+	}
+
 	rc = acpi_get_override_irq(gsi, &trigger, &polarity);
 	if (rc == 0) {
 		trigger = trigger ? ACPI_LEVEL_SENSITIVE : ACPI_EDGE_SENSITIVE;
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] x86, irq: Fix regression caused by commit b568b8601f05
  2015-02-16  2:11 ` [PATCH] x86, irq: Fix regression caused by commit b568b8601f05 Jiang Liu
@ 2015-02-16 19:11   ` Ville Syrjälä
  2015-02-16 19:36   ` Pavel Machek
  2015-02-18 17:08   ` [tip:irq/urgent] x86/irq: " tip-bot for Jiang Liu
  2 siblings, 0 replies; 7+ messages in thread
From: Ville Syrjälä @ 2015-02-16 19:11 UTC (permalink / raw)
  To: Jiang Liu
  Cc: Rafael J. Wysocki, Len Brown, Pavel Machek, Thomas Gleixner,
	Ingo Molnar, H. Peter Anvin, x86, Sander Eikelenboom, linux-acpi,
	linux-pm, linux-kernel

On Mon, Feb 16, 2015 at 10:11:13AM +0800, Jiang Liu wrote:
> Commit b568b8601f05 ("Treat SCI interrupt as normal GSI interrupt")
> accidently removes support of legacy PIC interrupt when fixing a
> regression for Xen, which causes a nasty regression on HP/Compaq
> nc6000 where we fail to register the ACPI interrupt, and thus
> lose eg. thermal notifications leading a potentially overheated
> machine.
> 
> So reintroduce support of legacy PIC based ACPI SCI interrupt.
> 
> Reported-by: Ville Syrjälä <syrjala@sci.fi>
> Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com>
> ---
> Hi Ville,
> 	Could you please help to try this patch instead of revert commit
> b568b8601f05?

Yep, this seems to fix it. Thanks.

Tested-by: Ville Syrjälä <syrjala@sci.fi>
Cc: <stable@vger.kernel.org> # 3.19

That's one regression fixed on this machine, time to go bisect the next one...

> Thanks!
> Gerry
> ---
>  arch/x86/kernel/acpi/boot.c |    5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
> index ae97ed0873c6..3d525c6124f6 100644
> --- a/arch/x86/kernel/acpi/boot.c
> +++ b/arch/x86/kernel/acpi/boot.c
> @@ -613,6 +613,11 @@ int acpi_gsi_to_irq(u32 gsi, unsigned int *irqp)
>  {
>  	int rc, irq, trigger, polarity;
>  
> +	if (acpi_irq_model == ACPI_IRQ_MODEL_PIC) {
> +		*irqp = gsi;
> +		return 0;
> +	}
> +
>  	rc = acpi_get_override_irq(gsi, &trigger, &polarity);
>  	if (rc == 0) {
>  		trigger = trigger ? ACPI_LEVEL_SENSITIVE : ACPI_EDGE_SENSITIVE;
> -- 
> 1.7.10.4
> 

-- 
Ville Syrjälä
syrjala@sci.fi
http://www.sci.fi/~syrjala/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] x86, irq: Fix regression caused by commit b568b8601f05
  2015-02-16  2:11 ` [PATCH] x86, irq: Fix regression caused by commit b568b8601f05 Jiang Liu
  2015-02-16 19:11   ` Ville Syrjälä
@ 2015-02-16 19:36   ` Pavel Machek
  2015-02-17 17:55     ` Rafael J. Wysocki
  2015-02-18 17:08   ` [tip:irq/urgent] x86/irq: " tip-bot for Jiang Liu
  2 siblings, 1 reply; 7+ messages in thread
From: Pavel Machek @ 2015-02-16 19:36 UTC (permalink / raw)
  To: Jiang Liu
  Cc: Ville Syrjälä,
	Rafael J. Wysocki, Len Brown, Thomas Gleixner, Ingo Molnar,
	H. Peter Anvin, x86, Sander Eikelenboom, linux-acpi, linux-pm,
	linux-kernel

On Mon 2015-02-16 10:11:13, Jiang Liu wrote:
> Commit b568b8601f05 ("Treat SCI interrupt as normal GSI interrupt")
> accidently removes support of legacy PIC interrupt when fixing a

accidentaly?

> regression for Xen, which causes a nasty regression on HP/Compaq
> nc6000 where we fail to register the ACPI interrupt, and thus
> lose eg. thermal notifications leading a potentially overheated
> machine.
> 
> So reintroduce support of legacy PIC based ACPI SCI interrupt.
> 
> Reported-by: Ville Syrjälä <syrjala@sci.fi>
> Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com>

Acked-by: Pavel Machek <pavel@ucw.cz>

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] x86, irq: Fix regression caused by commit b568b8601f05
  2015-02-16 19:36   ` Pavel Machek
@ 2015-02-17 17:55     ` Rafael J. Wysocki
  2015-02-17 18:50       ` Peter Zijlstra
  0 siblings, 1 reply; 7+ messages in thread
From: Rafael J. Wysocki @ 2015-02-17 17:55 UTC (permalink / raw)
  To: Pavel Machek, Ingo Molnar, H. Peter Anvin
  Cc: Jiang Liu, Ville Syrjälä,
	Len Brown, Thomas Gleixner, x86, Sander Eikelenboom, linux-acpi,
	linux-pm, linux-kernel

On Monday, February 16, 2015 08:36:37 PM Pavel Machek wrote:
> On Mon 2015-02-16 10:11:13, Jiang Liu wrote:
> > Commit b568b8601f05 ("Treat SCI interrupt as normal GSI interrupt")
> > accidently removes support of legacy PIC interrupt when fixing a
> 
> accidentaly?
> 
> > regression for Xen, which causes a nasty regression on HP/Compaq
> > nc6000 where we fail to register the ACPI interrupt, and thus
> > lose eg. thermal notifications leading a potentially overheated
> > machine.
> > 
> > So reintroduce support of legacy PIC based ACPI SCI interrupt.
> > 
> > Reported-by: Ville Syrjälä <syrjala@sci.fi>
> > Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com>
> 
> Acked-by: Pavel Machek <pavel@ucw.cz>

Is anyone taking care of this one or should I take it?

Ingo, Peter?


-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] x86, irq: Fix regression caused by commit b568b8601f05
  2015-02-17 17:55     ` Rafael J. Wysocki
@ 2015-02-17 18:50       ` Peter Zijlstra
  0 siblings, 0 replies; 7+ messages in thread
From: Peter Zijlstra @ 2015-02-17 18:50 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Pavel Machek, Ingo Molnar, H. Peter Anvin, Jiang Liu,
	Ville Syrjälä,
	Len Brown, Thomas Gleixner, x86, Sander Eikelenboom, linux-acpi,
	linux-pm, linux-kernel

On Tue, Feb 17, 2015 at 06:55:14PM +0100, Rafael J. Wysocki wrote:
> On Monday, February 16, 2015 08:36:37 PM Pavel Machek wrote:
> > On Mon 2015-02-16 10:11:13, Jiang Liu wrote:
> > > Commit b568b8601f05 ("Treat SCI interrupt as normal GSI interrupt")
> > > accidently removes support of legacy PIC interrupt when fixing a
> > 
> > accidentaly?
> > 
> > > regression for Xen, which causes a nasty regression on HP/Compaq
> > > nc6000 where we fail to register the ACPI interrupt, and thus
> > > lose eg. thermal notifications leading a potentially overheated
> > > machine.
> > > 
> > > So reintroduce support of legacy PIC based ACPI SCI interrupt.
> > > 
> > > Reported-by: Ville Syrjälä <syrjala@sci.fi>
> > > Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com>
> > 
> > Acked-by: Pavel Machek <pavel@ucw.cz>
> 
> Is anyone taking care of this one or should I take it?
> 
> Ingo, Peter?

Gots it, thanks!

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [tip:irq/urgent] x86/irq: Fix regression caused by commit b568b8601f05
  2015-02-16  2:11 ` [PATCH] x86, irq: Fix regression caused by commit b568b8601f05 Jiang Liu
  2015-02-16 19:11   ` Ville Syrjälä
  2015-02-16 19:36   ` Pavel Machek
@ 2015-02-18 17:08   ` tip-bot for Jiang Liu
  2 siblings, 0 replies; 7+ messages in thread
From: tip-bot for Jiang Liu @ 2015-02-18 17:08 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: syrjala, tglx, linux-kernel, pavel, hpa, mingo, torvalds,
	jiang.liu, peterz, len.brown, rjw, linux

Commit-ID:  1ea76fbadd667b19c4fa4466f3a3b55a505e83d9
Gitweb:     http://git.kernel.org/tip/1ea76fbadd667b19c4fa4466f3a3b55a505e83d9
Author:     Jiang Liu <jiang.liu@linux.intel.com>
AuthorDate: Mon, 16 Feb 2015 10:11:13 +0800
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Wed, 18 Feb 2015 15:01:41 +0100

x86/irq: Fix regression caused by commit b568b8601f05

Commit b568b8601f05 ("Treat SCI interrupt as normal GSI interrupt")
accidently removes support of legacy PIC interrupt when fixing a
regression for Xen, which causes a nasty regression on HP/Compaq
nc6000 where we fail to register the ACPI interrupt, and thus
lose eg. thermal notifications leading a potentially overheated
machine.

So reintroduce support of legacy PIC based ACPI SCI interrupt.

Reported-by: Ville Syrjälä <syrjala@sci.fi>
Tested-by: Ville Syrjälä <syrjala@sci.fi>
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Pavel Machek <pavel@ucw.cz>
Cc: <stable@vger.kernel.org> # 3.19+
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Len Brown <len.brown@intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Rafael J. Wysocki <rjw@rjwysocki.net>
Cc: Sander Eikelenboom <linux@eikelenboom.it>
Cc: linux-pm@vger.kernel.org
Link: http://lkml.kernel.org/r/1424052673-22974-1-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/kernel/acpi/boot.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index a18fff3..8b59163 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -613,6 +613,11 @@ int acpi_gsi_to_irq(u32 gsi, unsigned int *irqp)
 {
 	int rc, irq, trigger, polarity;
 
+	if (acpi_irq_model == ACPI_IRQ_MODEL_PIC) {
+		*irqp = gsi;
+		return 0;
+	}
+
 	rc = acpi_get_override_irq(gsi, &trigger, &polarity);
 	if (rc == 0) {
 		trigger = trigger ? ACPI_LEVEL_SENSITIVE : ACPI_EDGE_SENSITIVE;

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2015-02-18 17:09 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-15 22:25 [PATCH] Revert "x86/xen: Treat SCI interrupt as normal GSI interrupt" Ville Syrjälä
2015-02-16  2:11 ` [PATCH] x86, irq: Fix regression caused by commit b568b8601f05 Jiang Liu
2015-02-16 19:11   ` Ville Syrjälä
2015-02-16 19:36   ` Pavel Machek
2015-02-17 17:55     ` Rafael J. Wysocki
2015-02-17 18:50       ` Peter Zijlstra
2015-02-18 17:08   ` [tip:irq/urgent] x86/irq: " tip-bot for Jiang Liu

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