# This is a BitKeeper generated patch for the following project: # Project Name: Linux kernel tree # This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas: # ChangeSet 1.1680 -> 1.1681 # include/asm-generic/tlb.h 1.20 -> 1.21 # include/asm-ia64/tlb.h 1.18 -> 1.19 # kernel/sched.c 1.240 -> 1.241 # # The following is the BitKeeper ChangeSet Log # -------------------------------------------- # 04/02/17 mort@tomahawk.engr.sgi.com 1.1681 # Add tlb_migrate_prepare(). Most arches will define this to tlb_flush_mm(). # x86 is an exception. For now make the default to do nothing. Let each # arch define tlb_migrate_prepare appropriately. # -------------------------------------------- # diff -Nru a/include/asm-generic/tlb.h b/include/asm-generic/tlb.h --- a/include/asm-generic/tlb.h Tue Feb 17 11:31:56 2004 +++ b/include/asm-generic/tlb.h Tue Feb 17 11:31:56 2004 @@ -146,4 +146,6 @@ __pmd_free_tlb(tlb, pmdp); \ } while (0) +#define tlb_migrate_prepare(mm) + #endif /* _ASM_GENERIC__TLB_H */ diff -Nru a/include/asm-ia64/tlb.h b/include/asm-ia64/tlb.h --- a/include/asm-ia64/tlb.h Tue Feb 17 11:31:56 2004 +++ b/include/asm-ia64/tlb.h Tue Feb 17 11:31:56 2004 @@ -210,6 +210,8 @@ tlb->end_addr = address + PAGE_SIZE; } +#define tlb_migrate_prepare(mm) flush_tlb_mm(mm) + #define tlb_start_vma(tlb, vma) do { } while (0) #define tlb_end_vma(tlb, vma) do { } while (0) diff -Nru a/kernel/sched.c b/kernel/sched.c --- a/kernel/sched.c Tue Feb 17 11:31:56 2004 +++ b/kernel/sched.c Tue Feb 17 11:31:56 2004 @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -1135,6 +1136,14 @@ task_rq_unlock(rq, &flags); wake_up_process(rq->migration_thread); wait_for_completion(&req.done); + + /* + * we want a new context here. This eliminates TLB + * flushes on the cpus where the process executed prior to + * the migration. + */ + tlb_migrate_prepare(current->mm); + return; } out: