|
@@ -491,7 +491,8 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long address,
|
|
|
* We don't need to worry about _PAGE_PRESENT here because we are
|
|
|
* called with either mm->page_table_lock held or ptl lock held
|
|
|
*/
|
|
|
- unsigned long access = 0, trap;
|
|
|
+ unsigned long access, trap;
|
|
|
+
|
|
|
if (radix_enabled())
|
|
|
return;
|
|
|
|
|
@@ -506,13 +507,19 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long address,
|
|
|
*
|
|
|
* We also avoid filling the hash if not coming from a fault
|
|
|
*/
|
|
|
- if (current->thread.regs == NULL)
|
|
|
- return;
|
|
|
- trap = TRAP(current->thread.regs);
|
|
|
- if (trap == 0x400)
|
|
|
- access |= _PAGE_EXEC;
|
|
|
- else if (trap != 0x300)
|
|
|
+
|
|
|
+ trap = current->thread.regs ? TRAP(current->thread.regs) : 0UL;
|
|
|
+ switch (trap) {
|
|
|
+ case 0x300:
|
|
|
+ access = 0UL;
|
|
|
+ break;
|
|
|
+ case 0x400:
|
|
|
+ access = _PAGE_EXEC;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
return;
|
|
|
+ }
|
|
|
+
|
|
|
hash_preload(vma->vm_mm, address, access, trap);
|
|
|
#endif /* CONFIG_PPC_STD_MMU */
|
|
|
#if (defined(CONFIG_PPC_BOOK3E_64) || defined(CONFIG_PPC_FSL_BOOK3E)) \
|