30 lines
1.0 KiB
Diff
30 lines
1.0 KiB
Diff
|
# Commit ac2cba2901779f66bbfab298faa15c956e91393a
|
||
|
# Date 2014-03-10 14:40:50 +0100
|
||
|
# Author Julien Grall <julien.grall@linaro.org>
|
||
|
# Committer Jan Beulich <jbeulich@suse.com>
|
||
|
xmalloc: handle correctly page allocation when align > size
|
||
|
|
||
|
When align is superior to size, we need to retrieve the order from
|
||
|
align during multiple page allocation. I guess it was the goal of the commit
|
||
|
fb034f42 "xmalloc: make close-to-PAGE_SIZE allocations more efficient".
|
||
|
|
||
|
Signed-off-by: Julien Grall <julien.grall@linaro.org>
|
||
|
Acked-by: Keir Fraser <keir@xen.org>
|
||
|
|
||
|
--- a/xen/common/xmalloc_tlsf.c
|
||
|
+++ b/xen/common/xmalloc_tlsf.c
|
||
|
@@ -527,11 +527,10 @@ static void xmalloc_pool_put(void *p)
|
||
|
|
||
|
static void *xmalloc_whole_pages(unsigned long size, unsigned long align)
|
||
|
{
|
||
|
- unsigned int i, order = get_order_from_bytes(size);
|
||
|
+ unsigned int i, order;
|
||
|
void *res, *p;
|
||
|
|
||
|
- if ( align > size )
|
||
|
- get_order_from_bytes(align);
|
||
|
+ order = get_order_from_bytes(max(align, size));
|
||
|
|
||
|
res = alloc_xenheap_pages(order, 0);
|
||
|
if ( res == NULL )
|