diff options
| author | Shell <[email protected]> | 2023-02-14 23:08:32 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-02-14 23:08:32 +0800 |
| commit | 2d0974908659bd41d748e69fac0166c37b15cb02 (patch) | |
| tree | ef9a9eb4ee3d6351138349d2314f48ccb9e6fa36 /components/mm | |
| parent | fc1aced66574e6ef144b6b228978e734456e6f95 (diff) | |
[rt-smart] PV_OFFSET as a variable (#6904)
* [rt-smart/mem] remove pv_offset
* [rt-smart] list kernel space command
* [rt-smart] restore ioremap region
* [revert] restore kernel space isolation
* [rt-smart/pv_off] code format
* [rt-smart] add get_pvoff()
* [pvoffset] pvoff as constant for C codes
* [pvoff] pvoff as interfaces
Diffstat (limited to 'components/mm')
| -rw-r--r-- | components/mm/mm_aspace.c | 17 | ||||
| -rw-r--r-- | components/mm/mm_aspace.h | 5 | ||||
| -rw-r--r-- | components/mm/mm_kmem.c | 32 | ||||
| -rw-r--r-- | components/mm/mm_page.c | 2 |
4 files changed, 48 insertions, 8 deletions
diff --git a/components/mm/mm_aspace.c b/components/mm/mm_aspace.c index df296b1782..6a969074dc 100644 --- a/components/mm/mm_aspace.c +++ b/components/mm/mm_aspace.c @@ -31,10 +31,6 @@ #include <mmu.h> #include <tlb.h> -#ifndef RT_USING_SMART -#define PV_OFFSET 0 -#endif - static void _aspace_unmap(rt_aspace_t aspace, void *addr, rt_size_t length); static void *_find_free(rt_aspace_t aspace, void *prefer, rt_size_t req_size, void *limit_start, rt_size_t limit_size, @@ -488,6 +484,7 @@ int rt_aspace_map_phy_static(rt_aspace_t aspace, rt_varea_t varea, varea->start = hint->prefer; varea->size = hint->map_size; hint->flags |= MMF_MAP_FIXED; + LOG_D("%s: start %p size %p phy at %p", __func__, varea->start, varea->size, pa_off << MM_PAGE_SHIFT); err = _mm_aspace_map_phy(aspace, varea, hint, attr, pa_off, ret_va); } else @@ -743,8 +740,16 @@ int rt_aspace_traversal(rt_aspace_t aspace, static int _dump(rt_varea_t varea, void *arg) { - rt_kprintf("%s[%p - %p]\n", varea->mem_obj->get_name(varea), varea->start, - varea->start + varea->size); + if (varea->mem_obj && varea->mem_obj->get_name) + { + rt_kprintf("[%p - %p] %s\n", varea->start, varea->start + varea->size, + varea->mem_obj->get_name(varea)); + } + else + { + rt_kprintf("[%p - %p] phy-map\n", varea->start, varea->start + varea->size); + rt_kprintf("\t\\_ paddr = %p\n", varea->offset << MM_PAGE_SHIFT); + } return 0; } diff --git a/components/mm/mm_aspace.h b/components/mm/mm_aspace.h index a8cf6e8339..8687f9a093 100644 --- a/components/mm/mm_aspace.h +++ b/components/mm/mm_aspace.h @@ -20,6 +20,7 @@ #define MM_PAGE_SHIFT 12 #define MM_PA_TO_OFF(pa) ((uintptr_t)(pa) >> MM_PAGE_SHIFT) +#define PV_OFFSET (rt_kmem_pvoff()) #ifndef RT_USING_SMP typedef rt_spinlock_t mm_spinlock; @@ -201,4 +202,8 @@ void rt_varea_free_pages(rt_varea_t varea); void rt_varea_offload_page(rt_varea_t varea, void *vaddr, rt_size_t size); +rt_ubase_t rt_kmem_pvoff(void); + +void rt_kmem_pvoff_set(rt_ubase_t pvoff); + #endif /* __MM_ASPACE_H__ */ diff --git a/components/mm/mm_kmem.c b/components/mm/mm_kmem.c new file mode 100644 index 0000000000..4d7854f04a --- /dev/null +++ b/components/mm/mm_kmem.c @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2006-2022, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022-11-14 WangXiaoyao the first version + */ + +#include "mm_aspace.h" +#include "mm_private.h" + +static void list_kernel_space(void) +{ + rt_aspace_print_all(&rt_kernel_space); +} +MSH_CMD_EXPORT(list_kernel_space, List varea in kernel space); + +void rt_kmem_list_varea(void) __attribute__((alias("list_kernel_space"))); + +static rt_ubase_t rt_pv_offset; + +rt_ubase_t rt_kmem_pvoff(void) +{ + return rt_pv_offset; +} + +void rt_kmem_pvoff_set(rt_ubase_t pvoff) +{ + rt_pv_offset = pvoff; +} diff --git a/components/mm/mm_page.c b/components/mm/mm_page.c index 2da22457a8..bacade4f5e 100644 --- a/components/mm/mm_page.c +++ b/components/mm/mm_page.c @@ -40,8 +40,6 @@ CT_ASSERT(order_huge_pg, RT_PAGE_MAX_ORDER > ARCH_PAGE_SHIFT - 2); CT_ASSERT(size_width, sizeof(rt_size_t) == sizeof(rt_size_t)); #endif /* ARCH_CPU_64BIT */ -#else -#define PV_OFFSET 0 #endif /* RT_USING_SMART */ static rt_size_t init_mpr_align_start; |
