[PARISC] Optimize TLB flush on SMP systems
Signed-off-by: Randolph Chung <tausq@debian.org> Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
This commit is contained in:
parent
e7b3ca0854
commit
592ac93a60
1 changed files with 11 additions and 13 deletions
|
@ -39,21 +39,19 @@ extern void flush_tlb_all_local(void *);
|
||||||
* etc. do not do that).
|
* etc. do not do that).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
static inline void __flush_tlb_mm(void *mmv)
|
||||||
|
{
|
||||||
|
struct mm_struct *mm = (struct mm_struct *)mmv;
|
||||||
|
if (mm == current->active_mm)
|
||||||
|
load_context(mm->context);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void flush_tlb_mm(struct mm_struct *mm)
|
static inline void flush_tlb_mm(struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
BUG_ON(mm == &init_mm); /* Should never happen */
|
if (mm->context != 0)
|
||||||
|
free_sid(mm->context);
|
||||||
#ifdef CONFIG_SMP
|
mm->context = alloc_sid();
|
||||||
flush_tlb_all();
|
on_each_cpu(__flush_tlb_mm, mm, 1, 1);
|
||||||
#else
|
|
||||||
if (mm) {
|
|
||||||
if (mm->context != 0)
|
|
||||||
free_sid(mm->context);
|
|
||||||
mm->context = alloc_sid();
|
|
||||||
if (mm == current->active_mm)
|
|
||||||
load_context(mm->context);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern __inline__ void flush_tlb_pgtables(struct mm_struct *mm, unsigned long start, unsigned long end)
|
extern __inline__ void flush_tlb_pgtables(struct mm_struct *mm, unsigned long start, unsigned long end)
|
||||||
|
|
Loading…
Add table
Reference in a new issue