Merge branch 'x86/urgent' into core/percpu
authorIngo Molnar <mingo@elte.hu>
Mon, 9 Feb 2009 23:41:02 +0000 (00:41 +0100)
committerIngo Molnar <mingo@elte.hu>
Mon, 9 Feb 2009 23:41:02 +0000 (00:41 +0100)
Conflicts:
arch/x86/kernel/acpi/boot.c

1  2 
arch/x86/Kconfig
arch/x86/Kconfig.cpu
arch/x86/include/asm/pgtable.h
arch/x86/include/asm/processor.h
arch/x86/kernel/acpi/boot.c
arch/x86/kernel/io_apic.c
arch/x86/kernel/process_64.c
arch/x86/kernel/setup.c
arch/x86/kernel/traps.c
arch/x86/kernel/vmi_32.c

Simple merge
Simple merge
Simple merge
Simple merge
index 4cb5964f149979deb409d85b32d1019ed18c25b6,7678f10c45686e1113381ccf5af41fb2c4ad3906..c193ec3c695e66f2e3bfa223f513d7bbc83e45dd
@@@ -973,19 -973,42 +973,42 @@@ void __init mp_register_ioapic(int id, 
        nr_ioapics++;
  }
  
 -static void assign_to_mp_irq(struct mp_config_intsrc *m,
 -                                  struct mp_config_intsrc *mp_irq)
+ int __init acpi_probe_gsi(void)
+ {
+       int idx;
+       int gsi;
+       int max_gsi = 0;
+       if (acpi_disabled)
+               return 0;
+       if (!acpi_ioapic)
+               return 0;
+       max_gsi = 0;
+       for (idx = 0; idx < nr_ioapics; idx++) {
+               gsi = mp_ioapic_routing[idx].gsi_end;
+               if (gsi > max_gsi)
+                       max_gsi = gsi;
+       }
+       return max_gsi + 1;
+ }
 +static void assign_to_mp_irq(struct mpc_intsrc *m,
 +                                  struct mpc_intsrc *mp_irq)
  {
 -      memcpy(mp_irq, m, sizeof(struct mp_config_intsrc));
 +      memcpy(mp_irq, m, sizeof(struct mpc_intsrc));
  }
  
 -static int mp_irq_cmp(struct mp_config_intsrc *mp_irq,
 -                              struct mp_config_intsrc *m)
 +static int mp_irq_cmp(struct mpc_intsrc *mp_irq,
 +                              struct mpc_intsrc *m)
  {
 -      return memcmp(mp_irq, m, sizeof(struct mp_config_intsrc));
 +      return memcmp(mp_irq, m, sizeof(struct mpc_intsrc));
  }
  
 -static void save_mp_irq(struct mp_config_intsrc *m)
 +static void save_mp_irq(struct mpc_intsrc *m)
  {
        int i;
  
index c0498daf01c32cc939316035c7ed45a6e6e77997,bc7ac4da90d745a04fc85026c5a6e3f1663263f9..0480d06a12a4bced0c2ae56b4c85556db45af9dd
@@@ -3812,32 -3841,26 +3812,42 @@@ int __init io_apic_get_redir_entries (i
  
  void __init probe_nr_irqs_gsi(void)
  {
-       int idx;
        int nr = 0;
  
-       for (idx = 0; idx < nr_ioapics; idx++)
-               nr += io_apic_get_redir_entries(idx) + 1;
-       if (nr > nr_irqs_gsi)
+       nr = acpi_probe_gsi();
+       if (nr > nr_irqs_gsi) {
                nr_irqs_gsi = nr;
+       } else {
+               /* for acpi=off or acpi is not compiled in */
+               int idx;
+               nr = 0;
+               for (idx = 0; idx < nr_ioapics; idx++)
+                       nr += io_apic_get_redir_entries(idx) + 1;
+               if (nr > nr_irqs_gsi)
+                       nr_irqs_gsi = nr;
+       }
+       printk(KERN_DEBUG "nr_irqs_gsi: %d\n", nr_irqs_gsi);
  }
  
 +#ifdef CONFIG_SPARSE_IRQ
 +int __init arch_probe_nr_irqs(void)
 +{
 +      int nr;
 +
 +      nr = ((8 * nr_cpu_ids) > (32 * nr_ioapics) ?
 +              (NR_VECTORS + (8 * nr_cpu_ids)) :
 +              (NR_VECTORS + (32 * nr_ioapics)));
 +
 +      if (nr < nr_irqs && nr > nr_irqs_gsi)
 +              nr_irqs = nr;
 +
 +      return 0;
 +}
 +#endif
 +
  /* --------------------------------------------------------------------------
                            ACPI-based IOAPIC Configuration
     -------------------------------------------------------------------------- */
Simple merge
Simple merge
Simple merge
Simple merge