|
38 | 38 |
|
39 | 39 | static size_t _unmap_area(struct rt_aspace *aspace, void *v_addr); |
40 | 40 |
|
41 | | -// Define the structure of early page table |
| 41 | +/* Define the structure of early page table */ |
42 | 42 | struct page_table |
43 | 43 | { |
44 | 44 | unsigned long page[ARCH_PAGE_SIZE / sizeof(unsigned long)]; |
@@ -120,7 +120,7 @@ static int _map_one_page(struct rt_aspace *aspace, void *va, void *pa, |
120 | 120 | l1_off = GET_L1((size_t)va); |
121 | 121 | l2_off = GET_L2((size_t)va); |
122 | 122 | l3_off = GET_L3((size_t)va); |
123 | | - // create map for each hart |
| 123 | + /* Create a separate page table for each hart to facilitate access to the .percpu section. */ |
124 | 124 | for (int hartid = 0; hartid < RT_CPUS_NR; hartid++) |
125 | 125 | { |
126 | 126 | mmu_l1 = (rt_ubase_t *)((rt_ubase_t)aspace->page_table + (rt_ubase_t)(hartid * ARCH_PAGE_SIZE)) + l1_off; |
@@ -345,11 +345,12 @@ void set_free_page(void *page_array) |
345 | 345 | // Early-stage page allocator |
346 | 346 | unsigned long get_free_page(void) |
347 | 347 | { |
348 | | - static unsigned long page_off = 0UL; |
| 348 | + static rt_atomic_t page_off = 0; |
349 | 349 |
|
350 | | - if (page_off < ARCH_PAGE_SIZE / sizeof(unsigned long)) |
| 350 | + rt_atomic_t old_off = rt_hw_atomic_add(&page_off, 1); |
| 351 | + if (old_off < ARCH_PAGE_SIZE / sizeof(unsigned long)) |
351 | 352 | { |
352 | | - return (unsigned long)(__init_page_array[page_off++].page); |
| 353 | + return (unsigned long)(__init_page_array[old_off].page); |
353 | 354 | } |
354 | 355 |
|
355 | 356 | return 0; |
@@ -860,10 +861,6 @@ void rt_hw_mmu_setup(rt_aspace_t aspace, struct mem_desc *mdesc, int desc_nr) |
860 | 861 |
|
861 | 862 | #define SATP_BASE ((rt_ubase_t)SATP_MODE << SATP_MODE_OFFSET) |
862 | 863 |
|
863 | | -extern unsigned int __bss_end; |
864 | | -#if defined(RT_USING_SMP) && defined(ARCH_MM_MMU) |
865 | | -extern unsigned int __percpu_real_end; |
866 | | -#endif |
867 | 864 | /** |
868 | 865 | * @brief Early memory setup function for hardware initialization. |
869 | 866 | * |
|
0 commit comments