tss_descr is declared as a struct descriptor_table_ptr but it is actualy pointing to an _entry_ in the GDT. Also it is different per CPU, but tss_descr does not recognize that. Fix both by reusing the code (already present e.g. in the vmware_backdoors test) that extracts the base from the GDT entry; and also provide a helper to retrieve the limit, which is needed in vmx.c. Patch 1 adjusts the structs for GDT descriptors, so that the same code works for both 32-bit and 64-bit. Paolo v1->v2: correctly handle segment descriptors remove duplication between struct definitions Paolo Bonzini (2): unify field names and definitions for GDT descriptors replace tss_descr global with a function lib/x86/desc.c | 38 ++++++++++++++++++++++++++++---------- lib/x86/desc.h | 22 +++++++++++----------- x86/cstart64.S | 1 - x86/svm_tests.c | 15 +++------------ x86/taskswitch.c | 2 +- x86/vmware_backdoors.c | 22 ++++++---------------- x86/vmx.c | 9 +++++---- 7 files changed, 54 insertions(+), 55 deletions(-) -- 2.27.0