From c8506d66620e55ae1d79ca94fb15230409e139eb Mon Sep 17 00:00:00 2001 From: Jiri Denemark Date: Thu, 18 Aug 2011 12:56:56 +0200 Subject: [PATCH] Taint domains configured with cpu mode=host-passthrough There are several reasons for doing this: - the CPU specification is out of libvirt's control so we cannot guarantee stable guest ABI - not every feature of a CPU may actually work as expected when advertised directly to a guest - migration between two machines with exactly the same CPU may work but no guarantees can be made - this mode is not supported and its use is at one's own risk --- src/conf/domain_conf.c | 3 ++- src/conf/domain_conf.h | 1 + src/qemu/qemu_domain.c | 3 +++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index dcc32465ac..8f6eea7946 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -75,7 +75,8 @@ VIR_ENUM_IMPL(virDomainTaint, VIR_DOMAIN_TAINT_LAST, "high-privileges", "shell-scripts", "disk-probing", - "external-launch"); + "external-launch", + "host-cpu"); VIR_ENUM_IMPL(virDomainVirt, VIR_DOMAIN_VIRT_LAST, "qemu", diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 7c7e93b102..f3c45be07c 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1524,6 +1524,7 @@ enum virDomainTaintFlags { VIR_DOMAIN_TAINT_SHELL_SCRIPTS, /* Network configuration using opaque shell scripts */ VIR_DOMAIN_TAINT_DISK_PROBING, /* Relying on potentially unsafe disk format probing */ VIR_DOMAIN_TAINT_EXTERNAL_LAUNCH, /* Externally launched guest domain */ + VIR_DOMAIN_TAINT_HOST_CPU, /* Host CPU passthrough in use */ VIR_DOMAIN_TAINT_LAST }; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index a25f4df591..cfe0ece449 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1143,6 +1143,9 @@ void qemuDomainObjCheckTaint(struct qemud_driver *driver, qemuDomainObjTaint(driver, obj, VIR_DOMAIN_TAINT_CUSTOM_ARGV, logFD); } + if (obj->def->cpu && obj->def->cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH) + qemuDomainObjTaint(driver, obj, VIR_DOMAIN_TAINT_HOST_CPU, logFD); + for (i = 0 ; i < obj->def->ndisks ; i++) qemuDomainObjCheckDiskTaint(driver, obj, obj->def->disks[i], logFD);