提交 c14c6b08 编写于 作者: M Mark McLoughlin

Probe QEMU directly for machine aliases if not found in capabilties

Not all possible emulators are actually in the capabilities, so if we
don't find the supplied emulator we should probe it directly for machine
types.

* src/qemu_driver.c: add qemudCanonicalizeMachineDirect() to directly
  probe an emulator for the canonical machine type
上级 be291b33
......@@ -401,7 +401,7 @@ error:
return -1;
}
static int
int
qemudProbeMachineTypes(const char *binary,
virCapsGuestMachinePtr **machines,
int *nmachines)
......
......@@ -168,6 +168,10 @@ int qemuBuildNicStr (virConnectPtr conn,
int qemuAssignNetNames (virDomainDefPtr def,
virDomainNetDefPtr net);
int qemudProbeMachineTypes (const char *binary,
virCapsGuestMachinePtr **machines,
int *nmachines);
virDomainDefPtr qemuParseCommandLine(virConnectPtr conn,
virCapsPtr caps,
const char **progenv,
......
......@@ -4286,6 +4286,34 @@ qemudCanonicalizeMachineFromInfo(virDomainDefPtr def,
return 0;
}
static int
qemudCanonicalizeMachineDirect(virDomainDefPtr def, char **canonical)
{
virCapsGuestMachinePtr *machines = NULL;
int i, nmachines = 0;
if (qemudProbeMachineTypes(def->emulator, &machines, &nmachines) < 0) {
virReportOOMError(NULL);
return -1;
}
for (i = 0; i < nmachines; i++) {
if (!machines[i]->canonical)
continue;
if (strcmp(def->os.machine, machines[i]->name) != 0)
continue;
*canonical = machines[i]->canonical;
machines[i]->canonical = NULL;
break;
}
virCapabilitiesFreeMachines(machines, nmachines);
return 0;
}
static int
qemudCanonicalizeMachine(virConnectPtr conn, virDomainDefPtr def)
{
......@@ -4323,6 +4351,10 @@ qemudCanonicalizeMachine(virConnectPtr conn, virDomainDefPtr def)
goto out;
}
}
if (qemudCanonicalizeMachineDirect(def, &canonical) < 0)
return -1;
out:
if (canonical) {
VIR_FREE(def->os.machine);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册