Message ID | 20240926104113.80146-9-ardb+git@google.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | x86/xen: Drop absolute references from startup code | expand |
On 26/09/2024 11:41 am, Ard Biesheuvel wrote: > From: Ard Biesheuvel <ardb@kernel.org> > > The size field in a GDT descriptor is offset by 1, so subtract 1 from > the calculated range. > > Signed-off-by: Ard Biesheuvel <ardb@kernel.org> I realise this is probably nitpicking, but the GDT descriptor has a limit field, which is (intentionally) not a size field. This is why there's a difference of 1 between them. Working in terms of limits rather than sizes avoids needing a 16th bit on the segment limit circuitry, which mattered for the 286. ~Andrew
On 2024-09-26 06:41, Ard Biesheuvel wrote: > From: Ard Biesheuvel <ardb@kernel.org> > > The size field in a GDT descriptor is offset by 1, so subtract 1 from > the calculated range. > > Signed-off-by: Ard Biesheuvel <ardb@kernel.org> I guess with s/size/limit/ per Andrew. Reviewed-by: Jason Andryuk <jason.andryuk@amd.com> Tested-by: Jason Andryuk <jason.andryuk@amd.com> Thanks, Jason
diff --git a/arch/x86/platform/pvh/head.S b/arch/x86/platform/pvh/head.S index 98ddd552885a..f09e0fb832e4 100644 --- a/arch/x86/platform/pvh/head.S +++ b/arch/x86/platform/pvh/head.S @@ -223,7 +223,7 @@ SYM_CODE_END(pvh_start_xen) .section ".init.data","aw" .balign 8 SYM_DATA_START_LOCAL(gdt) - .word gdt_end - gdt_start + .word gdt_end - gdt_start - 1 .long _pa(gdt_start) /* x86-64 will overwrite if relocated. */ .word 0 SYM_DATA_END(gdt)