[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH RFC 35/44] x86/smp: Allocate the stack in the percpu range
This involves allocating a total of 5 frames, which don't have to be an order-3 allocation, and unconditionally has guard pages in place for a primary stack overflow. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/arch/x86/smpboot.c | 27 ++++++++++++++++++++++++++- xen/include/asm-x86/config.h | 2 ++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/xen/arch/x86/smpboot.c b/xen/arch/x86/smpboot.c index cc80f24..1bf6dc1 100644 --- a/xen/arch/x86/smpboot.c +++ b/xen/arch/x86/smpboot.c @@ -762,7 +762,7 @@ static int percpu_alloc_frame(unsigned int cpu, unsigned long linear, /* Allocate data common between the BSP and APs. */ static int cpu_smpboot_alloc_common(unsigned int cpu) { - unsigned int memflags = 0; + unsigned int memflags = 0, i; nodeid_t node = cpu_to_node(cpu); l4_pgentry_t *l4t = NULL; l3_pgentry_t *l3t = NULL; @@ -843,6 +843,31 @@ static int cpu_smpboot_alloc_common(unsigned int cpu) if ( rc ) goto out; + /* Allocate the stack. */ + for ( i = 0; i < 8; ++i ) + { + BUILD_BUG_ON((1u << STACK_ORDER) != 8); + BUILD_BUG_ON(!IS_ALIGNED(PERCPU_STACK_MAPPING, STACK_SIZE)); + BUILD_BUG_ON((sizeof(struct cpu_info) - + offsetof(struct cpu_info, guest_cpu_user_regs.es)) & 0xf); + + /* + * Pages 0-2: #DF, #NMI, #MCE IST stacks + * Pages 3-5: Guard pages - UNMAPPED + * Pages 6-7: Main stack + */ + if ( i == 3 ) + { + i = 5; + continue; + } + + rc = percpu_alloc_frame(cpu, PERCPU_STACK_MAPPING + i * PAGE_SIZE, NULL, + PAGE_HYPERVISOR_RW | MAP_PERCPU_AUTOFREE); + if ( rc ) + goto out; + } + rc = 0; /* Success */ out: diff --git a/xen/include/asm-x86/config.h b/xen/include/asm-x86/config.h index cf6f1be..3974748 100644 --- a/xen/include/asm-x86/config.h +++ b/xen/include/asm-x86/config.h @@ -296,6 +296,8 @@ extern unsigned long xen_phys_start; #define PERCPU_LDT_MAPPING (PERCPU_LINEAR_START + MB(11)) #define PERCPU_LDT_MAPPING_END (PERCPU_LDT_MAPPING + 0x10000) +#define PERCPU_STACK_MAPPING (PERCPU_LINEAR_START + MB(12)) + #define MAX_VIRT_CPUS 8192 #define NATIVE_VM_ASSIST_VALID ((1UL << VMASST_TYPE_4gb_segments) | \ -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |