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 v2->v3: improve handling of 16-byte GDT descriptors rename limit bitfield to limit2 retrieve guest TR limit from the GDT new patch 2 adds another cleanup Paolo Bonzini (4): x86: cleanup handling of 16-byte GDT descriptors x86: fix call to set_gdt_entry unify field names and definitions for GDT descriptors replace tss_descr global with a function lib/x86/desc.c | 52 ++++++++++++++++++++++++++++++++---------- lib/x86/desc.h | 23 ++++++++++--------- 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, 67 insertions(+), 57 deletions(-) -- 2.27.0