@@ -25,7 +25,6 @@
struct alloc_ops {
void *(*memalign)(size_t alignment, size_t size);
void (*free)(void *ptr);
- size_t align_min;
};
extern struct alloc_ops *alloc_ops;
@@ -385,7 +385,6 @@ void *memalign_pages_area(unsigned int area, size_t alignment, size_t size)
static struct alloc_ops page_alloc_ops = {
.memalign = memalign_pages,
.free = free_pages,
- .align_min = PAGE_SIZE,
};
/*
@@ -29,8 +29,8 @@ static phys_addr_t base, top;
static void *early_memalign(size_t alignment, size_t size);
static struct alloc_ops early_alloc_ops = {
.memalign = early_memalign,
- .align_min = DEFAULT_MINIMUM_ALIGNMENT
};
+static size_t align_min;
struct alloc_ops *alloc_ops = &early_alloc_ops;
@@ -39,8 +39,7 @@ void phys_alloc_show(void)
int i;
spin_lock(&lock);
- printf("phys_alloc minimum alignment: %#" PRIx64 "\n",
- (u64)early_alloc_ops.align_min);
+ printf("phys_alloc minimum alignment: %#" PRIx64 "\n", (u64)align_min);
for (i = 0; i < nr_regions; ++i)
printf("%016" PRIx64 "-%016" PRIx64 " [%s]\n",
(u64)regions[i].base,
@@ -64,7 +63,7 @@ void phys_alloc_set_minimum_alignment(phys_addr_t align)
{
assert(align && !(align & (align - 1)));
spin_lock(&lock);
- early_alloc_ops.align_min = align;
+ align_min = align;
spin_unlock(&lock);
}
@@ -83,6 +82,8 @@ static phys_addr_t phys_alloc_aligned_safe(phys_addr_t size,
top_safe = MIN(top_safe, 1ULL << 32);
assert(base < top_safe);
+ if (align < align_min)
+ align = align_min;
addr = ALIGN(base, align);
size += addr - base;
@@ -192,7 +192,6 @@ static void vm_free(void *mem)
static struct alloc_ops vmalloc_ops = {
.memalign = vm_memalign,
.free = vm_free,
- .align_min = PAGE_SIZE,
};
void __attribute__((__weak__)) find_highmem(void)