[libvirt] [PATCH v3 4/5] qemu: auto-add pci-root controller for pc machine types
Ján Tomko
jtomko at redhat.com
Thu Apr 25 11:05:24 UTC 2013
On 04/22/2013 10:37 PM, Laine Stump wrote:
> On 04/22/2013 02:43 PM, Ján Tomko wrote:
>> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
>> index a7aabdf..ab99538 100644
>> --- a/src/qemu/qemu_domain.c
>> +++ b/src/qemu/qemu_domain.c
>> @@ -673,6 +673,37 @@ qemuDomainDefPostParse(virDomainDefPtr def,
>> !(def->emulator = virDomainDefGetDefaultEmulator(def, caps)))
>> return -1;
>>
>> + /* Add implicit PCI root controller if the machine has one */
>> + switch (def->os.arch) {
>> + case VIR_ARCH_I686:
>> + case VIR_ARCH_X86_64:
>> + if (!def->os.machine)
>> + break;
>> + if (STRPREFIX(def->os.machine, "pc-q35") ||
>> + STREQ(def->os.machine, "q35") ||
>> + STREQ(def->os.machine, "isapc"))
>> + break;
>> + if (!STRPREFIX(def->os.machine, "pc-0.") &&
>> + !STRPREFIX(def->os.machine, "pc-1.") &&
>> + !STREQ(def->os.machine, "pc") &&
>> + !STRPREFIX(def->os.machine, "rhel"))
>> + break;
>
>
> If you're going to fall through to a different case like this, you
> should put a comment in the code something like this:
>
> /* FALL THROUGH TO NEXT CASE */
>
> just so people don't have to think too hard :-)
>
> However, I think it would be more easily expandable in the future if you
> had a straight switch statement with all the cases, and just set a
> "needsPCIRoot" boolean for those cases that need it, then an "if
> (needsPCIRoot)" at the end. In the future when we want to add other
> implicit devices, each case can be a mix of the appropriate "needsThis"
> and "needsThat", with the actual additions at the end.
>
>
>...
>
> ACK, with the addition of the "FALLTHROUGH" comment, or restructuring it
> is as I suggested.
I'm squashing this in before pushing:
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index ab99538..98ac56f 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -668,6 +668,8 @@ qemuDomainDefPostParse(virDomainDefPtr def,
virCapsPtr caps,
void *opaque ATTRIBUTE_UNUSED)
{
+ bool addPCIRoot = false;
+
/* check for emulator and create a default one if needed */
if (!def->emulator &&
!(def->emulator = virDomainDefGetDefaultEmulator(def, caps)))
@@ -688,6 +690,8 @@ qemuDomainDefPostParse(virDomainDefPtr def,
!STREQ(def->os.machine, "pc") &&
!STRPREFIX(def->os.machine, "rhel"))
break;
+ addPCIRoot = true;
+ break;
case VIR_ARCH_ALPHA:
case VIR_ARCH_PPC:
@@ -695,15 +699,18 @@ qemuDomainDefPostParse(virDomainDefPtr def,
case VIR_ARCH_PPCEMB:
case VIR_ARCH_SH4:
case VIR_ARCH_SH4EB:
- if (virDomainDefMaybeAddController(
- def, VIR_DOMAIN_CONTROLLER_TYPE_PCI, 0,
- VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT) < 0)
- return -1;
+ addPCIRoot = true;
break;
default:
break;
}
+ if (addPCIRoot &&
+ virDomainDefMaybeAddController(
+ def, VIR_DOMAIN_CONTROLLER_TYPE_PCI, 0,
+ VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT) < 0)
+ return -1;
+
return 0;
}
More information about the libvir-list
mailing list