From: Laszlo Ersek <lersek@redhat.com>
To: Joseph Shifflett <joseph.shifflett@hpe.com>,
edk2-devel@ml01.01.org, Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PATCH v1 4/5] OvmfPkg/SmmCpuFeaturesLib: Abstact processor features
Date: Thu, 8 Sep 2016 10:38:56 +0200 [thread overview]
Message-ID: <658e188d-7ac9-0166-c799-1f28fc80d292@redhat.com> (raw)
In-Reply-To: <1473309015-26017-5-git-send-email-joseph.shifflett@hpe.com>
Adding Paolo.
Paolo, here's the root of the thread:
https://lists.01.org/pipermail/edk2-devel/2016-September/001500.html
On 09/08/16 06:30, Joseph Shifflett wrote:
> Create new functions to abstract how XD/NX is detected, enabled, and
> disabled. Also, create a new function to determine if Branch Trace
> Storage is supported. Existing code is specific to Intel processors.
>
> This provides NULL implementations of the new functions.
>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Joseph Shifflett <joseph.shifflett@hpe.com>
> ---
> OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c | 44 ++++++++++++++++++++
> 1 file changed, 44 insertions(+)
>
> diff --git a/OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c b/OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c
> index a307f64c9c61..4c8c7fb7b25f 100644
> --- a/OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c
> +++ b/OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c
> @@ -2,6 +2,7 @@
> The CPU specific programming for PiSmmCpuDxeSmm module.
>
> Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>
> +(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
> This program and the accompanying materials
> are licensed and made available under the terms and conditions of the BSD License
> which accompanies this distribution. The full text of the license may be found at
> @@ -832,3 +833,46 @@ SmmCpuFeaturesAllocatePageTableMemory (
> return NULL;
> }
>
> +/**
> + This API provides a method to determine if XD/NX support has been forced off in
> + the non-SMM execution environment. It will enable XD/NX support while in SMM
> +
> + @retval TRUE XD/NX was disabled when runningn in the non-SMM execution environment
> + @retval FALSE XD/NX was enabled when runningn in the non-SMM execution environment
> +
> +**/
> +BOOLEAN
> +EFIAPI
> +SmmCpuFeaturesCheckAndEnableXdSupport (
> + VOID
> + )
> +{
> + return FALSE;
> +}
> +
> +/**
> + This API provides a method to disable XD/NX support before exiting SMM
> +**/
> +VOID
> +EFIAPI
> +SmmCpuFeaturesDisableXdSupport (
> + VOID
> + )
> +{
> +}
> +
> +/**
> + This API determines if Branch Trace Storage Support is currently available
> +
> + @retval TRUE BTS is available
> + @retval FALSE BTS is disabled
> +
> +**/
> +BOOLEAN
> +EFIAPI
> +SmmCpuFeaturesConfirmBranchTraceStorageSupport (
> + VOID
> + )
> +{
> + return FALSE;
> +}
>
I think it would be best to check these with Paolo, as he authored
OvmfPkg's SmmCpuFeaturesLib.
* The XD manipulation (wrt. the first two functions) is definitely
supported by KVM, so at least for those functions, I think the same
functionality as in the UefiCpuPkg library instance would be
appropriate. (See some additional pondering at [1] below.)
* For the last function, I think KVM does not implement the branch
recording MSRs. I also don't know if it even implements the "feature
query" MSR for the branch recording feature. Here too, the UefiCpuPkg
variant might be more appropriate for OvmfPkg than a constant FALSE --
please consult with Paolo.
Most importantly (I should have asked this first): what are you going to
use these functions for? I assume you are abstracting PiSmmCpuDxeSmm
from Ia32/X64, bringing it closer to ARM/AARCH64. It would be nice to
see the exact actions in PiSmmCpuDxeSmm that you plan to rebase on these
new library APIs.
If you post a version 2 of the patch set,
- please spell out the intended *concrete* use of each function in the
commit message of patch #1 (that is, where you modify the library class
header),
- please CC Paolo on the entire set.
(
[1] I recall that there was some nastiness wrt. the AMD SMM save state
area *not* saving and restoring XD state when entering and leaving SMM
*on Ia32*, but correctly saving and restoring XD state when doing the
same on X64.
Therefore our current recommendation for running a 32-bit OVMF binary
(that was built with -D SMM_REQUIRE) on qemu-system-i386 is to pass
-cpu XXXX,-nx
because if XD is presented to the guest, then SMM will break. IOW,
currently we ask the QEMU user to hide the XD processor feature on
32-bit processors.
I don't know if we could get rid of the user-side tweak with the help of
this library. I guess you might be able to add MDE_CPU_IA32 vs.
MDE_CPU_X64 specific code to the first two functions in OvmfPkg;
reporting "XD invariably absent" in the MDE_CPU_IA32 case. However I'm
worried that some other component in the firmware would still query
MSR_IA32_MISC_ENABLE, and then be inconsistent with the constant retval
from here.
Thus we'll likely have to keep the -nx tweak in OvmfPkg/README anyway,
and in turn these functions should not be specific to Ia32/X64 in OvmfPkg.
I believe the first two functions should just copy the UefiCpuPkg
implementation, and possibly even the third one. But, check with Paolo
please.
)
Thanks!
Laszlo
next prev parent reply other threads:[~2016-09-08 8:38 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-08 4:30 [PATCH v1 0/5] Abstract the detect/enable/disable of several x86 features Joseph Shifflett
2016-09-08 4:30 ` [PATCH v1 1/5] UefiCpuPkg: SmmCpuFeaturesLib.h: Abstact processor features Joseph Shifflett
2016-09-08 8:10 ` Laszlo Ersek
2016-09-08 4:30 ` [PATCH v1 2/5] UefiCpuPkg/SmmCpuFeaturesLib: " Joseph Shifflett
2016-09-08 4:30 ` [PATCH v1 3/5] QuarkSocPkg/SmmCpuFeaturesLib: " Joseph Shifflett
2016-09-08 4:30 ` [PATCH v1 4/5] OvmfPkg/SmmCpuFeaturesLib: " Joseph Shifflett
2016-09-08 8:38 ` Laszlo Ersek [this message]
2016-09-08 4:30 ` [PATCH v1 5/5] UefiCpuPkg/PiSmmCpuDxeSmm: " Joseph Shifflett
2016-09-08 8:27 ` [PATCH v1 0/5] Abstract the detect/enable/disable of several x86 features Fan, Jeff
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-list 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=658e188d-7ac9-0166-c799-1f28fc80d292@redhat.com \
--to=devel@edk2.groups.io \
/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