Skip to content

Commit acf3c60

Browse files
ref: Replace hardcoded booleans with named macros
This commit updates mainly memory and bitmap operations to use named macros like MEM_DONT_FREE_PAGES, MEM_ALIGN_PPAGES, and BITMAP_DONT_SET instead of raw boolean values. Signed-off-by: David Cerdeira <[email protected]>
1 parent a1daae7 commit acf3c60

File tree

16 files changed

+66
-41
lines changed

16 files changed

+66
-41
lines changed

src/arch/armv8/armv8-a/smmuv2.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ ssize_t smmu_alloc_ctxbnk(void)
182182
{
183183
spin_lock(&smmu.ctx_lock);
184184
/* Find a free context bank. */
185-
ssize_t nth = bitmap_find_nth(smmu.ctxbank_bitmap, smmu.ctx_num, 1, 0, false);
185+
ssize_t nth = bitmap_find_nth(smmu.ctxbank_bitmap, smmu.ctx_num, 1, 0, BITMAP_DONT_SET);
186186
if (nth >= 0) {
187187
bitmap_set(smmu.ctxbank_bitmap, (size_t)nth);
188188
}
@@ -247,7 +247,7 @@ ssize_t smmu_alloc_sme(void)
247247
{
248248
spin_lock(&smmu.sme_lock);
249249
/* Find a free sme. */
250-
ssize_t nth = bitmap_find_nth(smmu.sme_bitmap, smmu.sme_num, 1, 0, false);
250+
ssize_t nth = bitmap_find_nth(smmu.sme_bitmap, smmu.sme_num, 1, 0, BITMAP_DONT_SET);
251251
if (nth >= 0) {
252252
bitmap_set(smmu.sme_bitmap, (size_t)nth);
253253
}

src/arch/armv8/armv8-r/vmm.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ void vmm_arch_profile_init()
2929

3030
timer_freq = timer_ctl->CNTDIF0;
3131

32-
mem_unmap(&cpu()->as, (vaddr_t)timer_ctl, sizeof(struct generic_timer_cntctrl), false);
32+
mem_unmap(&cpu()->as, (vaddr_t)timer_ctl, sizeof(struct generic_timer_cntctrl),
33+
MEM_DONT_FREE_PAGES);
3334
}
3435

3536
cpu_sync_barrier(&cpu_glb_sync);

src/arch/armv8/inc/arch/vgic.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ struct vgic_priv {
7171
struct vgic_int interrupts[GIC_CPU_PRIV];
7272
};
7373

74+
#define VGIC_GICR_ACCESS true
75+
#define VGIC_NO_GICR_ACCESS false
76+
7477
void vgic_init(struct vm* vm, const struct vgic_dscrp* vgic_dscrp);
7578
void vgic_cpu_init(struct vcpu* vcpu);
7679
void vgic_set_hw(struct vm* vm, irqid_t id);

src/arch/armv8/vgic.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -968,7 +968,7 @@ bool vgicd_emul_handler(struct emul_access* acc)
968968

969969
if (vgic_check_reg_alignment(acc, handler_info)) {
970970
spin_lock(&cpu()->vcpu->vm->arch.vgicd.lock);
971-
handler_info->reg_access(acc, handler_info, false, cpu()->vcpu->id);
971+
handler_info->reg_access(acc, handler_info, VGIC_NO_GICR_ACCESS, cpu()->vcpu->id);
972972
spin_unlock(&cpu()->vcpu->vm->arch.vgicd.lock);
973973
return true;
974974
} else {

src/arch/armv8/vgicv2.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,8 @@ void vgic_init(struct vm* vm, const struct vgic_dscrp* vgic_dscrp)
154154
(vaddr_t)platform.arch.gic.gicv_addr, n);
155155

156156
size_t vgic_int_size = vm->arch.vgicd.int_num * sizeof(struct vgic_int);
157-
vm->arch.vgicd.interrupts = mem_alloc_page(NUM_PAGES(vgic_int_size), SEC_HYP_VM, false);
157+
vm->arch.vgicd.interrupts =
158+
mem_alloc_page(NUM_PAGES(vgic_int_size), SEC_HYP_VM, MEM_DONT_ALIGN_PPAGES);
158159
if (vm->arch.vgicd.interrupts == NULL) {
159160
ERROR("failed to alloc vgic");
160161
}

src/arch/armv8/vgicv3.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ static bool vgicr_emul_handler(struct emul_access* acc)
276276
struct vcpu* vcpu =
277277
vgicr_id == cpu()->vcpu->id ? cpu()->vcpu : vm_get_vcpu(cpu()->vcpu->vm, vgicr_id);
278278
spin_lock(&vcpu->arch.vgic_priv.vgicr.lock);
279-
handler_info->reg_access(acc, handler_info, true, vgicr_id);
279+
handler_info->reg_access(acc, handler_info, VGIC_GICR_ACCESS, vgicr_id);
280280
spin_unlock(&vcpu->arch.vgic_priv.vgicr.lock);
281281
return true;
282282
} else {
@@ -330,7 +330,8 @@ void vgic_init(struct vm* vm, const struct vgic_dscrp* vgic_dscrp)
330330
vm->arch.vgicd.IIDR = gicd->IIDR;
331331

332332
size_t vgic_int_size = vm->arch.vgicd.int_num * sizeof(struct vgic_int);
333-
vm->arch.vgicd.interrupts = mem_alloc_page(NUM_PAGES(vgic_int_size), SEC_HYP_VM, false);
333+
vm->arch.vgicd.interrupts =
334+
mem_alloc_page(NUM_PAGES(vgic_int_size), SEC_HYP_VM, MEM_DONT_ALIGN_PPAGES);
334335
if (vm->arch.vgicd.interrupts == NULL) {
335336
ERROR("failed to alloc vgic");
336337
}

src/arch/riscv/iommu.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ static void rv_iommu_init(void)
274274

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

@@ -302,7 +302,7 @@ static void rv_iommu_init(void)
302302

303303
// Allocate a page of memory (aligned) for the DDT
304304
vaddr_t ddt_vaddr = (vaddr_t)mem_alloc_page(NUM_PAGES(sizeof(struct ddt_entry) * DDT_N_ENTRIES),
305-
SEC_HYP_GLOBAL, true);
305+
SEC_HYP_GLOBAL, MEM_ALIGN_PPAGES);
306306
// Clear entries
307307
memset((void*)ddt_vaddr, 0, sizeof(struct ddt_entry) * DDT_N_ENTRIES);
308308
rv_iommu.hw.ddt = (struct ddt_entry*)ddt_vaddr;

src/core/inc/mem.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,12 @@ struct shmem {
4949
spinlock_t lock;
5050
};
5151

52+
#define MEM_ALIGN_PPAGES true
53+
#define MEM_DONT_ALIGN_PPAGES false
54+
55+
#define MEM_FREE_PAGES true
56+
#define MEM_DONT_FREE_PAGES false
57+
5258
static inline struct ppages mem_ppages_get(paddr_t base, size_t num_pages)
5359
{
5460
return (struct ppages){ .colors = 0, .base = base, .num_pages = num_pages };

src/core/mem.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ bool pp_alloc(struct page_pool* pool, size_t num_pages, bool aligned, struct ppa
4444
*/
4545
for (size_t i = 0; i < 2 && !ok; i++) {
4646
while (pool->free != 0) {
47-
ssize_t bit = bitmap_find_consec(pool->bitmap, pool->size, curr, num_pages, false);
47+
ssize_t bit =
48+
bitmap_find_consec(pool->bitmap, pool->size, curr, num_pages, BITMAP_DONT_SET);
4849

4950
if (bit < 0) {
5051
/**
@@ -215,7 +216,7 @@ static void pp_init(struct page_pool* pool, paddr_t base, size_t size)
215216
return;
216217
}
217218

218-
pages = mem_alloc_ppages(cpu()->as.colors, bitmap_size, false);
219+
pages = mem_alloc_ppages(cpu()->as.colors, bitmap_size, MEM_DONT_ALIGN_PPAGES);
219220
if (pages.num_pages != bitmap_size) {
220221
return;
221222
}

src/core/mmu/mem.c

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
#include <tlb.h>
1717
#include <config.h>
1818

19+
#define MEM_SEC_SHARED true
20+
#define MEM_SEC_NOT_SHARED false
21+
1922
extern uint8_t _image_start, _image_load_end, _image_end, _dmem_phys_beg, _dmem_beg,
2023
_cpu_private_beg, _cpu_private_end, _vm_beg, _vm_end, _vm_image_start, _vm_image_end;
2124

@@ -34,15 +37,16 @@ struct section {
3437
};
3538

3639
struct section hyp_secs[] = {
37-
[SEC_HYP_GLOBAL] = { (vaddr_t)&_dmem_beg, (vaddr_t)&_cpu_private_beg - 1, true,
40+
[SEC_HYP_GLOBAL] = { (vaddr_t)&_dmem_beg, (vaddr_t)&_cpu_private_beg - 1, MEM_SEC_SHARED,
3841
SPINLOCK_INITVAL },
39-
[SEC_HYP_IMAGE] = { (vaddr_t)&_image_start, (vaddr_t)&_image_end - 1, true, SPINLOCK_INITVAL },
40-
[SEC_HYP_PRIVATE] = { (vaddr_t)&_cpu_private_beg, (vaddr_t)&_cpu_private_end - 1, false,
42+
[SEC_HYP_IMAGE] = { (vaddr_t)&_image_start, (vaddr_t)&_image_end - 1, MEM_SEC_SHARED,
4143
SPINLOCK_INITVAL },
42-
[SEC_HYP_VM] = { (vaddr_t)&_vm_beg, (vaddr_t)&_vm_end - 1, true, SPINLOCK_INITVAL },
44+
[SEC_HYP_PRIVATE] = { (vaddr_t)&_cpu_private_beg, (vaddr_t)&_cpu_private_end - 1,
45+
MEM_SEC_NOT_SHARED, SPINLOCK_INITVAL },
46+
[SEC_HYP_VM] = { (vaddr_t)&_vm_beg, (vaddr_t)&_vm_end - 1, MEM_SEC_SHARED, SPINLOCK_INITVAL },
4347
};
4448

45-
struct section vm_secs[] = { [SEC_VM_ANY] = { 0x0, MAX_VA, false, SPINLOCK_INITVAL } };
49+
struct section vm_secs[] = { [SEC_VM_ANY] = { 0x0, MAX_VA, MEM_SEC_NOT_SHARED, SPINLOCK_INITVAL } };
4650

4751
struct {
4852
struct section* sec;
@@ -189,7 +193,8 @@ static inline pte_t* mem_alloc_pt(struct addr_space* as, pte_t* parent, size_t l
189193
{
190194
/* Must have lock on as and va section to call */
191195
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);
196+
struct ppages ppage =
197+
mem_alloc_ppages(as->colors, ptsize, ptsize > 1 ? MEM_ALIGN_PPAGES : MEM_DONT_ALIGN_PPAGES);
193198
if (ppage.num_pages == 0) {
194199
return NULL;
195200
}
@@ -504,7 +509,7 @@ static bool mem_map(struct addr_space* as, vaddr_t va, struct ppages* ppages, si
504509

505510
struct ppages temp_ppages;
506511
if (ppages == NULL && !all_clrs(as->colors)) {
507-
temp_ppages = mem_alloc_ppages(as->colors, num_pages, false);
512+
temp_ppages = mem_alloc_ppages(as->colors, num_pages, MEM_DONT_ALIGN_PPAGES);
508513
if (temp_ppages.num_pages < num_pages) {
509514
ERROR("failed to alloc colored physical pages");
510515
}
@@ -547,7 +552,8 @@ static bool mem_map(struct addr_space* as, vaddr_t va, struct ppages* ppages, si
547552
while ((entry < nentries) && (count < num_pages) &&
548553
(num_pages - count >= lvlsz / PAGE_SIZE)) {
549554
if (ppages == NULL) {
550-
struct ppages temp = mem_alloc_ppages(as->colors, lvlsz / PAGE_SIZE, true);
555+
struct ppages temp =
556+
mem_alloc_ppages(as->colors, lvlsz / PAGE_SIZE, MEM_ALIGN_PPAGES);
551557
if (temp.num_pages < lvlsz / PAGE_SIZE) {
552558
if (lvl == (as->pt.dscr->lvls - 1)) {
553559
// TODO: free previously allocated pages
@@ -612,7 +618,7 @@ bool mem_map_reclr(struct addr_space* as, vaddr_t va, struct ppages* ppages, siz
612618
}
613619

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

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

674-
mem_unmap(&cpu()->as, reclrd_va_base, reclrd_num, false);
675-
mem_unmap(&cpu()->as, phys_va_base, num_pages, false);
680+
mem_unmap(&cpu()->as, reclrd_va_base, reclrd_num, MEM_DONT_FREE_PAGES);
681+
mem_unmap(&cpu()->as, phys_va_base, num_pages, MEM_DONT_FREE_PAGES);
676682

677683
return true;
678684
}
@@ -712,7 +718,7 @@ vaddr_t mem_map_cpy(struct addr_space* ass, struct addr_space* asd, vaddr_t vas,
712718

713719
static void* copy_space(void* base, const size_t size, struct ppages* pages)
714720
{
715-
*pages = mem_alloc_ppages(cpu()->as.colors, NUM_PAGES(size), false);
721+
*pages = mem_alloc_ppages(cpu()->as.colors, NUM_PAGES(size), MEM_DONT_ALIGN_PPAGES);
716722
vaddr_t va = mem_alloc_vpage(&cpu()->as, SEC_HYP_PRIVATE, INVALID_VA, NUM_PAGES(size));
717723
mem_map(&cpu()->as, va, pages, NUM_PAGES(size), PTE_HYP_FLAGS);
718724
memcpy((void*)va, base, size);
@@ -873,14 +879,14 @@ void mem_color_hypervisor(const paddr_t load_addr, struct mem_region* root_regio
873879
va = mem_alloc_vpage(&cpu()->as, SEC_HYP_GLOBAL, INVALID_VA, p_image.num_pages);
874880
mem_map(&cpu()->as, va, &p_image, p_image.num_pages, PTE_HYP_FLAGS);
875881
memset((void*)va, 0, p_image.num_pages * PAGE_SIZE);
876-
mem_unmap(&cpu()->as, va, p_image.num_pages, true);
882+
mem_unmap(&cpu()->as, va, p_image.num_pages, MEM_FREE_PAGES);
877883

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

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

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

903909
void as_init(struct addr_space* as, enum AS_TYPE type, asid_t id, pte_t* root_pt, colormap_t colors)
@@ -911,7 +917,7 @@ void as_init(struct addr_space* as, enum AS_TYPE type, asid_t id, pte_t* root_pt
911917
if (root_pt == NULL) {
912918
size_t n = NUM_PAGES(pt_size(&as->pt, 0));
913919
root_pt = (pte_t*)mem_alloc_page(n,
914-
type == AS_HYP || type == AS_HYP_CPY ? SEC_HYP_PRIVATE : SEC_HYP_VM, true);
920+
type == AS_HYP || type == AS_HYP_CPY ? SEC_HYP_PRIVATE : SEC_HYP_VM, MEM_ALIGN_PPAGES);
915921
memset((void*)root_pt, 0, n * PAGE_SIZE);
916922
}
917923
as->pt.root = root_pt;

0 commit comments

Comments
 (0)