mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-22 04:25:18 +00:00
qemu: Ask QEMU for filtered CPU features
qemuMonitorGetGuestCPU can now optionally create CPU data from filtered-features in addition to feature-words. Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
parent
253db85e2d
commit
77c9c4f127
@ -4026,6 +4026,7 @@ qemuMonitorSetDomainLog(qemuMonitorPtr mon,
|
|||||||
* @mon: Pointer to the monitor
|
* @mon: Pointer to the monitor
|
||||||
* @arch: arch of the guest
|
* @arch: arch of the guest
|
||||||
* @data: returns the cpu data
|
* @data: returns the cpu data
|
||||||
|
* @disabled: returns the CPU data for features which were disabled by QEMU
|
||||||
*
|
*
|
||||||
* Retrieve the definition of the guest CPU from a running qemu instance.
|
* Retrieve the definition of the guest CPU from a running qemu instance.
|
||||||
*
|
*
|
||||||
@ -4035,15 +4036,19 @@ qemuMonitorSetDomainLog(qemuMonitorPtr mon,
|
|||||||
int
|
int
|
||||||
qemuMonitorGetGuestCPU(qemuMonitorPtr mon,
|
qemuMonitorGetGuestCPU(qemuMonitorPtr mon,
|
||||||
virArch arch,
|
virArch arch,
|
||||||
virCPUDataPtr *data)
|
virCPUDataPtr *data,
|
||||||
|
virCPUDataPtr *disabled)
|
||||||
{
|
{
|
||||||
VIR_DEBUG("arch='%s' data='%p'", virArchToString(arch), data);
|
VIR_DEBUG("arch=%s data=%p disabled=%p",
|
||||||
|
virArchToString(arch), data, disabled);
|
||||||
|
|
||||||
QEMU_CHECK_MONITOR_JSON(mon);
|
QEMU_CHECK_MONITOR_JSON(mon);
|
||||||
|
|
||||||
*data = NULL;
|
*data = NULL;
|
||||||
|
if (disabled)
|
||||||
|
*disabled = NULL;
|
||||||
|
|
||||||
return qemuMonitorJSONGetGuestCPU(mon, arch, data);
|
return qemuMonitorJSONGetGuestCPU(mon, arch, data, disabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1021,7 +1021,8 @@ void qemuMonitorSetDomainLog(qemuMonitorPtr mon,
|
|||||||
|
|
||||||
int qemuMonitorGetGuestCPU(qemuMonitorPtr mon,
|
int qemuMonitorGetGuestCPU(qemuMonitorPtr mon,
|
||||||
virArch arch,
|
virArch arch,
|
||||||
virCPUDataPtr *data);
|
virCPUDataPtr *data,
|
||||||
|
virCPUDataPtr *disabled);
|
||||||
|
|
||||||
int qemuMonitorRTCResetReinjection(qemuMonitorPtr mon);
|
int qemuMonitorRTCResetReinjection(qemuMonitorPtr mon);
|
||||||
|
|
||||||
|
@ -6728,6 +6728,7 @@ qemuMonitorJSONCheckCPUx86(qemuMonitorPtr mon)
|
|||||||
* @mon: Pointer to the monitor
|
* @mon: Pointer to the monitor
|
||||||
* @arch: arch of the guest
|
* @arch: arch of the guest
|
||||||
* @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
|
||||||
*
|
*
|
||||||
* Retrieve the definition of the guest CPU from a running qemu instance.
|
* Retrieve the definition of the guest CPU from a running qemu instance.
|
||||||
*
|
*
|
||||||
@ -6737,8 +6738,11 @@ qemuMonitorJSONCheckCPUx86(qemuMonitorPtr mon)
|
|||||||
int
|
int
|
||||||
qemuMonitorJSONGetGuestCPU(qemuMonitorPtr mon,
|
qemuMonitorJSONGetGuestCPU(qemuMonitorPtr mon,
|
||||||
virArch arch,
|
virArch arch,
|
||||||
virCPUDataPtr *data)
|
virCPUDataPtr *data,
|
||||||
|
virCPUDataPtr *disabled)
|
||||||
{
|
{
|
||||||
|
virCPUDataPtr cpuEnabled = NULL;
|
||||||
|
virCPUDataPtr cpuDisabled = NULL;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
if (ARCH_IS_X86(arch)) {
|
if (ARCH_IS_X86(arch)) {
|
||||||
@ -6747,13 +6751,30 @@ qemuMonitorJSONGetGuestCPU(qemuMonitorPtr mon,
|
|||||||
else if (!rc)
|
else if (!rc)
|
||||||
return -2;
|
return -2;
|
||||||
|
|
||||||
return qemuMonitorJSONGetCPUx86Data(mon, "feature-words", data);
|
if (qemuMonitorJSONGetCPUx86Data(mon, "feature-words",
|
||||||
|
&cpuEnabled) < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
if (disabled &&
|
||||||
|
qemuMonitorJSONGetCPUx86Data(mon, "filtered-features",
|
||||||
|
&cpuDisabled) < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
*data = cpuEnabled;
|
||||||
|
if (disabled)
|
||||||
|
*disabled = cpuDisabled;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("CPU definition retrieval isn't supported for '%s'"),
|
_("CPU definition retrieval isn't supported for '%s'"),
|
||||||
virArchToString(arch));
|
virArchToString(arch));
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
error:
|
||||||
|
virCPUDataFree(cpuEnabled);
|
||||||
|
virCPUDataFree(cpuDisabled);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -475,7 +475,8 @@ int qemuMonitorJSONGetCPUx86Data(qemuMonitorPtr mon,
|
|||||||
|
|
||||||
int qemuMonitorJSONGetGuestCPU(qemuMonitorPtr mon,
|
int qemuMonitorJSONGetGuestCPU(qemuMonitorPtr mon,
|
||||||
virArch arch,
|
virArch arch,
|
||||||
virCPUDataPtr *data);
|
virCPUDataPtr *data,
|
||||||
|
virCPUDataPtr *disabled);
|
||||||
|
|
||||||
int qemuMonitorJSONRTCResetReinjection(qemuMonitorPtr mon);
|
int qemuMonitorJSONRTCResetReinjection(qemuMonitorPtr mon);
|
||||||
|
|
||||||
|
@ -3854,7 +3854,7 @@ qemuProcessVerifyGuestCPU(virQEMUDriverPtr driver,
|
|||||||
if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
|
if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
rc = qemuMonitorGetGuestCPU(priv->mon, def->os.arch, &cpu);
|
rc = qemuMonitorGetGuestCPU(priv->mon, def->os.arch, &cpu, NULL);
|
||||||
|
|
||||||
if (qemuDomainObjExitMonitor(driver, vm) < 0)
|
if (qemuDomainObjExitMonitor(driver, vm) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
@ -2395,7 +2395,7 @@ testQemuMonitorJSONGetCPUData(const void *opaque)
|
|||||||
|
|
||||||
if (qemuMonitorJSONGetGuestCPU(qemuMonitorTestGetMonitor(test),
|
if (qemuMonitorJSONGetGuestCPU(qemuMonitorTestGetMonitor(test),
|
||||||
VIR_ARCH_X86_64,
|
VIR_ARCH_X86_64,
|
||||||
&cpuData) < 0)
|
&cpuData, NULL) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (!(actual = virCPUDataFormat(cpuData)))
|
if (!(actual = virCPUDataFormat(cpuData)))
|
||||||
@ -2438,7 +2438,7 @@ testQemuMonitorJSONGetNonExistingCPUData(const void *opaque)
|
|||||||
|
|
||||||
rv = qemuMonitorJSONGetGuestCPU(qemuMonitorTestGetMonitor(test),
|
rv = qemuMonitorJSONGetGuestCPU(qemuMonitorTestGetMonitor(test),
|
||||||
VIR_ARCH_X86_64,
|
VIR_ARCH_X86_64,
|
||||||
&cpuData);
|
&cpuData, NULL);
|
||||||
if (rv != -2) {
|
if (rv != -2) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
"Unexpected return value %d, expecting -2", rv);
|
"Unexpected return value %d, expecting -2", rv);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user