summaryrefslogtreecommitdiff
path: root/arch/nios2/include
diff options
context:
space:
mode:
authorNicholas Piggin <npiggin@gmail.com>2018-11-05 10:00:15 +0800
committerLey Foon Tan <ley.foon.tan@intel.com>2019-03-07 05:29:35 +0800
commit195568a10a264a733ec7151a657ab054a0af768f (patch)
treea2db0ec2f201c8fd492d4807ecb89e0c8aa44707 /arch/nios2/include
parentef5cbcb6bfc8cfc7bba58c74c0765c471ef86277 (diff)
nios2: flush_tlb_page use PID based flush
flush_tlb_page is for flushing user pages, so it should not be using flush_tlb_one (which flushes all pages). This patch implements it with the flush_tlb_range, which is a user flush that does the right thing. flush_tlb_one is made static to mm/tlb.c because it's a bit confusing. It is used in do_page_fault to flush the kernel non-linear mappings, so that is replaced with flush_tlb_kernel_page. The end result is that functionality is identical. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Ley Foon Tan <ley.foon.tan@intel.com>
Diffstat (limited to 'arch/nios2/include')
-rw-r--r--arch/nios2/include/asm/tlbflush.h13
1 files changed, 9 insertions, 4 deletions
diff --git a/arch/nios2/include/asm/tlbflush.h b/arch/nios2/include/asm/tlbflush.h
index e19652fca1c6..982a7ecf221f 100644
--- a/arch/nios2/include/asm/tlbflush.h
+++ b/arch/nios2/include/asm/tlbflush.h
@@ -26,21 +26,26 @@ struct mm_struct;
*
* - flush_tlb_all() flushes all processes TLB entries
* - flush_tlb_mm(mm) flushes the specified mm context TLB entries
- * - flush_tlb_page(vma, vmaddr) flushes one page
* - flush_tlb_range(vma, start, end) flushes a range of pages
+ * - flush_tlb_page(vma, address) flushes a page
* - flush_tlb_kernel_range(start, end) flushes a range of kernel pages
+ * - flush_tlb_kernel_page(address) flushes a kernel page
*/
extern void flush_tlb_all(void);
extern void flush_tlb_mm(struct mm_struct *mm);
extern void flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
unsigned long end);
extern void flush_tlb_kernel_range(unsigned long start, unsigned long end);
-extern void flush_tlb_one(unsigned long vaddr);
static inline void flush_tlb_page(struct vm_area_struct *vma,
- unsigned long addr)
+ unsigned long address)
{
- flush_tlb_one(addr);
+ flush_tlb_range(vma, address, address + PAGE_SIZE);
+}
+
+static inline void flush_tlb_kernel_page(unsigned long address)
+{
+ flush_tlb_kernel_range(address, address + PAGE_SIZE);
}
#endif /* _ASM_NIOS2_TLBFLUSH_H */