mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
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
This commit is contained in:
parent
be291b330a
commit
c14c6b083e
@ -401,7 +401,7 @@ error:
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
int
|
||||||
qemudProbeMachineTypes(const char *binary,
|
qemudProbeMachineTypes(const char *binary,
|
||||||
virCapsGuestMachinePtr **machines,
|
virCapsGuestMachinePtr **machines,
|
||||||
int *nmachines)
|
int *nmachines)
|
||||||
|
@ -168,6 +168,10 @@ int qemuBuildNicStr (virConnectPtr conn,
|
|||||||
int qemuAssignNetNames (virDomainDefPtr def,
|
int qemuAssignNetNames (virDomainDefPtr def,
|
||||||
virDomainNetDefPtr net);
|
virDomainNetDefPtr net);
|
||||||
|
|
||||||
|
int qemudProbeMachineTypes (const char *binary,
|
||||||
|
virCapsGuestMachinePtr **machines,
|
||||||
|
int *nmachines);
|
||||||
|
|
||||||
virDomainDefPtr qemuParseCommandLine(virConnectPtr conn,
|
virDomainDefPtr qemuParseCommandLine(virConnectPtr conn,
|
||||||
virCapsPtr caps,
|
virCapsPtr caps,
|
||||||
const char **progenv,
|
const char **progenv,
|
||||||
|
@ -4286,6 +4286,34 @@ qemudCanonicalizeMachineFromInfo(virDomainDefPtr def,
|
|||||||
return 0;
|
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
|
static int
|
||||||
qemudCanonicalizeMachine(virConnectPtr conn, virDomainDefPtr def)
|
qemudCanonicalizeMachine(virConnectPtr conn, virDomainDefPtr def)
|
||||||
{
|
{
|
||||||
@ -4323,6 +4351,10 @@ qemudCanonicalizeMachine(virConnectPtr conn, virDomainDefPtr def)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (qemudCanonicalizeMachineDirect(def, &canonical) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (canonical) {
|
if (canonical) {
|
||||||
VIR_FREE(def->os.machine);
|
VIR_FREE(def->os.machine);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user