mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
conf: add deprecated_features attribute
Add a new a attribute, deprecated_features='on|off' to the <cpu> element. This is used to toggle features flagged as deprecated on the CPU model on or off. When this attribute is paired with 'on', deprecated features will not be filtered. When paired with 'off', any CPU features that are flagged as deprecated will be listed under the CPU model with the 'disable' policy. Example: <cpu mode='host-model' check='partial' deprecated_features='off'/> The absence of this attribute is equivalent to the 'on' option. The deprecated features that will populate the domain XML are the same features that result in the virsh domcapabilities command with the --disable-deprecated-features argument present. It is recommended to define a domain XML with this attribute set to 'off' to ensure migration to machines that may outright drop these features in the future. Signed-off-by: Collin Walling <walling@linux.ibm.com> Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
parent
15d45964e4
commit
62658bbf06
@ -238,6 +238,7 @@ virCPUDefCopyWithoutModel(const virCPUDef *cpu)
|
|||||||
copy->mode = cpu->mode;
|
copy->mode = cpu->mode;
|
||||||
copy->match = cpu->match;
|
copy->match = cpu->match;
|
||||||
copy->check = cpu->check;
|
copy->check = cpu->check;
|
||||||
|
copy->deprecated_feats = cpu->deprecated_feats;
|
||||||
copy->fallback = cpu->fallback;
|
copy->fallback = cpu->fallback;
|
||||||
copy->sockets = cpu->sockets;
|
copy->sockets = cpu->sockets;
|
||||||
copy->dies = cpu->dies;
|
copy->dies = cpu->dies;
|
||||||
@ -450,6 +451,11 @@ virCPUDefParseXML(xmlXPathContextPtr ctxt,
|
|||||||
if (virXMLPropEnum(ctxt->node, "check", virCPUCheckTypeFromString,
|
if (virXMLPropEnum(ctxt->node, "check", virCPUCheckTypeFromString,
|
||||||
VIR_XML_PROP_NONE, &def->check) < 0)
|
VIR_XML_PROP_NONE, &def->check) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
if (virXMLPropTristateSwitch(ctxt->node, "deprecated_features",
|
||||||
|
VIR_XML_PROP_NONE,
|
||||||
|
&def->deprecated_feats) < 0)
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (def->type == VIR_CPU_TYPE_HOST) {
|
if (def->type == VIR_CPU_TYPE_HOST) {
|
||||||
@ -748,6 +754,11 @@ virCPUDefFormatBufFull(virBuffer *buf,
|
|||||||
virBufferAsprintf(&attributeBuf, " migratable='%s'",
|
virBufferAsprintf(&attributeBuf, " migratable='%s'",
|
||||||
virTristateSwitchTypeToString(def->migratable));
|
virTristateSwitchTypeToString(def->migratable));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (def->deprecated_feats) {
|
||||||
|
virBufferAsprintf(&attributeBuf, " deprecated_features='%s'",
|
||||||
|
virTristateSwitchTypeToString(def->deprecated_feats));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Format children */
|
/* Format children */
|
||||||
|
@ -161,6 +161,7 @@ struct _virCPUDef {
|
|||||||
virCPUMaxPhysAddrDef *addr;
|
virCPUMaxPhysAddrDef *addr;
|
||||||
virHostCPUTscInfo *tsc;
|
virHostCPUTscInfo *tsc;
|
||||||
virTristateSwitch migratable; /* for host-passthrough mode */
|
virTristateSwitch migratable; /* for host-passthrough mode */
|
||||||
|
virTristateSwitch deprecated_feats;
|
||||||
};
|
};
|
||||||
|
|
||||||
virCPUDef *virCPUDefNew(void);
|
virCPUDef *virCPUDefNew(void);
|
||||||
|
@ -439,6 +439,11 @@
|
|||||||
<optional>
|
<optional>
|
||||||
<ref name="cpuCheck"/>
|
<ref name="cpuCheck"/>
|
||||||
</optional>
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="deprecated_features">
|
||||||
|
<ref name="virOnOff"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
<optional>
|
<optional>
|
||||||
<attribute name="migratable">
|
<attribute name="migratable">
|
||||||
<ref name="virOnOff"/>
|
<ref name="virOnOff"/>
|
||||||
|
@ -6399,6 +6399,17 @@ qemuProcessUpdateGuestCPU(virDomainDef *def,
|
|||||||
&def->os.arch) < 0)
|
&def->os.arch) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
if (def->cpu->deprecated_feats &&
|
||||||
|
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION_DEPRECATED_PROPS)) {
|
||||||
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
|
_("toggling deprecated features for CPU model is unsupported"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (def->cpu->deprecated_feats == VIR_TRISTATE_SWITCH_OFF) {
|
||||||
|
virQEMUCapsUpdateCPUDeprecatedFeatures(qemuCaps, def->virtType, def->cpu);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
unsupported configuration: toggling deprecated features for CPU model is unsupported
|
@ -0,0 +1,25 @@
|
|||||||
|
<domain type='kvm'>
|
||||||
|
<name>guest</name>
|
||||||
|
<uuid>22782664-6b93-46bf-9595-317220dd2d1c</uuid>
|
||||||
|
<memory unit='KiB'>219100</memory>
|
||||||
|
<currentMemory unit='KiB'>219100</currentMemory>
|
||||||
|
<vcpu placement='static'>1</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='s390x' machine='s390-ccw-virtio-8.2'>hvm</type>
|
||||||
|
<boot dev='hd'/>
|
||||||
|
</os>
|
||||||
|
<cpu mode='host-model' check='partial' deprecated_features='off'/>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu-system-s390x</emulator>
|
||||||
|
<controller type='pci' index='0' model='pci-root'/>
|
||||||
|
<audio id='1' type='none'/>
|
||||||
|
<memballoon model='virtio'>
|
||||||
|
<address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/>
|
||||||
|
</memballoon>
|
||||||
|
<panic model='s390'/>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
@ -0,0 +1,32 @@
|
|||||||
|
LC_ALL=C \
|
||||||
|
PATH=/bin \
|
||||||
|
HOME=/var/lib/libvirt/qemu/domain--1-guest \
|
||||||
|
USER=test \
|
||||||
|
LOGNAME=test \
|
||||||
|
XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \
|
||||||
|
XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \
|
||||||
|
XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \
|
||||||
|
/usr/bin/qemu-system-s390x \
|
||||||
|
-name guest=guest,debug-threads=on \
|
||||||
|
-S \
|
||||||
|
-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \
|
||||||
|
-machine s390-ccw-virtio,usb=off,dump-guest-core=off,memory-backend=s390.ram \
|
||||||
|
-accel kvm \
|
||||||
|
-cpu gen16a-base,nnpa=on,aen=on,cmmnt=on,vxpdeh=on,aefsi=on,diag318=on,csske=off,mepoch=on,msa9=on,msa8=on,msa7=on,msa6=on,msa5=on,msa4=on,msa3=on,msa2=on,msa1=on,sthyi=on,edat=on,ri=on,deflate=on,edat2=on,etoken=on,vx=on,ipter=on,pai=on,paie=on,mepochptff=on,ap=on,vxeh=on,vxpd=on,esop=on,msa9_pckmo=on,vxeh2=on,esort=on,appv=on,apqi=on,apft=on,els=on,iep=on,appvi=on,apqci=on,cte=off,ais=on,bpb=off,ctop=on,gs=on,ppa15=on,zpci=on,rdp=on,sea_esop2=on,beareh=on,te=off,cmm=on,vxpdeh2=on \
|
||||||
|
-m size=219136k \
|
||||||
|
-object '{"qom-type":"memory-backend-ram","id":"s390.ram","size":224395264}' \
|
||||||
|
-overcommit mem-lock=off \
|
||||||
|
-smp 1,sockets=1,cores=1,threads=1 \
|
||||||
|
-uuid 22782664-6b93-46bf-9595-317220dd2d1c \
|
||||||
|
-display none \
|
||||||
|
-no-user-config \
|
||||||
|
-nodefaults \
|
||||||
|
-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \
|
||||||
|
-mon chardev=charmonitor,id=monitor,mode=control \
|
||||||
|
-rtc base=utc \
|
||||||
|
-no-shutdown \
|
||||||
|
-boot strict=on \
|
||||||
|
-audiodev '{"id":"audio1","driver":"none"}' \
|
||||||
|
-device '{"driver":"virtio-balloon-ccw","id":"balloon0","devno":"fe.0.0000"}' \
|
||||||
|
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
|
||||||
|
-msg timestamp=on
|
@ -0,0 +1,25 @@
|
|||||||
|
<domain type='kvm'>
|
||||||
|
<name>guest</name>
|
||||||
|
<uuid>22782664-6b93-46bf-9595-317220dd2d1c</uuid>
|
||||||
|
<memory unit='KiB'>219100</memory>
|
||||||
|
<currentMemory unit='KiB'>219100</currentMemory>
|
||||||
|
<vcpu placement='static'>1</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='s390x' machine='s390-ccw-virtio'>hvm</type>
|
||||||
|
<boot dev='hd'/>
|
||||||
|
</os>
|
||||||
|
<cpu mode='host-model' check='partial' deprecated_features='off'/>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu-system-s390x</emulator>
|
||||||
|
<controller type='pci' index='0' model='pci-root'/>
|
||||||
|
<audio id='1' type='none'/>
|
||||||
|
<memballoon model='virtio'>
|
||||||
|
<address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/>
|
||||||
|
</memballoon>
|
||||||
|
<panic model='s390'/>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
15
tests/qemuxmlconfdata/cpu-model-deprecated-features-off.xml
Normal file
15
tests/qemuxmlconfdata/cpu-model-deprecated-features-off.xml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<domain type='kvm'>
|
||||||
|
<name>guest</name>
|
||||||
|
<uuid>22782664-6b93-46bf-9595-317220dd2d1c</uuid>
|
||||||
|
<memory unit='KiB'>219100</memory>
|
||||||
|
<currentMemory unit='KiB'>219100</currentMemory>
|
||||||
|
<vcpu placement='static'>1</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='s390x' machine='s390-ccw-virtio'>hvm</type>
|
||||||
|
</os>
|
||||||
|
<cpu mode='host-model' check='partial' deprecated_features='off'/>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu-system-s390x</emulator>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
@ -2295,6 +2295,9 @@ mymain(void)
|
|||||||
DO_TEST_CAPS_ARCH_LATEST("cpu-s390-zEC12", "s390x");
|
DO_TEST_CAPS_ARCH_LATEST("cpu-s390-zEC12", "s390x");
|
||||||
DO_TEST_CAPS_ARCH_LATEST("cpu-s390-features", "s390x");
|
DO_TEST_CAPS_ARCH_LATEST("cpu-s390-features", "s390x");
|
||||||
|
|
||||||
|
DO_TEST_CAPS_ARCH_VER_FAILURE("cpu-model-deprecated-features-off", "s390x", "8.2.0");
|
||||||
|
DO_TEST_CAPS_ARCH_LATEST("cpu-model-deprecated-features-off", "s390x");
|
||||||
|
|
||||||
DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-Haswell", "x86_64", ARG_CAPS_HOST_CPU_MODEL, QEMU_CPU_DEF_HASWELL);
|
DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-Haswell", "x86_64", ARG_CAPS_HOST_CPU_MODEL, QEMU_CPU_DEF_HASWELL);
|
||||||
DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-Haswell2", "x86_64", ARG_CAPS_HOST_CPU_MODEL, QEMU_CPU_DEF_HASWELL);
|
DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-Haswell2", "x86_64", ARG_CAPS_HOST_CPU_MODEL, QEMU_CPU_DEF_HASWELL);
|
||||||
DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-Haswell3", "x86_64", ARG_CAPS_HOST_CPU_MODEL, QEMU_CPU_DEF_HASWELL);
|
DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-Haswell3", "x86_64", ARG_CAPS_HOST_CPU_MODEL, QEMU_CPU_DEF_HASWELL);
|
||||||
|
Loading…
Reference in New Issue
Block a user