}
+struct virQEMUCapsMachineTypeFilter {
+ const char *machineType;
+ virQEMUCapsFlags *flags;
+ size_t nflags;
+};
+
+static const struct virQEMUCapsMachineTypeFilter virQEMUCapsMachineFilter[] = {
+ /* { "blah", virQEMUCapsMachineBLAHFilter,
+ ARRAY_CARDINALITY(virQEMUCapsMachineBLAHFilter) }, */
+ { "", NULL, 0 },
+};
+
+
+void
+virQEMUCapsFilterByMachineType(virQEMUCapsPtr qemuCaps,
+ const char *machineType)
+{
+ size_t i;
+
+ if (!machineType)
+ return;
+
+ for (i = 0; i < ARRAY_CARDINALITY(virQEMUCapsMachineFilter); i++) {
+ const struct virQEMUCapsMachineTypeFilter *filter = &virQEMUCapsMachineFilter[i];
+ size_t j;
+
+ if (STRNEQ(filter->machineType, machineType))
+ continue;
+
+ for (j = 0; j < filter->nflags; j++)
+ virQEMUCapsClear(qemuCaps, filter->flags[j]);
+ }
+
+}
+
+
virQEMUCapsCachePtr
virQEMUCapsCacheNew(const char *libDir,
const char *cacheDir,
virQEMUCapsPtr
virQEMUCapsCacheLookupCopy(virQEMUCapsCachePtr cache,
const char *binary,
- const char *machineType ATTRIBUTE_UNUSED)
+ const char *machineType)
{
virQEMUCapsPtr qemuCaps = virQEMUCapsCacheLookup(cache, binary);
virQEMUCapsPtr ret;
ret = virQEMUCapsNewCopy(qemuCaps);
virObjectUnref(qemuCaps);
+ virQEMUCapsFilterByMachineType(ret, machineType);
return ret;
}
bool virQEMUCapsIsValid(virQEMUCapsPtr qemuCaps);
+void virQEMUCapsFilterByMachineType(virQEMUCapsPtr qemuCaps,
+ const char *machineType);
virQEMUCapsCachePtr virQEMUCapsCacheNew(const char *libDir,
const char *cacheDir,
goto out;
}
+ virQEMUCapsFilterByMachineType(extraFlags, vmdef->os.machine);
+
if (virQEMUCapsGet(extraFlags, QEMU_CAPS_DEVICE)) {
if (qemuDomainAssignAddresses(vmdef, extraFlags, NULL)) {
if (flags & FLAG_EXPECT_ERROR)