aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2010-03-30 04:07:14 -0400
committerH. Peter Anvin <hpa@zytor.com>2010-05-04 16:35:11 -0400
commit4afc51a835d3aeba11c35090f524e05c84586d27 (patch)
treee7858e2c41b1736a6ea659e2cf6764d1ff3a4686
parentd464207c4fdd70c2a0febd4f9c58206fa915bb36 (diff)
x86, ioapic: Simplify probe_nr_irqs_gsi.
Use the global gsi_end value now that all ioapics have valid gsi numbers instead of a combination of acpi_probe_gsi and walking all of the ioapics and couting their number of entries by hand if acpi_probe_gsi gave us an answer we did not like. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> LKML-Reference: <1269936436-7039-13-git-send-email-ebiederm@xmission.com> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
-rw-r--r--arch/x86/include/asm/mpspec.h6
-rw-r--r--arch/x86/kernel/acpi/boot.c23
-rw-r--r--arch/x86/kernel/apic/io_apic.c17
3 files changed, 3 insertions, 43 deletions
diff --git a/arch/x86/include/asm/mpspec.h b/arch/x86/include/asm/mpspec.h
index 29994f06c7e2..c82868e9f905 100644
--- a/arch/x86/include/asm/mpspec.h
+++ b/arch/x86/include/asm/mpspec.h
@@ -105,12 +105,6 @@ extern void mp_config_acpi_legacy_irqs(void);
105struct device; 105struct device;
106extern int mp_register_gsi(struct device *dev, u32 gsi, int edge_level, 106extern int mp_register_gsi(struct device *dev, u32 gsi, int edge_level,
107 int active_high_low); 107 int active_high_low);
108extern int acpi_probe_gsi(void);
109#else /* !CONFIG_ACPI: */
110static inline int acpi_probe_gsi(void)
111{
112 return 0;
113}
114#endif /* CONFIG_ACPI */ 108#endif /* CONFIG_ACPI */
115 109
116#define PHYSID_ARRAY_SIZE BITS_TO_LONGS(MAX_APICS) 110#define PHYSID_ARRAY_SIZE BITS_TO_LONGS(MAX_APICS)
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index 3ee92f28a4b2..07a63ce5811a 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -876,29 +876,6 @@ static int __init acpi_parse_madt_lapic_entries(void)
876extern int es7000_plat; 876extern int es7000_plat;
877#endif 877#endif
878 878
879int __init acpi_probe_gsi(void)
880{
881 int idx;
882 int gsi;
883 int max_gsi = 0;
884
885 if (acpi_disabled)
886 return 0;
887
888 if (!acpi_ioapic)
889 return 0;
890
891 max_gsi = 0;
892 for (idx = 0; idx < nr_ioapics; idx++) {
893 gsi = mp_gsi_routing[idx].gsi_end;
894
895 if (gsi > max_gsi)
896 max_gsi = gsi;
897 }
898
899 return max_gsi + 1;
900}
901
902static void assign_to_mp_irq(struct mpc_intsrc *m, 879static void assign_to_mp_irq(struct mpc_intsrc *m,
903 struct mpc_intsrc *mp_irq) 880 struct mpc_intsrc *mp_irq)
904{ 881{
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index 0d35f46929d1..9f3f6ca86dac 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -3850,22 +3850,11 @@ int __init io_apic_get_redir_entries (int ioapic)
3850 3850
3851void __init probe_nr_irqs_gsi(void) 3851void __init probe_nr_irqs_gsi(void)
3852{ 3852{
3853 int nr = 0; 3853 int nr;
3854 3854
3855 nr = acpi_probe_gsi(); 3855 nr = gsi_end + 1;
3856 if (nr > nr_irqs_gsi) { 3856 if (nr > nr_irqs_gsi)
3857 nr_irqs_gsi = nr; 3857 nr_irqs_gsi = nr;
3858 } else {
3859 /* for acpi=off or acpi is not compiled in */
3860 int idx;
3861
3862 nr = 0;
3863 for (idx = 0; idx < nr_ioapics; idx++)
3864 nr += io_apic_get_redir_entries(idx);
3865
3866 if (nr > nr_irqs_gsi)
3867 nr_irqs_gsi = nr;
3868 }
3869 3858
3870 printk(KERN_DEBUG "nr_irqs_gsi: %d\n", nr_irqs_gsi); 3859 printk(KERN_DEBUG "nr_irqs_gsi: %d\n", nr_irqs_gsi);
3871} 3860}