On 08.02.2019 17:34, Andrea Bolognani wrote:
On Thu, 2019-02-07 at 14:31 +0300, Nikolay Shirokovskiy wrote:
[...]
> @@ -4392,6 +4393,9 @@ virDomainDefAddConsoleCompat(virDomainDefPtr def)
>
> switch ((virDomainChrSerialTargetType) def->serials[0]->targetType) {
> case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_ISA:
> + if (def->serials[0]->targetModel ==
VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_ISA_DEBUGCON)
> + break;
This doesn't compile:
conf/domain_conf.c: In function 'virDomainDefAddConsoleCompat':
conf/domain_conf.c:4396:16: error: this statement may fall through
[-Werror=implicit-fallthrough=]
if (def->serials[0]->targetModel ==
VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_ISA_DEBUGCON)
^
conf/domain_conf.c:4399:9: note: here
case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SPAPR_VIO:
^~~~
You need to add ATTRIBUTE_FALLBACK after the break to make the
compiler happy. A short comment explaining why you're skipping
isa-debugcon would definitely be appreciated as well.
Even with that fixed, while your code prevents a <console> element
associated to the isa-debugcon to be automatically created, it
doesn't prevent something like
<console type='pty'/>
<serial type='file'>
<source path='...'/>
<target type='isa-serial'>
<model name='isa-debugcon'/>
</target>
</serial>
to result in the same problematic configuration, while the user
clearly wanted to have both a regular serial console *and* the
isa-debugcon.
Yeah I noticed that too but I though this is like case of usb-serial
for example. We do not add missing console in that case but allow
existing console to be alias of usb-serial. Can usb-serial actually be console?
I'm actually not sure we can make something very reasonable like
the above work... Perhaps we'll be forced to use <channel> after
all.
Adding Dan and Pavel so they can weigh in too.
[...]
> +++ b/tests/qemuxml2argvdata/isa-serial-debugcon.xml
> @@ -0,0 +1,36 @@
> +<domain type='qemu'>
> + <name>QEMUGuest1</name>
> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
> + <memory unit='KiB'>219100</memory>
> + <currentMemory unit='KiB'>219100</currentMemory>
> + <vcpu placement='static'
cpuset='1-4,8-20,525'>1</vcpu>
> + <os>
> + <type arch='i686' machine='pc'>hvm</type>
> + <boot dev='hd'/>
> + </os>
> + <clock offset='utc'/>
> + <on_poweroff>destroy</on_poweroff>
> + <on_reboot>restart</on_reboot>
> + <on_crash>destroy</on_crash>
> + <devices>
> + <emulator>/usr/bin/qemu-system-i686</emulator>
> + <disk type='block' device='disk'>
> + <source dev='/dev/HostVG/QEMUGuest1'/>
> + <target dev='hda' bus='ide'/>
> + <address type='drive' controller='0' bus='0'
target='0' unit='0'/>
> + </disk>
> + <controller type='usb' index='0'/>
> + <controller type='ide' index='0'/>
> + <controller type='pci' index='0'
model='pci-root'/>
You can trim this input file significantly, and by doing so you'll
end up with something that clearly highlights what feature it's
supposed to test:
<domain type='qemu'>
<name>QEMUGuest1</name>
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
<memory unit='KiB'>219100</memory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='i686' machine='pc'>hvm</type>
</os>
<devices>
<emulator>/usr/bin/qemu-system-i686</emulator>
<controller type='usb' model='none'/>
<serial type='pipe'>
<source path='/tmp/debugcon'/>
<target type='isa-serial' port='0'>
<model name='isa-debugcon'/>
</target>
<address type='isa' iobase='0x402'/>
</serial>
<memballoon model='none'/>
</devices>
</domain>
This is all you need for the purpose of testing isa-debugcon.
> + <serial type='pipe'>
> + <source path='/tmp/debugcon'/>
> + <target type='isa-serial' port='0'>
> + <model name='isa-debugcon'/>
> + </target>
> + <address type='isa' iobase='0x402'/>
> + </serial>
So IIUC iobase=0x402 is the de-facto standard for isa-debugcon,
right?
Assuming that's indeed the case, I would expect libvirt to fill in
that value automatically unless the user has provided an iobase
explicitly themselves.
I wonder then why qemu uses a different value - 0xe9?
Nikolay
(Incidentally, and pre-existing, but shouldn't something like that
happen for isa-serial as well?)