Re: [PATCH] hvmloader: write extra memory in CMOS

Ian Campbell
Tue, 12 Nov 2013 14:20:54 -0000

On Tue, 2013-11-12 at 14:12 +0000, Jan Beulich wrote:
> >>> On 12.11.13 at 14:57, Ian Campbell
<Ian.Campbell@citrix.com> wrote:
> > On Tue, 2013-11-12 at 13:21 +0000, Jan Beulich wrote:
> >> >>> On 12.11.13 at 13:37, Wei Liu
<wei.liu2@citrix.com> wrote:
> >> > On Tue, Nov 12, 2013 at 12:30:52PM +0000, Jan Beulich wrote:
> >> >> >>> On 12.11.13 at 13:11, Konrad Rzeszutek Wilk
<konrad.wilk@oracle.com> wrote:
> >> >> > Ian Campbell <Ian.Campbell@citrix.com> wrote:
> >> >> >>As it stands for HVM guests the e820 map is
determined by hvmloader, so
> >> >> >>it makes sense for it to populate standard CMOS
locations with the
> >> >> >>values they should have.
> >> >> >
> >> >> > CMOS has memory values? That is standard PC spec?
Yikes!
> >> >>
> >> >> That''s the first time I hear about this - there
are a couple of more
> >> >> or less standard locations in CMOS where some of the
memory
> >> >> gets reported, but all are at most two bytes wide and
(having at
> >> >> best 64k granularity) don''t allow expressing
memory beyond 4Gb.
> >> >>
> >> >> Now, if there is a standard for the locations used here,
fine with
> >> >> me (but it should be referenced in the commit message
then). But
> >> >> if this is custom, then I wonder (a) how compatible such
an
> >> >> extension is going to be and (b) why it needs to be
restricted to
> >> >> 3 bytes (allowing to cover only up to 1Tb).
> >> >>
> >> >
> >> > It''s not custom.
> >> >
> >> > AFAICT Boches reads this, seabios reads this (when not
running on Xen)
> >> > and OVMF reads this as well.
> >>
> >> These are all non-traditional BIOSes, and a reasonably reliable
> >> documentation aspect can''t be taken from their sources or
> >> accompanying documentation.
> >>
> >> > However in some CMOS maps I found those bytes are marked as
reserved.
> >>
> >> Exactly. The question is whether some _other_ BIOSes then use
> >> these register for other purposes...
> >
> > Why do we care about any BIOS other than ROMBIOS, SeaBIOS and OVMF?
>
> Because OSes may make assumptions (whether such assumptions
> are universally valid is another thing of course).

It seems like the use of these CMOS values is a qemu-ism, perhaps
inherited from bochs or somewhere like that, from whence some of the
early virtual BIOSes came. See hw/i386/pc.c:pc_cmos_init().

I think given that it is used in this preexisting way under other virt
platforms there''s no cause to worry unduly about what OSes might do.

Ian.