diff options
-rw-r--r-- | xen/arch/x86/setup.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index 602a92235c..6ab1afc66a 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -813,8 +813,8 @@ void __init __start_xen(unsigned long mbi_p) l4_pgentry_t *pl4e; l3_pgentry_t *pl3e; l2_pgentry_t *pl2e; + uint64_t load_start; int i, j, k; - void *dst; /* Select relocation address. */ e = end - reloc_size; @@ -827,11 +827,9 @@ void __init __start_xen(unsigned long mbi_p) * with a barrier(). After this we must *not* modify static/global * data until after we have switched to the relocated pagetables! */ + load_start = (unsigned long)_start - XEN_VIRT_START; barrier(); - dst = move_memory(e, 0, (unsigned long)&_end - XEN_VIRT_START, 1); - - /* Poison low 1MB to detect stray pointers to physical 0-1MB. */ - memset(dst, 0x55, 1U << 20); + move_memory(e + load_start, load_start, _end - _start, 1); /* Walk initial pagetables, relocating page directory entries. */ pl4e = __va(__pa(idle_pg_table)); |