Lines Matching refs:msg
27 static int _fetch_page(rt_varea_t varea, struct rt_aspace_fault_msg *msg) in _fetch_page() argument
32 varea->mem_obj->on_page_fault(varea, msg); in _fetch_page()
33 err = rt_varea_map_with_msg(varea, msg); in _fetch_page()
39 static int _read_fault(rt_varea_t varea, void *pa, struct rt_aspace_fault_msg *msg) in _read_fault() argument
42 if (msg->fault_type == MM_FAULT_TYPE_PAGE_FAULT) in _read_fault()
46 err = _fetch_page(varea, msg); in _read_fault()
55 static int _write_fault(rt_varea_t varea, void *pa, struct rt_aspace_fault_msg *msg) in _write_fault() argument
63 msg->fault_type == MM_FAULT_TYPE_RWX_PERM || in _write_fault()
64 msg->fault_type == MM_FAULT_TYPE_PAGE_FAULT)) in _write_fault()
67 err = rt_varea_fix_private_locked(varea, pa, msg, RT_FALSE); in _write_fault()
76 VAREA_IS_WRITABLE(varea) ? "True" : "False", msg->fault_type); in _write_fault()
79 else if (msg->fault_type == MM_FAULT_TYPE_PAGE_FAULT) in _write_fault()
83 err = _fetch_page(varea, msg); in _write_fault()
95 static int _exec_fault(rt_varea_t varea, void *pa, struct rt_aspace_fault_msg *msg) in _exec_fault() argument
98 if (msg->fault_type == MM_FAULT_TYPE_PAGE_FAULT) in _exec_fault()
102 err = _fetch_page(varea, msg); in _exec_fault()
107 static void _determine_precise_fault_type(struct rt_aspace_fault_msg *msg, rt_ubase_t pa, rt_varea_… in _determine_precise_fault_type() argument
109 if (msg->fault_type == MM_FAULT_TYPE_GENERIC_MMU) in _determine_precise_fault_type()
112 switch (msg->fault_op) in _determine_precise_fault_type()
135 msg->fault_type = MM_FAULT_TYPE_PAGE_FAULT; in _determine_precise_fault_type()
139 msg->fault_type = MM_FAULT_TYPE_RWX_PERM; in _determine_precise_fault_type()
145 int rt_aspace_fault_try_fix(rt_aspace_t aspace, struct rt_aspace_fault_msg *msg) in rt_aspace_fault_try_fix() argument
148 uintptr_t va = (uintptr_t)msg->fault_vaddr; in rt_aspace_fault_try_fix()
150 msg->fault_vaddr = (void *)va; in rt_aspace_fault_try_fix()
151 rt_mm_fault_res_init(&msg->response); in rt_aspace_fault_try_fix()
160 varea = _aspace_bst_search(aspace, msg->fault_vaddr); in rt_aspace_fault_try_fix()
163 void *pa = rt_hw_mmu_v2p(aspace, msg->fault_vaddr); in rt_aspace_fault_try_fix()
164 _determine_precise_fault_type(msg, (rt_ubase_t)pa, varea); in rt_aspace_fault_try_fix()
166 if (pa != ARCH_MAP_FAILED && msg->fault_type == MM_FAULT_TYPE_PAGE_FAULT) in rt_aspace_fault_try_fix()
168 LOG_D("%s(fault=%p) has already fixed", __func__, msg->fault_vaddr); in rt_aspace_fault_try_fix()
173 …ea=%s,fault=%p,fault_op=%d,phy=%p)", __func__, VAREA_NAME(varea), msg->fault_vaddr, msg->fault_op,… in rt_aspace_fault_try_fix()
174 … msg->off = varea->offset + ((long)msg->fault_vaddr - (long)varea->start) / ARCH_PAGE_SIZE; in rt_aspace_fault_try_fix()
177 switch (msg->fault_op) in rt_aspace_fault_try_fix()
180 err = _read_fault(varea, pa, msg); in rt_aspace_fault_try_fix()
183 err = _write_fault(varea, pa, msg); in rt_aspace_fault_try_fix()
186 err = _exec_fault(varea, pa, msg); in rt_aspace_fault_try_fix()
196 LOG_W("%s: varea not found at 0x%lx", __func__, msg->fault_vaddr); in rt_aspace_fault_try_fix()