|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v7 12/14] x86: make Xen early boot code relocatable
>>> On 23.09.16 at 23:47, <daniel.kiper@xxxxxxxxxx> wrote:
> @@ -426,32 +453,65 @@ trampoline_bios_setup:
> xor %cl, %cl
>
> trampoline_setup:
> + /*
> + * Called on legacy BIOS and EFI platforms.
> + *
> + * Initialize 0-15 bits of BOOT_FS segment descriptor base address.
> + */
> + mov %si,BOOT_FS+2+sym_esi(trampoline_gdt)
> +
> + /* Initialize 16-23 bits of BOOT_FS segment descriptor base address.
> */
> + mov %esi,%edx
> + shr $16,%edx
I'd have liked it even better if you had done this with a single
instruction, but anyway.
> @@ -474,23 +534,53 @@ trampoline_setup:
>
> /* Stash TSC to calculate a good approximation of time-since-boot */
> rdtsc
> - mov %eax,sym_phys(boot_tsc_stamp)
> - mov %edx,sym_phys(boot_tsc_stamp+4)
> + mov %eax,sym_fs(boot_tsc_stamp)
> + mov %edx,sym_fs(boot_tsc_stamp)+4
> +
> + /*
> + * Update frame addresses in page tables excluding l2_identmap
> + * without its first entry which points to l1_identmap.
> + */
> + mov $((__page_tables_end-__page_tables_start)/8),%ecx
> + mov $(((l2_identmap-__page_tables_start)/8)+2),%edx
The +2 instead of +1 here is confusing. Why don't you do the natural
thing here and ...
> +1: cmp
> $((l2_identmap+l2_identmap_sizeof-__page_tables_start)/8),%ecx
> + cmove %edx,%ecx
> + je 2f
... simply drop this branch?
> + testl $_PAGE_PRESENT,sym_fs(__page_tables_start)-8(,%ecx,8)
> + jz 2f
> + add %esi,sym_fs(__page_tables_start)-8(,%ecx,8)
> +2: loop 1b
> +
> + /* Initialize L2 boot-map/direct map page table entries (14MB). */
> + lea sym_esi(start),%ebx
> + lea
> (1<<L2_PAGETABLE_SHIFT)*7+(PAGE_HYPERVISOR|_PAGE_PSE)(%ebx),%eax
> + shr $(L2_PAGETABLE_SHIFT-3),%ebx
> + mov $8,%ecx
The comment saying 14Mb kind of contradicts this being 8 here.
> +1: mov %eax,sym_fs(l2_bootmap)-8(%ebx,%ecx,8)
> + mov %eax,sym_fs(l2_identmap)-8(%ebx,%ecx,8)
> + sub $(1<<L2_PAGETABLE_SHIFT),%eax
> + loop 1b
> +
> + /* Initialize L3 boot-map page directory entry. */
> + lea
> __PAGE_HYPERVISOR+(L2_PAGETABLE_ENTRIES*8)*3+sym_esi(l2_bootmap),%eax
> + mov $4,%ecx
> +1: mov %eax,sym_fs(l3_bootmap)-8(,%ecx,8)
> + sub $(L2_PAGETABLE_ENTRIES*8),%eax
> + loop 1b
>
> /*
> * During boot, hook 4kB mappings of first 2MB of memory into L2.
> - * This avoids mixing cachability for the legacy VGA region, and is
> - * corrected when Xen relocates itself.
> + * This avoids mixing cachability for the legacy VGA region.
> */
> - mov $sym_phys(l1_identmap)+__PAGE_HYPERVISOR,%edi
> - mov %edi,sym_phys(l2_xenmap)
> + lea __PAGE_HYPERVISOR+sym_esi(l1_identmap),%edi
> + mov %edi,sym_fs(l2_bootmap)
Switching from l2_xenmap to l2_bootmap here?
> @@ -121,8 +127,9 @@ GLOBAL(l2_identmap)
> * page.
> */
> GLOBAL(l2_xenmap)
> - idx = 0
> - .rept 8
> + .quad 0
> + idx = 1
> + .rept 7
> .quad sym_phys(__image_base__) + (idx << L2_PAGETABLE_SHIFT) +
> (PAGE_HYPERVISOR | _PAGE_PSE)
> idx = idx + 1
> .endr
How come the first entry doesn't need filling anymore? I think such
less obvious changes should really get briefly mentioned/explained
in the commit message.
> @@ -674,6 +671,8 @@ void __init noreturn __start_xen(unsigned long mbi_p)
>
> printk("Command line: %s\n", cmdline);
>
> + printk("Xen image load base address: 0x%08lx\n", xen_phys_start);
Please prefer %#lx in cases like this.
> @@ -1018,6 +1018,8 @@ void __init noreturn __start_xen(unsigned long mbi_p)
> : "memory" );
>
> bootstrap_map(NULL);
> +
> + printk("New Xen image base address: %#08lx\n", xen_phys_start);
# and a minimum width generally don't fit together well.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |