Lines Matching refs:ea

32 static long slb_allocate_user(struct mm_struct *mm, unsigned long ea);
45 static void assert_slb_presence(bool present, unsigned long ea)
59 ea &= ~((1UL << SID_SHIFT) - 1);
60 asm volatile(__PPC_SLBFEE_DOT(%0, %1) : "=r"(tmp) : "r"(ea) : "cr0");
66 static inline void slb_shadow_update(unsigned long ea, int ssize,
78 WRITE_ONCE(p->save_area[index].vsid, cpu_to_be64(mk_vsid_data(ea, ssize, flags)));
79 WRITE_ONCE(p->save_area[index].esid, cpu_to_be64(mk_esid_data(ea, ssize, index)));
87 static inline void create_shadowed_slbe(unsigned long ea, int ssize,
96 slb_shadow_update(ea, ssize, flags, index);
98 assert_slb_presence(false, ea);
100 : "r" (mk_vsid_data(ea, ssize, flags)),
101 "r" (mk_esid_data(ea, ssize, index))
297 static bool preload_add(struct thread_info *ti, unsigned long ea)
304 if (ea & ESID_MASK_1T)
305 ea &= ESID_MASK_1T;
308 esid = ea >> SID_SHIFT;
521 unsigned long ea;
524 ea = (unsigned long)ti->slb_preload_esid[idx] << SID_SHIFT;
526 slb_allocate_user(mm, ea);
671 static long slb_insert_entry(unsigned long ea, unsigned long context,
678 vsid = get_vsid(context, ea, ssize);
696 esid_data = mk_esid_data(ea, ssize, index);
704 assert_slb_presence(false, ea);
737 static long slb_allocate_kernel(unsigned long ea, unsigned long id)
746 if ((ea & EA_MASK) > (1UL << H_MAX_PHYSMEM_BITS))
754 if (ea >= H_VMEMMAP_END)
761 if (ea >= H_VMALLOC_END)
768 if (ea >= H_KERN_IO_END)
781 context = get_kernel_context(ea);
783 return slb_insert_entry(ea, context, flags, ssize, true);
786 static long slb_allocate_user(struct mm_struct *mm, unsigned long ea)
797 if (ea >= mm_ctx_slb_addr_limit(&mm->context))
800 context = get_user_context(&mm->context, ea);
804 if (unlikely(ea >= H_PGTABLE_RANGE)) {
809 ssize = user_segment_size(ea);
811 bpsize = get_slice_psize(mm, ea);
814 return slb_insert_entry(ea, context, flags, ssize, false);
819 unsigned long ea = regs->dar;
820 unsigned long id = get_region_id(ea);
852 err = slb_allocate_kernel(ea, id);
864 err = slb_allocate_user(mm, ea);
866 preload_add(current_thread_info(), ea);