Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 136463
b: refs/heads/master
c: 6826c8f
h: refs/heads/master
i:
  136461: 86ed943
  136459: 7b828fe
  136455: f9882dc
  136447: bca31b9
v: v3
  • Loading branch information
Brian Gerst authored and Tejun Heo committed Jan 21, 2009
1 parent c08806d commit 6b457a4
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 112 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 0dd76d736eeb3e0ef86c5b103b47ae0e15edebad
refs/heads/master: 6826c8ff07b5f95df0473a748a9831707079b940
63 changes: 59 additions & 4 deletions trunk/arch/x86/include/asm/mmu_context.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,72 @@ static inline void paravirt_activate_mm(struct mm_struct *prev,
int init_new_context(struct task_struct *tsk, struct mm_struct *mm);
void destroy_context(struct mm_struct *mm);

#ifdef CONFIG_X86_32
# include "mmu_context_32.h"
#else
# include "mmu_context_64.h"

static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
{
#ifdef CONFIG_SMP
if (percpu_read(cpu_tlbstate.state) == TLBSTATE_OK)
percpu_write(cpu_tlbstate.state, TLBSTATE_LAZY);
#endif
}

static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
struct task_struct *tsk)
{
unsigned cpu = smp_processor_id();

if (likely(prev != next)) {
/* stop flush ipis for the previous mm */
cpu_clear(cpu, prev->cpu_vm_mask);
#ifdef CONFIG_SMP
percpu_write(cpu_tlbstate.state, TLBSTATE_OK);
percpu_write(cpu_tlbstate.active_mm, next);
#endif
cpu_set(cpu, next->cpu_vm_mask);

/* Re-load page tables */
load_cr3(next->pgd);

/*
* load the LDT, if the LDT is different:
*/
if (unlikely(prev->context.ldt != next->context.ldt))
load_LDT_nolock(&next->context);
}
#ifdef CONFIG_SMP
else {
percpu_write(cpu_tlbstate.state, TLBSTATE_OK);
BUG_ON(percpu_read(cpu_tlbstate.active_mm) != next);

if (!cpu_test_and_set(cpu, next->cpu_vm_mask)) {
/* We were in lazy tlb mode and leave_mm disabled
* tlb flush IPI delivery. We must reload CR3
* to make sure to use no freed page tables.
*/
load_cr3(next->pgd);
load_LDT_nolock(&next->context);
}
}
#endif
}

#define activate_mm(prev, next) \
do { \
paravirt_activate_mm((prev), (next)); \
switch_mm((prev), (next), NULL); \
} while (0);

#ifdef CONFIG_X86_32
#define deactivate_mm(tsk, mm) \
do { \
loadsegment(gs, 0); \
} while (0)
#else
#define deactivate_mm(tsk, mm) \
do { \
load_gs_index(0); \
loadsegment(fs, 0); \
} while (0)
#endif

#endif /* _ASM_X86_MMU_CONTEXT_H */
55 changes: 0 additions & 55 deletions trunk/arch/x86/include/asm/mmu_context_32.h

This file was deleted.

52 changes: 0 additions & 52 deletions trunk/arch/x86/include/asm/mmu_context_64.h

This file was deleted.

0 comments on commit 6b457a4

Please sign in to comment.