• Laszlo Ersek's avatar
    hw/isa/lpc_ich9: add SMI feature negotiation via fw_cfg · 50de920b
    Laszlo Ersek authored
    Introduce the following fw_cfg files:
    
    - "etc/smi/supported-features": a little endian uint64_t feature bitmap,
      presenting the features known by the host to the guest. Read-only for
      the guest.
    
      The content of this file will be determined via bit-granularity ICH9-LPC
      device properties, to be introduced later. For now, the bitmask is left
      zeroed. The bits will be set from machine type compat properties and on
      the QEMU command line, hence this file is not migrated.
    
    - "etc/smi/requested-features": a little endian uint64_t feature bitmap,
      representing the features the guest would like to request. Read-write
      for the guest.
    
      The guest can freely (re)write this file, it has no direct consequence.
      Initial value is zero. A nonzero value causes the SMI-related fw_cfg
      files and fields that are under guest influence to be migrated.
    
    - "etc/smi/features-ok": contains a uint8_t value, and it is read-only for
      the guest. When the guest selects the associated fw_cfg key, the guest
      features are validated against the host features. In case of error, the
      negotiation doesn't proceed, and the "features-ok" file remains zero. In
      case of success, the "features-ok" file becomes (uint8_t)1, and the
      negotiated features are locked down internally (to which no further
      changes are possible until reset).
    
      The initial value is zero.  A nonzero value causes the SMI-related
      fw_cfg files and fields that are under guest influence to be migrated.
    
    The C-language fields backing the "supported-features" and
    "requested-features" files are uint8_t arrays. This is because they carry
    guest-side representation (our choice is little endian), while
    VMSTATE_UINT64() assumes / implies host-side endianness for any uint64_t
    fields. If we migrate a guest between hosts with different endiannesses
    (which is possible with TCG), then the host-side value is preserved, and
    the host-side representation is translated. This would be visible to the
    guest through fw_cfg, unless we used plain byte arrays. So we do.
    
    Cc: "Michael S. Tsirkin" <mst@redhat.com>
    Cc: Gerd Hoffmann <kraxel@redhat.com>
    Cc: Igor Mammedov <imammedo@redhat.com>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: 's avatarLaszlo Ersek <lersek@redhat.com>
    Reviewed-by: 's avatarMichael S. Tsirkin <mst@redhat.com>
    Reviewed-by: 's avatarIgor Mammedov <imammedo@redhat.com>
    Message-Id: <20170126014416.11211-2-lersek@redhat.com>
    Signed-off-by: 's avatarPaolo Bonzini <pbonzini@redhat.com>
    50de920b
Name
Last commit
Last update
audio Loading commit data...
backends Loading commit data...
block Loading commit data...
bsd-user Loading commit data...
contrib Loading commit data...
crypto Loading commit data...
default-configs Loading commit data...
disas Loading commit data...
docs Loading commit data...
dtc @ 65cc4d27 Loading commit data...
fpu Loading commit data...
fsdev Loading commit data...
gdb-xml Loading commit data...
hw Loading commit data...
include Loading commit data...
io Loading commit data...
libdecnumber Loading commit data...
linux-headers Loading commit data...
linux-user Loading commit data...
migration Loading commit data...
nbd Loading commit data...
net Loading commit data...
pc-bios Loading commit data...
pixman @ 87eea99e Loading commit data...
po Loading commit data...
qapi Loading commit data...
qga Loading commit data...
qobject Loading commit data...
qom Loading commit data...
replay Loading commit data...
roms Loading commit data...
scripts Loading commit data...
slirp Loading commit data...
stubs Loading commit data...
target Loading commit data...
tcg Loading commit data...
tests Loading commit data...
trace Loading commit data...
ui Loading commit data...
util Loading commit data...
.dir-locals.el Loading commit data...
.exrc Loading commit data...
.gitignore Loading commit data...
.gitmodules Loading commit data...
.mailmap Loading commit data...
.travis.yml Loading commit data...
CODING_STYLE Loading commit data...
COPYING Loading commit data...
COPYING.LIB Loading commit data...
Changelog Loading commit data...
HACKING Loading commit data...
LICENSE Loading commit data...
MAINTAINERS Loading commit data...
Makefile Loading commit data...
Makefile.objs Loading commit data...
Makefile.target Loading commit data...
README Loading commit data...
VERSION Loading commit data...
accel.c Loading commit data...
aio-posix.c Loading commit data...
aio-win32.c Loading commit data...
arch_init.c Loading commit data...
async.c Loading commit data...
atomic_template.h Loading commit data...
balloon.c Loading commit data...
block.c Loading commit data...
blockdev-nbd.c Loading commit data...
blockdev.c Loading commit data...
blockjob.c Loading commit data...
bootdevice.c Loading commit data...
bt-host.c Loading commit data...
bt-vhci.c Loading commit data...
configure Loading commit data...
cpu-exec-common.c Loading commit data...
cpu-exec.c Loading commit data...
cpus-common.c Loading commit data...
cpus.c Loading commit data...
cputlb.c Loading commit data...
device-hotplug.c Loading commit data...
device_tree.c Loading commit data...
disas.c Loading commit data...
dma-helpers.c Loading commit data...
dump.c Loading commit data...
exec.c Loading commit data...
gdbstub.c Loading commit data...
hax-stub.c Loading commit data...
hmp-commands-info.hx Loading commit data...
hmp-commands.hx Loading commit data...
hmp.c Loading commit data...
hmp.h Loading commit data...
iohandler.c Loading commit data...
ioport.c Loading commit data...
iothread.c Loading commit data...
kvm-all.c Loading commit data...
kvm-stub.c Loading commit data...
main-loop.c Loading commit data...
memory.c Loading commit data...
memory_ldst.inc.c Loading commit data...
memory_mapping.c Loading commit data...
module-common.c Loading commit data...
monitor.c Loading commit data...
numa.c Loading commit data...
os-posix.c Loading commit data...
os-win32.c Loading commit data...
page_cache.c Loading commit data...
qapi-schema.json Loading commit data...
qdev-monitor.c Loading commit data...
qdict-test-data.txt Loading commit data...
qemu-bridge-helper.c Loading commit data...
qemu-char.c Loading commit data...
qemu-doc.texi Loading commit data...
qemu-ga.texi Loading commit data...
qemu-img-cmds.hx Loading commit data...
qemu-img.c Loading commit data...
qemu-img.texi Loading commit data...
qemu-io-cmds.c Loading commit data...
qemu-io.c Loading commit data...
qemu-nbd.c Loading commit data...
qemu-nbd.texi Loading commit data...
qemu-option-trace.texi Loading commit data...
qemu-options-wrapper.h Loading commit data...
qemu-options.h Loading commit data...
qemu-options.hx Loading commit data...
qemu-seccomp.c Loading commit data...
qemu-tech.texi Loading commit data...
qemu-timer.c Loading commit data...
qemu.nsi Loading commit data...
qemu.sasl Loading commit data...
qmp.c Loading commit data...
qtest.c Loading commit data...
replication.c Loading commit data...
replication.h Loading commit data...
rules.mak Loading commit data...
softmmu_template.h Loading commit data...
spice-qemu-char.c Loading commit data...
tcg-runtime.c Loading commit data...
tci.c Loading commit data...
thread-pool.c Loading commit data...
thunk.c Loading commit data...
tpm.c Loading commit data...
trace-events Loading commit data...
translate-all.c Loading commit data...
translate-all.h Loading commit data...
translate-common.c Loading commit data...
user-exec-stub.c Loading commit data...
user-exec.c Loading commit data...
version.rc Loading commit data...
vl.c Loading commit data...
xen-common-stub.c Loading commit data...
xen-common.c Loading commit data...
xen-hvm-stub.c Loading commit data...
xen-hvm.c Loading commit data...
xen-mapcache.c Loading commit data...