diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-10 17:52:44 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-10 17:52:44 -0500 |
commit | ecacc6c70cf77a52a22af66c879873202522d6ce (patch) | |
tree | 47cffb395cd3b9079d5c1205708181c0f49394e8 /arch | |
parent | e773202e227c8ebbf369b9b924e15cca4d93824b (diff) | |
parent | 4bfc2b2eccf48fef84b9adfe4f1bd8d5e6e1bc8d (diff) |
Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6:
[IA64] Avoid array overflow if there are too many cpus in SRAT table
[IA64] Remove unlikely from cpu_is_offline
[IA64] irq_ia64, use set_irq_chip
[IA64] perfmon: Change vmalloc to vzalloc and drop memset.
[IA64] eliminate race condition in smp_flush_tlb_mm
Diffstat (limited to 'arch')
-rw-r--r-- | arch/ia64/kernel/acpi.c | 6 | ||||
-rw-r--r-- | arch/ia64/kernel/irq_ia64.c | 2 | ||||
-rw-r--r-- | arch/ia64/kernel/perfmon.c | 3 | ||||
-rw-r--r-- | arch/ia64/kernel/smp.c | 13 | ||||
-rw-r--r-- | arch/ia64/kernel/time.c | 2 |
5 files changed, 19 insertions, 7 deletions
diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c index c6c90f39f4d9..7b897b7b0ae6 100644 --- a/arch/ia64/kernel/acpi.c +++ b/arch/ia64/kernel/acpi.c | |||
@@ -477,6 +477,12 @@ acpi_numa_processor_affinity_init(struct acpi_srat_cpu_affinity *pa) | |||
477 | if (!(pa->flags & ACPI_SRAT_CPU_ENABLED)) | 477 | if (!(pa->flags & ACPI_SRAT_CPU_ENABLED)) |
478 | return; | 478 | return; |
479 | 479 | ||
480 | if (srat_num_cpus >= ARRAY_SIZE(node_cpuid)) { | ||
481 | printk_once(KERN_WARNING | ||
482 | "node_cpuid[%d] is too small, may not be able to use all cpus\n", | ||
483 | ARRAY_SIZE(node_cpuid)); | ||
484 | return; | ||
485 | } | ||
480 | pxm = get_processor_proximity_domain(pa); | 486 | pxm = get_processor_proximity_domain(pa); |
481 | 487 | ||
482 | /* record this node in proximity bitmap */ | 488 | /* record this node in proximity bitmap */ |
diff --git a/arch/ia64/kernel/irq_ia64.c b/arch/ia64/kernel/irq_ia64.c index 9a26015c3e50..38c07b866901 100644 --- a/arch/ia64/kernel/irq_ia64.c +++ b/arch/ia64/kernel/irq_ia64.c | |||
@@ -633,7 +633,7 @@ ia64_native_register_percpu_irq (ia64_vector vec, struct irqaction *action) | |||
633 | BUG_ON(bind_irq_vector(irq, vec, CPU_MASK_ALL)); | 633 | BUG_ON(bind_irq_vector(irq, vec, CPU_MASK_ALL)); |
634 | desc = irq_desc + irq; | 634 | desc = irq_desc + irq; |
635 | desc->status |= IRQ_PER_CPU; | 635 | desc->status |= IRQ_PER_CPU; |
636 | desc->chip = &irq_type_ia64_lsapic; | 636 | set_irq_chip(irq, &irq_type_ia64_lsapic); |
637 | if (action) | 637 | if (action) |
638 | setup_irq(irq, action); | 638 | setup_irq(irq, action); |
639 | set_irq_handler(irq, handle_percpu_irq); | 639 | set_irq_handler(irq, handle_percpu_irq); |
diff --git a/arch/ia64/kernel/perfmon.c b/arch/ia64/kernel/perfmon.c index f099b82703d8..d92d5b5161fc 100644 --- a/arch/ia64/kernel/perfmon.c +++ b/arch/ia64/kernel/perfmon.c | |||
@@ -829,10 +829,9 @@ pfm_rvmalloc(unsigned long size) | |||
829 | unsigned long addr; | 829 | unsigned long addr; |
830 | 830 | ||
831 | size = PAGE_ALIGN(size); | 831 | size = PAGE_ALIGN(size); |
832 | mem = vmalloc(size); | 832 | mem = vzalloc(size); |
833 | if (mem) { | 833 | if (mem) { |
834 | //printk("perfmon: CPU%d pfm_rvmalloc(%ld)=%p\n", smp_processor_id(), size, mem); | 834 | //printk("perfmon: CPU%d pfm_rvmalloc(%ld)=%p\n", smp_processor_id(), size, mem); |
835 | memset(mem, 0, size); | ||
836 | addr = (unsigned long)mem; | 835 | addr = (unsigned long)mem; |
837 | while (size > 0) { | 836 | while (size > 0) { |
838 | pfm_reserve_page(addr); | 837 | pfm_reserve_page(addr); |
diff --git a/arch/ia64/kernel/smp.c b/arch/ia64/kernel/smp.c index dabeefe21134..be450a3e9871 100644 --- a/arch/ia64/kernel/smp.c +++ b/arch/ia64/kernel/smp.c | |||
@@ -293,6 +293,7 @@ smp_flush_tlb_all (void) | |||
293 | void | 293 | void |
294 | smp_flush_tlb_mm (struct mm_struct *mm) | 294 | smp_flush_tlb_mm (struct mm_struct *mm) |
295 | { | 295 | { |
296 | cpumask_var_t cpus; | ||
296 | preempt_disable(); | 297 | preempt_disable(); |
297 | /* this happens for the common case of a single-threaded fork(): */ | 298 | /* this happens for the common case of a single-threaded fork(): */ |
298 | if (likely(mm == current->active_mm && atomic_read(&mm->mm_users) == 1)) | 299 | if (likely(mm == current->active_mm && atomic_read(&mm->mm_users) == 1)) |
@@ -301,9 +302,15 @@ smp_flush_tlb_mm (struct mm_struct *mm) | |||
301 | preempt_enable(); | 302 | preempt_enable(); |
302 | return; | 303 | return; |
303 | } | 304 | } |
304 | 305 | if (!alloc_cpumask_var(&cpus, GFP_ATOMIC)) { | |
305 | smp_call_function_many(mm_cpumask(mm), | 306 | smp_call_function((void (*)(void *))local_finish_flush_tlb_mm, |
306 | (void (*)(void *))local_finish_flush_tlb_mm, mm, 1); | 307 | mm, 1); |
308 | } else { | ||
309 | cpumask_copy(cpus, mm_cpumask(mm)); | ||
310 | smp_call_function_many(cpus, | ||
311 | (void (*)(void *))local_finish_flush_tlb_mm, mm, 1); | ||
312 | free_cpumask_var(cpus); | ||
313 | } | ||
307 | local_irq_disable(); | 314 | local_irq_disable(); |
308 | local_finish_flush_tlb_mm(mm); | 315 | local_finish_flush_tlb_mm(mm); |
309 | local_irq_enable(); | 316 | local_irq_enable(); |
diff --git a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c index ed6f22eb5b12..9702fa92489e 100644 --- a/arch/ia64/kernel/time.c +++ b/arch/ia64/kernel/time.c | |||
@@ -168,7 +168,7 @@ timer_interrupt (int irq, void *dev_id) | |||
168 | { | 168 | { |
169 | unsigned long new_itm; | 169 | unsigned long new_itm; |
170 | 170 | ||
171 | if (unlikely(cpu_is_offline(smp_processor_id()))) { | 171 | if (cpu_is_offline(smp_processor_id())) { |
172 | return IRQ_HANDLED; | 172 | return IRQ_HANDLED; |
173 | } | 173 | } |
174 | 174 | ||