Skip to content

Commit b9018f0

Browse files
malejo97josecm
authored andcommitted
fix(mem): fix root pool bitmap size
Signed-off-by: Manuel Rodríguez <[email protected]>
1 parent a7a02e7 commit b9018f0

File tree

4 files changed

+22
-22
lines changed

4 files changed

+22
-22
lines changed

src/core/inc/mem.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ struct ppages {
2424
struct page_pool {
2525
node_t node;
2626
paddr_t base;
27-
size_t size;
27+
size_t num_pages;
2828
size_t free;
2929
size_t last;
3030
bitmap_t* bitmap;

src/core/mem.c

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ bool pp_alloc(struct page_pool* pool, size_t num_pages, bool aligned, struct ppa
5151
*/
5252
for (size_t i = 0; i < 2 && !ok; i++) {
5353
while (pool->free != 0) {
54-
ssize_t bit = bitmap_find_consec(pool->bitmap, pool->size, curr, num_pages, false);
54+
ssize_t bit = bitmap_find_consec(pool->bitmap, pool->num_pages, curr, num_pages, false);
5555

5656
if (bit < 0) {
5757
/**
@@ -93,14 +93,14 @@ static bool mem_are_ppages_reserved_in_pool(struct page_pool* ppool, struct ppag
9393
{
9494
bool reserved = false;
9595
bool rgn_found = range_in_range(ppages->base, ppages->num_pages * PAGE_SIZE, ppool->base,
96-
ppool->size * PAGE_SIZE);
96+
ppool->num_pages * PAGE_SIZE);
9797
if (rgn_found) {
9898
size_t pageoff = NUM_PAGES(ppages->base - ppool->base);
9999

100100
// verify these pages arent allocated yet
101101
bool is_alloced = bitmap_get(ppool->bitmap, pageoff);
102102
size_t avlbl_contig_pp =
103-
bitmap_count_consecutive(ppool->bitmap, ppool->size, pageoff, ppages->num_pages);
103+
bitmap_count_consecutive(ppool->bitmap, ppool->num_pages, pageoff, ppages->num_pages);
104104

105105
if (is_alloced || avlbl_contig_pp < ppages->num_pages) {
106106
reserved = true;
@@ -113,7 +113,7 @@ static bool mem_are_ppages_reserved_in_pool(struct page_pool* ppool, struct ppag
113113
static bool mem_reserve_ppool_ppages(struct page_pool* pool, struct ppages* ppages)
114114
{
115115
bool is_in_rgn = range_in_range(ppages->base, ppages->num_pages * PAGE_SIZE, pool->base,
116-
pool->size * PAGE_SIZE);
116+
pool->num_pages * PAGE_SIZE);
117117
if (!is_in_rgn) {
118118
return true;
119119
}
@@ -149,11 +149,10 @@ static bool root_pool_set_up_bitmap(paddr_t load_addr, struct page_pool* root_po
149149
size_t vm_image_size = (size_t)(&_vm_image_end - &_vm_image_start);
150150
size_t cpu_size = platform.cpu_num * mem_cpu_boot_alloc_size();
151151

152-
size_t bitmap_size =
153-
root_pool->size / (8 * PAGE_SIZE) + ((root_pool->size % (8 * PAGE_SIZE) != 0) ? 1 : 0);
152+
size_t bitmap_size = root_pool->num_pages / 8 + ((root_pool->num_pages % 8 != 0) ? 1 : 0);
154153
size_t bitmap_num_pages = NUM_PAGES(bitmap_size);
155154

156-
if (root_pool->size <= bitmap_size) {
155+
if (root_pool->num_pages <= bitmap_num_pages) {
157156
return false;
158157
}
159158
size_t bitmap_base = load_addr + image_size + vm_image_size + cpu_size;
@@ -192,9 +191,9 @@ static bool pp_root_init(paddr_t load_addr, struct mem_region* root_region)
192191
{
193192
struct page_pool* root_pool = &root_region->page_pool;
194193
root_pool->base = ALIGN(root_region->base, PAGE_SIZE);
195-
root_pool->size = root_region->size / PAGE_SIZE; /* TODO: what if not
196-
aligned? */
197-
root_pool->free = root_pool->size;
194+
root_pool->num_pages = root_region->size / PAGE_SIZE; /* TODO: what if not
195+
aligned? */
196+
root_pool->free = root_pool->num_pages;
198197

199198
if (!root_pool_set_up_bitmap(load_addr, root_pool)) {
200199
return false;
@@ -217,15 +216,16 @@ static void pp_init(struct page_pool* pool, paddr_t base, size_t size)
217216

218217
memset((void*)pool, 0, sizeof(struct page_pool));
219218
pool->base = ALIGN(base, PAGE_SIZE);
220-
pool->size = NUM_PAGES(size);
221-
size_t bitmap_size = pool->size / (8 * PAGE_SIZE) + !!(pool->size % (8 * PAGE_SIZE) != 0);
219+
pool->num_pages = NUM_PAGES(size);
220+
size_t bitmap_size = pool->num_pages / 8 + !!(pool->num_pages % 8 != 0);
221+
size_t bitmap_num_pages = NUM_PAGES(bitmap_size);
222222

223-
if (size <= bitmap_size) {
223+
if (size <= bitmap_num_pages) {
224224
return;
225225
}
226226

227-
pages = mem_alloc_ppages(cpu()->as.colors, bitmap_size, false);
228-
if (pages.num_pages != bitmap_size) {
227+
pages = mem_alloc_ppages(cpu()->as.colors, bitmap_num_pages, false);
228+
if (pages.num_pages != bitmap_num_pages) {
229229
return;
230230
}
231231

@@ -234,10 +234,10 @@ static void pp_init(struct page_pool* pool, paddr_t base, size_t size)
234234
return;
235235
}
236236

237-
memset((void*)pool->bitmap, 0, bitmap_size * PAGE_SIZE);
237+
memset((void*)pool->bitmap, 0, bitmap_num_pages * PAGE_SIZE);
238238

239239
pool->last = 0;
240-
pool->free = pool->size;
240+
pool->free = pool->num_pages;
241241
pool->lock = SPINLOCK_INITVAL;
242242
}
243243

src/core/mmu/mem.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ static void mem_free_ppages(struct ppages* ppages)
7878
{
7979
list_foreach (page_pool_list, struct page_pool, pool) {
8080
spin_lock(&pool->lock);
81-
if (in_range(ppages->base, pool->base, pool->size * PAGE_SIZE)) {
81+
if (in_range(ppages->base, pool->base, pool->num_pages * PAGE_SIZE)) {
8282
size_t index = (ppages->base - pool->base) / PAGE_SIZE;
8383
if (!all_clrs(ppages->colors)) {
8484
for (size_t i = 0; i < ppages->num_pages; i++) {
@@ -110,7 +110,7 @@ bool pp_alloc_clr(struct page_pool* pool, size_t n, colormap_t colors, struct pp
110110
* top of the pool.
111111
*/
112112
size_t index = pp_next_clr(pool->base, pool->last, colors);
113-
size_t top = pool->size;
113+
size_t top = pool->num_pages;
114114

115115
/**
116116
* Two iterations. One starting from the last known free page, other starting from the
@@ -748,7 +748,7 @@ void mem_color_hypervisor(const paddr_t load_addr, struct mem_region* root_regio
748748
size_t cpu_boot_size = mem_cpu_boot_alloc_size();
749749
struct page_pool* root_pool = &root_region->page_pool;
750750
size_t bitmap_size =
751-
(root_pool->size / (8 * PAGE_SIZE) + !!(root_pool->size % (8 * PAGE_SIZE) != 0)) *
751+
(root_pool->num_pages / (8 * PAGE_SIZE) + !!(root_pool->num_pages % (8 * PAGE_SIZE) != 0)) *
752752
PAGE_SIZE;
753753
colormap_t colors = config.hyp.colors;
754754

src/core/mpu/mem.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ static void mem_free_ppages(struct ppages* ppages)
222222
{
223223
list_foreach (page_pool_list, struct page_pool, pool) {
224224
spin_lock(&pool->lock);
225-
if (in_range(ppages->base, pool->base, pool->size * PAGE_SIZE)) {
225+
if (in_range(ppages->base, pool->base, pool->num_pages * PAGE_SIZE)) {
226226
size_t index = (ppages->base - pool->base) / PAGE_SIZE;
227227
bitmap_clear_consecutive(pool->bitmap, index, ppages->num_pages);
228228
}

0 commit comments

Comments
 (0)