[libvirt] [PATCH v1 3/3] qemu: Automatically create NVRAM store

Laszlo Ersek lersek at redhat.com
Mon Aug 11 10:04:36 UTC 2014


On 08/08/14 14:05, Paolo Bonzini wrote:

> Il 08/08/2014 12:17, Michal Privoznik ha scritto:
>> When using split UEFI image, it may come handy if libvirt manages per
>> domain _VARS file automatically. While the _CODE file is RO and can
>> be shared among multiple domains, you certainly don't want to do that
>> on the _VARS file. This latter one needs to be per domain. So at the
>> domain startup process, if it's determined that domain needs _VARS
>> file it's copied from this master _VARS file. The location of the
>> master file is configurable in qemu.conf and the default path can be
>> compiled in via --with-qemu-nvram-file configure option.
>
> The only problem I see with this series is in this patch.
>
> The master _VARS file can be different for different machine types,
> for different architectures, and even for different _CODE files.

(I wasn't CC'd on the patch series, and I'm not a subscriber either, but
I now imported the set from the archive and hopefully can reply
in-thread.)

So, my suggestion was, for "src/qemu/qemu.conf":

# Locations of master nvram files
#
# When a domain is configured to use UEFI instead of standard
# BIOS it may use a separate storage for UEFI variables. If
# that's the case libvirt creates the variable store per domain
# using this master file as image.
#
# Different firmware binaries can have different nvram templates;
# the following list specifies the mapping. Separate the
# nvram template from the firmware binary with a colon (":").
#
# nvram = [ "/usr/share/OVMF/OVMF_CODE.fd:/usr/share/OVMF/OVMF_VARS.fd" ]

Michal then asked if we should maybe even say:

nvram = [ "x86_64:/usr/share/OVMF/OVMF_CODE.fd:/usr/share/OVMF/OVMF_VARS.fd",
          "i686:/usr/share/OVMF32/OVMF_CODE.fd:/usr/share/OVMF32/OVMF_VARS.fd" ]

I don't think so. "x86_64:/usr/share/OVMF/OVMF_CODE.fd" does not carry
more information than just "/usr/share/OVMF/OVMF_CODE.fd".

The firmware binary itself determines the valid architectures and the
nvram template; there's no additional "degree of freedom" in that
selection. That is, we do NOT have:

  (guest architecture, firmware binary) --> nvram template

instead we have:

    firmware binary --> (
                           { set of valid architectures / machtypes },
                           nvram template
                        )

It is the user's responsibility to match architecture (machine type) and
firmware binary in the domain XML against each other.

- If they specify a firmware binary that is wrong for the architecture,
  the firmware simply won't run. (No different from trying to boot an OS
  that doesn't match the architecture.)

- If they specify the correct firmware binary, then it's *only* the
  firmware binary that libvirt needs to look at, in order to determine
  the nvram template.

Thanks,
Laszlo




More information about the libvir-list mailing list