mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
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:
1 parent
a2b4b8c204
commit
8916fcf457
1 file changed
+11
-2
+11
-2
@@ -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;
|
||||
}
|
||||
|
||||
|
||||