1616#include <tlb.h>
1717#include <config.h>
1818
19+
1920extern uint8_t _image_start , _image_load_end , _image_end , _dmem_phys_beg , _dmem_beg ,
2021 _cpu_private_beg , _cpu_private_end , _vm_beg , _vm_end , _vm_image_start , _vm_image_end ;
2122
@@ -189,7 +190,7 @@ static inline pte_t* mem_alloc_pt(struct addr_space* as, pte_t* parent, size_t l
189190{
190191 /* Must have lock on as and va section to call */
191192 size_t ptsize = NUM_PAGES (pt_size (& as -> pt , lvl + 1 ));
192- struct ppages ppage = mem_alloc_ppages (as -> colors , ptsize , ptsize > 1 ? true : false );
193+ struct ppages ppage = mem_alloc_ppages (as -> colors , ptsize , ptsize > 1 ? MEM_ALIGN_PPAGES : MEM_DONT_ALIGN_PPAGES );
193194 if (ppage .num_pages == 0 ) {
194195 return NULL ;
195196 }
@@ -547,7 +548,7 @@ static bool mem_map(struct addr_space* as, vaddr_t va, struct ppages* ppages, si
547548 while ((entry < nentries ) && (count < num_pages ) &&
548549 (num_pages - count >= lvlsz / PAGE_SIZE )) {
549550 if (ppages == NULL ) {
550- struct ppages temp = mem_alloc_ppages (as -> colors , lvlsz / PAGE_SIZE , true );
551+ struct ppages temp = mem_alloc_ppages (as -> colors , lvlsz / PAGE_SIZE , MEM_ALIGN_PPAGES );
551552 if (temp .num_pages < lvlsz / PAGE_SIZE ) {
552553 if (lvl == (as -> pt .dscr -> lvls - 1 )) {
553554 // TODO: free previously allocated pages
@@ -671,8 +672,8 @@ bool mem_map_reclr(struct addr_space* as, vaddr_t va, struct ppages* ppages, siz
671672 .colors = ~as -> colors };
672673 mem_free_ppages (& unused_pages );
673674
674- mem_unmap (& cpu ()-> as , reclrd_va_base , reclrd_num , false );
675- mem_unmap (& cpu ()-> as , phys_va_base , num_pages , false );
675+ mem_unmap (& cpu ()-> as , reclrd_va_base , reclrd_num , MEM_DONT_FREE_PAGES );
676+ mem_unmap (& cpu ()-> as , phys_va_base , num_pages , MEM_DONT_FREE_PAGES );
676677
677678 return true;
678679}
@@ -712,7 +713,7 @@ vaddr_t mem_map_cpy(struct addr_space* ass, struct addr_space* asd, vaddr_t vas,
712713
713714static void * copy_space (void * base , const size_t size , struct ppages * pages )
714715{
715- * pages = mem_alloc_ppages (cpu ()-> as .colors , NUM_PAGES (size ), false );
716+ * pages = mem_alloc_ppages (cpu ()-> as .colors , NUM_PAGES (size ), MEM_DONT_ALIGN_PPAGES );
716717 vaddr_t va = mem_alloc_vpage (& cpu ()-> as , SEC_HYP_PRIVATE , INVALID_VA , NUM_PAGES (size ));
717718 mem_map (& cpu ()-> as , va , pages , NUM_PAGES (size ), PTE_HYP_FLAGS );
718719 memcpy ((void * )va , base , size );
@@ -873,14 +874,14 @@ void mem_color_hypervisor(const paddr_t load_addr, struct mem_region* root_regio
873874 va = mem_alloc_vpage (& cpu ()-> as , SEC_HYP_GLOBAL , INVALID_VA , p_image .num_pages );
874875 mem_map (& cpu ()-> as , va , & p_image , p_image .num_pages , PTE_HYP_FLAGS );
875876 memset ((void * )va , 0 , p_image .num_pages * PAGE_SIZE );
876- mem_unmap (& cpu ()-> as , va , p_image .num_pages , true );
877+ mem_unmap (& cpu ()-> as , va , p_image .num_pages , MEM_FREE_PAGES );
877878
878879 p_image = mem_ppages_get (load_addr + image_load_size + vm_image_size ,
879880 NUM_PAGES (image_noload_size ));
880881 va = mem_alloc_vpage (& cpu ()-> as , SEC_HYP_GLOBAL , INVALID_VA , p_image .num_pages );
881882 mem_map (& cpu ()-> as , va , & p_image , p_image .num_pages , PTE_HYP_FLAGS );
882883 memset ((void * )va , 0 , p_image .num_pages * PAGE_SIZE );
883- mem_unmap (& cpu ()-> as , va , p_image .num_pages , true );
884+ mem_unmap (& cpu ()-> as , va , p_image .num_pages , MEM_FREE_PAGES );
884885
885886 p_bitmap = mem_ppages_get (load_addr + image_size + vm_image_size +
886887 (cpu_boot_size * platform .cpu_num ),
@@ -889,15 +890,15 @@ void mem_color_hypervisor(const paddr_t load_addr, struct mem_region* root_regio
889890 va = mem_alloc_vpage (& cpu ()-> as , SEC_HYP_GLOBAL , INVALID_VA , p_bitmap .num_pages );
890891 mem_map (& cpu ()-> as , va , & p_bitmap , p_bitmap .num_pages , PTE_HYP_FLAGS );
891892 memset ((void * )va , 0 , p_bitmap .num_pages * PAGE_SIZE );
892- mem_unmap (& cpu ()-> as , va , p_bitmap .num_pages , true );
893+ mem_unmap (& cpu ()-> as , va , p_bitmap .num_pages , MEM_FREE_PAGES );
893894 }
894895
895896 p_cpu = mem_ppages_get (load_addr + image_size + vm_image_size + (cpu_boot_size * cpu ()-> id ),
896897 cpu_boot_size / PAGE_SIZE );
897898 va = mem_alloc_vpage (& cpu ()-> as , SEC_HYP_PRIVATE , INVALID_VA , p_cpu .num_pages );
898899 mem_map (& cpu ()-> as , va , & p_cpu , p_cpu .num_pages , PTE_HYP_FLAGS );
899900 memset ((void * )va , 0 , p_cpu .num_pages * PAGE_SIZE );
900- mem_unmap (& cpu ()-> as , va , p_cpu .num_pages , false );
901+ mem_unmap (& cpu ()-> as , va , p_cpu .num_pages , MEM_DONT_FREE_PAGES );
901902}
902903
903904void as_init (struct addr_space * as , enum AS_TYPE type , asid_t id , pte_t * root_pt , colormap_t colors )
0 commit comments