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;
|
||||
}
|
||||
|
||||
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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user