|
@@ -424,3 +424,21 @@ void radix__flush_tlb_all(void)
|
|
: : "r"(rb), "i"(r), "i"(prs), "i"(ric), "r"(0) : "memory");
|
|
: : "r"(rb), "i"(r), "i"(prs), "i"(ric), "r"(0) : "memory");
|
|
asm volatile("eieio; tlbsync; ptesync": : :"memory");
|
|
asm volatile("eieio; tlbsync; ptesync": : :"memory");
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+void radix__flush_tlb_pte_p9_dd1(unsigned long old_pte, struct mm_struct *mm,
|
|
|
|
+ unsigned long address)
|
|
|
|
+{
|
|
|
|
+ /*
|
|
|
|
+ * We track page size in pte only for DD1, So we can
|
|
|
|
+ * call this only on DD1.
|
|
|
|
+ */
|
|
|
|
+ if (!cpu_has_feature(CPU_FTR_POWER9_DD1)) {
|
|
|
|
+ VM_WARN_ON(1);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (old_pte & _PAGE_LARGE)
|
|
|
|
+ radix__flush_tlb_page_psize(mm, address, MMU_PAGE_2M);
|
|
|
|
+ else
|
|
|
|
+ radix__flush_tlb_page_psize(mm, address, mmu_virtual_psize);
|
|
|
|
+}
|