Re: [PATCH 3.18 129/151] x86/xen: Treat SCI interrupt as normal GSI interrupt

2015-03-04 Thread Greg Kroah-Hartman
On Wed, Mar 04, 2015 at 01:51:53PM +0100, Stefan Bader wrote:
> On 04.03.2015 07:14, Greg Kroah-Hartman wrote:
> > 3.18-stable review patch.  If anyone has any objections, please let me know.
> 
> I thought I replied earlier today but I cannot seem to find it coming back via
> the mailing list. Hope this is not duplicating too much... There was a
> regression with that patch and it requires the below commit as well to 
> prevent that:
> 
> commit 1ea76fbadd667b19c4fa4466f3a3b55a505e83d9
> Author: Jiang Liu 
> Date:   Mon Feb 16 10:11:13 2015 +0800
> 
> 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.

Thanks for this, now applied.

greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 3.18 129/151] x86/xen: Treat SCI interrupt as normal GSI interrupt

2015-03-04 Thread Stefan Bader
On 04.03.2015 07:14, Greg Kroah-Hartman wrote:
> 3.18-stable review patch.  If anyone has any objections, please let me know.

I thought I replied earlier today but I cannot seem to find it coming back via
the mailing list. Hope this is not duplicating too much... There was a
regression with that patch and it requires the below commit as well to prevent 
that:

commit 1ea76fbadd667b19c4fa4466f3a3b55a505e83d9
Author: Jiang Liu 
Date:   Mon Feb 16 10:11:13 2015 +0800

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.

-Stefan


> 
> --
> 
> From: Jiang Liu 
> 
> commit b568b8601f05a591a7ff09d8ee1cedb5b2e815fe upstream.
> 
> Currently Xen Domain0 has special treatment for ACPI SCI interrupt,
> that is initialize irq for ACPI SCI at early stage in a special way as:
> xen_init_IRQ()
>   ->pci_xen_initial_domain()
>   ->xen_setup_acpi_sci()
>   Allocate and initialize irq for ACPI SCI
> 
> Function xen_setup_acpi_sci() calls acpi_gsi_to_irq() to get an irq
> number for ACPI SCI. But unfortunately acpi_gsi_to_irq() depends on
> IOAPIC irqdomains through following path
> acpi_gsi_to_irq()
>   ->mp_map_gsi_to_irq()
>   ->mp_map_pin_to_irq()
>   ->check IOAPIC irqdomain
> 
> For PV domains, it uses Xen event based interrupt manangement and
> doesn't make uses of native IOAPIC, so no irqdomains created for IOAPIC.
> This causes Xen domain0 fail to install interrupt handler for ACPI SCI
> and all ACPI events will be lost. Please refer to:
> https://lkml.org/lkml/2014/12/19/178
> 
> So the fix is to get rid of special treatment for ACPI SCI, just treat
> ACPI SCI as normal GSI interrupt as:
> acpi_gsi_to_irq()
>   ->acpi_register_gsi()
>   ->acpi_register_gsi_xen()
>   ->xen_register_gsi()
> 
> With above change, there's no need for xen_setup_acpi_sci() anymore.
> The above change also works with bare metal kernel too.
> 
> Signed-off-by: Jiang Liu 
> Tested-by: Sander Eikelenboom 
> Cc: Tony Luck 
> Cc: xen-de...@lists.xenproject.org
> Cc: Konrad Rzeszutek Wilk 
> Cc: David Vrabel 
> Cc: Rafael J. Wysocki 
> Cc: Len Brown 
> Cc: Pavel Machek 
> Cc: Bjorn Helgaas 
> Link: 
> http://lkml.kernel.org/r/1421720467-7709-2-git-send-email-jiang@linux.intel.com
> Signed-off-by: Thomas Gleixner 
> Signed-off-by: Stefan Bader 
> Signed-off-by: Greg Kroah-Hartman 
> 
> ---
>  arch/x86/kernel/acpi/boot.c |   21 ++-
>  arch/x86/pci/xen.c  |   47 
> 
>  2 files changed, 11 insertions(+), 57 deletions(-)
> 
> --- a/arch/x86/kernel/acpi/boot.c
> +++ b/arch/x86/kernel/acpi/boot.c
> @@ -604,18 +604,19 @@ void __init acpi_pic_sci_set_trigger(uns
>  
>  int acpi_gsi_to_irq(u32 gsi, unsigned int *irqp)
>  {
> - int irq;
> + int rc, irq, trigger, polarity;
>  
> - if (acpi_irq_model == ACPI_IRQ_MODEL_PIC) {
> - *irqp = gsi;
> - } else {
> - irq = mp_map_gsi_to_irq(gsi,
> - IOAPIC_MAP_ALLOC | IOAPIC_MAP_CHECK);
> - if (irq < 0)
> - return -1;
> - *irqp = irq;
> + rc = acpi_get_override_irq(gsi, , );
> + 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;
> + }
>   }
> - return 0;
> + return -1;
>  }
>  EXPORT_SYMBOL_GPL(acpi_gsi_to_irq);
>  
> --- a/arch/x86/pci/xen.c
> +++ b/arch/x86/pci/xen.c
> @@ -452,52 +452,6 @@ 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, , );
> - 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 

Re: [PATCH 3.18 129/151] x86/xen: Treat SCI interrupt as normal GSI interrupt

2015-03-04 Thread Greg Kroah-Hartman
On Wed, Mar 04, 2015 at 01:51:53PM +0100, Stefan Bader wrote:
 On 04.03.2015 07:14, Greg Kroah-Hartman wrote:
  3.18-stable review patch.  If anyone has any objections, please let me know.
 
 I thought I replied earlier today but I cannot seem to find it coming back via
 the mailing list. Hope this is not duplicating too much... There was a
 regression with that patch and it requires the below commit as well to 
 prevent that:
 
 commit 1ea76fbadd667b19c4fa4466f3a3b55a505e83d9
 Author: Jiang Liu jiang@linux.intel.com
 Date:   Mon Feb 16 10:11:13 2015 +0800
 
 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.

Thanks for this, now applied.

greg k-h
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 3.18 129/151] x86/xen: Treat SCI interrupt as normal GSI interrupt

2015-03-04 Thread Stefan Bader
On 04.03.2015 07:14, Greg Kroah-Hartman wrote:
 3.18-stable review patch.  If anyone has any objections, please let me know.

I thought I replied earlier today but I cannot seem to find it coming back via
the mailing list. Hope this is not duplicating too much... There was a
regression with that patch and it requires the below commit as well to prevent 
that:

commit 1ea76fbadd667b19c4fa4466f3a3b55a505e83d9
Author: Jiang Liu jiang@linux.intel.com
Date:   Mon Feb 16 10:11:13 2015 +0800

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.

-Stefan


 
 --
 
 From: Jiang Liu jiang@linux.intel.com
 
 commit b568b8601f05a591a7ff09d8ee1cedb5b2e815fe upstream.
 
 Currently Xen Domain0 has special treatment for ACPI SCI interrupt,
 that is initialize irq for ACPI SCI at early stage in a special way as:
 xen_init_IRQ()
   -pci_xen_initial_domain()
   -xen_setup_acpi_sci()
   Allocate and initialize irq for ACPI SCI
 
 Function xen_setup_acpi_sci() calls acpi_gsi_to_irq() to get an irq
 number for ACPI SCI. But unfortunately acpi_gsi_to_irq() depends on
 IOAPIC irqdomains through following path
 acpi_gsi_to_irq()
   -mp_map_gsi_to_irq()
   -mp_map_pin_to_irq()
   -check IOAPIC irqdomain
 
 For PV domains, it uses Xen event based interrupt manangement and
 doesn't make uses of native IOAPIC, so no irqdomains created for IOAPIC.
 This causes Xen domain0 fail to install interrupt handler for ACPI SCI
 and all ACPI events will be lost. Please refer to:
 https://lkml.org/lkml/2014/12/19/178
 
 So the fix is to get rid of special treatment for ACPI SCI, just treat
 ACPI SCI as normal GSI interrupt as:
 acpi_gsi_to_irq()
   -acpi_register_gsi()
   -acpi_register_gsi_xen()
   -xen_register_gsi()
 
 With above change, there's no need for xen_setup_acpi_sci() anymore.
 The above change also works with bare metal kernel too.
 
 Signed-off-by: Jiang Liu jiang@linux.intel.com
 Tested-by: Sander Eikelenboom li...@eikelenboom.it
 Cc: Tony Luck tony.l...@intel.com
 Cc: xen-de...@lists.xenproject.org
 Cc: Konrad Rzeszutek Wilk konrad.w...@oracle.com
 Cc: David Vrabel david.vra...@citrix.com
 Cc: Rafael J. Wysocki r...@rjwysocki.net
 Cc: Len Brown len.br...@intel.com
 Cc: Pavel Machek pa...@ucw.cz
 Cc: Bjorn Helgaas bhelg...@google.com
 Link: 
 http://lkml.kernel.org/r/1421720467-7709-2-git-send-email-jiang@linux.intel.com
 Signed-off-by: Thomas Gleixner t...@linutronix.de
 Signed-off-by: Stefan Bader stefan.ba...@canonical.com
 Signed-off-by: Greg Kroah-Hartman gre...@linuxfoundation.org
 
 ---
  arch/x86/kernel/acpi/boot.c |   21 ++-
  arch/x86/pci/xen.c  |   47 
 
  2 files changed, 11 insertions(+), 57 deletions(-)
 
 --- a/arch/x86/kernel/acpi/boot.c
 +++ b/arch/x86/kernel/acpi/boot.c
 @@ -604,18 +604,19 @@ void __init acpi_pic_sci_set_trigger(uns
  
  int acpi_gsi_to_irq(u32 gsi, unsigned int *irqp)
  {
 - int irq;
 + int rc, irq, trigger, polarity;
  
 - if (acpi_irq_model == ACPI_IRQ_MODEL_PIC) {
 - *irqp = gsi;
 - } else {
 - irq = mp_map_gsi_to_irq(gsi,
 - IOAPIC_MAP_ALLOC | IOAPIC_MAP_CHECK);
 - if (irq  0)
 - return -1;
 - *irqp = irq;
 + 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;
 + }
   }
 - return 0;
 + return -1;
  }
  EXPORT_SYMBOL_GPL(acpi_gsi_to_irq);
  
 --- a/arch/x86/pci/xen.c
 +++ b/arch/x86/pci/xen.c
 @@ -452,52 +452,6 @@ 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