On 24/06/20 14:52, Thomas Huth wrote: > On 23/06/2020 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(-) > > I'm sorry to be the bearer of bad news again, but this commit broke > another set of tests in the Travis CI: > > https://travis-ci.com/github/huth/kvm-unit-tests/jobs/353103187#L796 > > smptest, smptest3, kvmclock_test, hyperv_synic and hyperv_stimer are > failing now in the 32-bit kvm-unit-tests :-( And that's just bad testing (both Nadav's and mine). Writing to %gs clobbers the PERCPU area. The fix is as simple as this: diff --git a/x86/cstart.S b/x86/cstart.S index 5ad70b5..77dc34d 100644 --- a/x86/cstart.S +++ b/x86/cstart.S @@ -106,6 +106,7 @@ MSR_GS_BASE = 0xc0000101 .globl start start: mov $stacktop, %esp + setup_segments push %ebx call setup_multiboot call setup_libcflat @@ -118,7 +119,6 @@ start: prepare_32: lgdtl gdt32_descr - setup_segments mov %cr4, %eax bts $4, %eax // pse