[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH 1/4] plat/kvm: readibility fixes
* Remove magic numbers from early boot code, replacing it with labels and defines. * Add and rectify comments. Signed-off-by: Florian Schmidt <florian.schmidt@xxxxxxxxx> --- plat/kvm/include/kvm-x86/traps.h | 7 ++++--- plat/kvm/x86/entry64.S | 19 +++++++++++++------ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/plat/kvm/include/kvm-x86/traps.h b/plat/kvm/include/kvm-x86/traps.h index 8210613b..c457bda5 100644 --- a/plat/kvm/include/kvm-x86/traps.h +++ b/plat/kvm/include/kvm-x86/traps.h @@ -24,12 +24,12 @@ /* * GDT layout * - * This should be kept consistent with the layout used by the ukvm target (as - * defined in ukvm/ukvm_cpu_x86_64.h. + * This must be kept consistent with the layout used by the kvm entry code (as + * defined in plat/kvm/x86/entry64.S) */ #define GDT_DESC_NULL 0 #define GDT_DESC_CODE 1 -#define GDT_DESC_CODE32 2 /* Used by boot.S on virtio targets */ +#define GDT_DESC_CODE32 2 /* Used by _libkvmplat_start32 */ #define GDT_DESC_DATA 3 #define GDT_DESC_TSS_LO 4 #define GDT_DESC_TSS_HI 5 @@ -39,6 +39,7 @@ #define GDT_NUM_ENTRIES 6 #define GDT_DESC_CODE_VAL 0x00af99000000ffff +#define GDT_DESC_CODE32_VAL 0x00cf9b000000ffff #define GDT_DESC_DATA_VAL 0x00cf93000000ffff diff --git a/plat/kvm/x86/entry64.S b/plat/kvm/x86/entry64.S index 1ec81364..e15d41e2 100644 --- a/plat/kvm/x86/entry64.S +++ b/plat/kvm/x86/entry64.S @@ -79,12 +79,14 @@ ENTRY(_libkvmplat_start32) jne nomultiboot lgdt (gdt64_ptr) - pushl $0x0 - pushw $0x10 + /* let lret jump just one instruction ahead, but set %cs + * to the correct GDT entry while doing that. + */ + pushl $(gdt64_32cs-gdt64) pushl $1f lret -1: movl $0x18, %eax +1: movl $(gdt64_ds-gdt64), %eax movl %eax, %ds movl %eax, %es movl %eax, %ss @@ -117,8 +119,10 @@ ENTRY(_libkvmplat_start32) orl $X86_CR0_PG, %eax movl %eax, %cr0 - /* 5: poetically longjump to longmode */ - pushw $0x08 + /* 5: poetically longjump to longmode, + * letting lret set %cs to the correct GDT entry on the way + */ + pushl $(gdt64_64cs-gdt64) pushl $_libkvmplat_start64 lret @@ -145,8 +149,11 @@ END(_libkvmplat_start32) .align 64 gdt64: .quad 0x0000000000000000 +gdt64_64cs: .quad GDT_DESC_CODE_VAL /* 64bit CS */ - .quad 0x00cf9b000000ffff /* 32bit CS */ +gdt64_32cs: + .quad GDT_DESC_CODE32_VAL /* 32bit CS */ +gdt64_ds: .quad GDT_DESC_DATA_VAL /* DS */ .quad 0x0000000000000000 /* TSS part 1 (via C) */ .quad 0x0000000000000000 /* TSS part 2 (via C) */ -- 2.21.0 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |