]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Add capability for CFPC pSeries feature
authorDaniel Henrique Barboza <danielhb413@gmail.com>
Mon, 27 Apr 2020 12:14:26 +0000 (09:14 -0300)
committerMichal Privoznik <mprivozn@redhat.com>
Mon, 27 Apr 2020 12:42:55 +0000 (14:42 +0200)
CFPC (Cache Flush on Privilege Change) is one of the capabilities
added to QEMU to mitigate Spectre vulnerabilities in Power chips.
It was implemented in QEMU 2.12 by commit 6898aed77f46.

This capability is still used today due to differences in how
the host setup (hardware and firmware/kernel) can handle this
mitigation. Its default value also varies with the pseries machine
version of the time. There's also certain OSes, like AIX, that
might not support the default value of the pseries machine the
guest uses.

Exposing this in the Libvirt XML as a feature will allow users to tune
CFPC values in a cleaner way, instead of hacking parameters in
<qemu:commandline> elements.

Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_capabilities.c
src/qemu/qemu_capabilities.h
tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml
tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml
tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml
tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml

index f6b3c96a3d7d06e722d3a3434a04646c760d767e..4838f3cfb56c609a7bfa960543f9a36d8929ca06 100644 (file)
@@ -574,6 +574,7 @@ VIR_ENUM_IMPL(virQEMUCaps,
               "virtio.packed",
               "pcie-root-port.hotplug",
               "aio.io_uring",
+              "machine.pseries.cap-cfpc",
     );
 
 
@@ -1617,6 +1618,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsMachinePropsPSeries[] = {
     { "cap-htm", QEMU_CAPS_MACHINE_PSERIES_CAP_HTM },
     { "cap-nested-hv", QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV },
     { "cap-ccf-assist", QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST },
+    { "cap-cfpc", QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC },
 };
 
 static struct virQEMUCapsStringFlags virQEMUCapsMachinePropsVirt[] = {
index 0e9a161f944f61f4c7853f74c0514b68ab33ddcc..88cf44ed5949902353794a6b3b283a4dc2094b30 100644 (file)
@@ -555,6 +555,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
     QEMU_CAPS_VIRTIO_PACKED_QUEUES, /* virtio.packed */
     QEMU_CAPS_PCIE_ROOT_PORT_HOTPLUG, /* pcie-root-port.hotplug */
     QEMU_CAPS_AIO_IO_URING, /* -blockdev {...,"aio":"io_uring",...} */
+    QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC, /* -machine pseries.cap-cfpc */
 
     QEMU_CAPS_LAST /* this must always be the last item */
 } virQEMUCapsFlags;
index 38a3103c4ae0b79a472ec033c86bf48389233bd2..cdd4f269939b2e6c196941a2ffd467c0f9f00934 100644 (file)
   <flag name='memory-backend-file.align'/>
   <flag name='drive-nvme'/>
   <flag name='i8042'/>
+  <flag name='machine.pseries.cap-cfpc'/>
   <version>2011090</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>42900289</microcodeVersion>
index 9a0b9c05c2d7482b3685f999daaec6cd1845ef2c..84e9ad2dcc9e95803cf59188cb81d15703d1bd30 100644 (file)
   <flag name='ramfb'/>
   <flag name='drive-nvme'/>
   <flag name='i8042'/>
+  <flag name='machine.pseries.cap-cfpc'/>
   <version>2012050</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>42900239</microcodeVersion>
index 680102320835742b1e9dde638f324279e55a926b..3d70a67dab4541cdbedcfb6686c498dbb92258f1 100644 (file)
   <flag name='drive-nvme'/>
   <flag name='i8042'/>
   <flag name='storage.werror'/>
+  <flag name='machine.pseries.cap-cfpc'/>
   <version>3000091</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>42900240</microcodeVersion>
index f7e69fcc972002e94a6d9214a69fdf670c43135c..ce2d470cb295148553ca0d027737c4147e3de152 100644 (file)
   <flag name='drive-nvme'/>
   <flag name='i8042'/>
   <flag name='storage.werror'/>
+  <flag name='machine.pseries.cap-cfpc'/>
   <version>4000000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>42900240</microcodeVersion>
index 99ec98e8cd0dda27d6700334bf2c35dc35c7af28..a813776660911463cad2e687ff600dd1a23bd502 100644 (file)
   <flag name='i8042'/>
   <flag name='rng-builtin'/>
   <flag name='storage.werror'/>
+  <flag name='machine.pseries.cap-cfpc'/>
   <version>4001050</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>42900242</microcodeVersion>
index b08916132acfa2e525546d66b4f9461148e34fd3..c33786b0bf52ad2abec5426d6ba53ae7704ed901 100644 (file)
   <flag name='storage.werror'/>
   <flag name='fsdev.multidevs'/>
   <flag name='virtio.packed'/>
+  <flag name='machine.pseries.cap-cfpc'/>
   <version>4002050</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>42900241</microcodeVersion>