|
@@ -78,9 +78,19 @@ int __hash_page_thp(unsigned long ea, unsigned long access, unsigned long vsid,
|
|
|
* base page size. This is because demote_segment won't flush
|
|
|
* hash page table entries.
|
|
|
*/
|
|
|
- if ((old_pmd & _PAGE_HASHPTE) && !(old_pmd & _PAGE_COMBO))
|
|
|
+ if ((old_pmd & _PAGE_HASHPTE) && !(old_pmd & _PAGE_COMBO)) {
|
|
|
flush_hash_hugepage(vsid, ea, pmdp, MMU_PAGE_64K,
|
|
|
ssize, flags);
|
|
|
+ /*
|
|
|
+ * With THP, we also clear the slot information with
|
|
|
+ * respect to all the 64K hash pte mapping the 16MB
|
|
|
+ * page. They are all invalid now. This make sure we
|
|
|
+ * don't find the slot valid when we fault with 4k
|
|
|
+ * base page size.
|
|
|
+ *
|
|
|
+ */
|
|
|
+ memset(hpte_slot_array, 0, PTE_FRAG_SIZE);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
valid = hpte_valid(hpte_slot_array, index);
|