diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 2c6e36685e..dadbef32a2 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2586,9 +2586,10 @@ virQEMUCapsProbeQMPGenericProps(virQEMUCapsPtr qemuCaps, return 0; } + static int -virQEMUCapsProbeQMPDevices(virQEMUCapsPtr qemuCaps, - qemuMonitorPtr mon) +virQEMUCapsProbeQMPObjectTypes(virQEMUCapsPtr qemuCaps, + qemuMonitorPtr mon) { int nvalues; char **values; @@ -2601,25 +2602,37 @@ virQEMUCapsProbeQMPDevices(virQEMUCapsPtr qemuCaps, nvalues, values); virStringListFreeCount(values, nvalues); - if (virQEMUCapsProbeQMPGenericProps(qemuCaps, - mon, - virQEMUCapsDeviceProps, - G_N_ELEMENTS(virQEMUCapsDeviceProps), - qemuMonitorGetDeviceProps) < 0) - return -1; - - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_QOM_LIST_PROPERTIES) && - virQEMUCapsProbeQMPGenericProps(qemuCaps, - mon, - virQEMUCapsObjectProps, - G_N_ELEMENTS(virQEMUCapsObjectProps), - qemuMonitorGetObjectProps) < 0) - return -1; - return 0; } +static int +virQEMUCapsProbeQMPDeviceProperties(virQEMUCapsPtr qemuCaps, + qemuMonitorPtr mon) +{ + return virQEMUCapsProbeQMPGenericProps(qemuCaps, + mon, + virQEMUCapsDeviceProps, + G_N_ELEMENTS(virQEMUCapsDeviceProps), + qemuMonitorGetDeviceProps); +} + + +static int +virQEMUCapsProbeQMPObjectProperties(virQEMUCapsPtr qemuCaps, + qemuMonitorPtr mon) +{ + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QOM_LIST_PROPERTIES)) + return 0; + + return virQEMUCapsProbeQMPGenericProps(qemuCaps, + mon, + virQEMUCapsObjectProps, + G_N_ELEMENTS(virQEMUCapsObjectProps), + qemuMonitorGetObjectProps); +} + + /* Historically QEMU x86 targets defaulted to 'pc' machine type but * in future x86_64 might switch to 'q35'. Such a change is considered * an ABI break from libvirt's POV. Other QEMU targets may not declare @@ -5061,7 +5074,11 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps, if (virQEMUCapsProbeQMPEvents(qemuCaps, mon) < 0) return -1; - if (virQEMUCapsProbeQMPDevices(qemuCaps, mon) < 0) + if (virQEMUCapsProbeQMPObjectTypes(qemuCaps, mon) < 0) + return -1; + if (virQEMUCapsProbeQMPDeviceProperties(qemuCaps, mon) < 0) + return -1; + if (virQEMUCapsProbeQMPObjectProperties(qemuCaps, mon) < 0) return -1; if (virQEMUCapsProbeQMPMachineTypes(qemuCaps, type, mon) < 0) return -1;