x86/domain: compile with lock_profile=y enabled

Our 'struct domain' has when lock profiling is enabled is bigger than
one page.

We can't use vmap nor vzalloc as both of those stash the
physical address in struct page which makes the assumptions
in 'arch_init_memory' trip over ASSERTs.

Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
This commit is contained in:
Konrad Rzeszutek Wilk authored and Jan Beulich committed 2015-12-21 13:35:55 +01:00
1 parent a2b4b8c204
commit 8916fcf457
1 file changed
+11 -2
+11 -2
View File
@@ -231,6 +231,7 @@ static unsigned int __init noinline _domain_struct_bits(void)
struct domain *alloc_domain_struct(void)
{
struct domain *d;
unsigned int order = get_order_from_bytes(sizeof(*d));
#ifdef CONFIG_BIGMEM
const unsigned int bits = 0;
#else
@@ -244,10 +245,18 @@ struct domain *alloc_domain_struct(void)
bits = _domain_struct_bits();
#endif
#ifndef LOCK_PROFILE
BUILD_BUG_ON(sizeof(*d) > PAGE_SIZE);
d = alloc_xenheap_pages(0, MEMF_bits(bits));
#endif
d = alloc_xenheap_pages(order, MEMF_bits(bits));
if ( d != NULL )
clear_page(d);
{
unsigned int sz;
for ( sz = 0; sz < (PAGE_SIZE << order); sz += PAGE_SIZE )
clear_page((void *)d + sz);
}
return d;
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.