]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
Backcompt for console devices in virDomainDeviceInfoIterate
authorLi Zhang <zhlcindy@linux.vnet.ibm.com>
Tue, 11 Sep 2012 02:57:28 +0000 (10:57 +0800)
committerMartin Kletzander <mkletzan@redhat.com>
Wed, 12 Sep 2012 08:42:15 +0000 (10:42 +0200)
Historically, the first <console> element is treated as the
alias of a <serial> device. In the virDomainDeviceInfoIterate,
This situation is not considered. It still handles the first <console>
element as another devices, which means that for console[0] with
serial targetType, it calls callback function another time.
It will cause the problem of address conflicts when assigning
spapr-vio address for serial device on pSeries guest.

For pSeries guest, the serial configuration in the xml file
is as the following:
         <serial type='pty'>
               <target port='0'/>
               <address type='spapr-vio'/>
          </serial>

Console configuration is default, the dumped xml file is as the following:
   <serial type='pty'>
      <source path='/dev/pts/5'/>
      <target port='0'/>
      <alias name='serial0'/>
      <address type='spapr-vio' reg='0x30000000'/>
    </serial>
    <console type='pty' tty='/dev/pts/5'>
      <source path='/dev/pts/5'/>
      <target type='serial' port='0'/>
      <alias name='serial0'/>
      <address type='spapr-vio' reg='0x30000000'/>
    </console>

It shows that the <console> device is the alias of serial device.
So its address is the same as the serial device. When detecting
the conflicts in the qemuAssignSpaprVIOAddress the first console
and the serial device conflicts because virDomainDeviceInfoIterate()
still handle these as two different devices, and in the qemuAssignSpaprVIOAddress(),
it will compare these two devices' addressed. If they have same address,
it will report address conflict error.

So this patch is to handle the first console which targetType is serial
as the alias of serial device to avoid address conflicts error reported.

Signed-off-by: Li Zhang <zhlcindy@linux.vnet.ibm.com>
src/conf/domain_conf.c

index 8952b69a35a8a76f0670bfc75e9286b8207cdc3b..0e71b06c9ee21d72d4400120cfc70406dcf9e995 100644 (file)
@@ -2054,6 +2054,9 @@ int virDomainDeviceInfoIterate(virDomainDefPtr def,
             return -1;
     }
     for (i = 0; i < def->nconsoles ; i++) {
+        if ((STREQ(def->os.type, "hvm")) && i == 0 &&
+            def->consoles[i]->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL)
+            continue;
         device.data.chr = def->consoles[i];
         if (cb(def, &device, &def->consoles[i]->info, opaque) < 0)
             return -1;