qemu: monitor: Don't hardcode QOM path of first CPU

Convert all code using the 'QOM_CPU_PATH' macro to accept the QOM path
as an argument.

For now the new helper for fetching the path 'qemuProcessGetVCPUQOMPath'
will always return the same hard-coded value.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2022-02-07 11:45:18 +01:00
parent 476e864186
commit 715846b6ea
6 changed files with 55 additions and 23 deletions

View File

@ -3887,6 +3887,7 @@ qemuMonitorSetDomainLog(qemuMonitor *mon,
/** /**
* qemuMonitorJSONGetGuestCPUx86: * qemuMonitorJSONGetGuestCPUx86:
* @mon: Pointer to the monitor * @mon: Pointer to the monitor
* @cpuQOMPath: QOM path of a CPU to probe
* @data: returns the cpu data * @data: returns the cpu data
* @disabled: returns the CPU data for features which were disabled by QEMU * @disabled: returns the CPU data for features which were disabled by QEMU
* *
@ -3897,10 +3898,11 @@ qemuMonitorSetDomainLog(qemuMonitor *mon,
*/ */
int int
qemuMonitorGetGuestCPUx86(qemuMonitor *mon, qemuMonitorGetGuestCPUx86(qemuMonitor *mon,
const char *cpuQOMPath,
virCPUData **data, virCPUData **data,
virCPUData **disabled) virCPUData **disabled)
{ {
VIR_DEBUG("data=%p disabled=%p", data, disabled); VIR_DEBUG("cpuQOMPath=%s data=%p disabled=%p", cpuQOMPath, data, disabled);
QEMU_CHECK_MONITOR(mon); QEMU_CHECK_MONITOR(mon);
@ -3908,7 +3910,7 @@ qemuMonitorGetGuestCPUx86(qemuMonitor *mon,
if (disabled) if (disabled)
*disabled = NULL; *disabled = NULL;
return qemuMonitorJSONGetGuestCPUx86(mon, data, disabled); return qemuMonitorJSONGetGuestCPUx86(mon, cpuQOMPath, data, disabled);
} }
@ -3916,6 +3918,7 @@ qemuMonitorGetGuestCPUx86(qemuMonitor *mon,
* qemuMonitorGetGuestCPU: * qemuMonitorGetGuestCPU:
* @mon: Pointer to the monitor * @mon: Pointer to the monitor
* @arch: CPU architecture * @arch: CPU architecture
* @cpuQOMPath: QOM path of a CPU to probe
* @translate: callback for translating CPU feature names from QEMU to libvirt * @translate: callback for translating CPU feature names from QEMU to libvirt
* @opaque: data for @translate callback * @opaque: data for @translate callback
* @enabled: returns the CPU data for all enabled features * @enabled: returns the CPU data for all enabled features
@ -3929,13 +3932,14 @@ qemuMonitorGetGuestCPUx86(qemuMonitor *mon,
int int
qemuMonitorGetGuestCPU(qemuMonitor *mon, qemuMonitorGetGuestCPU(qemuMonitor *mon,
virArch arch, virArch arch,
const char *cpuQOMPath,
qemuMonitorCPUFeatureTranslationCallback translate, qemuMonitorCPUFeatureTranslationCallback translate,
void *opaque, void *opaque,
virCPUData **enabled, virCPUData **enabled,
virCPUData **disabled) virCPUData **disabled)
{ {
VIR_DEBUG("arch=%s translate=%p opaque=%p enabled=%p disabled=%p", VIR_DEBUG("arch=%s cpuQOMPath=%s translate=%p opaque=%p enabled=%p disabled=%p",
virArchToString(arch), translate, opaque, enabled, disabled); virArchToString(arch), cpuQOMPath, translate, opaque, enabled, disabled);
QEMU_CHECK_MONITOR(mon); QEMU_CHECK_MONITOR(mon);
@ -3943,7 +3947,7 @@ qemuMonitorGetGuestCPU(qemuMonitor *mon,
if (disabled) if (disabled)
*disabled = NULL; *disabled = NULL;
return qemuMonitorJSONGetGuestCPU(mon, arch, translate, opaque, return qemuMonitorJSONGetGuestCPU(mon, arch, cpuQOMPath, translate, opaque,
enabled, disabled); enabled, disabled);
} }
@ -4416,11 +4420,12 @@ qemuMonitorGetJobInfo(qemuMonitor *mon,
*/ */
int int
qemuMonitorGetCPUMigratable(qemuMonitor *mon, qemuMonitorGetCPUMigratable(qemuMonitor *mon,
const char *cpuQOMPath,
bool *migratable) bool *migratable)
{ {
QEMU_CHECK_MONITOR(mon); QEMU_CHECK_MONITOR(mon);
return qemuMonitorJSONGetCPUMigratable(mon, migratable); return qemuMonitorJSONGetCPUMigratable(mon, cpuQOMPath, migratable);
} }

View File

@ -1348,6 +1348,7 @@ void qemuMonitorSetDomainLog(qemuMonitor *mon,
virFreeCallback destroy); virFreeCallback destroy);
int qemuMonitorGetGuestCPUx86(qemuMonitor *mon, int qemuMonitorGetGuestCPUx86(qemuMonitor *mon,
const char *cpuQOMPath,
virCPUData **data, virCPUData **data,
virCPUData **disabled); virCPUData **disabled);
@ -1356,6 +1357,7 @@ typedef const char *(*qemuMonitorCPUFeatureTranslationCallback)(const char *name
int qemuMonitorGetGuestCPU(qemuMonitor *mon, int qemuMonitorGetGuestCPU(qemuMonitor *mon,
virArch arch, virArch arch,
const char *cpuQOMPath,
qemuMonitorCPUFeatureTranslationCallback translate, qemuMonitorCPUFeatureTranslationCallback translate,
void *opaque, void *opaque,
virCPUData **enabled, virCPUData **enabled,
@ -1489,6 +1491,7 @@ int qemuMonitorGetJobInfo(qemuMonitor *mon,
int int
qemuMonitorGetCPUMigratable(qemuMonitor *mon, qemuMonitorGetCPUMigratable(qemuMonitor *mon,
const char *cpuQOMPath,
bool *migratable); bool *migratable);
int int

View File

@ -48,8 +48,6 @@
VIR_LOG_INIT("qemu.qemu_monitor_json"); VIR_LOG_INIT("qemu.qemu_monitor_json");
#define QOM_CPU_PATH "/machine/unattached/device[0]"
#define LINE_ENDING "\r\n" #define LINE_ENDING "\r\n"
VIR_ENUM_IMPL(qemuMonitorJob, VIR_ENUM_IMPL(qemuMonitorJob,
@ -7026,6 +7024,7 @@ qemuMonitorJSONParseCPUx86Features(virJSONValue *data)
static int static int
qemuMonitorJSONGetCPUx86Data(qemuMonitor *mon, qemuMonitorJSONGetCPUx86Data(qemuMonitor *mon,
const char *cpuQOMPath,
const char *property, const char *property,
virCPUData **cpudata) virCPUData **cpudata)
{ {
@ -7034,7 +7033,7 @@ qemuMonitorJSONGetCPUx86Data(qemuMonitor *mon,
virJSONValue *data; virJSONValue *data;
if (!(cmd = qemuMonitorJSONMakeCommand("qom-get", if (!(cmd = qemuMonitorJSONMakeCommand("qom-get",
"s:path", QOM_CPU_PATH, "s:path", cpuQOMPath,
"s:property", property, "s:property", property,
NULL))) NULL)))
return -1; return -1;
@ -7058,7 +7057,8 @@ qemuMonitorJSONGetCPUx86Data(qemuMonitor *mon,
* of a guest CPU, and 1 if the feature is supported. * of a guest CPU, and 1 if the feature is supported.
*/ */
static int static int
qemuMonitorJSONCheckCPUx86(qemuMonitor *mon) qemuMonitorJSONCheckCPUx86(qemuMonitor *mon,
const char *cpuQOMPath)
{ {
g_autoptr(virJSONValue) cmd = NULL; g_autoptr(virJSONValue) cmd = NULL;
g_autoptr(virJSONValue) reply = NULL; g_autoptr(virJSONValue) reply = NULL;
@ -7067,7 +7067,7 @@ qemuMonitorJSONCheckCPUx86(qemuMonitor *mon)
size_t n; size_t n;
if (!(cmd = qemuMonitorJSONMakeCommand("qom-list", if (!(cmd = qemuMonitorJSONMakeCommand("qom-list",
"s:path", QOM_CPU_PATH, "s:path", cpuQOMPath,
NULL))) NULL)))
return -1; return -1;
@ -7102,6 +7102,7 @@ qemuMonitorJSONCheckCPUx86(qemuMonitor *mon)
/** /**
* qemuMonitorJSONGetGuestCPUx86: * qemuMonitorJSONGetGuestCPUx86:
* @mon: Pointer to the monitor * @mon: Pointer to the monitor
* @cpuQOMPath: QOM path of a CPU to probe
* @data: returns the cpu data of the guest * @data: returns the cpu data of the guest
* @disabled: returns the CPU data for features which were disabled by QEMU * @disabled: returns the CPU data for features which were disabled by QEMU
* *
@ -7112,6 +7113,7 @@ qemuMonitorJSONCheckCPUx86(qemuMonitor *mon)
*/ */
int int
qemuMonitorJSONGetGuestCPUx86(qemuMonitor *mon, qemuMonitorJSONGetGuestCPUx86(qemuMonitor *mon,
const char *cpuQOMPath,
virCPUData **data, virCPUData **data,
virCPUData **disabled) virCPUData **disabled)
{ {
@ -7119,17 +7121,17 @@ qemuMonitorJSONGetGuestCPUx86(qemuMonitor *mon,
g_autoptr(virCPUData) cpuDisabled = NULL; g_autoptr(virCPUData) cpuDisabled = NULL;
int rc; int rc;
if ((rc = qemuMonitorJSONCheckCPUx86(mon)) < 0) if ((rc = qemuMonitorJSONCheckCPUx86(mon, cpuQOMPath)) < 0)
return -1; return -1;
else if (!rc) else if (!rc)
return -2; return -2;
if (qemuMonitorJSONGetCPUx86Data(mon, "feature-words", if (qemuMonitorJSONGetCPUx86Data(mon, cpuQOMPath, "feature-words",
&cpuEnabled) < 0) &cpuEnabled) < 0)
return -1; return -1;
if (disabled && if (disabled &&
qemuMonitorJSONGetCPUx86Data(mon, "filtered-features", qemuMonitorJSONGetCPUx86Data(mon, cpuQOMPath, "filtered-features",
&cpuDisabled) < 0) &cpuDisabled) < 0)
return -1; return -1;
@ -7142,6 +7144,7 @@ qemuMonitorJSONGetGuestCPUx86(qemuMonitor *mon,
static int static int
qemuMonitorJSONGetCPUProperties(qemuMonitor *mon, qemuMonitorJSONGetCPUProperties(qemuMonitor *mon,
const char *cpuQOMPath,
char ***props) char ***props)
{ {
g_autoptr(virJSONValue) cmd = NULL; g_autoptr(virJSONValue) cmd = NULL;
@ -7150,7 +7153,7 @@ qemuMonitorJSONGetCPUProperties(qemuMonitor *mon,
*props = NULL; *props = NULL;
if (!(cmd = qemuMonitorJSONMakeCommand("qom-list", if (!(cmd = qemuMonitorJSONMakeCommand("qom-list",
"s:path", QOM_CPU_PATH, "s:path", cpuQOMPath,
NULL))) NULL)))
return -1; return -1;
@ -7166,6 +7169,7 @@ qemuMonitorJSONGetCPUProperties(qemuMonitor *mon,
static int static int
qemuMonitorJSONGetCPUData(qemuMonitor *mon, qemuMonitorJSONGetCPUData(qemuMonitor *mon,
const char *cpuQOMPath,
qemuMonitorCPUFeatureTranslationCallback translate, qemuMonitorCPUFeatureTranslationCallback translate,
void *opaque, void *opaque,
virCPUData *data) virCPUData *data)
@ -7174,13 +7178,13 @@ qemuMonitorJSONGetCPUData(qemuMonitor *mon,
g_auto(GStrv) props = NULL; g_auto(GStrv) props = NULL;
char **p; char **p;
if (qemuMonitorJSONGetCPUProperties(mon, &props) < 0) if (qemuMonitorJSONGetCPUProperties(mon, cpuQOMPath, &props) < 0)
return -1; return -1;
for (p = props; p && *p; p++) { for (p = props; p && *p; p++) {
const char *name = *p; const char *name = *p;
if (qemuMonitorJSONGetObjectProperty(mon, QOM_CPU_PATH, name, &prop) < 0) if (qemuMonitorJSONGetObjectProperty(mon, cpuQOMPath, name, &prop) < 0)
return -1; return -1;
if (!prop.val.b) if (!prop.val.b)
@ -7199,6 +7203,7 @@ qemuMonitorJSONGetCPUData(qemuMonitor *mon,
static int static int
qemuMonitorJSONGetCPUDataDisabled(qemuMonitor *mon, qemuMonitorJSONGetCPUDataDisabled(qemuMonitor *mon,
const char *cpuQOMPath,
qemuMonitorCPUFeatureTranslationCallback translate, qemuMonitorCPUFeatureTranslationCallback translate,
void *opaque, void *opaque,
virCPUData *data) virCPUData *data)
@ -7206,7 +7211,7 @@ qemuMonitorJSONGetCPUDataDisabled(qemuMonitor *mon,
g_auto(GStrv) props = NULL; g_auto(GStrv) props = NULL;
char **p; char **p;
if (qemuMonitorJSONGetStringListProperty(mon, QOM_CPU_PATH, if (qemuMonitorJSONGetStringListProperty(mon, cpuQOMPath,
"unavailable-features", &props) < 0) "unavailable-features", &props) < 0)
return -1; return -1;
@ -7228,6 +7233,7 @@ qemuMonitorJSONGetCPUDataDisabled(qemuMonitor *mon,
* qemuMonitorJSONGetGuestCPU: * qemuMonitorJSONGetGuestCPU:
* @mon: Pointer to the monitor * @mon: Pointer to the monitor
* @arch: CPU architecture * @arch: CPU architecture
* @cpuQOMPath: QOM path of a CPU to probe
* @translate: callback for translating CPU feature names from QEMU to libvirt * @translate: callback for translating CPU feature names from QEMU to libvirt
* @opaque: data for @translate callback * @opaque: data for @translate callback
* @enabled: returns the CPU data for all enabled features * @enabled: returns the CPU data for all enabled features
@ -7241,6 +7247,7 @@ qemuMonitorJSONGetCPUDataDisabled(qemuMonitor *mon,
int int
qemuMonitorJSONGetGuestCPU(qemuMonitor *mon, qemuMonitorJSONGetGuestCPU(qemuMonitor *mon,
virArch arch, virArch arch,
const char *cpuQOMPath,
qemuMonitorCPUFeatureTranslationCallback translate, qemuMonitorCPUFeatureTranslationCallback translate,
void *opaque, void *opaque,
virCPUData **enabled, virCPUData **enabled,
@ -7253,11 +7260,11 @@ qemuMonitorJSONGetGuestCPU(qemuMonitor *mon,
!(cpuDisabled = virCPUDataNew(arch))) !(cpuDisabled = virCPUDataNew(arch)))
return -1; return -1;
if (qemuMonitorJSONGetCPUData(mon, translate, opaque, cpuEnabled) < 0) if (qemuMonitorJSONGetCPUData(mon, cpuQOMPath, translate, opaque, cpuEnabled) < 0)
return -1; return -1;
if (disabled && if (disabled &&
qemuMonitorJSONGetCPUDataDisabled(mon, translate, opaque, cpuDisabled) < 0) qemuMonitorJSONGetCPUDataDisabled(mon, cpuQOMPath, translate, opaque, cpuDisabled) < 0)
return -1; return -1;
*enabled = g_steal_pointer(&cpuEnabled); *enabled = g_steal_pointer(&cpuEnabled);
@ -8671,13 +8678,14 @@ qemuMonitorJSONGetJobInfo(qemuMonitor *mon,
int int
qemuMonitorJSONGetCPUMigratable(qemuMonitor *mon, qemuMonitorJSONGetCPUMigratable(qemuMonitor *mon,
const char *cpuQOMPath,
bool *migratable) bool *migratable)
{ {
g_autoptr(virJSONValue) cmd = NULL; g_autoptr(virJSONValue) cmd = NULL;
g_autoptr(virJSONValue) reply = NULL; g_autoptr(virJSONValue) reply = NULL;
if (!(cmd = qemuMonitorJSONMakeCommand("qom-get", if (!(cmd = qemuMonitorJSONMakeCommand("qom-get",
"s:path", QOM_CPU_PATH, "s:path", cpuQOMPath,
"s:property", "migratable", "s:property", "migratable",
NULL))) NULL)))
return -1; return -1;

View File

@ -648,12 +648,14 @@ qemuMonitorJSONGetDeviceAliases(qemuMonitor *mon,
int int
qemuMonitorJSONGetGuestCPUx86(qemuMonitor *mon, qemuMonitorJSONGetGuestCPUx86(qemuMonitor *mon,
const char *cpuQOMPath,
virCPUData **data, virCPUData **data,
virCPUData **disabled); virCPUData **disabled);
int int
qemuMonitorJSONGetGuestCPU(qemuMonitor *mon, qemuMonitorJSONGetGuestCPU(qemuMonitor *mon,
virArch arch, virArch arch,
const char *cpuQOMPath,
qemuMonitorCPUFeatureTranslationCallback translate, qemuMonitorCPUFeatureTranslationCallback translate,
void *opaque, void *opaque,
virCPUData **enabled, virCPUData **enabled,
@ -846,6 +848,7 @@ qemuMonitorJSONSetDBusVMStateIdList(qemuMonitor *mon,
int int
qemuMonitorJSONGetCPUMigratable(qemuMonitor *mon, qemuMonitorJSONGetCPUMigratable(qemuMonitor *mon,
const char *cpuQOMPath,
bool *migratable); bool *migratable);
int int

View File

@ -4224,6 +4224,14 @@ qemuProcessTranslateCPUFeatures(const char *name,
} }
/* returns the QOM path to the first vcpu */
static const char *
qemuProcessGetVCPUQOMPath(void)
{
return "/machine/unattached/device[0]";
}
static int static int
qemuProcessFetchGuestCPU(virQEMUDriver *driver, qemuProcessFetchGuestCPU(virQEMUDriver *driver,
virDomainObj *vm, virDomainObj *vm,
@ -4234,6 +4242,7 @@ qemuProcessFetchGuestCPU(virQEMUDriver *driver,
qemuDomainObjPrivate *priv = vm->privateData; qemuDomainObjPrivate *priv = vm->privateData;
g_autoptr(virCPUData) dataEnabled = NULL; g_autoptr(virCPUData) dataEnabled = NULL;
g_autoptr(virCPUData) dataDisabled = NULL; g_autoptr(virCPUData) dataDisabled = NULL;
const char *cpuQOMPath = qemuProcessGetVCPUQOMPath();
bool generic; bool generic;
int rc; int rc;
@ -4251,10 +4260,11 @@ qemuProcessFetchGuestCPU(virQEMUDriver *driver,
if (generic) { if (generic) {
rc = qemuMonitorGetGuestCPU(priv->mon, rc = qemuMonitorGetGuestCPU(priv->mon,
vm->def->os.arch, vm->def->os.arch,
cpuQOMPath,
qemuProcessTranslateCPUFeatures, priv->qemuCaps, qemuProcessTranslateCPUFeatures, priv->qemuCaps,
&dataEnabled, &dataDisabled); &dataEnabled, &dataDisabled);
} else { } else {
rc = qemuMonitorGetGuestCPUx86(priv->mon, &dataEnabled, &dataDisabled); rc = qemuMonitorGetGuestCPUx86(priv->mon, cpuQOMPath, &dataEnabled, &dataDisabled);
} }
qemuDomainObjExitMonitor(driver, vm); qemuDomainObjExitMonitor(driver, vm);
@ -8455,6 +8465,7 @@ qemuProcessRefreshCPUMigratability(virQEMUDriver *driver,
{ {
qemuDomainObjPrivate *priv = vm->privateData; qemuDomainObjPrivate *priv = vm->privateData;
virDomainDef *def = vm->def; virDomainDef *def = vm->def;
const char *cpuQOMPath = qemuProcessGetVCPUQOMPath();
bool migratable; bool migratable;
int rc; int rc;
@ -8473,7 +8484,7 @@ qemuProcessRefreshCPUMigratability(virQEMUDriver *driver,
if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
return -1; return -1;
rc = qemuMonitorGetCPUMigratable(priv->mon, &migratable); rc = qemuMonitorGetCPUMigratable(priv->mon, cpuQOMPath, &migratable);
qemuDomainObjExitMonitor(driver, vm); qemuDomainObjExitMonitor(driver, vm);
if (rc < 0) if (rc < 0)

View File

@ -2186,6 +2186,7 @@ testQemuMonitorJSONGetCPUData(const void *opaque)
return -1; return -1;
if (qemuMonitorJSONGetGuestCPUx86(qemuMonitorTestGetMonitor(test), if (qemuMonitorJSONGetGuestCPUx86(qemuMonitorTestGetMonitor(test),
"dummy",
&cpuData, NULL) < 0) &cpuData, NULL) < 0)
return -1; return -1;
@ -2221,6 +2222,7 @@ testQemuMonitorJSONGetNonExistingCPUData(const void *opaque)
return -1; return -1;
rv = qemuMonitorJSONGetGuestCPUx86(qemuMonitorTestGetMonitor(test), rv = qemuMonitorJSONGetGuestCPUx86(qemuMonitorTestGetMonitor(test),
"dummy",
&cpuData, NULL); &cpuData, NULL);
if (rv != -2) { if (rv != -2) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,