On Thu, Oct 21, 2021 at 4:49 AM Paolo Bonzini <pbonzini@xxxxxxxxxx> wrote: > > Look them up using a gdt_entry_t pointer, so that the address of > the descriptor is correct even for "odd" selectors (e.g. 0x98). > Rename the struct from segment_desc64 to system_desc64, > highlighting that it is only used in the case of S=0 (system > descriptor). Rename the "limit" bitfield to "limit2", matching > the convention used for the various parts of the base field. > > Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> > --- > lib/x86/desc.h | 4 ++-- > x86/svm_tests.c | 12 ++++++------ > x86/vmware_backdoors.c | 8 ++++---- > 3 files changed, 12 insertions(+), 12 deletions(-) > > diff --git a/lib/x86/desc.h b/lib/x86/desc.h > index a6ffb38..1755486 100644 > --- a/lib/x86/desc.h > +++ b/lib/x86/desc.h > @@ -172,7 +172,7 @@ typedef struct { > u8 base_high; > } gdt_entry_t; > > -struct segment_desc64 { > +struct system_desc64 { > uint16_t limit1; > uint16_t base1; > uint8_t base2; > @@ -183,7 +183,7 @@ struct segment_desc64 { > uint16_t s:1; > uint16_t dpl:2; > uint16_t p:1; > - uint16_t limit:4; > + uint16_t limit2:4; > uint16_t avl:1; > uint16_t l:1; > uint16_t db:1; > diff --git a/x86/svm_tests.c b/x86/svm_tests.c > index afdd359..2fdb0dc 100644 > --- a/x86/svm_tests.c > +++ b/x86/svm_tests.c > @@ -1876,22 +1876,22 @@ static bool reg_corruption_check(struct svm_test *test) > static void get_tss_entry(void *data) > { > struct descriptor_table_ptr gdt; > - struct segment_desc64 *gdt_table; > - struct segment_desc64 *tss_entry; > + gdt_entry_t *gdt_table; > + struct system_desc64 *tss_entry; > u16 tr = 0; > > sgdt(&gdt); > tr = str(); > - gdt_table = (struct segment_desc64 *) gdt.base; > - tss_entry = &gdt_table[tr / sizeof(struct segment_desc64)]; > - *((struct segment_desc64 **)data) = tss_entry; > + gdt_table = (gdt_entry_t *) gdt.base; > + tss_entry = (struct system_desc64 *) &gdt_table[tr / 8]; > + *((struct system_desc64 **)data) = tss_entry; > } > > static int orig_cpu_count; > > static void init_startup_prepare(struct svm_test *test) > { > - struct segment_desc64 *tss_entry; > + struct system_desc64 *tss_entry; > int i; > > on_cpu(1, get_tss_entry, &tss_entry); > diff --git a/x86/vmware_backdoors.c b/x86/vmware_backdoors.c > index b4902a9..b1433cd 100644 > --- a/x86/vmware_backdoors.c > +++ b/x86/vmware_backdoors.c > @@ -133,8 +133,8 @@ struct fault_test vmware_backdoor_tests[] = { > static void set_tss_ioperm(void) > { > struct descriptor_table_ptr gdt; > - struct segment_desc64 *gdt_table; > - struct segment_desc64 *tss_entry; > + gdt_entry_t *gdt_table; > + struct system_desc64 *tss_entry; > u16 tr = 0; > tss64_t *tss; > unsigned char *ioperm_bitmap; > @@ -142,8 +142,8 @@ static void set_tss_ioperm(void) > > sgdt(&gdt); > tr = str(); > - gdt_table = (struct segment_desc64 *) gdt.base; > - tss_entry = &gdt_table[tr / sizeof(struct segment_desc64)]; > + gdt_table = (gdt_entry_t *) gdt.base; > + tss_entry = (struct system_desc64 *) &gdt_table[tr / 8]; > tss_base = ((uint64_t) tss_entry->base1 | > ((uint64_t) tss_entry->base2 << 16) | > ((uint64_t) tss_entry->base3 << 24) | > -- > 2.27.0 > > I think this patch series was what was blocking the `uefi` branch from being merged into the `master` branch. I was just trying to apply it locally, so I could review it, and now see that it's been merged already. Any reason not to go ahead and merge the `uefi` branch into the mainline branch?