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

TOMOYO Linux Cross Reference
Linux/arch/alpha/include/asm/cacheflush.h

Version: ~ [ linux-5.19-rc5 ] ~ [ linux-5.18.9 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.52 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.128 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.203 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.250 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.286 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.320 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.302 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ 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.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 #ifndef _ALPHA_CACHEFLUSH_H
  3 #define _ALPHA_CACHEFLUSH_H
  4 
  5 #include <linux/mm.h>
  6 
  7 /* Note that the following two definitions are _highly_ dependent
  8    on the contexts in which they are used in the kernel.  I personally
  9    think it is criminal how loosely defined these macros are.  */
 10 
 11 /* We need to flush the kernel's icache after loading modules.  The
 12    only other use of this macro is in load_aout_interp which is not
 13    used on Alpha. 
 14 
 15    Note that this definition should *not* be used for userspace
 16    icache flushing.  While functional, it is _way_ overkill.  The
 17    icache is tagged with ASNs and it suffices to allocate a new ASN
 18    for the process.  */
 19 #ifndef CONFIG_SMP
 20 #define flush_icache_range(start, end)          imb()
 21 #else
 22 #define flush_icache_range(start, end)          smp_imb()
 23 extern void smp_imb(void);
 24 #endif
 25 
 26 /* We need to flush the userspace icache after setting breakpoints in
 27    ptrace.
 28 
 29    Instead of indiscriminately using imb, take advantage of the fact
 30    that icache entries are tagged with the ASN and load a new mm context.  */
 31 /* ??? Ought to use this in arch/alpha/kernel/signal.c too.  */
 32 
 33 #ifndef CONFIG_SMP
 34 #include <linux/sched.h>
 35 
 36 extern void __load_new_mm_context(struct mm_struct *);
 37 static inline void
 38 flush_icache_user_page(struct vm_area_struct *vma, struct page *page,
 39                         unsigned long addr, int len)
 40 {
 41         if (vma->vm_flags & VM_EXEC) {
 42                 struct mm_struct *mm = vma->vm_mm;
 43                 if (current->active_mm == mm)
 44                         __load_new_mm_context(mm);
 45                 else
 46                         mm->context[smp_processor_id()] = 0;
 47         }
 48 }
 49 #define flush_icache_user_page flush_icache_user_page
 50 #else /* CONFIG_SMP */
 51 extern void flush_icache_user_page(struct vm_area_struct *vma,
 52                 struct page *page, unsigned long addr, int len);
 53 #define flush_icache_user_page flush_icache_user_page
 54 #endif /* CONFIG_SMP */
 55 
 56 /* This is used only in __do_fault and do_swap_page.  */
 57 #define flush_icache_page(vma, page) \
 58         flush_icache_user_page((vma), (page), 0, 0)
 59 
 60 #include <asm-generic/cacheflush.h>
 61 
 62 #endif /* _ALPHA_CACHEFLUSH_H */
 63 

~ [ 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