cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

tlbflush.h (1984B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _PARISC_TLBFLUSH_H
      3#define _PARISC_TLBFLUSH_H
      4
      5/* TLB flushing routines.... */
      6
      7#include <linux/mm.h>
      8#include <linux/sched.h>
      9#include <asm/mmu_context.h>
     10
     11extern void flush_tlb_all(void);
     12extern void flush_tlb_all_local(void *);
     13
     14#define smp_flush_tlb_all()	flush_tlb_all()
     15
     16int __flush_tlb_range(unsigned long sid,
     17	unsigned long start, unsigned long end);
     18
     19#define flush_tlb_range(vma, start, end) \
     20	__flush_tlb_range((vma)->vm_mm->context.space_id, start, end)
     21
     22#define flush_tlb_kernel_range(start, end) \
     23	__flush_tlb_range(0, start, end)
     24
     25/*
     26 * flush_tlb_mm()
     27 *
     28 * The code to switch to a new context is NOT valid for processes
     29 * which play with the space id's.  Thus, we have to preserve the
     30 * space and just flush the entire tlb.  However, the compilers,
     31 * dynamic linker, etc, do not manipulate space id's, so there
     32 * could be a significant performance benefit in switching contexts
     33 * and not flushing the whole tlb.
     34 */
     35
     36static inline void flush_tlb_mm(struct mm_struct *mm)
     37{
     38	BUG_ON(mm == &init_mm); /* Should never happen */
     39
     40#if 1 || defined(CONFIG_SMP)
     41	/* Except for very small threads, flushing the whole TLB is
     42	 * faster than using __flush_tlb_range.  The pdtlb and pitlb
     43	 * instructions are very slow because of the TLB broadcast.
     44	 * It might be faster to do local range flushes on all CPUs
     45	 * on PA 2.0 systems.
     46	 */
     47	flush_tlb_all();
     48#else
     49	/* FIXME: currently broken, causing space id and protection ids
     50	 * to go out of sync, resulting in faults on userspace accesses.
     51	 * This approach needs further investigation since running many
     52	 * small applications (e.g., GCC testsuite) is faster on HP-UX.
     53	 */
     54	if (mm) {
     55		if (mm->context != 0)
     56			free_sid(mm->context);
     57		mm->context = alloc_sid();
     58		if (mm == current->active_mm)
     59			load_context(mm->context);
     60	}
     61#endif
     62}
     63
     64static inline void flush_tlb_page(struct vm_area_struct *vma,
     65	unsigned long addr)
     66{
     67	purge_tlb_entries(vma->vm_mm, addr);
     68}
     69#endif