[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] x86/boot: Fix comment about setting up the real mode stack
On Thu, Nov 14, 2024 at 6:22 PM Andrew Cooper <andrew.cooper3@xxxxxxxxxx> wrote: > > It may have taken a while, but it occurs to me that the mentioned commit fixed > a second problem too. > > On entering trampoline_boot_cpu_entry(), %esp points at the trampoline stack, > but in a 32bit flat segment. It happens to be page aligned. > > When dropping into 16bit mode, the stack segment operates on %sp, preserving > the upper bits. Prior to 1ed76797439e, the top nibble of %sp would depend on > where the trampoline was placed in low memory, and only had a 1/16 chance of > being 0 and therefore operating on the intended stack. > > There was a 15/16 chance of using a different page in the trampoline as if it > were the stack. Therefore, zeroing %esp was correct, but for more reasons > than realised at the time. > It's not clear the additional reasons, even the original commit mentioned wrong usage of upper bits. > Update the comment to explain why zeroing %esp is correct in all cases. Move > it marginally earlier to when a 16bit stack segment is first loaded. > I don't see such an explanation, I mean, from "The stack is at trampoline_phys + 64k, which for a 16bit stack segment wants %sp starting at 0" I could assume "xor %sp, %sp" is correct too. > Fixes: 1ed76797439e ("x86/boot: fix BIOS memory corruption on certain IBM > systems") Does this commit really "fixes" something. The subject "Fix comment about setting up the real mode stack" seems to indicate an update of a comment, is it considered a fix? This commit also moves the initialisation of %esp. Is there a reason for this? > Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> > --- > CC: Jan Beulich <JBeulich@xxxxxxxx> > CC: Roger Pau Monné <roger.pau@xxxxxxxxxx> > CC: Daniel P. Smith <dpsmith@xxxxxxxxxxxxxxxxxxxx> > CC: Frediano Ziglio <frediano.ziglio@xxxxxxxxx> > CC: Alejandro Vallejo <alejandro.vallejo@xxxxxxxxx> > --- > xen/arch/x86/boot/trampoline.S | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/xen/arch/x86/boot/trampoline.S b/xen/arch/x86/boot/trampoline.S > index 924bda37c1b7..f5a1d61280c5 100644 > --- a/xen/arch/x86/boot/trampoline.S > +++ b/xen/arch/x86/boot/trampoline.S > @@ -176,6 +176,12 @@ trampoline_boot_cpu_entry: > mov %eax,%gs > mov %eax,%ss > > + /* > + * The stack is at trampoline_phys + 64k, which for a 16bit stack > + * segment wants %sp starting at 0. > + */ > + xor %esp, %esp > + > /* Switch to pseudo-rm CS, enter real mode, and flush insn queue. */ > mov %cr0,%eax > dec %eax > @@ -190,8 +196,6 @@ trampoline_boot_cpu_entry: > mov %ax,%es > mov %ax,%ss > > - /* Initialise stack pointer and IDT, and enable irqs. */ Fine, surely this commit without stack pointer handling is useless. > - xor %esp,%esp > lidt bootsym(rm_idt) > sti > > > base-commit: 41c80496084aa3601230e01c3bc579a0a6d8359a > prerequisite-patch-id: 6eb3b54ccd19effe3a89768e0ec5c7a2496a233a > prerequisite-patch-id: b9c480479c1f4021e9c3fe659811e28bf88f6eca > prerequisite-patch-id: 68f0d0fff4312fb059861efddbef95ddf4635b0e > prerequisite-patch-id: 66902cf11d58181ff63b8ee4efb4078df5828490 Frediano
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |