Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/arch/armv8/armv8-a/smmuv2.c
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ ssize_t smmu_alloc_ctxbnk(void)
{
spin_lock(&smmu.ctx_lock);
/* Find a free context bank. */
ssize_t nth = bitmap_find_nth(smmu.ctxbank_bitmap, smmu.ctx_num, 1, 0, false);
ssize_t nth = bitmap_find_nth(smmu.ctxbank_bitmap, smmu.ctx_num, 1, 0, BITMAP_DONT_SET);
if (nth >= 0) {
bitmap_set(smmu.ctxbank_bitmap, (size_t)nth);
}
Expand Down Expand Up @@ -247,7 +247,7 @@ ssize_t smmu_alloc_sme(void)
{
spin_lock(&smmu.sme_lock);
/* Find a free sme. */
ssize_t nth = bitmap_find_nth(smmu.sme_bitmap, smmu.sme_num, 1, 0, false);
ssize_t nth = bitmap_find_nth(smmu.sme_bitmap, smmu.sme_num, 1, 0, BITMAP_DONT_SET);
if (nth >= 0) {
bitmap_set(smmu.sme_bitmap, (size_t)nth);
}
Expand Down
3 changes: 2 additions & 1 deletion src/arch/armv8/armv8-r/vmm.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ void vmm_arch_profile_init()

timer_freq = timer_ctl->CNTDIF0;

mem_unmap(&cpu()->as, (vaddr_t)timer_ctl, sizeof(struct generic_timer_cntctrl), false);
mem_unmap(&cpu()->as, (vaddr_t)timer_ctl, sizeof(struct generic_timer_cntctrl),
MEM_DONT_FREE_PAGES);
}

cpu_sync_barrier(&cpu_glb_sync);
Expand Down
3 changes: 3 additions & 0 deletions src/arch/armv8/inc/arch/vgic.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,9 @@ struct vgic_priv {
struct vgic_int interrupts[GIC_CPU_PRIV];
};

#define VGIC_GICR_ACCESS true
#define VGIC_NO_GICR_ACCESS false

void vgic_init(struct vm* vm, const struct vgic_dscrp* vgic_dscrp);
void vgic_cpu_init(struct vcpu* vcpu);
void vgic_set_hw(struct vm* vm, irqid_t id);
Expand Down
2 changes: 1 addition & 1 deletion src/arch/armv8/vgic.c
Original file line number Diff line number Diff line change
Expand Up @@ -968,7 +968,7 @@ bool vgicd_emul_handler(struct emul_access* acc)

if (vgic_check_reg_alignment(acc, handler_info)) {
spin_lock(&cpu()->vcpu->vm->arch.vgicd.lock);
handler_info->reg_access(acc, handler_info, false, cpu()->vcpu->id);
handler_info->reg_access(acc, handler_info, VGIC_NO_GICR_ACCESS, cpu()->vcpu->id);
spin_unlock(&cpu()->vcpu->vm->arch.vgicd.lock);
return true;
} else {
Expand Down
3 changes: 2 additions & 1 deletion src/arch/armv8/vgicv2.c
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,8 @@ void vgic_init(struct vm* vm, const struct vgic_dscrp* vgic_dscrp)
(vaddr_t)platform.arch.gic.gicv_addr, n);

size_t vgic_int_size = vm->arch.vgicd.int_num * sizeof(struct vgic_int);
vm->arch.vgicd.interrupts = mem_alloc_page(NUM_PAGES(vgic_int_size), SEC_HYP_VM, false);
vm->arch.vgicd.interrupts =
mem_alloc_page(NUM_PAGES(vgic_int_size), SEC_HYP_VM, MEM_DONT_ALIGN_PPAGES);
if (vm->arch.vgicd.interrupts == NULL) {
ERROR("failed to alloc vgic");
}
Expand Down
5 changes: 3 additions & 2 deletions src/arch/armv8/vgicv3.c
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,7 @@ static bool vgicr_emul_handler(struct emul_access* acc)
struct vcpu* vcpu =
vgicr_id == cpu()->vcpu->id ? cpu()->vcpu : vm_get_vcpu(cpu()->vcpu->vm, vgicr_id);
spin_lock(&vcpu->arch.vgic_priv.vgicr.lock);
handler_info->reg_access(acc, handler_info, true, vgicr_id);
handler_info->reg_access(acc, handler_info, VGIC_GICR_ACCESS, vgicr_id);
spin_unlock(&vcpu->arch.vgic_priv.vgicr.lock);
return true;
} else {
Expand Down Expand Up @@ -330,7 +330,8 @@ void vgic_init(struct vm* vm, const struct vgic_dscrp* vgic_dscrp)
vm->arch.vgicd.IIDR = gicd->IIDR;

size_t vgic_int_size = vm->arch.vgicd.int_num * sizeof(struct vgic_int);
vm->arch.vgicd.interrupts = mem_alloc_page(NUM_PAGES(vgic_int_size), SEC_HYP_VM, false);
vm->arch.vgicd.interrupts =
mem_alloc_page(NUM_PAGES(vgic_int_size), SEC_HYP_VM, MEM_DONT_ALIGN_PPAGES);
if (vm->arch.vgicd.interrupts == NULL) {
ERROR("failed to alloc vgic");
}
Expand Down
4 changes: 2 additions & 2 deletions src/arch/riscv/iommu.c
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ static void rv_iommu_init(void)

// Allocate memory for FQ (aligned to 4kiB)
vaddr_t fq_vaddr = (vaddr_t)mem_alloc_page(NUM_PAGES(sizeof(struct fq_entry) * FQ_N_ENTRIES),
SEC_HYP_GLOBAL, true);
SEC_HYP_GLOBAL, MEM_ALIGN_PPAGES);
memset((void*)fq_vaddr, 0, sizeof(struct fq_entry) * FQ_N_ENTRIES);
rv_iommu.hw.fq = (struct fq_entry*)fq_vaddr;

Expand Down Expand Up @@ -302,7 +302,7 @@ static void rv_iommu_init(void)

// Allocate a page of memory (aligned) for the DDT
vaddr_t ddt_vaddr = (vaddr_t)mem_alloc_page(NUM_PAGES(sizeof(struct ddt_entry) * DDT_N_ENTRIES),
SEC_HYP_GLOBAL, true);
SEC_HYP_GLOBAL, MEM_ALIGN_PPAGES);
// Clear entries
memset((void*)ddt_vaddr, 0, sizeof(struct ddt_entry) * DDT_N_ENTRIES);
rv_iommu.hw.ddt = (struct ddt_entry*)ddt_vaddr;
Expand Down
6 changes: 6 additions & 0 deletions src/core/inc/mem.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,12 @@ struct shmem {
spinlock_t lock;
};

#define MEM_ALIGN_PPAGES true
#define MEM_DONT_ALIGN_PPAGES false

#define MEM_FREE_PAGES true
#define MEM_DONT_FREE_PAGES false

static inline struct ppages mem_ppages_get(paddr_t base, size_t num_pages)
{
return (struct ppages){ .colors = 0, .base = base, .num_pages = num_pages };
Expand Down
5 changes: 3 additions & 2 deletions src/core/mem.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ bool pp_alloc(struct page_pool* pool, size_t num_pages, bool aligned, struct ppa
*/
for (size_t i = 0; i < 2 && !ok; i++) {
while (pool->free != 0) {
ssize_t bit = bitmap_find_consec(pool->bitmap, pool->size, curr, num_pages, false);
ssize_t bit =
bitmap_find_consec(pool->bitmap, pool->size, curr, num_pages, BITMAP_DONT_SET);

if (bit < 0) {
/**
Expand Down Expand Up @@ -215,7 +216,7 @@ static void pp_init(struct page_pool* pool, paddr_t base, size_t size)
return;
}

pages = mem_alloc_ppages(cpu()->as.colors, bitmap_size, false);
pages = mem_alloc_ppages(cpu()->as.colors, bitmap_size, MEM_DONT_ALIGN_PPAGES);
if (pages.num_pages != bitmap_size) {
return;
}
Expand Down
40 changes: 23 additions & 17 deletions src/core/mmu/mem.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
#include <tlb.h>
#include <config.h>

#define MEM_SEC_SHARED true
#define MEM_SEC_NOT_SHARED false

extern uint8_t _image_start, _image_load_end, _image_end, _dmem_phys_beg, _dmem_beg,
_cpu_private_beg, _cpu_private_end, _vm_beg, _vm_end, _vm_image_start, _vm_image_end;

Expand All @@ -34,15 +37,16 @@ struct section {
};

struct section hyp_secs[] = {
[SEC_HYP_GLOBAL] = { (vaddr_t)&_dmem_beg, (vaddr_t)&_cpu_private_beg - 1, true,
[SEC_HYP_GLOBAL] = { (vaddr_t)&_dmem_beg, (vaddr_t)&_cpu_private_beg - 1, MEM_SEC_SHARED,
SPINLOCK_INITVAL },
[SEC_HYP_IMAGE] = { (vaddr_t)&_image_start, (vaddr_t)&_image_end - 1, true, SPINLOCK_INITVAL },
[SEC_HYP_PRIVATE] = { (vaddr_t)&_cpu_private_beg, (vaddr_t)&_cpu_private_end - 1, false,
[SEC_HYP_IMAGE] = { (vaddr_t)&_image_start, (vaddr_t)&_image_end - 1, MEM_SEC_SHARED,
SPINLOCK_INITVAL },
[SEC_HYP_VM] = { (vaddr_t)&_vm_beg, (vaddr_t)&_vm_end - 1, true, SPINLOCK_INITVAL },
[SEC_HYP_PRIVATE] = { (vaddr_t)&_cpu_private_beg, (vaddr_t)&_cpu_private_end - 1,
MEM_SEC_NOT_SHARED, SPINLOCK_INITVAL },
[SEC_HYP_VM] = { (vaddr_t)&_vm_beg, (vaddr_t)&_vm_end - 1, MEM_SEC_SHARED, SPINLOCK_INITVAL },
};

struct section vm_secs[] = { [SEC_VM_ANY] = { 0x0, MAX_VA, false, SPINLOCK_INITVAL } };
struct section vm_secs[] = { [SEC_VM_ANY] = { 0x0, MAX_VA, MEM_SEC_NOT_SHARED, SPINLOCK_INITVAL } };

struct {
struct section* sec;
Expand Down Expand Up @@ -189,7 +193,8 @@ static inline pte_t* mem_alloc_pt(struct addr_space* as, pte_t* parent, size_t l
{
/* Must have lock on as and va section to call */
size_t ptsize = NUM_PAGES(pt_size(&as->pt, lvl + 1));
struct ppages ppage = mem_alloc_ppages(as->colors, ptsize, ptsize > 1 ? true : false);
struct ppages ppage =
mem_alloc_ppages(as->colors, ptsize, ptsize > 1 ? MEM_ALIGN_PPAGES : MEM_DONT_ALIGN_PPAGES);
if (ppage.num_pages == 0) {
return NULL;
}
Expand Down Expand Up @@ -504,7 +509,7 @@ static bool mem_map(struct addr_space* as, vaddr_t va, struct ppages* ppages, si

struct ppages temp_ppages;
if (ppages == NULL && !all_clrs(as->colors)) {
temp_ppages = mem_alloc_ppages(as->colors, num_pages, false);
temp_ppages = mem_alloc_ppages(as->colors, num_pages, MEM_DONT_ALIGN_PPAGES);
if (temp_ppages.num_pages < num_pages) {
ERROR("failed to alloc colored physical pages");
}
Expand Down Expand Up @@ -547,7 +552,8 @@ static bool mem_map(struct addr_space* as, vaddr_t va, struct ppages* ppages, si
while ((entry < nentries) && (count < num_pages) &&
(num_pages - count >= lvlsz / PAGE_SIZE)) {
if (ppages == NULL) {
struct ppages temp = mem_alloc_ppages(as->colors, lvlsz / PAGE_SIZE, true);
struct ppages temp =
mem_alloc_ppages(as->colors, lvlsz / PAGE_SIZE, MEM_ALIGN_PPAGES);
if (temp.num_pages < lvlsz / PAGE_SIZE) {
if (lvl == (as->pt.dscr->lvls - 1)) {
// TODO: free previously allocated pages
Expand Down Expand Up @@ -612,7 +618,7 @@ bool mem_map_reclr(struct addr_space* as, vaddr_t va, struct ppages* ppages, siz
}

vaddr_t reclrd_va_base = mem_alloc_vpage(&cpu()->as, SEC_HYP_VM, INVALID_VA, reclrd_num);
struct ppages reclrd_ppages = mem_alloc_ppages(as->colors, reclrd_num, false);
struct ppages reclrd_ppages = mem_alloc_ppages(as->colors, reclrd_num, MEM_DONT_ALIGN_PPAGES);
mem_map(&cpu()->as, reclrd_va_base, &reclrd_ppages, reclrd_num, PTE_HYP_FLAGS);

/**
Expand Down Expand Up @@ -671,8 +677,8 @@ bool mem_map_reclr(struct addr_space* as, vaddr_t va, struct ppages* ppages, siz
.colors = ~as->colors };
mem_free_ppages(&unused_pages);

mem_unmap(&cpu()->as, reclrd_va_base, reclrd_num, false);
mem_unmap(&cpu()->as, phys_va_base, num_pages, false);
mem_unmap(&cpu()->as, reclrd_va_base, reclrd_num, MEM_DONT_FREE_PAGES);
mem_unmap(&cpu()->as, phys_va_base, num_pages, MEM_DONT_FREE_PAGES);

return true;
}
Expand Down Expand Up @@ -712,7 +718,7 @@ vaddr_t mem_map_cpy(struct addr_space* ass, struct addr_space* asd, vaddr_t vas,

static void* copy_space(void* base, const size_t size, struct ppages* pages)
{
*pages = mem_alloc_ppages(cpu()->as.colors, NUM_PAGES(size), false);
*pages = mem_alloc_ppages(cpu()->as.colors, NUM_PAGES(size), MEM_DONT_ALIGN_PPAGES);
vaddr_t va = mem_alloc_vpage(&cpu()->as, SEC_HYP_PRIVATE, INVALID_VA, NUM_PAGES(size));
mem_map(&cpu()->as, va, pages, NUM_PAGES(size), PTE_HYP_FLAGS);
memcpy((void*)va, base, size);
Expand Down Expand Up @@ -873,14 +879,14 @@ void mem_color_hypervisor(const paddr_t load_addr, struct mem_region* root_regio
va = mem_alloc_vpage(&cpu()->as, SEC_HYP_GLOBAL, INVALID_VA, p_image.num_pages);
mem_map(&cpu()->as, va, &p_image, p_image.num_pages, PTE_HYP_FLAGS);
memset((void*)va, 0, p_image.num_pages * PAGE_SIZE);
mem_unmap(&cpu()->as, va, p_image.num_pages, true);
mem_unmap(&cpu()->as, va, p_image.num_pages, MEM_FREE_PAGES);

p_image = mem_ppages_get(load_addr + image_load_size + vm_image_size,
NUM_PAGES(image_noload_size));
va = mem_alloc_vpage(&cpu()->as, SEC_HYP_GLOBAL, INVALID_VA, p_image.num_pages);
mem_map(&cpu()->as, va, &p_image, p_image.num_pages, PTE_HYP_FLAGS);
memset((void*)va, 0, p_image.num_pages * PAGE_SIZE);
mem_unmap(&cpu()->as, va, p_image.num_pages, true);
mem_unmap(&cpu()->as, va, p_image.num_pages, MEM_FREE_PAGES);

p_bitmap = mem_ppages_get(load_addr + image_size + vm_image_size +
(cpu_boot_size * platform.cpu_num),
Expand All @@ -889,15 +895,15 @@ void mem_color_hypervisor(const paddr_t load_addr, struct mem_region* root_regio
va = mem_alloc_vpage(&cpu()->as, SEC_HYP_GLOBAL, INVALID_VA, p_bitmap.num_pages);
mem_map(&cpu()->as, va, &p_bitmap, p_bitmap.num_pages, PTE_HYP_FLAGS);
memset((void*)va, 0, p_bitmap.num_pages * PAGE_SIZE);
mem_unmap(&cpu()->as, va, p_bitmap.num_pages, true);
mem_unmap(&cpu()->as, va, p_bitmap.num_pages, MEM_FREE_PAGES);
}

p_cpu = mem_ppages_get(load_addr + image_size + vm_image_size + (cpu_boot_size * cpu()->id),
cpu_boot_size / PAGE_SIZE);
va = mem_alloc_vpage(&cpu()->as, SEC_HYP_PRIVATE, INVALID_VA, p_cpu.num_pages);
mem_map(&cpu()->as, va, &p_cpu, p_cpu.num_pages, PTE_HYP_FLAGS);
memset((void*)va, 0, p_cpu.num_pages * PAGE_SIZE);
mem_unmap(&cpu()->as, va, p_cpu.num_pages, false);
mem_unmap(&cpu()->as, va, p_cpu.num_pages, MEM_DONT_FREE_PAGES);
}

void as_init(struct addr_space* as, enum AS_TYPE type, asid_t id, pte_t* root_pt, colormap_t colors)
Expand All @@ -911,7 +917,7 @@ void as_init(struct addr_space* as, enum AS_TYPE type, asid_t id, pte_t* root_pt
if (root_pt == NULL) {
size_t n = NUM_PAGES(pt_size(&as->pt, 0));
root_pt = (pte_t*)mem_alloc_page(n,
type == AS_HYP || type == AS_HYP_CPY ? SEC_HYP_PRIVATE : SEC_HYP_VM, true);
type == AS_HYP || type == AS_HYP_CPY ? SEC_HYP_PRIVATE : SEC_HYP_VM, MEM_ALIGN_PPAGES);
memset((void*)root_pt, 0, n * PAGE_SIZE);
}
as->pt.root = root_pt;
Expand Down
19 changes: 11 additions & 8 deletions src/core/mpu/mem.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
#include <objpool.h>
#include <config.h>

#define MEM_BROADCAST true
#define MEM_DONT_BROADCAST false

struct shared_region {
enum AS_TYPE as_type;
asid_t asid;
Expand Down Expand Up @@ -309,7 +312,7 @@ static bool mem_vmpu_remove_region(struct addr_space* as, mpid_t mpid, bool broa
static void mem_handle_broadcast_insert(struct addr_space* as, struct mp_region* mpr)
{
if (as->type == AS_HYP) {
mem_map(&cpu()->as, mpr, false);
mem_map(&cpu()->as, mpr, MEM_DONT_BROADCAST);
} else {
mpu_map(as_priv(as), mpr);
}
Expand All @@ -318,7 +321,7 @@ static void mem_handle_broadcast_insert(struct addr_space* as, struct mp_region*
static void mem_handle_broadcast_remove(struct addr_space* as, struct mp_region* mpr)
{
if (as->type == AS_HYP) {
mem_unmap_range(&cpu()->as, mpr->base, mpr->size, false);
mem_unmap_range(&cpu()->as, mpr->base, mpr->size, MEM_DONT_BROADCAST);
} else {
mpu_unmap(as_priv(as), mpr);
}
Expand Down Expand Up @@ -435,21 +438,21 @@ bool mem_unmap_range(struct addr_space* as, vaddr_t vaddr, size_t size, bool bro
size_t top_size = limit >= r_limit ? 0 : r_limit - limit;
size_t bottom_size = vaddr <= r_base ? 0 : vaddr - r_base;

mem_vmpu_remove_region(as, mpid, true);
mem_vmpu_remove_region(as, mpid, MEM_BROADCAST);

if (top_size > 0) {
struct mp_region top = reg;
top.base = limit;
top.size = top_size;
mpid_t top_mpid = mem_vmpu_allocate_entry(as);
mem_vmpu_insert_region(as, top_mpid, &top, true);
mem_vmpu_insert_region(as, top_mpid, &top, MEM_BROADCAST);
}

if (bottom_size > 0) {
struct mp_region bottom = reg;
bottom.size = bottom_size;
mpid_t bottom_mpid = mem_vmpu_allocate_entry(as);
mem_vmpu_insert_region(as, bottom_mpid, &bottom, true);
mem_vmpu_insert_region(as, bottom_mpid, &bottom, MEM_BROADCAST);
}

size_t overlap_size = reg.size - top_size - bottom_size;
Expand All @@ -463,7 +466,7 @@ bool mem_unmap_range(struct addr_space* as, vaddr_t vaddr, size_t size, bool bro

void mem_unmap(struct addr_space* as, vaddr_t at, size_t num_pages, bool free_ppages)
{
if (mem_unmap_range(as, at, num_pages * PAGE_SIZE, true) && free_ppages) {
if (mem_unmap_range(as, at, num_pages * PAGE_SIZE, MEM_BROADCAST) && free_ppages) {
struct ppages ppages = mem_ppages_get(at, num_pages);
mem_free_ppages(&ppages);
}
Expand All @@ -490,7 +493,7 @@ vaddr_t mem_map_cpy(struct addr_space* ass, struct addr_space* asd, vaddr_t vas,
mpr = mpe->region;
spin_unlock(&ass->lock);

if (mem_map(asd, &mpr, true)) {
if (mem_map(asd, &mpr, MEM_BROADCAST)) {
va_res = vas;
} else {
INFO("failed mem map on mem map cpy");
Expand Down Expand Up @@ -542,7 +545,7 @@ vaddr_t mem_alloc_map(struct addr_space* as, as_sec_t section, struct ppages* pp
.mem_flags = flags,
};

mem_map(as, &mpr, true);
mem_map(as, &mpr, MEM_BROADCAST);

return at;
}
Expand Down
2 changes: 1 addition & 1 deletion src/core/objpool.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ void* objpool_alloc_with_id(struct objpool* objpool, objpool_id_t* id)
{
void* obj = NULL;
spin_lock(&objpool->lock);
ssize_t n = bitmap_find_nth(objpool->bitmap, objpool->num, 1, 0, false);
ssize_t n = bitmap_find_nth(objpool->bitmap, objpool->num, 1, 0, BITMAP_DONT_SET);
if (n >= 0) {
bitmap_set(objpool->bitmap, (size_t)n);
obj = (void*)((uintptr_t)objpool->pool + (objpool->objsize * (size_t)n));
Expand Down
2 changes: 1 addition & 1 deletion src/core/shmem.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ static void shmem_alloc(void)
struct shmem* shmem = &shmem_table[i];
if (!shmem->place_phys) {
size_t n_pg = NUM_PAGES(shmem->size);
struct ppages ppages = mem_alloc_ppages(shmem->colors, n_pg, false);
struct ppages ppages = mem_alloc_ppages(shmem->colors, n_pg, MEM_DONT_ALIGN_PPAGES);
if (ppages.num_pages < n_pg) {
ERROR("failed to allocate shared memory");
}
Expand Down
4 changes: 2 additions & 2 deletions src/core/vm.c
Original file line number Diff line number Diff line change
Expand Up @@ -134,8 +134,8 @@ static void vm_install_image(struct vm* vm, struct vm_mem_region* reg)
mem_map_cpy(&vm->as, &cpu()->as, vm->config->image.base_addr, INVALID_VA, img_num_pages);
memcpy((void*)dst_va, (void*)src_va, vm->config->image.size);
cache_flush_range((vaddr_t)dst_va, vm->config->image.size);
mem_unmap(&cpu()->as, src_va, img_num_pages, false);
mem_unmap(&cpu()->as, dst_va, img_num_pages, false);
mem_unmap(&cpu()->as, src_va, img_num_pages, MEM_DONT_FREE_PAGES);
mem_unmap(&cpu()->as, dst_va, img_num_pages, MEM_DONT_FREE_PAGES);
}

static void vm_map_img_rgn(struct vm* vm, const struct vm_config* vm_config,
Expand Down
2 changes: 1 addition & 1 deletion src/core/vmm.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ static bool vmm_alloc_vm(struct vm_allocation* vm_alloc, struct vm_config* vm_co
total_size = vcpus_offset + (vm_config->platform.cpu_num * sizeof(struct vcpu));
total_size = ALIGN(total_size, PAGE_SIZE);

void* allocation = mem_alloc_page(NUM_PAGES(total_size), SEC_HYP_VM, false);
void* allocation = mem_alloc_page(NUM_PAGES(total_size), SEC_HYP_VM, MEM_DONT_ALIGN_PPAGES);
if (allocation == NULL) {
return false;
}
Expand Down
3 changes: 3 additions & 0 deletions src/lib/inc/bitmap.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ static const bitmap_granule_t ONE = 1;

#define BITMAP_ALLOC_ARRAY(NAME, SIZE, NUM) bitmap_granule_t NAME[NUM][BITMAP_SIZE(SIZE)]

#define BITMAP_SET true
#define BITMAP_DONT_SET false

static inline void bitmap_set(bitmap_t* map, size_t bit)
{
map[bit / BITMAP_GRANULE_LEN] |= ONE << (bit % BITMAP_GRANULE_LEN);
Expand Down