As a workaround for users using 'libvirt-7.9' and 'libvirt-7.10' with
'qemu-6.2' who wish to use device hot-unplug we are going to be
suggesting to filter out the 'device.json' qemu capability via either
the global 'qemu.conf' config:
capability_filters = [ "device.json" ]
or the per-VM XML capability override:
<domain type='kvm'
xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
[...]
<qemu:capabilities>
<qemu:del capability='device.json'/>
</qemu:capabilities>
</domain>
Doing this poisons the capability name 'device.json' for any further
use, so to ensure that we can re-add JSON usage for -device also for
users which filtered it out originally once it's fixed in qemu we need
to condemn the old name and add a new one.
To achieve this the old capability is renamed to
'X_QEMU_CAPS_DEVICE_JSON_BROKEN' and a new capability
'QEMU_CAPS_DEVICE_JSON' is mapped to 'device.json-fixed'. For now we
leave it unasserted, but this allows to keep all the code in place.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/qemu/qemu_capabilities.c | 3 ++-
src/qemu/qemu_capabilities.h | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 2efe5776f8..e650e81ab8 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -649,10 +649,11 @@ VIR_ENUM_IMPL(virQEMUCaps,
"chardev.json", /* QEMU_CAPS_CHARDEV_JSON */
/* 415 */
- "device.json", /* QEMU_CAPS_DEVICE_JSON */
+ "device.json", /* X_QEMU_CAPS_DEVICE_JSON_BROKEN */
"query-dirty-rate", /* QEMU_CAPS_QUERY_DIRTY_RATE */
"rbd-encryption", /* QEMU_CAPS_RBD_ENCRYPTION */
"sev-guest-kernel-hashes", /* QEMU_CAPS_SEV_GUEST_KERNEL_HASHES
*/
+ "device.json-fixed" /* QEMU_CAPS_DEVICE_JSON */
);
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index aaac20a834..43cf8464ae 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -628,10 +628,11 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check
*/
QEMU_CAPS_CHARDEV_JSON, /* -chardev accepts JSON */
/* 415 */
- QEMU_CAPS_DEVICE_JSON, /* -device accepts JSON */
+ X_QEMU_CAPS_DEVICE_JSON_BROKEN, /* -device accepts JSON - unused due a qemu
regression */
QEMU_CAPS_QUERY_DIRTY_RATE, /* accepts query-dirty-rate */
QEMU_CAPS_RBD_ENCRYPTION, /* Ceph RBD encryption support */
QEMU_CAPS_SEV_GUEST_KERNEL_HASHES, /* sev-guest.kernel-hashes= */
+ QEMU_CAPS_DEVICE_JSON, /* -device accepts JSON */
QEMU_CAPS_LAST /* this must always be the last item */
} virQEMUCapsFlags;
--
2.31.1