[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Merge.
# HG changeset patch # User emellor@ewan # Node ID 193022cb9cccceb6dda3bb2bdd7105703da60265 # Parent 89974610d558644b9e53aff99be060d9c0d3fe3d # Parent eae0c4f0aafd8c2963d8c64c401d3f53a9ec9cfe Merge. diff -r 89974610d558 -r 193022cb9ccc linux-2.6-xen-sparse/arch/xen/configs/xen_defconfig_x86_32 --- a/linux-2.6-xen-sparse/arch/xen/configs/xen_defconfig_x86_32 Wed Sep 28 14:00:11 2005 +++ b/linux-2.6-xen-sparse/arch/xen/configs/xen_defconfig_x86_32 Wed Sep 28 14:01:09 2005 @@ -2684,7 +2684,7 @@ # # File systems # -CONFIG_EXT2_FS=m +CONFIG_EXT2_FS=y CONFIG_EXT2_FS_XATTR=y CONFIG_EXT2_FS_POSIX_ACL=y CONFIG_EXT2_FS_SECURITY=y @@ -2913,7 +2913,7 @@ # CONFIG_KEYS_DEBUG_PROC_KEYS is not set CONFIG_SECURITY=y # CONFIG_SECURITY_NETWORK is not set -CONFIG_SECURITY_CAPABILITIES=m +CONFIG_SECURITY_CAPABILITIES=y CONFIG_SECURITY_ROOTPLUG=m CONFIG_SECURITY_SECLVL=m CONFIG_SECURITY_SELINUX=y diff -r 89974610d558 -r 193022cb9ccc tools/firmware/vmxassist/gen.c --- a/tools/firmware/vmxassist/gen.c Wed Sep 28 14:00:11 2005 +++ b/tools/firmware/vmxassist/gen.c Wed Sep 28 14:01:09 2005 @@ -23,7 +23,7 @@ #include <vm86.h> int -main() +main(void) { printf("/* MACHINE GENERATED; DO NOT EDIT */\n"); printf("#define VMX_ASSIST_CTX_GS_SEL 0x%x\n", diff -r 89974610d558 -r 193022cb9ccc tools/firmware/vmxassist/head.S --- a/tools/firmware/vmxassist/head.S Wed Sep 28 14:00:11 2005 +++ b/tools/firmware/vmxassist/head.S Wed Sep 28 14:01:09 2005 @@ -110,6 +110,10 @@ _start: cli + /* save register parameters to C land */ + movl %edx, booting_cpu + movl %ebx, booting_vector + /* clear bss */ cld xorb %al, %al @@ -128,7 +132,6 @@ /* go ... */ call main jmp halt - /* * Something bad happened, print invoking %eip and loop forever diff -r 89974610d558 -r 193022cb9ccc tools/firmware/vmxassist/setup.c --- a/tools/firmware/vmxassist/setup.c Wed Sep 28 14:00:11 2005 +++ b/tools/firmware/vmxassist/setup.c Wed Sep 28 14:01:09 2005 @@ -29,6 +29,9 @@ #define min(a, b) ((a) > (b) ? (b) : (a)) +/* Which CPU are we booting, and what is the initial CS segment? */ +int booting_cpu, booting_vector; + unsigned long long gdt[] __attribute__ ((aligned(32))) = { 0x0000000000000000ULL, /* 0x00: reserved */ 0x0000890000000000ULL, /* 0x08: 32-bit TSS */ @@ -201,12 +204,17 @@ initialize_real_mode = 0; regs->eflags |= EFLAGS_VM | 0x02; regs->ves = regs->vds = regs->vfs = regs->vgs = 0xF000; - regs->cs = 0xF000; /* ROM BIOS POST entry point */ -#ifdef TEST - regs->eip = 0xFFE0; + if (booting_cpu == 0) { + regs->cs = 0xF000; /* ROM BIOS POST entry point */ +#ifdef TEST + regs->eip = 0xFFE0; #else - regs->eip = 0xFFF0; -#endif + regs->eip = 0xFFF0; +#endif + } else { + regs->cs = booting_vector << 8; /* AP entry point */ + regs->eip = 0; + } regs->uesp = 0; regs->uss = 0; printf("Starting emulated 16-bit real-mode: ip=%04x:%04x\n", @@ -215,8 +223,8 @@ mode = VM86_REAL; /* becomes previous mode */ set_mode(regs, VM86_REAL); - /* this should get us into 16-bit mode */ - return; + /* this should get us into 16-bit mode */ + return; } else { /* go from protected to real mode */ regs->eflags |= EFLAGS_VM; @@ -334,7 +342,12 @@ { unsigned long cr0; - printf("Start BIOS ...\n"); + if (booting_cpu == 0) + printf("Start BIOS ...\n"); + else + printf("Start AP %d from %08x ...\n", + booting_cpu, booting_vector << 12); + initialize_real_mode = 1; cr0 = get_cr0(); #ifndef TEST @@ -345,20 +358,28 @@ } int -main() -{ - banner(); +main(void) +{ + if (booting_cpu == 0) + banner(); + #ifdef TEST setup_paging(); #endif + setup_gdt(); setup_idt(); + #ifndef TEST - set_cr4(get_cr4() | CR4_VME); -#endif + set_cr4(get_cr4() | CR4_VME); +#endif + setup_ctx(); - setup_pic(); + + if (booting_cpu == 0) + setup_pic(); + start_bios(); + return 0; } - diff -r 89974610d558 -r 193022cb9ccc tools/firmware/vmxassist/vmxloader.c --- a/tools/firmware/vmxassist/vmxloader.c Wed Sep 28 14:00:11 2005 +++ b/tools/firmware/vmxassist/vmxloader.c Wed Sep 28 14:01:09 2005 @@ -132,11 +132,12 @@ memcpy((void *)ACPI_PHYSICAL_ADDRESS, acpi, sizeof(acpi)); } #endif - + puts("Loading VMXAssist ...\n"); memcpy((void *)TEXTADDR, vmxassist, sizeof(vmxassist)); + puts("Go ...\n"); - ((void (*)())TEXTADDR)(); + asm volatile ( "jmp *%%eax" : : "a" (TEXTADDR), "d" (0) ); + return 0; } - diff -r 89974610d558 -r 193022cb9ccc tools/ioemu/vl.c --- a/tools/ioemu/vl.c Wed Sep 28 14:00:11 2005 +++ b/tools/ioemu/vl.c Wed Sep 28 14:01:09 2005 @@ -2385,7 +2385,8 @@ setup_mapping(int xc_handle, u32 dom, unsigned long toptab, unsigned long *mem_page_array, unsigned long *page_table_array, unsigned long v_start, unsigned long v_end) { l1_pgentry_t *vl1tab=NULL, *vl1e=NULL; - l2_pgentry_t *vl2tab[4], *vl2e=NULL, *vl2_table = NULL; + l2_pgentry_t *vl2tab[4] = {NULL, NULL, NULL, NULL}; + l2_pgentry_t *vl2e=NULL, *vl2_table = NULL; unsigned long l1tab; unsigned long ppt_alloc = 0; unsigned long count; diff -r 89974610d558 -r 193022cb9ccc xen/arch/x86/shadow32.c --- a/xen/arch/x86/shadow32.c Wed Sep 28 14:00:11 2005 +++ b/xen/arch/x86/shadow32.c Wed Sep 28 14:01:09 2005 @@ -755,9 +755,13 @@ /* * Then free monitor_table. + * Note: for VMX guest, only BSP need do this free. */ - mfn = pagetable_get_pfn(v->arch.monitor_table); - free_domheap_page(&frame_table[mfn]); + if (!(VMX_DOMAIN(v) && v->vcpu_id)) { + mfn = pagetable_get_pfn(v->arch.monitor_table); + unmap_domain_page(v->arch.monitor_vtable); + free_domheap_page(&frame_table[mfn]); + } v->arch.monitor_table = mk_pagetable(0); v->arch.monitor_vtable = 0; diff -r 89974610d558 -r 193022cb9ccc xen/arch/x86/shadow_public.c --- a/xen/arch/x86/shadow_public.c Wed Sep 28 14:00:11 2005 +++ b/xen/arch/x86/shadow_public.c Wed Sep 28 14:01:09 2005 @@ -256,14 +256,16 @@ { unsigned long mfn; -// ASSERT( pagetable_val(v->arch.monitor_table) ); + ASSERT( pagetable_val(v->arch.monitor_table) ); /* * free monitor_table. + * Note: for VMX guest, only BSP need do this free. */ - //mfn = (pagetable_val(v->arch.monitor_table)) >> PAGE_SHIFT; - mfn = pagetable_get_pfn(v->arch.monitor_table); - unmap_domain_page(v->arch.monitor_vtable); - free_domheap_page(&frame_table[mfn]); + if (!(VMX_DOMAIN(v) && v->vcpu_id)) { + mfn = pagetable_get_pfn(v->arch.monitor_table); + unmap_domain_page(v->arch.monitor_vtable); + free_domheap_page(&frame_table[mfn]); + } v->arch.monitor_table = mk_pagetable(0); v->arch.monitor_vtable = 0; } @@ -358,9 +360,13 @@ /* * Then free monitor_table. + * Note: for VMX guest, only BSP need do this free. */ - mfn = pagetable_get_pfn(v->arch.monitor_table); - free_domheap_page(&frame_table[mfn]); + if (!(VMX_DOMAIN(v) && v->vcpu_id)) { + mfn = pagetable_get_pfn(v->arch.monitor_table); + unmap_domain_page(v->arch.monitor_vtable); + free_domheap_page(&frame_table[mfn]); + } v->arch.monitor_table = mk_pagetable(0); v->arch.monitor_vtable = 0; diff -r 89974610d558 -r 193022cb9ccc xen/arch/x86/vmx_platform.c --- a/xen/arch/x86/vmx_platform.c Wed Sep 28 14:00:11 2005 +++ b/xen/arch/x86/vmx_platform.c Wed Sep 28 14:01:09 2005 @@ -667,6 +667,7 @@ mpcip->instr = inst->instr; mpcip->operand[0] = inst->operand[0]; /* source */ mpcip->operand[1] = inst->operand[1]; /* destination */ + mpcip->immediate = inst->immediate; if (inst->operand[0] & REGISTER) { /* dest is memory */ index = operand_index(inst->operand[0]); @@ -833,12 +834,16 @@ mmio_operands(IOREQ_TYPE_XOR, gpa, &mmio_inst, mpcip, regs); break; - case INSTR_CMP: - mmio_operands(IOREQ_TYPE_COPY, gpa, &mmio_inst, mpcip, regs); - break; - + case INSTR_CMP: /* Pass through */ case INSTR_TEST: - mmio_operands(IOREQ_TYPE_COPY, gpa, &mmio_inst, mpcip, regs); + mpcip->flags = mmio_inst.flags; + mpcip->instr = mmio_inst.instr; + mpcip->operand[0] = mmio_inst.operand[0]; /* source */ + mpcip->operand[1] = mmio_inst.operand[1]; /* destination */ + mpcip->immediate = mmio_inst.immediate; + + /* send the request and wait for the value */ + send_mmio_req(IOREQ_TYPE_COPY, gpa, 1, mmio_inst.op_size, 0, IOREQ_READ, 0); break; default: _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |