From: Rusty Russell Date: Sat, 13 Dec 2008 11:25:51 +0000 (+1030) Subject: Merge ../linux-2.6-x86 X-Git-Tag: v2.6.29-rc1~538^2~24^2 X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-kernel.git;a=commitdiff_plain;h=968ea6d80e395cf11a51143cfa1b9a14ada676df Merge ../linux-2.6-x86 Conflicts: arch/x86/kernel/io_apic.c kernel/sched.c kernel/sched_stats.h --- 968ea6d80e395cf11a51143cfa1b9a14ada676df diff --cc arch/x86/kernel/io_apic.c index 1184210e6d0c,a1a2e070f31a..d7f0993b8056 --- a/arch/x86/kernel/io_apic.c +++ b/arch/x86/kernel/io_apic.c @@@ -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; @@@ -3105,9 -3226,9 +3228,9 @@@ 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); @@@ -3334,9 -3446,9 +3447,9 @@@ 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); @@@ -3394,9 -3509,9 +3509,9 @@@ 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); } } diff --cc kernel/sched.c index d2d16d1273b1,e00c92d22655..b309027bf9e8 --- a/kernel/sched.c +++ b/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); @@@ -6718,9 -6694,9 +6694,9 @@@ 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; } diff --cc kernel/sched_stats.h index 6beff1e4eeae,ce340835d055..5fcf0e184586 --- a/kernel/sched_stats.h +++ b/kernel/sched_stats.h @@@ -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++) {