linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Yinghai <yinghai.lu@oracle.com>
To: mingo@redhat.com, hpa@zytor.com, linux-kernel@vger.kernel.org,
	tglx@linutronix.de, ebiederm@xmission.com
Subject: Re: [tip:x86/irq] x86, acpi/irq: Handle isa irqs that are not identity mapped to gsi's.
Date: Wed, 05 May 2010 00:49:55 -0700	[thread overview]
Message-ID: <4BE12323.2010104@oracle.com> (raw)
In-Reply-To: <tip-988856ee1623bd37e384105f7bb2b7fe44c009f6@git.kernel.org>

On 05/04/2010 07:10 PM, tip-bot for Eric W. Biederman wrote:
> Commit-ID:  988856ee1623bd37e384105f7bb2b7fe44c009f6
> Gitweb:     http://git.kernel.org/tip/988856ee1623bd37e384105f7bb2b7fe44c009f6
> Author:     Eric W. Biederman <ebiederm@xmission.com>
> AuthorDate: Tue, 30 Mar 2010 01:07:15 -0700
> Committer:  H. Peter Anvin <hpa@zytor.com>
> CommitDate: Tue, 4 May 2010 13:35:17 -0700
> 
> x86, acpi/irq: Handle isa irqs that are not identity mapped to gsi's.
> 
> ACPI irq source overrides are allowed for the 16 isa irqs and are
> allowed to map any gsi to any isa irq.  A few motherboards have been
> seen to take advantage of this and put the isa irqs on the 2nd or
> 3rd ioapic.  This causes some problems, most notably the fact
> that we can not use any gsi < 16.
> 
> To correct this move the gsis that are not isa irqs and have
> a gsi number < 16 into the linux irq space just past gsi_end.
> This is what the es7000 platform is doing today.  Moving only the
> low 16 gsis above the rest of the gsi's only penalizes weird
> platforms, leaving sane acpi implementations with a 1-1 mapping
> of gsis and irqs.
> 
> Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
> LKML-Reference: <1269936436-7039-14-git-send-email-ebiederm@xmission.com>
> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
> ---
>  arch/x86/kernel/acpi/boot.c    |   57 +++++++++++++++++++++++++++++++++++++---
>  arch/x86/kernel/apic/io_apic.c |    8 ++++-
>  2 files changed, 59 insertions(+), 6 deletions(-)
> 
> diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
> index 07a63ce..325fbba 100644
> --- a/arch/x86/kernel/acpi/boot.c
> +++ b/arch/x86/kernel/acpi/boot.c
> @@ -94,6 +94,53 @@ enum acpi_irq_model_id acpi_irq_model = ACPI_IRQ_MODEL_PIC;
>  
>  
>  /*
> + * ISA irqs by default are the first 16 gsis but can be
> + * any gsi as specified by an interrupt source override.
> + */
> +static u32 isa_irq_to_gsi[NR_IRQS_LEGACY] __read_mostly = {
> +	0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
> +};
> +
> +static unsigned int gsi_to_irq(unsigned int gsi)
> +{
> +	unsigned int irq = gsi + NR_IRQS_LEGACY;
> +	unsigned int i;
> +
> +	for (i = 0; i < NR_IRQS_LEGACY; i++) {
> +		if (isa_irq_to_gsi[i] == gsi) {
> +			return i;
> +		}
> +	}
> +
> +	/* Provide an identity mapping of gsi == irq
> +	 * except on truly weird platforms that have
> +	 * non isa irqs in the first 16 gsis.
> +	 */
> +	if (gsi >= NR_IRQS_LEGACY)
> +		irq = gsi;
> +	else
> +		irq = gsi_end + 1 + gsi;
> +
> +	return irq;
> +}
> +
> +static u32 irq_to_gsi(int irq)
> +{
> +	unsigned int gsi;
> +
> +	if (irq < NR_IRQS_LEGACY)
> +		gsi = isa_irq_to_gsi[irq];
> +	else if (irq <= gsi_end)
> +		gsi = irq;
> +	else if (irq <= (gsi_end + NR_IRQS_LEGACY))
> +		gsi = irq - gsi_end;

here should be
	gsi = irq - gsi_end - 1;

> +	else
> +		gsi = 0xffffffff;
> +
> +	return gsi;
> +}
> +
> +/*
>   * Temporarily use the virtual area starting from FIX_IO_APIC_BASE_END,
>   * to map the target physical address. The problem is that set_fixmap()
>   * provides a single page, and it is possible that the page is not
> @@ -449,7 +496,7 @@ void __init acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger)
>  
>  int acpi_gsi_to_irq(u32 gsi, unsigned int *irq)
>  {
> -	*irq = gsi;
> +	*irq = gsi_to_irq(gsi);
>  
>  #ifdef CONFIG_X86_IO_APIC
>  	if (acpi_irq_model == ACPI_IRQ_MODEL_IOAPIC)
> @@ -463,7 +510,7 @@ int acpi_isa_irq_to_gsi(unsigned isa_irq, u32 *gsi)
>  {
>  	if (isa_irq >= 16)
>  		return -1;
> -	*gsi = isa_irq;
> +	*gsi = irq_to_gsi(isa_irq);
>  	return 0;
>  }
>  
> @@ -491,7 +538,7 @@ int acpi_register_gsi(struct device *dev, u32 gsi, int trigger, int polarity)
>  		plat_gsi = mp_register_gsi(dev, gsi, trigger, polarity);
>  	}
>  #endif
> -	irq = plat_gsi;
> +	irq = gsi_to_irq(plat_gsi);
>  
>  	return irq;
>  }
> @@ -933,6 +980,8 @@ void __init mp_override_legacy_irq(u8 bus_irq, u8 polarity, u8 trigger, u32 gsi)
>  	mp_irq.dstirq = pin;	/* INTIN# */
>  
>  	save_mp_irq(&mp_irq);
> +
> +	isa_irq_to_gsi[bus_irq] = gsi;
>  }
>  
>  void __init mp_config_acpi_legacy_irqs(void)
> @@ -1086,7 +1135,7 @@ int mp_register_gsi(struct device *dev, u32 gsi, int trigger, int polarity)
>  	set_io_apic_irq_attr(&irq_attr, ioapic, ioapic_pin,
>  			     trigger == ACPI_EDGE_SENSITIVE ? 0 : 1,
>  			     polarity == ACPI_ACTIVE_HIGH ? 0 : 1);
> -	io_apic_set_pci_routing(dev, gsi, &irq_attr);
> +	io_apic_set_pci_routing(dev, gsi_to_irq(gsi), &irq_attr);
>  
>  	return gsi;
>  }
> diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
> index 9f3f6ca..594827c 100644
> --- a/arch/x86/kernel/apic/io_apic.c
> +++ b/arch/x86/kernel/apic/io_apic.c
> @@ -1037,7 +1037,11 @@ static int pin_2_irq(int idx, int apic, int pin)
>                   */
>  		if (ioapic_renumber_irq)
>  			gsi = ioapic_renumber_irq(apic, gsi);
> -		irq = gsi;
> +
> +		if (gsi >= NR_IRQS_LEGACY)
> +			irq = gsi;
> +		else
> +			irq = gsi_end + 1 + gsi;
>  	}
>  
>  #ifdef CONFIG_X86_32
> @@ -3852,7 +3856,7 @@ void __init probe_nr_irqs_gsi(void)
>  {
>  	int nr;
>  
> -	nr = gsi_end + 1;
> +	nr = gsi_end + 1 + NR_IRQS_LEGACY;
>  	if (nr > nr_irqs_gsi)
>  		nr_irqs_gsi = nr;

can you use legacy_irq->nr_legacy_irqs instead of NR_IRQS_LEGACY ?

YH

  reply	other threads:[~2010-05-05  7:51 UTC|newest]

Thread overview: 93+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-22  1:36 [PATCH 00/10] x86/irq Yinghai Lu
2010-03-22  1:36 ` [PATCH 01/10] irq: move some interrupt arch_* functions into struct irq_chip Yinghai Lu
2010-03-22  1:56   ` Michael Ellerman
2010-03-22  3:32     ` Yinghai Lu
2010-03-23  7:10       ` Paul Mundt
2010-03-24 13:33         ` Ian Campbell
2010-03-22 10:19   ` Thomas Gleixner
2010-03-24 13:32     ` Ian Campbell
2010-03-24 17:44       ` Thomas Gleixner
2010-03-24 19:16         ` Ian Campbell
2010-03-24 21:25           ` Thomas Gleixner
2010-03-22  1:36 ` [PATCH 02/10] x86: fix out of order of gsi - full Yinghai Lu
2010-03-22 11:14   ` Thomas Gleixner
2010-03-22 19:45     ` Yinghai Lu
2010-03-29 13:40     ` Eric W. Biederman
2010-03-29 17:57       ` H. Peter Anvin
2010-03-29 23:19         ` [PATCH 0/14] Start coping gsis < 16 that are not isa irqs Eric W. Biederman
2010-03-29 23:20           ` [PATCH 01/14] x86 acpi/irq: Introduce apci_isa_irq_to_gsi Eric W. Biederman
2010-03-29 23:20           ` [PATCH 02/14] x86 acpi/irq: Teach acpi_get_override_irq to take a gsi not an isa_irq Eric W. Biederman
2010-03-29 23:20           ` [PATCH 03/14] x86 acpi/irq: pci device dev->irq is an isa irq not a gsi Eric W. Biederman
2010-03-29 23:20           ` [PATCH 04/14] x86 acpi/irq: Fix acpi_sci_ioapic_setup so it has both bus_irq and gsi Eric W. Biederman
2010-03-29 23:20           ` [PATCH 05/14] x86 acpi/irq: Generalize mp_config_acpi_legacy_irqs Eric W. Biederman
2010-03-29 23:20           ` [PATCH 06/14] x86 ioapic: Only export mp_find_ioapic and mp_find_ioapic_pin in io_apic.h Eric W. Biederman
2010-03-29 23:20           ` [PATCH 07/14] x86 ioapic: Fix the types of gsi values Eric W. Biederman
2010-03-29 23:20           ` [PATCH 08/14] x86 ioapic: Teach mp_register_ioapic to compute a global gsi_end Eric W. Biederman
2010-03-29 23:20           ` [PATCH 09/14] x86 ioapic: In mpparse use mp_register_ioapic Eric W. Biederman
2010-03-29 23:20           ` [PATCH 10/14] x86 ioapic: Move nr_ioapic_registers calculation to mp_register_ioapic Eric W. Biederman
2010-03-29 23:20           ` [PATCH 11/14] x86 ioapic: Optimize pin_2_irq Eric W. Biederman
2010-03-29 23:20           ` [PATCH 12/14] x86 ioapic: Simplify probe_nr_irqs_gsi Eric W. Biederman
2010-03-30  2:16             ` Yinghai Lu
2010-03-30  4:43               ` Eric W. Biederman
2010-03-30  4:55                 ` Yinghai Lu
2010-03-30  5:41                   ` Eric W. Biederman
2010-03-29 23:20           ` [PATCH 13/14] x86 acpi/irq: Handle isa irqs that are not identity mapped to gsi's Eric W. Biederman
2010-03-29 23:20           ` [PATCH 14/14] x86 irq: Kill io_apic_renumber_irq Eric W. Biederman
2010-03-30  8:06           ` [PATCH 0/15] Start coping gsis < 16 that are not isa irqs. v2 Eric W. Biederman
2010-03-30  8:07             ` [PATCH 01/15] x86 acpi/irq: Introduce apci_isa_irq_to_gsi Eric W. Biederman
2010-05-05  2:06               ` [tip:x86/irq] x86, " tip-bot for Eric W. Biederman
2010-03-30  8:07             ` [PATCH 02/15] x86 acpi/irq: Teach acpi_get_override_irq to take a gsi not an isa_irq Eric W. Biederman
2010-05-05  2:07               ` [tip:x86/irq] x86, " tip-bot for Eric W. Biederman
2010-03-30  8:07             ` [PATCH 03/15] x86 acpi/irq: pci device dev->irq is an isa irq not a gsi Eric W. Biederman
2010-05-05  2:07               ` [tip:x86/irq] x86, " tip-bot for Eric W. Biederman
2010-03-30  8:07             ` [PATCH 04/15] x86 acpi/irq: Fix acpi_sci_ioapic_setup so it has both bus_irq and gsi Eric W. Biederman
2010-05-05  2:07               ` [tip:x86/irq] x86, " tip-bot for Eric W. Biederman
2010-03-30  8:07             ` [PATCH 05/15] x86 acpi/irq: Generalize mp_config_acpi_legacy_irqs Eric W. Biederman
2010-05-05  2:07               ` [tip:x86/irq] x86, " tip-bot for Eric W. Biederman
2010-03-30  8:07             ` [PATCH 06/15] x86 ioapic: Only export mp_find_ioapic and mp_find_ioapic_pin in io_apic.h Eric W. Biederman
2010-05-05  2:08               ` [tip:x86/irq] x86, " tip-bot for Eric W. Biederman
2010-03-30  8:07             ` [PATCH 07/15] x86 ioapic: Fix io_apic_redir_entries to return the number of entries Eric W. Biederman
2010-05-05  2:08               ` [tip:x86/irq] x86, " tip-bot for Eric W. Biederman
2010-03-30  8:07             ` [PATCH 08/15] x86 ioapic: Fix the types of gsi values Eric W. Biederman
2010-05-05  2:08               ` [tip:x86/irq] x86, " tip-bot for Eric W. Biederman
2010-03-30  8:07             ` [PATCH 09/15] x86 ioapic: Teach mp_register_ioapic to compute a global gsi_end Eric W. Biederman
2010-05-05  2:09               ` [tip:x86/irq] x86, " tip-bot for Eric W. Biederman
2010-03-30  8:07             ` [PATCH 10/15] x86 ioapic: In mpparse use mp_register_ioapic Eric W. Biederman
2010-05-05  2:09               ` [tip:x86/irq] x86, " tip-bot for Eric W. Biederman
2010-03-30  8:07             ` [PATCH 11/15] x86 ioapic: Move nr_ioapic_registers calculation to mp_register_ioapic Eric W. Biederman
2010-05-05  2:09               ` [tip:x86/irq] x86, " tip-bot for Eric W. Biederman
2010-03-30  8:07             ` [PATCH 12/15] x86 ioapic: Optimize pin_2_irq Eric W. Biederman
2010-05-05  2:09               ` [tip:x86/irq] x86, " tip-bot for Eric W. Biederman
2010-03-30  8:07             ` [PATCH 13/15] x86 ioapic: Simplify probe_nr_irqs_gsi Eric W. Biederman
2010-05-05  2:10               ` [tip:x86/irq] x86, " tip-bot for Eric W. Biederman
2010-03-30  8:07             ` [PATCH 14/15] x86 acpi/irq: Handle isa irqs that are not identity mapped to gsi's Eric W. Biederman
2010-05-05  2:10               ` [tip:x86/irq] x86, " tip-bot for Eric W. Biederman
2010-05-05  7:49                 ` Yinghai [this message]
2010-05-05  8:53                   ` [PATCH] x86 acpi/irq: Fix harmless typo Eric W. Biederman
2010-05-05  8:58                     ` Ingo Molnar
2010-05-05  9:32                   ` [tip:x86/irq] x86, acpi/irq: Handle isa irqs that are not identity mapped to gsi's Eric W. Biederman
2010-06-07 21:05                     ` H. Peter Anvin
2010-06-08 22:20                       ` Yinghai Lu
2010-05-05  8:56                 ` Ingo Molnar
2010-05-05  9:36                   ` Eric Biederman
2010-05-05 10:05                     ` Ingo Molnar
2010-05-05 20:22                       ` [PATCH] x86 acpi/irq: Define gsi_end when X86_IO_APIC is undefined Eric W. Biederman
2010-05-06  6:18                         ` Ingo Molnar
2010-05-06 10:07                         ` [tip:x86/irq] x86, " tip-bot for Eric W. Biederman
2010-03-30  8:07             ` [PATCH 15/15] x86 irq: Kill io_apic_renumber_irq Eric W. Biederman
2010-05-05  2:10               ` [tip:x86/irq] x86, " tip-bot for Eric W. Biederman
2010-05-03 23:21             ` [PATCH 0/15] Start coping gsis < 16 that are not isa irqs. v2 Eric W. Biederman
2010-04-01  2:02           ` [PATCH 0/14] Start coping gsis < 16 that are not isa irqs Len Brown
2010-04-01  3:31             ` Eric W. Biederman
2010-03-22  1:36 ` [PATCH 03/10] x86: set nr_irqs_gsi only in probe_nr_irqs_gsi Yinghai Lu
2010-03-22  1:36 ` [PATCH 04/10] x86: kill smpboot_hooks.h Yinghai Lu
2010-03-22 13:34   ` Thomas Gleixner
2010-03-22  1:36 ` [PATCH 05/10] x86: use vector_desc instead of vector_irq Yinghai Lu
2010-03-22 13:58   ` Thomas Gleixner
2010-03-22 14:04     ` Eric W. Biederman
2010-03-22 14:16       ` Thomas Gleixner
2010-03-22  1:36 ` [PATCH 06/10] irq: Start the transition of irq_chip methods taking a desc Yinghai Lu
2010-03-22  1:36 ` [PATCH 07/10] x86/irq: use irq_desc *desc with irq_chip Yinghai Lu
2010-03-22  1:36 ` [PATCH 08/10] genericirq: add set_irq_desc_chip/data Yinghai Lu
2010-03-22  1:36 ` [PATCH 09/10] x86/iommu/dmar: update iommu/inter_remapping to use desc Yinghai Lu
2010-03-22  1:36 ` [PATCH 10/10] x86: remove arch_probe_nr_irqs Yinghai Lu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4BE12323.2010104@oracle.com \
    --to=yinghai.lu@oracle.com \
    --cc=ebiederm@xmission.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).