Lines Matching refs:ea

923 static int subpage_protection(struct mm_struct *mm, unsigned long ea)  in subpage_protection()  argument
929 if (ea >= spt->maxaddr) in subpage_protection()
931 if (ea < 0x100000000UL) { in subpage_protection()
935 sbpm = spt->protptrs[ea >> SBP_L3_SHIFT]; in subpage_protection()
939 sbpp = sbpm[(ea >> SBP_L2_SHIFT) & (SBP_L2_COUNT - 1)]; in subpage_protection()
942 spp = sbpp[(ea >> PAGE_SHIFT) & (SBP_L1_COUNT - 1)]; in subpage_protection()
945 spp >>= 30 - 2 * ((ea >> 12) & 0xf); in subpage_protection()
953 static inline int subpage_protection(struct mm_struct *mm, unsigned long ea) in subpage_protection() argument
959 void hash_failure_debug(unsigned long ea, unsigned long access, in hash_failure_debug() argument
966 ea, access, current->comm); in hash_failure_debug()
971 static void check_paca_psize(unsigned long ea, struct mm_struct *mm, in check_paca_psize() argument
975 if (psize != get_paca_psize(ea)) { in check_paca_psize()
993 int hash_page_mm(struct mm_struct *mm, unsigned long ea, in hash_page_mm() argument
1008 ea, access, trap); in hash_page_mm()
1009 trace_hash_fault(ea, access, trap); in hash_page_mm()
1012 switch (REGION_ID(ea)) { in hash_page_mm()
1020 psize = get_slice_psize(mm, ea); in hash_page_mm()
1021 ssize = user_segment_size(ea); in hash_page_mm()
1022 vsid = get_vsid(mm->context.id, ea, ssize); in hash_page_mm()
1025 vsid = get_kernel_vsid(ea, mmu_kernel_ssize); in hash_page_mm()
1026 if (ea < VMALLOC_END) in hash_page_mm()
1068 ea &= ~((1ul << mmu_psize_defs[psize].shift) - 1); in hash_page_mm()
1072 ptep = __find_linux_pte_or_hugepte(pgdir, ea, &is_thp, &hugeshift); in hash_page_mm()
1093 rc = __hash_page_thp(ea, access, vsid, (pmd_t *)ptep, in hash_page_mm()
1097 rc = __hash_page_huge(ea, access, vsid, ptep, trap, in hash_page_mm()
1110 check_paca_psize(ea, mm, psize, user_region); in hash_page_mm()
1125 demote_segment_4k(mm, ea); in hash_page_mm()
1135 demote_segment_4k(mm, ea); in hash_page_mm()
1137 } else if (ea < VMALLOC_END) { in hash_page_mm()
1152 check_paca_psize(ea, mm, psize, user_region); in hash_page_mm()
1157 rc = __hash_page_64K(ea, access, vsid, ptep, trap, in hash_page_mm()
1162 int spp = subpage_protection(mm, ea); in hash_page_mm()
1166 rc = __hash_page_4K(ea, access, vsid, ptep, trap, in hash_page_mm()
1174 hash_failure_debug(ea, access, vsid, trap, ssize, psize, in hash_page_mm()
1190 int hash_page(unsigned long ea, unsigned long access, unsigned long trap, in hash_page() argument
1196 if (REGION_ID(ea) == VMALLOC_REGION_ID) in hash_page()
1202 return hash_page_mm(mm, ea, access, trap, flags); in hash_page()
1206 void hash_preload(struct mm_struct *mm, unsigned long ea, in hash_preload() argument
1216 BUG_ON(REGION_ID(ea) != USER_REGION_ID); in hash_preload()
1220 if (unlikely(get_slice_psize(mm, ea) != mm->context.user_psize)) in hash_preload()
1225 " trap=%lx\n", mm, mm->pgd, ea, access, trap); in hash_preload()
1233 ssize = user_segment_size(ea); in hash_preload()
1234 vsid = get_vsid(mm->context.id, ea, ssize); in hash_preload()
1247 ptep = find_linux_pte_or_hugepte(pgdir, ea, NULL, &hugepage_shift); in hash_preload()
1270 rc = __hash_page_64K(ea, access, vsid, ptep, trap, in hash_preload()
1274 rc = __hash_page_4K(ea, access, vsid, ptep, trap, update_flags, in hash_preload()
1275 ssize, subpage_protection(mm, ea)); in hash_preload()
1281 hash_failure_debug(ea, access, vsid, trap, ssize, in hash_preload()