From: Arvind Sankar <nivedita@alum.mit.edu>
To: Andy Lutomirski <luto@amacapital.net>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>,
Arvind Sankar <nivedita@alum.mit.edu>,
Andy Lutomirski <luto@kernel.org>, Ingo Molnar <mingo@redhat.com>,
Ard Biesheuvel <ardb@kernel.org>,
linux-efi <linux-efi@vger.kernel.org>,
Hans de Goede <hdegoede@redhat.com>
Subject: Re: [PATCH 1/3] efi/x86: simplify 64-bit EFI firmware call wrapper
Date: Fri, 27 Dec 2019 23:43:58 -0500 [thread overview]
Message-ID: <20191228044357.GA1194635@rani.riverdale.lan> (raw)
In-Reply-To: <9CF0A0F3-DEA8-410B-A042-0A4F8BF543F2@amacapital.net>
On Sat, Dec 28, 2019 at 11:25:49AM +0800, Andy Lutomirski wrote:
>
>
> > On Dec 28, 2019, at 2:13 AM, Ard Biesheuvel
> > <ard.biesheuvel@linaro.org> wrote:
> >
> > On Fri, 27 Dec 2019 at 19:08, Arvind Sankar
> > <nivedita@alum.mit.edu> wrote:
> >>
> >>> On Fri, Dec 27, 2019 at 12:51:56PM -0500, Arvind Sankar wrote:
> >>> Does kernel_fpu_begin/kernel_fpu_end need to be outside the
> >>> efi_switch_mm?
> >>>
> >>> If there's an error in efi_call_phys_prolog during the old memmap
> >>> code, it will call efi_call_phys_epilog without having called
> >>> kernel_fpu_begin, which will cause an unbalanced kernel_fpu_end.
> >>> Looks like the next step will be a panic anyway though.
> >>
> >> Do we even need to save/restore the fpu state at this point in
> >> boot? The mixed-mode code path doesn't appear to be
> >> saving/restoring the XMM registers during SetVirtualAddressMap.
> >
> > That is an excellent question, and I was hoping Andy or Ingo could
> > shed some light on that.
> >
> > I tested without and it booted fine, and it does seem to me that
> > there should be very little to preserve given how early this call
> > happens (from efi_enter_virtual_mode() which gets called from
> > start_kernel())
>
>
> Unless you’re somehow calling it from interrupt context, I doubt
> saving FP regs is needed. Certainly kernel_fpu_begin() doesn’t do
> anything that matters if we’re in the (misnamed) init task. If you’re
> calling it really really early, there’s a different potential issue:
> FP might not be fully initialized. We could have CR0.TS still set, or
> we might not have all the various “OS supports such-and-such regs”
> flags set.
>
> Does the UEFI spec explicitly state what FP state can be used by the
> EFI functions?
For 32-bit, it requires the following for boot services and runtime
services:
* Direction flag in EFLAGs clear
* 4 KiB, or more, of available stack space
* The stack must be 16-byte aligned
* Floating-point control word must be initialized to 0x027F (all exceptions masked, double-
precision, round-to-nearest)
* Multimedia-extensions control word (if supported) must be initialized to 0x1F80 (all
exceptions masked, round-to-nearest, flush to zero for masked underflow)
* CR0.EM must be zero
* CR0.TS must be zero
We don't actually align the stack for 32-bit mode before calling, do we?
No FP registers are clobbered except the floating point status register.
For 64-bit:
* Direction flag in EFLAGs clear
* 4 KiB, or more, of available stack space
* The stack must be 16-byte aligned
* Floating-point control word must be initialized to 0x037F (all exceptions masked, double-
extended-precision, round-to-nearest)
* Multimedia-extensions control word (if supported) must be initialized to 0x1F80 (all exceptions
masked, round-to-nearest, flush to zero for masked underflow)
* CR0.EM must be zero
* CR0.TS must be zero
xmm0-5 (and the FP status register) may be clobbered, the rest of the FP
registers are preserved.
next prev parent reply other threads:[~2019-12-28 4:44 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-26 15:14 [PATCH 0/3] efi/x86: clean up and simplify runtime call wrappers Ard Biesheuvel
2019-12-26 15:14 ` [PATCH 1/3] efi/x86: simplify 64-bit EFI firmware call wrapper Ard Biesheuvel
2019-12-27 2:42 ` Andy Lutomirski
2019-12-27 17:51 ` Arvind Sankar
2019-12-27 18:08 ` Arvind Sankar
2019-12-27 18:13 ` Ard Biesheuvel
2019-12-28 3:25 ` Andy Lutomirski
2019-12-28 4:43 ` Arvind Sankar [this message]
2019-12-28 5:29 ` Andy Lutomirski
2019-12-28 6:35 ` Arvind Sankar
2019-12-28 7:03 ` Andy Lutomirski
2019-12-28 8:51 ` Ard Biesheuvel
2019-12-28 9:00 ` Andy Lutomirski
2019-12-28 9:27 ` Ard Biesheuvel
2019-12-26 15:14 ` [PATCH 2/3] efi/x86: simplify i386 efi_call_phys() " Ard Biesheuvel
2019-12-26 15:14 ` [PATCH 3/3] efi/x86: simplify mixed mode " Ard Biesheuvel
2019-12-27 2:56 ` Andy Lutomirski
2019-12-27 8:04 ` Ard Biesheuvel
2019-12-27 4:34 ` Arvind Sankar
2019-12-27 8:05 ` Ard Biesheuvel
2019-12-27 12:52 ` Arvind Sankar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191228044357.GA1194635@rani.riverdale.lan \
--to=nivedita@alum.mit.edu \
--cc=ard.biesheuvel@linaro.org \
--cc=ardb@kernel.org \
--cc=hdegoede@redhat.com \
--cc=linux-efi@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=luto@kernel.org \
--cc=mingo@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox