From 0be2cdb7d27191b526ed48d898b8451aed63af0a Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 14 Feb 2011 09:00:30 +0100 Subject: [PATCH] --- yaml --- r: 233211 b: refs/heads/master c: 6ee5859df5baabb82014573d126b9fd790c3a9d8 h: refs/heads/master i: 233209: bd347d45e744d252b1b225d6eb5a7042d90122fa 233207: 1e478a331f5deaaabda29008ce41951870f525c7 v: v3 --- [refs] | 2 +- trunk/arch/x86/include/asm/mmu_context.h | 5 +++-- trunk/kernel/timer.c | 6 +++++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index abae0ac3cd5f..778921826220 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d8ce1481ee8770ef2314eb7984a2228dbf64ad06 +refs/heads/master: 6ee5859df5baabb82014573d126b9fd790c3a9d8 diff --git a/trunk/arch/x86/include/asm/mmu_context.h b/trunk/arch/x86/include/asm/mmu_context.h index 4a2d4e0c18d9..8b5393ec1080 100644 --- a/trunk/arch/x86/include/asm/mmu_context.h +++ b/trunk/arch/x86/include/asm/mmu_context.h @@ -36,8 +36,6 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, unsigned cpu = smp_processor_id(); if (likely(prev != next)) { - /* stop flush ipis for the previous mm */ - cpumask_clear_cpu(cpu, mm_cpumask(prev)); #ifdef CONFIG_SMP percpu_write(cpu_tlbstate.state, TLBSTATE_OK); percpu_write(cpu_tlbstate.active_mm, next); @@ -47,6 +45,9 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, /* Re-load page tables */ load_cr3(next->pgd); + /* stop flush ipis for the previous mm */ + cpumask_clear_cpu(cpu, mm_cpumask(prev)); + /* * load the LDT, if the LDT is different: */ diff --git a/trunk/kernel/timer.c b/trunk/kernel/timer.c index 43ca9936f2d0..d53ce66daea0 100644 --- a/trunk/kernel/timer.c +++ b/trunk/kernel/timer.c @@ -969,10 +969,14 @@ EXPORT_SYMBOL(try_to_del_timer_sync); int del_timer_sync(struct timer_list *timer) { #ifdef CONFIG_LOCKDEP + unsigned long flags; + + raw_local_irq_save(flags); local_bh_disable(); lock_map_acquire(&timer->lockdep_map); lock_map_release(&timer->lockdep_map); - local_bh_enable(); + _local_bh_enable(); + raw_local_irq_restore(flags); #endif /* * don't use it in hardirq context, because it