[XEN] Debug builds check for correct usage of percpu areas.

Signed-off-by: Keir Fraser <keir@xensource.com>
This commit is contained in:
kfraser@localhost.localdomain committed 2006-08-22 11:33:59 +01:00
1 parent fe88c68919
commit 2da679e04b
1 file changed
+23 -10
+23 -10
View File
@@ -160,19 +160,29 @@ void discard_initial_images(void)
extern char __per_cpu_start[], __per_cpu_data_end[], __per_cpu_end[];
static void percpu_init_areas(void)
static void __init percpu_init_areas(void)
{
unsigned int i, data_size = __per_cpu_data_end - __per_cpu_start;
BUG_ON(data_size > PERCPU_SIZE);
for ( i = 1; i < NR_CPUS; i++ )
memcpy(__per_cpu_start + (i << PERCPU_SHIFT),
__per_cpu_start,
data_size);
for_each_cpu ( i )
{
memguard_unguard_range(__per_cpu_start + (i << PERCPU_SHIFT),
1 << PERCPU_SHIFT);
if ( i != 0 )
memcpy(__per_cpu_start + (i << PERCPU_SHIFT),
__per_cpu_start,
data_size);
}
}
static void percpu_free_unused_areas(void)
static void __init percpu_guard_areas(void)
{
memguard_guard_range(__per_cpu_start, __per_cpu_end - __per_cpu_start);
}
static void __init percpu_free_unused_areas(void)
{
unsigned int i, first_unused;
@@ -186,11 +196,13 @@ static void percpu_free_unused_areas(void)
for ( ; i < NR_CPUS; i++ )
BUG_ON(cpu_online(i));
#ifndef MEMORY_GUARD
init_xenheap_pages(__pa(__per_cpu_start) + (first_unused << PERCPU_SHIFT),
__pa(__per_cpu_end));
#endif
}
static void init_idle_domain(void)
static void __init init_idle_domain(void)
{
struct domain *idle_domain;
@@ -260,8 +272,6 @@ void __init __start_xen(multiboot_info_t *mbi)
EARLY_FAIL();
}
percpu_init_areas();
xenheap_phys_end = opt_xenheap_megabytes << 20;
if ( mbi->flags & MBI_MEMMAP )
@@ -399,6 +409,7 @@ void __init __start_xen(multiboot_info_t *mbi)
}
memguard_init();
percpu_guard_areas();
printk("System RAM: %luMB (%lukB)\n",
nr_pages >> (20 - PAGE_SHIFT),
@@ -477,13 +488,15 @@ void __init __start_xen(multiboot_info_t *mbi)
acpi_boot_table_init();
acpi_boot_init();
if ( smp_found_config )
if ( smp_found_config )
get_smp_config();
init_apic_mappings();
init_IRQ();
percpu_init_areas();
init_idle_domain();
trap_init();
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.