Merge ../linux-2.6-x86
Rusty Russell [Sat, 13 Dec 2008 11:25:51 +0000 (21:25 +1030)]
Conflicts:

arch/x86/kernel/io_apic.c
kernel/sched.c
kernel/sched_stats.h

15 files changed:
1  2 
arch/m32r/Kconfig
arch/x86/kernel/io_apic.c
arch/x86/kernel/irq_32.c
arch/x86/kernel/irq_64.c
arch/x86/kernel/smpboot.c
drivers/xen/events.c
include/linux/interrupt.h
include/linux/irq.h
init/Kconfig
kernel/irq/chip.c
kernel/irq/proc.c
kernel/profile.c
kernel/sched.c
kernel/sched_stats.h
kernel/trace/trace.c

Simple merge
@@@ -359,37 -396,48 +396,49 @@@ static void __target_IO_APIC_irq(unsign
        }
  }
  
- static int assign_irq_vector(int irq, cpumask_t mask);
+ static int assign_irq_vector(int irq, struct irq_cfg *cfg, cpumask_t mask);
  
- static void set_ioapic_affinity_irq(unsigned int irq,
-                                   const struct cpumask *mask)
 -static void set_ioapic_affinity_irq_desc(struct irq_desc *desc, cpumask_t mask)
++static void set_ioapic_affinity_irq_desc(struct irq_desc *desc,
++                                       const struct cpumask *mask)
  {
        struct irq_cfg *cfg;
        unsigned long flags;
        unsigned int dest;
        cpumask_t tmp;
-       struct irq_desc *desc;
+       unsigned int irq;
  
 -      cpus_and(tmp, mask, cpu_online_map);
 -      if (cpus_empty(tmp))
 +      if (!cpumask_intersects(mask, cpu_online_mask))
                return;
  
-       cfg = irq_cfg(irq);
-       if (assign_irq_vector(irq, *mask))
+       irq = desc->irq;
+       cfg = desc->chip_data;
 -      if (assign_irq_vector(irq, cfg, mask))
++      if (assign_irq_vector(irq, cfg, *mask))
                return;
  
 -      set_extra_move_desc(desc, mask);
++      set_extra_move_desc(desc, *mask);
 -      cpus_and(tmp, cfg->domain, mask);
 +      cpumask_and(&tmp, &cfg->domain, mask);
        dest = cpu_mask_to_apicid(tmp);
        /*
         * Only the high 8 bits are valid.
         */
        dest = SET_APIC_LOGICAL_ID(dest);
  
-       desc = irq_to_desc(irq);
        spin_lock_irqsave(&ioapic_lock, flags);
-       __target_IO_APIC_irq(irq, dest, cfg->vector);
+       __target_IO_APIC_irq(irq, dest, cfg);
 -      desc->affinity = mask;
 +      cpumask_copy(&desc->affinity, mask);
        spin_unlock_irqrestore(&ioapic_lock, flags);
  }
 -static void set_ioapic_affinity_irq(unsigned int irq, cpumask_t mask)
++static void set_ioapic_affinity_irq(unsigned int irq,
++                                  const struct cpumask *mask)
+ {
+       struct irq_desc *desc;
+       desc = irq_to_desc(irq);
+       set_ioapic_affinity_irq_desc(desc, mask);
+ }
  #endif /* CONFIG_SMP */
  
  /*
@@@ -2198,19 -2281,22 +2282,24 @@@ static void ir_irq_migration(struct wor
  /*
   * Migrates the IRQ destination in the process context.
   */
- static void set_ir_ioapic_affinity_irq(unsigned int irq,
-                                      const struct cpumask *mask)
 -static void set_ir_ioapic_affinity_irq_desc(struct irq_desc *desc, cpumask_t mask)
++static void set_ir_ioapic_affinity_irq_desc(struct irq_desc *desc,
++                                          const struct cpumask *mask)
  {
-       struct irq_desc *desc = irq_to_desc(irq);
        if (desc->status & IRQ_LEVEL) {
                desc->status |= IRQ_MOVE_PENDING;
 -              desc->pending_mask = mask;
 +              cpumask_copy(&desc->pending_mask, mask);
-               migrate_irq_remapped_level(irq);
+               migrate_irq_remapped_level_desc(desc);
                return;
        }
  
-       migrate_ioapic_irq(irq, *mask);
+       migrate_ioapic_irq_desc(desc, mask);
+ }
 -static void set_ir_ioapic_affinity_irq(unsigned int irq, cpumask_t mask)
++static void set_ir_ioapic_affinity_irq(unsigned int irq,
++                                     const struct cpumask *mask)
+ {
+       struct irq_desc *desc = irq_to_desc(irq);
+       set_ir_ioapic_affinity_irq_desc(desc, mask);
  }
  #endif
  
@@@ -3028,61 -3146,64 +3149,63 @@@ static int msi_compose_msg(struct pci_d
  }
  
  #ifdef CONFIG_SMP
 -static void set_msi_irq_affinity(unsigned int irq, cpumask_t mask)
 +static void set_msi_irq_affinity(unsigned int irq, const struct cpumask *mask)
  {
+       struct irq_desc *desc = irq_to_desc(irq);
        struct irq_cfg *cfg;
        struct msi_msg msg;
        unsigned int dest;
        cpumask_t tmp;
-       struct irq_desc *desc;
  
 -      cpus_and(tmp, mask, cpu_online_map);
 -      if (cpus_empty(tmp))
 +      if (!cpumask_intersects(mask, cpu_online_mask))
                return;
  
-       if (assign_irq_vector(irq, *mask))
+       cfg = desc->chip_data;
 -      if (assign_irq_vector(irq, cfg, mask))
++      if (assign_irq_vector(irq, cfg, *mask))
                return;
  
-       cfg = irq_cfg(irq);
 -      set_extra_move_desc(desc, mask);
++      set_extra_move_desc(desc, *mask);
 -      cpus_and(tmp, cfg->domain, mask);
 +      cpumask_and(&tmp, &cfg->domain, mask);
        dest = cpu_mask_to_apicid(tmp);
  
-       read_msi_msg(irq, &msg);
+       read_msi_msg_desc(desc, &msg);
  
        msg.data &= ~MSI_DATA_VECTOR_MASK;
        msg.data |= MSI_DATA_VECTOR(cfg->vector);
        msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK;
        msg.address_lo |= MSI_ADDR_DEST_ID(dest);
  
-       write_msi_msg(irq, &msg);
-       desc = irq_to_desc(irq);
+       write_msi_msg_desc(desc, &msg);
 -      desc->affinity = mask;
 +      cpumask_copy(&desc->affinity, mask);
  }
  #ifdef CONFIG_INTR_REMAP
  /*
   * Migrate the MSI irq to another cpumask. This migration is
   * done in the process context using interrupt-remapping hardware.
   */
 -static void ir_set_msi_irq_affinity(unsigned int irq, cpumask_t mask)
 +static void ir_set_msi_irq_affinity(unsigned int irq,
 +                                  const struct cpumask *mask)
  {
+       struct irq_desc *desc = irq_to_desc(irq);
        struct irq_cfg *cfg;
        unsigned int dest;
        cpumask_t tmp, cleanup_mask;
        struct irte irte;
-       struct irq_desc *desc;
  
 -      cpus_and(tmp, mask, cpu_online_map);
 -      if (cpus_empty(tmp))
 +      if (!cpumask_intersects(mask, cpu_online_mask))
                return;
  
        if (get_irte(irq, &irte))
                return;
  
-       if (assign_irq_vector(irq, *mask))
+       cfg = desc->chip_data;
 -      if (assign_irq_vector(irq, cfg, mask))
++      if (assign_irq_vector(irq, cfg, *mask))
                return;
  
-       cfg = irq_cfg(irq);
+       set_extra_move_desc(desc, mask);
 -      cpus_and(tmp, cfg->domain, mask);
 +      cpumask_and(&tmp, &cfg->domain, mask);
        dest = cpu_mask_to_apicid(tmp);
  
        irte.vector = cfg->vector;
                cfg->move_in_progress = 0;
        }
  
-       desc = irq_to_desc(irq);
 -      desc->affinity = mask;
 +      cpumask_copy(&desc->affinity, mask);
  }
  #endif
  #endif /* CONFIG_SMP */
  
@@@ -3308,22 -3417,25 +3419,24 @@@ void arch_teardown_msi_irq(unsigned in
  
  #ifdef CONFIG_DMAR
  #ifdef CONFIG_SMP
 -static void dmar_msi_set_affinity(unsigned int irq, cpumask_t mask)
 +static void dmar_msi_set_affinity(unsigned int irq, const struct cpumask *mask)
  {
+       struct irq_desc *desc = irq_to_desc(irq);
        struct irq_cfg *cfg;
        struct msi_msg msg;
        unsigned int dest;
        cpumask_t tmp;
-       struct irq_desc *desc;
  
 -      cpus_and(tmp, mask, cpu_online_map);
 -      if (cpus_empty(tmp))
 +      if (!cpumask_intersects(mask, cpu_online_mask))
                return;
  
-       if (assign_irq_vector(irq, *mask))
+       cfg = desc->chip_data;
 -      if (assign_irq_vector(irq, cfg, mask))
++      if (assign_irq_vector(irq, cfg, *mask))
                return;
  
-       cfg = irq_cfg(irq);
 -      set_extra_move_desc(desc, mask);
++      set_extra_move_desc(desc, *mask);
 -      cpus_and(tmp, cfg->domain, mask);
 +      cpumask_and(&tmp, &cfg->domain, mask);
        dest = cpu_mask_to_apicid(tmp);
  
        dmar_msi_read(irq, &msg);
        msg.address_lo |= MSI_ADDR_DEST_ID(dest);
  
        dmar_msi_write(irq, &msg);
-       desc = irq_to_desc(irq);
 -      desc->affinity = mask;
 +      cpumask_copy(&desc->affinity, mask);
  }
  #endif /* CONFIG_SMP */
  
  struct irq_chip dmar_msi_type = {
@@@ -3368,22 -3480,25 +3481,24 @@@ int arch_setup_dmar_msi(unsigned int ir
  #ifdef CONFIG_HPET_TIMER
  
  #ifdef CONFIG_SMP
 -static void hpet_msi_set_affinity(unsigned int irq, cpumask_t mask)
 +static void hpet_msi_set_affinity(unsigned int irq, const struct cpumask *mask)
  {
+       struct irq_desc *desc = irq_to_desc(irq);
        struct irq_cfg *cfg;
-       struct irq_desc *desc;
        struct msi_msg msg;
        unsigned int dest;
        cpumask_t tmp;
  
 -      cpus_and(tmp, mask, cpu_online_map);
 -      if (cpus_empty(tmp))
 +      if (!cpumask_intersects(mask, cpu_online_mask))
                return;
  
-       if (assign_irq_vector(irq, *mask))
+       cfg = desc->chip_data;
 -      if (assign_irq_vector(irq, cfg, mask))
++      if (assign_irq_vector(irq, cfg, *mask))
                return;
  
-       cfg = irq_cfg(irq);
 -      set_extra_move_desc(desc, mask);
++      set_extra_move_desc(desc, *mask);
 -      cpus_and(tmp, cfg->domain, mask);
 +      cpumask_and(&tmp, &cfg->domain, mask);
        dest = cpu_mask_to_apicid(tmp);
  
        hpet_msi_read(irq, &msg);
        msg.address_lo |= MSI_ADDR_DEST_ID(dest);
  
        hpet_msi_write(irq, &msg);
-       desc = irq_to_desc(irq);
 -      desc->affinity = mask;
 +      cpumask_copy(&desc->affinity, mask);
  }
  #endif /* CONFIG_SMP */
  
  struct irq_chip hpet_msi_type = {
@@@ -3449,27 -3564,30 +3564,29 @@@ static void target_ht_irq(unsigned int 
        write_ht_irq_msg(irq, &msg);
  }
  
 -static void set_ht_irq_affinity(unsigned int irq, cpumask_t mask)
 +static void set_ht_irq_affinity(unsigned int irq, const struct cpumask *mask)
  {
+       struct irq_desc *desc = irq_to_desc(irq);
        struct irq_cfg *cfg;
        unsigned int dest;
        cpumask_t tmp;
-       struct irq_desc *desc;
  
 -      cpus_and(tmp, mask, cpu_online_map);
 -      if (cpus_empty(tmp))
 +      if (!cpumask_intersects(mask, cpu_online_mask))
                return;
  
-       if (assign_irq_vector(irq, *mask))
+       cfg = desc->chip_data;
 -      if (assign_irq_vector(irq, cfg, mask))
++      if (assign_irq_vector(irq, cfg, *mask))
                return;
  
-       cfg = irq_cfg(irq);
 -      set_extra_move_desc(desc, mask);
++      set_extra_move_desc(desc, *mask);
 -      cpus_and(tmp, cfg->domain, mask);
 +      cpumask_and(&tmp, &cfg->domain, mask);
        dest = cpu_mask_to_apicid(tmp);
  
        target_ht_irq(irq, dest, cfg->vector);
-       desc = irq_to_desc(irq);
 -      desc->affinity = mask;
 +      cpumask_copy(&desc->affinity, mask);
  }
  #endif
  
  static struct irq_chip ht_irq_chip = {
@@@ -3791,10 -3928,10 +3927,10 @@@ void __init setup_ioapic_dest(void
  
  #ifdef CONFIG_INTR_REMAP
                        if (intr_remapping_enabled)
-                               set_ir_ioapic_affinity_irq(irq, &mask);
 -                              set_ir_ioapic_affinity_irq_desc(desc, mask);
++                              set_ir_ioapic_affinity_irq_desc(desc, &mask);
                        else
  #endif
-                               set_ioapic_affinity_irq(irq, &mask);
 -                              set_ioapic_affinity_irq_desc(desc, mask);
++                              set_ioapic_affinity_irq_desc(desc, &mask);
                }
  
        }
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc init/Kconfig
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc kernel/sched.c
@@@ -6666,8 -6643,8 +6643,8 @@@ static int sched_domain_debug_one(struc
        struct sched_group *group = sd->groups;
        char str[256];
  
-       cpulist_scnprintf(str, sizeof(str), &sd->span);
-       cpus_clear(*groupmask);
 -      cpulist_scnprintf(str, sizeof(str), *sched_domain_span(sd));
++      cpulist_scnprintf(str, sizeof(str), sched_domain_span(sd));
+       cpumask_clear(groupmask);
  
        printk(KERN_DEBUG "%*s domain %d: ", level, "", level);
  
                        break;
                }
  
-               cpus_or(*groupmask, *groupmask, group->cpumask);
+               cpumask_or(groupmask, groupmask, sched_group_cpus(group));
  
-               cpulist_scnprintf(str, sizeof(str), &group->cpumask);
 -              cpulist_scnprintf(str, sizeof(str), *sched_group_cpus(group));
++              cpulist_scnprintf(str, sizeof(str), sched_group_cpus(group));
                printk(KERN_CONT " %s", str);
  
                group = group->next;
@@@ -6922,14 -6938,7 +6938,7 @@@ static cpumask_var_t cpu_isolated_map
  /* Setup the mask of cpus configured for isolated domains */
  static int __init isolated_cpu_setup(char *str)
  {
-       static int __initdata ints[NR_CPUS];
-       int i;
-       str = get_options(str, ARRAY_SIZE(ints), ints);
-       cpus_clear(cpu_isolated_map);
-       for (i = 1; i <= ints[0]; i++)
-               if (ints[i] < NR_CPUS)
-                       cpu_set(ints[i], cpu_isolated_map);
 -      cpulist_parse(str, *cpu_isolated_map);
++      cpulist_parse(str, cpu_isolated_map);
        return 1;
  }
  
@@@ -42,7 -42,8 +42,8 @@@ static int show_schedstat(struct seq_fi
                for_each_domain(cpu, sd) {
                        enum cpu_idle_type itype;
  
-                       cpumask_scnprintf(mask_str, mask_len, &sd->span);
+                       cpumask_scnprintf(mask_str, mask_len,
 -                                        *sched_domain_span(sd));
++                                        sched_domain_span(sd));
                        seq_printf(seq, "domain%d %s", dcount++, mask_str);
                        for (itype = CPU_IDLE; itype < CPU_MAX_IDLE_TYPES;
                                        itype++) {
Simple merge