Merge branch 'linus' into perfcounters/core
Ingo Molnar [Fri, 13 Feb 2009 08:34:07 +0000 (09:34 +0100)]
Conflicts:
arch/x86/kernel/acpi/boot.c

15 files changed:
1  2 
arch/x86/Kconfig
arch/x86/Kconfig.cpu
arch/x86/include/asm/paravirt.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
include/linux/init_task.h
include/linux/sched.h
include/linux/syscalls.h
kernel/exit.c
kernel/fork.c
kernel/sched.c

Simple merge
Simple merge
Simple merge
Simple merge
@@@ -973,19 -973,42 +973,42 @@@ void __init mp_register_ioapic(int id, 
        nr_ioapics++;
  }
  
+ 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 mp_config_intsrc *m,
 -                                  struct mp_config_intsrc *mp_irq)
 +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;
  
@@@ -3846,32 -3841,26 +3846,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
Simple merge
Simple merge
diff --cc kernel/exit.c
Simple merge
diff --cc kernel/fork.c
Simple merge
diff --cc kernel/sched.c
Simple merge