summaryrefslogtreecommitdiff
path: root/arch/nios2/mm
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/mm
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/mm')
-rw-r--r--arch/nios2/mm/fault.c2
-rw-r--r--arch/nios2/mm/tlb.c18
2 files changed, 10 insertions, 10 deletions
diff --git a/arch/nios2/mm/fault.c b/arch/nios2/mm/fault.c
index 24fd84cf6006..cf76fa3f457b 100644
--- a/arch/nios2/mm/fault.c
+++ b/arch/nios2/mm/fault.c
@@ -271,7 +271,7 @@ vmalloc_fault:
if (!pte_present(*pte_k))
goto no_context;
- flush_tlb_one(address);
+ flush_tlb_kernel_page(address);
return;
}
}
diff --git a/arch/nios2/mm/tlb.c b/arch/nios2/mm/tlb.c
index cf10326aab1c..99e047082993 100644
--- a/arch/nios2/mm/tlb.c
+++ b/arch/nios2/mm/tlb.c
@@ -102,19 +102,11 @@ void flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
}
}
-void flush_tlb_kernel_range(unsigned long start, unsigned long end)
-{
- while (start < end) {
- flush_tlb_one(start);
- start += PAGE_SIZE;
- }
-}
-
/*
* This one is only used for pages with the global bit set so we don't care
* much about the ASID.
*/
-void flush_tlb_one(unsigned long addr)
+static void flush_tlb_one(unsigned long addr)
{
unsigned int way;
unsigned long org_misc, pid_misc;
@@ -154,6 +146,14 @@ void flush_tlb_one(unsigned long addr)
WRCTL(CTL_TLBMISC, org_misc);
}
+void flush_tlb_kernel_range(unsigned long start, unsigned long end)
+{
+ while (start < end) {
+ flush_tlb_one(start);
+ start += PAGE_SIZE;
+ }
+}
+
void dump_tlb_line(unsigned long line)
{
unsigned int way;