[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Merged.
# HG changeset patch # User emellor@xxxxxxxxxxxxxxxxxxxxxx # Node ID 114946d9937f15620cac11fc531781db56779829 # Parent b77ceb2481b330ad363b84bd1da65545f7630a92 # Parent ccb923727f93e8228e5693f8f3470c0d0fc45851 Merged. diff -r b77ceb2481b3 -r 114946d9937f tools/examples/vif-nat --- a/tools/examples/vif-nat Fri Dec 2 15:57:24 2005 +++ b/tools/examples/vif-nat Fri Dec 2 22:27:04 2005 @@ -91,8 +91,6 @@ netmask=$(dotted_quad $intmask) network=$(dotted_quad $(( $vif_int & $intmask )) ) -main_ip=$(dom0_ip) - dhcp_remove_entry() { @@ -140,7 +138,7 @@ do_or_die ip link set "$vif" up arp on do_or_die ip addr add "$router_ip" dev "$vif" - do_or_die ip route add "$vif_ip" dev "$vif" src "$main_ip" + do_or_die ip route add "$vif_ip" dev "$vif" src "$router_ip" echo 1 >/proc/sys/net/ipv4/conf/${vif}/proxy_arp [ "$dhcp" != 'no' ] && dhcp_up ;; diff -r b77ceb2481b3 -r 114946d9937f xen/arch/x86/Makefile --- a/xen/arch/x86/Makefile Fri Dec 2 15:57:24 2005 +++ b/xen/arch/x86/Makefile Fri Dec 2 22:27:04 2005 @@ -37,7 +37,8 @@ default: $(TARGET) $(TARGET): $(TARGET)-syms boot/mkelf32 - ./boot/mkelf32 $(TARGET)-syms $(TARGET) 0x100000 + ./boot/mkelf32 $(TARGET)-syms $(TARGET) 0x100000 \ + `nm $(TARGET)-syms | sort | tail -n 1 | sed -e 's/^\([^ ]*\).*/0x\1/'` $(CURDIR)/arch.o: $(OBJS) $(LD) $(LDFLAGS) -r -o $@ $(OBJS) diff -r b77ceb2481b3 -r 114946d9937f xen/arch/x86/boot/mkelf32.c --- a/xen/arch/x86/boot/mkelf32.c Fri Dec 2 15:57:24 2005 +++ b/xen/arch/x86/boot/mkelf32.c Fri Dec 2 22:27:04 2005 @@ -222,6 +222,7 @@ int main(int argc, char **argv) { + u64 final_exec_addr; u32 loadbase, dat_siz, mem_siz; char *inimage, *outimage; int infd, outfd; @@ -234,15 +235,17 @@ Elf64_Ehdr in64_ehdr; Elf64_Phdr in64_phdr; - if ( argc != 4 ) - { - fprintf(stderr, "Usage: mkelf32 <in-image> <out-image> <load-base>\n"); + if ( argc != 5 ) + { + fprintf(stderr, "Usage: mkelf32 <in-image> <out-image> " + "<load-base> <final-exec-addr>\n"); return 1; } inimage = argv[1]; outimage = argv[2]; loadbase = strtoul(argv[3], NULL, 16); + final_exec_addr = strtoul(argv[4], NULL, 16); infd = open(inimage, O_RDONLY); if ( infd == -1 ) @@ -286,7 +289,10 @@ (void)lseek(infd, in32_phdr.p_offset, SEEK_SET); dat_siz = (u32)in32_phdr.p_filesz; - mem_siz = (u32)in32_phdr.p_memsz; + + /* Do not use p_memsz: it does not include BSS alignment padding. */ + /*mem_siz = (u32)in32_phdr.p_memsz;*/ + mem_siz = (u32)(final_exec_addr - in32_phdr.p_vaddr); break; case ELFCLASS64: @@ -314,7 +320,10 @@ (void)lseek(infd, in64_phdr.p_offset, SEEK_SET); dat_siz = (u32)in64_phdr.p_filesz; - mem_siz = (u32)in64_phdr.p_memsz; + + /* Do not use p_memsz: it does not include BSS alignment padding. */ + /*mem_siz = (u32)in64_phdr.p_memsz;*/ + mem_siz = (u32)(final_exec_addr - in64_phdr.p_vaddr); break; default: diff -r b77ceb2481b3 -r 114946d9937f xen/arch/x86/boot/x86_32.S --- a/xen/arch/x86/boot/x86_32.S Fri Dec 2 15:57:24 2005 +++ b/xen/arch/x86/boot/x86_32.S Fri Dec 2 22:27:04 2005 @@ -74,16 +74,16 @@ cmp $0x2BADB002,%eax jne not_multiboot - /* Save the Multiboot info structure for later use. */ - add $__PAGE_OFFSET,%ebx - push %ebx - /* Initialize BSS (no nasty surprises!) */ mov $__bss_start-__PAGE_OFFSET,%edi mov $_end-__PAGE_OFFSET,%ecx sub %edi,%ecx xor %eax,%eax rep stosb + + /* Save the Multiboot info structure for later use. */ + add $__PAGE_OFFSET,%ebx + push %ebx #ifdef CONFIG_X86_PAE /* Initialize low and high mappings of all memory with 2MB pages */ @@ -238,27 +238,28 @@ .fill 2*NR_CPUS,8,0 /* space for TSS and LDT per CPU */ .org 0x2000 -/* Maximum STACK_ORDER for x86/32 is 1. We must therefore ensure that the */ -/* CPU0 stack is aligned on an even page boundary! */ -ENTRY(cpu0_stack) - .org 0x2000 + STACK_SIZE - -#ifdef CONFIG_X86_PAE - + +#ifdef CONFIG_X86_PAE ENTRY(idle_pg_table) ENTRY(idle_pg_table_l3) - .quad 0x100000 + 0x2000 + STACK_SIZE + 1*PAGE_SIZE + 0x01 - .quad 0x100000 + 0x2000 + STACK_SIZE + 2*PAGE_SIZE + 0x01 - .quad 0x100000 + 0x2000 + STACK_SIZE + 3*PAGE_SIZE + 0x01 - .quad 0x100000 + 0x2000 + STACK_SIZE + 4*PAGE_SIZE + 0x01 - .org 0x2000 + STACK_SIZE + 1*PAGE_SIZE + .long idle_pg_table_l2 + 0*PAGE_SIZE + 0x01 - __PAGE_OFFSET, 0 + .long idle_pg_table_l2 + 1*PAGE_SIZE + 0x01 - __PAGE_OFFSET, 0 + .long idle_pg_table_l2 + 2*PAGE_SIZE + 0x01 - __PAGE_OFFSET, 0 + .long idle_pg_table_l2 + 3*PAGE_SIZE + 0x01 - __PAGE_OFFSET, 0 +.section ".bss.page_aligned","w" ENTRY(idle_pg_table_l2) - .org 0x2000 + STACK_SIZE + 5*PAGE_SIZE - -#else /* CONFIG_X86_PAE */ - + .fill 4*PAGE_SIZE,1,0 +#else +.section ".bss.page_aligned","w" ENTRY(idle_pg_table) -ENTRY(idle_pg_table_l2) # Initial page directory is 4kB - .org 0x2000 + STACK_SIZE + PAGE_SIZE - -#endif /* CONFIG_X86_PAE */ +ENTRY(idle_pg_table_l2) + .fill 1*PAGE_SIZE,1,0 +#endif + +#if (STACK_ORDER == 0) +.section ".bss.page_aligned","w" +#else +.section ".bss.twopage_aligned","w" +#endif +ENTRY(cpu0_stack) + .fill STACK_SIZE,1,0 diff -r b77ceb2481b3 -r 114946d9937f xen/arch/x86/boot/x86_64.S --- a/xen/arch/x86/boot/x86_64.S Fri Dec 2 15:57:24 2005 +++ b/xen/arch/x86/boot/x86_64.S Fri Dec 2 22:27:04 2005 @@ -249,13 +249,8 @@ ENTRY(idle_pg_table_l3) .quad idle_pg_table_l2 - __PAGE_OFFSET + 7 +/* Initial PDE -- level-2 page table. Maps first 64MB physical memory. */ .org 0x4000 -/* Maximum STACK_ORDER for x86/64 is 2. We must therefore ensure that the */ -/* CPU0 stack is aligned on a 4-page boundary. */ -ENTRY(cpu0_stack) - -/* Initial PDE -- level-2 page table. Maps first 64MB physical memory. */ - .org 0x4000 + STACK_SIZE ENTRY(idle_pg_table_l2) .macro identmap from=0, count=32 .if \count-1 @@ -265,7 +260,15 @@ .quad 0x00000000000001e3 + \from .endif .endm - identmap /* Too orangey for crows :-) */ - - .org 0x4000 + STACK_SIZE + PAGE_SIZE + identmap + + .org 0x4000 + PAGE_SIZE .code64 + +#if (STACK_ORDER == 0) +.section ".bss.page_aligned","w" +#else +.section ".bss.twopage_aligned","w" +#endif +ENTRY(cpu0_stack) + .fill STACK_SIZE,1,0 diff -r b77ceb2481b3 -r 114946d9937f xen/arch/x86/mm.c --- a/xen/arch/x86/mm.c Fri Dec 2 15:57:24 2005 +++ b/xen/arch/x86/mm.c Fri Dec 2 22:27:04 2005 @@ -128,8 +128,9 @@ /* Used to defer flushing of memory structures. */ static struct { -#define DOP_FLUSH_TLB (1<<0) /* Flush the TLB. */ -#define DOP_RELOAD_LDT (1<<1) /* Reload the LDT shadow mapping. */ +#define DOP_FLUSH_TLB (1<<0) /* Flush the local TLB. */ +#define DOP_FLUSH_ALL_TLBS (1<<1) /* Flush TLBs of all VCPUs of current dom. */ +#define DOP_RELOAD_LDT (1<<2) /* Reload the LDT shadow mapping. */ unsigned int deferred_ops; /* If non-NULL, specifies a foreign subject domain for some operations. */ struct domain *foreign; @@ -1323,14 +1324,28 @@ struct domain *owner = page_get_owner(page); unsigned long gpfn; - if ( unlikely((owner != NULL) && shadow_mode_enabled(owner)) ) - { - mark_dirty(owner, page_to_pfn(page)); - if ( unlikely(shadow_mode_refcounts(owner)) ) - return; - gpfn = __mfn_to_gpfn(owner, page_to_pfn(page)); - ASSERT(VALID_M2P(gpfn)); - remove_shadow(owner, gpfn, type & PGT_type_mask); + if ( likely(owner != NULL) ) + { + /* + * We have to flush before the next use of the linear mapping + * (e.g., update_va_mapping()) or we could end up modifying a page + * that is no longer a page table (and hence screw up ref counts). + */ + percpu_info[smp_processor_id()].deferred_ops |= DOP_FLUSH_ALL_TLBS; + + if ( unlikely(shadow_mode_enabled(owner)) ) + { + /* Raw page tables are rewritten during save/restore. */ + if ( !shadow_mode_translate(owner) ) + mark_dirty(owner, page_to_pfn(page)); + + if ( shadow_mode_refcounts(owner) ) + return; + + gpfn = __mfn_to_gpfn(owner, page_to_pfn(page)); + ASSERT(VALID_M2P(gpfn)); + remove_shadow(owner, gpfn, type & PGT_type_mask); + } } switch ( type & PGT_type_mask ) @@ -1600,11 +1615,14 @@ deferred_ops = percpu_info[cpu].deferred_ops; percpu_info[cpu].deferred_ops = 0; - if ( deferred_ops & DOP_FLUSH_TLB ) + if ( deferred_ops & (DOP_FLUSH_ALL_TLBS|DOP_FLUSH_TLB) ) { if ( shadow_mode_enabled(d) ) shadow_sync_all(d); - local_flush_tlb(); + if ( deferred_ops & DOP_FLUSH_ALL_TLBS ) + flush_tlb_mask(d->cpumask); + else + local_flush_tlb(); } if ( deferred_ops & DOP_RELOAD_LDT ) diff -r b77ceb2481b3 -r 114946d9937f xen/arch/x86/x86_32/xen.lds --- a/xen/arch/x86/x86_32/xen.lds Fri Dec 2 15:57:24 2005 +++ b/xen/arch/x86/x86_32/xen.lds Fri Dec 2 22:27:04 2005 @@ -23,7 +23,6 @@ _etext = .; /* End of text section */ .rodata : { *(.rodata) *(.rodata.*) } :text - .kstrtab : { *(.kstrtab) } :text . = ALIGN(32); /* Exception table */ __start___ex_table = .; @@ -35,23 +34,10 @@ __pre_ex_table : { *(__pre_ex_table) } :text __stop___pre_ex_table = .; - __start___ksymtab = .; /* Kernel symbol table */ - __ksymtab : { *(__ksymtab) } :text - __stop___ksymtab = .; - - __start___kallsyms = .; /* All kernel symbols */ - __kallsyms : { *(__kallsyms) } :text - __stop___kallsyms = .; - .data : { /* Data */ *(.data) CONSTRUCTORS } :text - - _edata = .; /* End of data section */ - - . = ALIGN(8192); /* init_task */ - .data.init_task : { *(.data.init_task) } :text . = ALIGN(4096); /* Init code and data */ __init_begin = .; @@ -64,10 +50,13 @@ __initcall_start = .; .initcall.init : { *(.initcall.init) } :text __initcall_end = .; + . = ALIGN(8192); __init_end = .; __bss_start = .; /* BSS */ .bss : { + *(.bss.twopage_aligned) + *(.bss.page_aligned) *(.bss) } :text _end = . ; diff -r b77ceb2481b3 -r 114946d9937f xen/arch/x86/x86_64/xen.lds --- a/xen/arch/x86/x86_64/xen.lds Fri Dec 2 15:57:24 2005 +++ b/xen/arch/x86/x86_64/xen.lds Fri Dec 2 22:27:04 2005 @@ -21,7 +21,6 @@ _etext = .; /* End of text section */ .rodata : { *(.rodata) *(.rodata.*) } :text - .kstrtab : { *(.kstrtab) } :text . = ALIGN(32); /* Exception table */ __start___ex_table = .; @@ -33,23 +32,10 @@ __pre_ex_table : { *(__pre_ex_table) } :text __stop___pre_ex_table = .; - __start___ksymtab = .; /* Kernel symbol table */ - __ksymtab : { *(__ksymtab) } :text - __stop___ksymtab = .; - - __start___kallsyms = .; /* All kernel symbols */ - __kallsyms : { *(__kallsyms) } :text - __stop___kallsyms = .; - .data : { /* Data */ *(.data) CONSTRUCTORS } :text - - _edata = .; /* End of data section */ - - . = ALIGN(8192); /* init_task */ - .data.init_task : { *(.data.init_task) } :text . = ALIGN(4096); /* Init code and data */ __init_begin = .; @@ -62,10 +48,13 @@ __initcall_start = .; .initcall.init : { *(.initcall.init) } :text __initcall_end = .; + . = ALIGN(8192); __init_end = .; __bss_start = .; /* BSS */ .bss : { + *(.bss.twopage_aligned) + *(.bss.page_aligned) *(.bss) } :text _end = . ; _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |