[libvirt] Rudimentary (basic) s390x architecture functions for libvirt

Patrick Siegl patrick.siegl at student.uni-tuebingen.de
Tue Feb 1 17:18:50 UTC 2011


Am 01.02.2011 12:55, schrieb Daniel P. Berrange:
> On Sun, Jan 30, 2011 at 03:56:15PM +0100, Patrick Siegl wrote:
>> I have overhauled my last patch (for libvirt KVM support on s390x). You will find the new one as attachment.
>> There is only one problem, which I can't get fixed. You wrote following:
>>
>> "This is expected change, since s390 isn't PCI based, but what
>> addressing scheme is used for s390 devices to uniquely and
>> stablly identify them. 
>>
>> eg, we need to make sure that
>>
>>     qemu -drive AAA -drive BBB -drive CCC
>>     (monitor) drive_del BBB
>>
>> results except same guest visible ABI as
>>
>>     qemu -drive AAA -drive CCC"
>>
>> This is a small problem under s390x, because if you try to add ',addr='
>> to a device, qemu prints: "Property '<device>.addr' not found".
> Can you show the output of
>
>
>     # qemu -monitor stdio
>     (qemu) info qtree
>
> And also
>
>     # qemu -monitor stdio -nodefconfig -nodefaults
>     (qemu) info qtree
>
That's the output of your recommended commands. You have to pass
urgently  '--enable-kvm' on s390!

boromir:/ # qemu-system-s390x -monitor stdio
The S390 target only works with KVM enabled

boromir:/ # qemu-system-s390x --enable-kvm -monitor stdio
VNC server running on `::1:5900'
QEMU 0.12.50 monitor - type 'help' for more information
(qemu) info qtree
bus: main-system-bus
  type System
  dev: s390-virtio-bridge, id ""
    bus: s390-virtio
      type s390-virtio
      dev: virtio-serial-s390, id ""
        dev-prop: max_ports = 31
        bus: virtio-serial-bus.0
          type virtio-serial-bus
          dev: virtconsole, id ""
            dev-prop: is_console = 1
            dev-prop: chardev = virtcon0
            dev-prop: name = <null>
             dev-prop-int: id: 0
             dev-prop-int: guest_connected: 1
             dev-prop-int: host_connected: 1
      dev: virtio-net-s390, id ""
        dev-prop: mac = 52:54:00:12:34:56
        dev-prop: vlan = 0
        dev-prop: netdev = <null>
(qemu) quit

boromir:/ # qemu-system-s390x --enable-kvm -monitor stdio -nodefconfig
-nodefaults
VNC server running on `::1:5900'
QEMU 0.12.50 monitor - type 'help' for more information
(qemu) info qtree
bus: main-system-bus
  type System
  dev: s390-virtio-bridge, id ""
    bus: s390-virtio
      type s390-virtio
(qemu) quit
boromir:/ #

>> There are a few more details:
>> - netdev isn't supported, because netdev needs param 'bus='. If you try
>> to run this with BUS s390-virtio, netdev prints, that this is not supported.
>>   (everything should work with virtio, so if you enable '<model
>> type="virtio"/>', it works fine)
> This sounds rather like a bug in QEMU, but it might be a mistake
> in the way libvirt uses netdev.

>> - You have to set 'ports' for the controller. If you don't do this, the
>> virtual machine doesn't find VDA and so you can't start it. Maybe this
>> is because of the flags '-nodefconfig' and '-nodefaults'. The maximum
>> count of ports is 31 (the qemu implementation kills everything which is
>> higher than 32).
> Hmm, qemu has a default value for 'ports' which ought to be being
> applied regardless of x86 vs s390.

I think that the output above (of your recommended commands) corresponds
with my assumption.
If you look into the qemu implementation of max_ports in
"qemu-0.13.0/hw/s390-virtio-bus.c" (http://wiki.qemu.org/Download =>
qemu-0.13.0.tar.gz) you will find following which underlines also my
assumption with maximum of 31:

    static VirtIOS390DeviceInfo s390_virtio_serial = {
        .init = s390_virtio_serial_init,
        .qdev.name = "virtio-serial-s390",
        .qdev.alias = "virtio-serial",
        .qdev.size = sizeof(VirtIOS390Device),
        .qdev.props = (Property[]) {
            DEFINE_PROP_UINT32("max_ports", VirtIOS390Device,
max_virtserial_ports,
                               31),
            DEFINE_PROP_END_OF_LIST(),
        },
    };
>> - Also 'vectors' aren't supported for the controller. If you therefor
>> try to set a value, the virtual machine doesn't start.
> Not sure why that is. It could be that vectors is something
> specific to the PCI impl.
Maybe your are right. Test qemu command line shows following:

boromir:/data # qemu-system-s390x -enable-kvm -device
virtio-serial-s390,id=virtio-serial0,max_ports=16,vectors=1,bus=s390-virtio
qemu-system-s390x: -device
virtio-serial-s390,id=virtio-serial0,max_ports=16,vectors=1,bus=s390-virtio:
Property 'virtio-serial-s390.vectors' not found
>> - It is not very nice within the libvirt implementation
>> ('qemu_command.c') when every device gets PCI as address type (the only
>> way to fix this in a relative moderat time, is to overwrite it with
>> s390-virtio, if it runs on s390x).
> Yes, this is the thing that needs the most work to come to a proper
> solution in libvirt. I'd like to understand more about s390 from
> the 'info qtree' data requested above to see what we need todo...
>
If you looked at my last patch, there where only few points where I used
the C preprocessor. The point is that I don't know how I should rewrite
the functions for having an arch informationen within it, so that it can
be accepted.

Regards,
Patrick Siegl




More information about the libvir-list mailing list