On 23/06/20 10:41, Nadav Amit wrote: > Currently, the BSP's segment selectors are not initialized in 32-bit > (cstart.S). As a result the tests implicitly rely on the segment > selector values that are set by the BIOS. If this assumption is not > kept, the task-switch test fails. > > Fix it by initializing them. > > Signed-off-by: Nadav Amit <namit@xxxxxxxxxx> > --- > x86/cstart.S | 17 +++++++++++------ > 1 file changed, 11 insertions(+), 6 deletions(-) > > diff --git a/x86/cstart.S b/x86/cstart.S > index fa62e09..5ad70b5 100644 > --- a/x86/cstart.S > +++ b/x86/cstart.S > @@ -94,6 +94,15 @@ MSR_GS_BASE = 0xc0000101 > wrmsr > .endm > > +.macro setup_segments > + mov $0x10, %ax > + mov %ax, %ds > + mov %ax, %es > + mov %ax, %fs > + mov %ax, %gs > + mov %ax, %ss > +.endm > + > .globl start > start: > mov $stacktop, %esp > @@ -109,6 +118,7 @@ start: > > prepare_32: > lgdtl gdt32_descr > + setup_segments > > mov %cr4, %eax > bts $4, %eax // pse > @@ -133,12 +143,7 @@ save_id: > retl > > ap_start32: > - mov $0x10, %ax > - mov %ax, %ds > - mov %ax, %es > - mov %ax, %fs > - mov %ax, %gs > - mov %ax, %ss > + setup_segments > mov $-4096, %esp > lock/xaddl %esp, smp_stacktop > setup_percpu_area > Applied, thanks. Paolo