From: Avi Kivity <avi@redhat.com>
To: Michael Brown <mbrown@fensystems.co.uk>
Cc: "seabios@seabios.org" <seabios@seabios.org>,
ipxe-devel@ipxe.org, qemu-devel <qemu-devel@nongnu.org>,
KVM list <kvm@vger.kernel.org>
Subject: Re: [ipxe-devel] Big real mode use in ipxe
Date: Sun, 19 Aug 2012 18:42:08 +0300 [thread overview]
Message-ID: <50310950.9070009@redhat.com> (raw)
In-Reply-To: <201208191634.50590.mbrown@fensystems.co.uk>
On 08/19/2012 06:34 PM, Michael Brown wrote:
> On Sunday 19 Aug 2012 16:07:05 Avi Kivity wrote:
>> Which is exactly what happens here. My understanding of big real mode is
>> that to achieve a segment limit != 0xffff, you must go into 32-bit
>> protected mode, load a segment with a larger limit, and return into real
>> mode without touching the segment. The next load of the segment will
>> reset the limit to 0xffff.
>
> Not quite. You can't "return into real mode without touching the segment",
> since part of the process of returning to real mode is to reload the segment
> registers with real-mode values, and this happens _after_ setting CR0.PE=0.
>
> Whenever CR0.PE=0, loading a segment register with value N will load the
> literal value (N<<4) into the base address for that segment, without changing
> the limit. This is the trick that allows flat real mode (aka big real mode) to
> work; the limit remains at 4G even after loading the segment register with a
> real-mode value.
So I see, from looking at the Xen source. I'll also double-check with
bochs. Looks like I'll need to fix kvm not to reset the segment limit
when reloading a segment in real mode.
>
>> (and that seabios needs changes to either work in
>> big real mode, or to put the processor back into big real mode after
>> returning from a PMM service.
>
> If seabios switches into protected mode when performing a PMM service, then it
> _must_ leave the segment limits at 4G when returning to real mode. To do
> otherwise will violate the PMM spec, and will break conforming clients such as
> iPXE.
This probably works, since iPXE works on kvm on AMD and on Intel
processors with "unrestricted guest" support.
--
error compiling committee.c: too many arguments to function
WARNING: multiple messages have this Message-ID (diff)
From: Avi Kivity <avi@redhat.com>
To: Michael Brown <mbrown@fensystems.co.uk>
Cc: "seabios@seabios.org" <seabios@seabios.org>,
ipxe-devel@ipxe.org, qemu-devel <qemu-devel@nongnu.org>,
KVM list <kvm@vger.kernel.org>
Subject: Re: [Qemu-devel] [ipxe-devel] Big real mode use in ipxe
Date: Sun, 19 Aug 2012 18:42:08 +0300 [thread overview]
Message-ID: <50310950.9070009@redhat.com> (raw)
In-Reply-To: <201208191634.50590.mbrown@fensystems.co.uk>
On 08/19/2012 06:34 PM, Michael Brown wrote:
> On Sunday 19 Aug 2012 16:07:05 Avi Kivity wrote:
>> Which is exactly what happens here. My understanding of big real mode is
>> that to achieve a segment limit != 0xffff, you must go into 32-bit
>> protected mode, load a segment with a larger limit, and return into real
>> mode without touching the segment. The next load of the segment will
>> reset the limit to 0xffff.
>
> Not quite. You can't "return into real mode without touching the segment",
> since part of the process of returning to real mode is to reload the segment
> registers with real-mode values, and this happens _after_ setting CR0.PE=0.
>
> Whenever CR0.PE=0, loading a segment register with value N will load the
> literal value (N<<4) into the base address for that segment, without changing
> the limit. This is the trick that allows flat real mode (aka big real mode) to
> work; the limit remains at 4G even after loading the segment register with a
> real-mode value.
So I see, from looking at the Xen source. I'll also double-check with
bochs. Looks like I'll need to fix kvm not to reset the segment limit
when reloading a segment in real mode.
>
>> (and that seabios needs changes to either work in
>> big real mode, or to put the processor back into big real mode after
>> returning from a PMM service.
>
> If seabios switches into protected mode when performing a PMM service, then it
> _must_ leave the segment limits at 4G when returning to real mode. To do
> otherwise will violate the PMM spec, and will break conforming clients such as
> iPXE.
This probably works, since iPXE works on kvm on AMD and on Intel
processors with "unrestricted guest" support.
--
error compiling committee.c: too many arguments to function
next prev parent reply other threads:[~2012-08-19 15:42 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-19 15:07 Big real mode use in ipxe Avi Kivity
2012-08-19 15:07 ` [Qemu-devel] " Avi Kivity
[not found] ` <50310119.4070806-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-08-19 15:34 ` Michael Brown
2012-08-19 15:34 ` [Qemu-devel] [ipxe-devel] " Michael Brown
2012-08-19 15:42 ` Avi Kivity [this message]
2012-08-19 15:42 ` Avi Kivity
2012-08-19 15:53 ` Kevin O'Connor
2012-08-19 15:44 ` [Qemu-devel] " Kevin O'Connor
2012-08-19 15:44 ` Kevin O'Connor
[not found] ` <20120819154441.GB12794-gj0VCiUcOQ582hYKe6nXyg@public.gmane.org>
2012-08-19 15:52 ` Avi Kivity
2012-08-19 15:52 ` Avi Kivity
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=50310950.9070009@redhat.com \
--to=avi@redhat.com \
--cc=ipxe-devel@ipxe.org \
--cc=kvm@vger.kernel.org \
--cc=mbrown@fensystems.co.uk \
--cc=qemu-devel@nongnu.org \
--cc=seabios@seabios.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.