aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2006-10-04 05:16:52 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-10-04 10:55:29 -0400
commitf023d764cc6165eb4f1cad6b2b0882ce0660764a (patch)
tree6c905ec403aac146b21b12c5f89876d7faced6ce
parent550f2299ac8ffaba943cf211380d3a8d3fa75301 (diff)
[PATCH] genirq: x86_64 irq: Kill gsi_irq_sharing
After raising the number of irqs the system supports this function is no longer necessary. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Rajesh Shah <rajesh.shah@intel.com> Cc: Andi Kleen <ak@muc.de> Cc: "Protasevich, Natalie" <Natalie.Protasevich@UNISYS.com> Cc: "Luck, Tony" <tony.luck@intel.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--arch/i386/kernel/acpi/boot.c4
-rw-r--r--arch/x86_64/kernel/io_apic.c62
2 files changed, 1 insertions, 65 deletions
diff --git a/arch/i386/kernel/acpi/boot.c b/arch/i386/kernel/acpi/boot.c
index 256fb532321e..92f79cdd9a48 100644
--- a/arch/i386/kernel/acpi/boot.c
+++ b/arch/i386/kernel/acpi/boot.c
@@ -62,8 +62,6 @@ static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) { return
62#include <mach_mpparse.h> 62#include <mach_mpparse.h>
63#endif /* CONFIG_X86_LOCAL_APIC */ 63#endif /* CONFIG_X86_LOCAL_APIC */
64 64
65static inline int gsi_irq_sharing(int gsi) { return gsi; }
66
67#endif /* X86 */ 65#endif /* X86 */
68 66
69#define BAD_MADT_ENTRY(entry, end) ( \ 67#define BAD_MADT_ENTRY(entry, end) ( \
@@ -468,7 +466,7 @@ void __init acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger)
468 466
469int acpi_gsi_to_irq(u32 gsi, unsigned int *irq) 467int acpi_gsi_to_irq(u32 gsi, unsigned int *irq)
470{ 468{
471 *irq = gsi_irq_sharing(gsi); 469 *irq = gsi;
472 return 0; 470 return 0;
473} 471}
474 472
diff --git a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c
index 7d53f66394a7..e076a8fa3ac3 100644
--- a/arch/x86_64/kernel/io_apic.c
+++ b/arch/x86_64/kernel/io_apic.c
@@ -191,8 +191,6 @@ static void set_ioapic_affinity_irq(unsigned int irq, cpumask_t mask)
191} 191}
192#endif 192#endif
193 193
194static u8 gsi_2_irq[NR_IRQ_VECTORS] = { [0 ... NR_IRQ_VECTORS-1] = 0xFF };
195
196/* 194/*
197 * The common case is 1:1 IRQ<->pin mappings. Sometimes there are 195 * The common case is 1:1 IRQ<->pin mappings. Sometimes there are
198 * shared ISA-space IRQs, so we have to support them. We are super 196 * shared ISA-space IRQs, so we have to support them. We are super
@@ -518,64 +516,6 @@ static inline int irq_trigger(int idx)
518 return MPBIOS_trigger(idx); 516 return MPBIOS_trigger(idx);
519} 517}
520 518
521static int next_irq = 16;
522
523/*
524 * gsi_irq_sharing -- Name overload! "irq" can be either a legacy IRQ
525 * in the range 0-15, a linux IRQ in the range 0-223, or a GSI number
526 * from ACPI, which can reach 800 in large boxen.
527 *
528 * Compact the sparse GSI space into a sequential IRQ series and reuse
529 * vectors if possible.
530 */
531int gsi_irq_sharing(int gsi)
532{
533 int i, tries, vector;
534
535 BUG_ON(gsi >= NR_IRQ_VECTORS);
536
537 if (platform_legacy_irq(gsi))
538 return gsi;
539
540 if (gsi_2_irq[gsi] != 0xFF)
541 return (int)gsi_2_irq[gsi];
542
543 tries = NR_IRQS;
544 try_again:
545 vector = assign_irq_vector(gsi, TARGET_CPUS);
546
547 /*
548 * Sharing vectors means sharing IRQs, so scan irq_vectors for previous
549 * use of vector and if found, return that IRQ. However, we never want
550 * to share legacy IRQs, which usually have a different trigger mode
551 * than PCI.
552 */
553 for (i = 0; i < NR_IRQS; i++)
554 if (IO_APIC_VECTOR(i) == vector)
555 break;
556 if (platform_legacy_irq(i)) {
557 if (--tries >= 0) {
558 IO_APIC_VECTOR(i) = 0;
559 goto try_again;
560 }
561 panic("gsi_irq_sharing: didn't find an IRQ using vector 0x%02X for GSI %d", vector, gsi);
562 }
563 if (i < NR_IRQS) {
564 gsi_2_irq[gsi] = i;
565 printk(KERN_INFO "GSI %d sharing vector 0x%02X and IRQ %d\n",
566 gsi, vector, i);
567 return i;
568 }
569
570 i = next_irq++;
571 BUG_ON(i >= NR_IRQS);
572 gsi_2_irq[gsi] = i;
573 IO_APIC_VECTOR(i) = vector;
574 printk(KERN_INFO "GSI %d assigned vector 0x%02X and IRQ %d\n",
575 gsi, vector, i);
576 return i;
577}
578
579static int pin_2_irq(int idx, int apic, int pin) 519static int pin_2_irq(int idx, int apic, int pin)
580{ 520{
581 int irq, i; 521 int irq, i;
@@ -597,7 +537,6 @@ static int pin_2_irq(int idx, int apic, int pin)
597 while (i < apic) 537 while (i < apic)
598 irq += nr_ioapic_registers[i++]; 538 irq += nr_ioapic_registers[i++];
599 irq += pin; 539 irq += pin;
600 irq = gsi_irq_sharing(irq);
601 } 540 }
602 BUG_ON(irq >= NR_IRQS); 541 BUG_ON(irq >= NR_IRQS);
603 return irq; 542 return irq;
@@ -1872,7 +1811,6 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int triggering, int p
1872 return -EINVAL; 1811 return -EINVAL;
1873 } 1812 }
1874 1813
1875 irq = gsi_irq_sharing(irq);
1876 /* 1814 /*
1877 * IRQs < 16 are already in the irq_2_pin[] map 1815 * IRQs < 16 are already in the irq_2_pin[] map
1878 */ 1816 */