~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/ia64/include/asm/tlbflush.h

Version: ~ [ linux-5.8 ] ~ [ linux-5.7.12 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.55 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.136 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.191 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.232 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.232 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.85 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #ifndef _ASM_IA64_TLBFLUSH_H
  2 #define _ASM_IA64_TLBFLUSH_H
  3 
  4 /*
  5  * Copyright (C) 2002 Hewlett-Packard Co
  6  *      David Mosberger-Tang <davidm@hpl.hp.com>
  7  */
  8 
  9 
 10 #include <linux/mm.h>
 11 
 12 #include <asm/intrinsics.h>
 13 #include <asm/mmu_context.h>
 14 #include <asm/page.h>
 15 
 16 /*
 17  * Now for some TLB flushing routines.  This is the kind of stuff that
 18  * can be very expensive, so try to avoid them whenever possible.
 19  */
 20 extern void setup_ptcg_sem(int max_purges, int from_palo);
 21 
 22 /*
 23  * Flush everything (kernel mapping may also have changed due to
 24  * vmalloc/vfree).
 25  */
 26 extern void local_flush_tlb_all (void);
 27 
 28 #ifdef CONFIG_SMP
 29   extern void smp_flush_tlb_all (void);
 30   extern void smp_flush_tlb_mm (struct mm_struct *mm);
 31   extern void smp_flush_tlb_cpumask (cpumask_t xcpumask);
 32 # define flush_tlb_all()        smp_flush_tlb_all()
 33 #else
 34 # define flush_tlb_all()        local_flush_tlb_all()
 35 # define smp_flush_tlb_cpumask(m) local_flush_tlb_all()
 36 #endif
 37 
 38 static inline void
 39 local_finish_flush_tlb_mm (struct mm_struct *mm)
 40 {
 41         if (mm == current->active_mm)
 42                 activate_context(mm);
 43 }
 44 
 45 /*
 46  * Flush a specified user mapping.  This is called, e.g., as a result of fork() and
 47  * exit().  fork() ends up here because the copy-on-write mechanism needs to write-protect
 48  * the PTEs of the parent task.
 49  */
 50 static inline void
 51 flush_tlb_mm (struct mm_struct *mm)
 52 {
 53         if (!mm)
 54                 return;
 55 
 56         set_bit(mm->context, ia64_ctx.flushmap);
 57         mm->context = 0;
 58 
 59         if (atomic_read(&mm->mm_users) == 0)
 60                 return;         /* happens as a result of exit_mmap() */
 61 
 62 #ifdef CONFIG_SMP
 63         smp_flush_tlb_mm(mm);
 64 #else
 65         local_finish_flush_tlb_mm(mm);
 66 #endif
 67 }
 68 
 69 extern void flush_tlb_range (struct vm_area_struct *vma, unsigned long start, unsigned long end);
 70 
 71 /*
 72  * Page-granular tlb flush.
 73  */
 74 static inline void
 75 flush_tlb_page (struct vm_area_struct *vma, unsigned long addr)
 76 {
 77 #ifdef CONFIG_SMP
 78         flush_tlb_range(vma, (addr & PAGE_MASK), (addr & PAGE_MASK) + PAGE_SIZE);
 79 #else
 80         if (vma->vm_mm == current->active_mm)
 81                 ia64_ptcl(addr, (PAGE_SHIFT << 2));
 82         else
 83                 vma->vm_mm->context = 0;
 84 #endif
 85 }
 86 
 87 /*
 88  * Flush the local TLB. Invoked from another cpu using an IPI.
 89  */
 90 #ifdef CONFIG_SMP
 91 void smp_local_flush_tlb(void);
 92 #else
 93 #define smp_local_flush_tlb()
 94 #endif
 95 
 96 static inline void flush_tlb_kernel_range(unsigned long start,
 97                                           unsigned long end)
 98 {
 99         flush_tlb_all();        /* XXX fix me */
100 }
101 
102 #endif /* _ASM_IA64_TLBFLUSH_H */
103 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp