From: Paolo Bonzini <pbonzini@redhat.com>
To: Gerd Hoffmann <kraxel@redhat.com>, Laszlo Ersek <lersek@redhat.com>
Cc: qemu-devel@nongnu.org, mst@redhat.com
Subject: Re: [Qemu-devel] [PATCH 5/6] [wip] tseg, part1, not (yet) tested
Date: Thu, 23 Apr 2015 12:27:38 +0200 [thread overview]
Message-ID: <5538C91A.2040105@redhat.com> (raw)
In-Reply-To: <1429772550.26641.8.camel@nilsson.home.kraxel.org>
On 23/04/2015 09:02, Gerd Hoffmann wrote:
>>> > > The third one is messy. It relies on SMI_EN, which is an ioport at
>>> > > PMBA+0x30. It requires a configured PMBA.
> Isn't that initialized early anyway, because the pm timer lives there?
> It's not a regular pci bar exactly to allow early init, so the full pci
> bus scan + bar allocation done later will not mess up things.
>
> [ just a question, could very well be that even when initialized early
> it isn't early enough because you need to know the memory layout
> before uncompressing the firmware modules ]
The nice thing about TSEG is that it's just normal RAM until you lock
it. So you can add a HOB very early that reserves that memory, and only
later decide whether to use "real" SMM, or just not lock TSEG and jump
into the SMM handler. (This would be the "experimentation" setting you
were talking about earlier; it would also be used if TSEG is not available).
The fake path would also be used on PIIX. This means you would _always_
use the SMM stack, even if it's not running in SMM, and you could e.g.
get rid of the PEI/DXE drivers for flash access.
>> > There's another problem with basing this decision in OVMF on
>> > SMI_EN.APMC_EN: it is not an idempotent check. At some point the
>> > firmware itself has to set SMI_EN.APMC_EN.
> Yep, you'll need some variable saying whenever smm is there or not and
> check that. Because of this. Or (in case we are going for the fw_cfg
> file) because you don't want dig into fw_cfg each time you need to know
> this.
You can assume that either all of TSEG/SMM/outb(0xb2)/GLB_SMI_EN are
available, or none is. Detection can go like this:
1) if APMC_EN = 0, SMM is available but other features might not be.
Set APMC_EN and GLB_SMI_EN, set SMI_LOCK(*), then clear GLB_SMI_EN. Now
APMC_EN is always 1, but a new QEMU won't let you clear GLB_SMI_EN.
(*) SMI_LOCK is in the configuration space of
device 31 function 0 (byte 0xa0, bit 4)
2) is GLB_SMI_EN = 1? Then SMM is available.
3) else, QEMU has set APMC_EN to communicate that SMIs are not
available, or SMIs are available (e.g. old QEMU with TCG) but you don't
have TSEG. Proceed with fake SMM.
Would this work? It is idempotent at least. Even if the OS tries to
maliciously set APMC_EN to 0 (SMI_LOCK doesn't lock APMC_EN), the result
after step 1 is always going to be the same: APMC_EN=GLB_SMI_EN=1 on new
QEMU, APMC_EN=1/GLB_SMI_EN=0 on old QEMU.
Paolo
next prev parent reply other threads:[~2015-04-23 10:27 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-20 9:19 [Qemu-devel] [PATCH 1/6] [fixup] add ESMRAMC default Gerd Hoffmann
2015-04-20 9:19 ` [Qemu-devel] [PATCH 2/6] add SMRAM+ESMRAMC wmask Gerd Hoffmann
2015-04-20 12:05 ` Michael S. Tsirkin
2015-04-20 9:19 ` [Qemu-devel] [PATCH 3/6] q35: implement SMRAM.D_LCK Gerd Hoffmann
2015-04-20 12:06 ` Michael S. Tsirkin
2015-04-20 9:19 ` [Qemu-devel] [PATCH 4/6] q35: add test for SMRAM.D_LCK Gerd Hoffmann
2015-04-20 12:06 ` Michael S. Tsirkin
2015-04-20 9:19 ` [Qemu-devel] [PATCH 5/6] [wip] tseg, part1, not (yet) tested Gerd Hoffmann
2015-04-20 11:45 ` Paolo Bonzini
2015-04-21 14:18 ` Laszlo Ersek
2015-04-21 15:04 ` Gerd Hoffmann
2015-04-21 15:08 ` Paolo Bonzini
2015-04-21 15:16 ` Gerd Hoffmann
2015-04-21 18:46 ` Laszlo Ersek
2015-04-22 6:07 ` Gerd Hoffmann
2015-04-22 8:09 ` Gerd Hoffmann
2015-04-22 8:52 ` Laszlo Ersek
2015-04-22 9:33 ` Gerd Hoffmann
2015-04-22 21:41 ` Laszlo Ersek
2015-04-22 21:51 ` Laszlo Ersek
2015-04-23 7:02 ` Gerd Hoffmann
2015-04-23 7:41 ` Laszlo Ersek
2015-04-23 8:33 ` Laszlo Ersek
2015-04-23 8:34 ` Gerd Hoffmann
2015-04-23 8:42 ` Laszlo Ersek
2015-04-23 10:27 ` Paolo Bonzini [this message]
2015-04-20 9:19 ` [Qemu-devel] [PATCH 6/6] [wip] tseg, part2, " Gerd Hoffmann
2015-04-21 14:30 ` Laszlo Ersek
2015-04-21 14:38 ` Paolo Bonzini
2015-04-21 15:05 ` Laszlo Ersek
2015-04-21 15:14 ` Gerd Hoffmann
2015-04-21 15:21 ` Paolo Bonzini
2015-04-21 20:31 ` [Qemu-devel] implementing EFI_SMM_CONTROL2_PROTOCOL.Trigger() (was: [PATCH 6/6] [wip] tseg, part2, not (yet) tested) Laszlo Ersek
2015-04-21 20:58 ` [Qemu-devel] implementing EFI_SMM_CONTROL2_PROTOCOL.Trigger() Paolo Bonzini
2015-04-24 11:56 ` [Qemu-devel] [edk2] implementing EFI_SMM_CONTROL2_PROTOCOL.Trigger() (was: [PATCH 6/6] [wip] tseg, part2, not (yet) tested) Yao, Jiewen
2015-04-24 13:00 ` [Qemu-devel] [edk2] implementing EFI_SMM_CONTROL2_PROTOCOL.Trigger() Paolo Bonzini
2015-04-24 13:16 ` Yao, Jiewen
2015-04-24 14:50 ` [Qemu-devel] [edk2] implementing EFI_SMM_CONTROL2_PROTOCOL.Trigger() (was: [PATCH 6/6] [wip] tseg, part2, not (yet) tested) Yao, Jiewen
2015-04-24 16:46 ` [Qemu-devel] [edk2] implementing EFI_SMM_CONTROL2_PROTOCOL.Trigger() Laszlo Ersek
2015-04-21 15:12 ` [Qemu-devel] [PATCH 6/6] [wip] tseg, part2, not (yet) tested Gerd Hoffmann
2015-04-20 12:07 ` [Qemu-devel] [PATCH 1/6] [fixup] add ESMRAMC default Michael S. Tsirkin
2015-04-20 12:27 ` Paolo Bonzini
2015-04-20 13:23 ` Gerd Hoffmann
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=5538C91A.2040105@redhat.com \
--to=pbonzini@redhat.com \
--cc=kraxel@redhat.com \
--cc=lersek@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
/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;
as well as URLs for NNTP newsgroup(s).