|
10 | 10 | * 2021-02-12 lizhirui add 64-bit support for lwp_brk
|
11 | 11 | * 2021-02-19 lizhirui add riscv64 support for lwp_user_accessable and lwp_get_from_user
|
12 | 12 | * 2021-06-07 lizhirui modify user space bound check
|
| 13 | + * 2022-12-25 wangxiaoyao adapt to new mm |
13 | 14 | */
|
14 | 15 |
|
15 | 16 | #include <rtthread.h>
|
@@ -122,15 +123,15 @@ static void _user_do_page_fault(struct rt_varea *varea,
|
122 | 123 |
|
123 | 124 | if (lwp_objs->source)
|
124 | 125 | {
|
125 |
| - void *paddr = rt_hw_mmu_v2p(lwp_objs->source, msg->fault_vaddr); |
| 126 | + char *paddr = rt_hw_mmu_v2p(lwp_objs->source, msg->fault_vaddr); |
126 | 127 | if (paddr != ARCH_MAP_FAILED)
|
127 | 128 | {
|
128 | 129 | void *vaddr;
|
129 | 130 | vaddr = paddr - PV_OFFSET;
|
130 | 131 |
|
131 | 132 | if (!(varea->flag & MMF_TEXT))
|
132 | 133 | {
|
133 |
| - void *cp = rt_pages_alloc(0); |
| 134 | + void *cp = rt_pages_alloc_ext(0, PAGE_ANY_AVAILABLE); |
134 | 135 | if (cp)
|
135 | 136 | {
|
136 | 137 | memcpy(cp, vaddr, ARCH_PAGE_SIZE);
|
@@ -220,9 +221,9 @@ int lwp_unmap_user(struct rt_lwp *lwp, void *va)
|
220 | 221 | static void _dup_varea(rt_varea_t varea, struct rt_lwp *src_lwp,
|
221 | 222 | rt_aspace_t dst)
|
222 | 223 | {
|
223 |
| - void *vaddr = varea->start; |
224 |
| - void *vend = vaddr + varea->size; |
225 |
| - if (vaddr < (void *)USER_STACK_VSTART || vaddr >= (void *)USER_STACK_VEND) |
| 224 | + char *vaddr = varea->start; |
| 225 | + char *vend = vaddr + varea->size; |
| 226 | + if (vaddr < (char *)USER_STACK_VSTART || vaddr >= (char *)USER_STACK_VEND) |
226 | 227 | {
|
227 | 228 | while (vaddr != vend)
|
228 | 229 | {
|
@@ -430,7 +431,7 @@ void *lwp_map_user_phy(struct rt_lwp *lwp, void *map_va, void *map_pa,
|
430 | 431 | size_t map_size, int cached)
|
431 | 432 | {
|
432 | 433 | int err;
|
433 |
| - void *va; |
| 434 | + char *va; |
434 | 435 | size_t offset = 0;
|
435 | 436 |
|
436 | 437 | if (!map_size)
|
@@ -458,7 +459,7 @@ void *lwp_map_user_phy(struct rt_lwp *lwp, void *map_va, void *map_pa,
|
458 | 459 | rt_size_t attr = cached ? MMU_MAP_U_RWCB : MMU_MAP_U_RW;
|
459 | 460 |
|
460 | 461 | err =
|
461 |
| - rt_aspace_map_phy(lwp->aspace, &hint, attr, MM_PA_TO_OFF(map_pa), &va); |
| 462 | + rt_aspace_map_phy(lwp->aspace, &hint, attr, MM_PA_TO_OFF(map_pa), (void **)&va); |
462 | 463 | if (err != RT_EOK)
|
463 | 464 | {
|
464 | 465 | va = RT_NULL;
|
|
0 commit comments