All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Laszlo Ersek \(Red Hat\)" <lersek@redhat.com>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [Bug 1594239] Re: After adding more scsi disks for Aarch64 virtual machine, start the VM and got Qemu Error
Date: Sat, 02 Jul 2016 09:19:56 -0000	[thread overview]
Message-ID: <20160702091956.17855.9445.malone@wampee.canonical.com> (raw)
In-Reply-To: 20160620032122.2878.51451.malonedeb@chaenomeles.canonical.com

The issue is that virtio-mmio devices don't distinguish themselves on
the sysbus level.

Using the small reproducer from Cole, and setting a breakpoint on
virtio_bus_get_dev_path(), for the second virtio-scsi-device we get:

    ...
      qdev_get_dev_path()
        virtio_bus_get_dev_path()
          qdev_get_dev_path()

In virtio_bus_get_dev_path(), "bus" is set to "virtio-mmio-bus.30"
("name" field). "proxy" is set to the VirtIOMMIOProxy object that
produces (owns) "virtio-mmio-bus.30" as its "bus" field. Finally
virtio_bus_get_dev_path() forwards the "get dev path" request to this
proxy object.

In that second qdev_get_dev_path() call, the parent bus for the
VirtIOMMIOProxy object is "main-system-bus" (proxy->parent_bus->name).

The bus class for the main system bus is set up in
system_bus_class_init(), and that function only sets the "print_dev" and
"get_fw_dev_path" member functions. The "get_dev_path" member function
is left NULL, hence qdev_get_dev_path() will return NULL ultimately.

Thus, in the "dev/id" case, in your debug patch's terminology, "id" will
be NULL, and the inner concatenation branch will not be taken. Only
vmsd->name will be copied into se->idstr.

This can be fixed in two ways, I believe.

* First, we could implement sysbus_get_dev_path(), and set it in
system_bus_class_init(). This function would closely follow
sysbus_get_fw_dev_path(): format the address of the first MMIO or IO
region of the device to a string. For virtio-mmio devices in particular,
this would be suitable, because they have a single (0x200 size) memory
region (see VirtIOMMIOProxy.iomem), and the base address of that memory
region is precisely what distinguishes the virtio-mmio transports from
each other.

* Secondly, we could override virtio_bus_get_dev_path() in
virtio_mmio_bus_class_init(), as the "get_dev_path" member function of
the TYPE_VIRTIO_MMIO_BUS class. Implementing
virtio_mmio_bus_get_dev_path() would result in the first
qdev_get_dev_path() listed above to call our specialized code.

In virtio_mmio_bus_get_dev_path(), we could open-code the first two
steps of virtio_bus_get_dev_path():

    BusState *bus = qdev_get_parent_bus(dev);
    DeviceState *proxy = DEVICE(bus->parent);

Here we'd know that "proxy" (a VirtIOMMIOProxy object) is actually
derived from SysBusDevice, and we could dynamic-cast it accordingly. In
the SysBusDevice, we could access mmio[0].addr directly (it's a "public"
field, and we know virtio-mmio transports have exactly one MMIO region
and no IO regions), and format that.

The small issue with both alternatives is that they'd immediately break
migration between pre-patch and post-patch, because (IIUC) these paths
get formatted into migration section headers or some such. So either
change would require introducing new machine type versions for *all*
target arches and machine types that are currently versioned. This is
the reason I'm not trying to prototype either idea above -- just
gathering all those machine types looks daunting.

-- 
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1594239

Title:
  After adding more scsi disks for Aarch64 virtual machine, start the VM
  and got Qemu Error

Status in QEMU:
  Confirmed

Bug description:
  Description
  ===========
  Using virt-manager to create a VM in Aarch64, Ubuntu 16.04.
  Add scsi disk to the VM. After add four or more scsi disks, start the VM and will got Qemu error.

  Steps to reproduce
  ==================
  1.Use virt-manager to create a VM.
  2.After the VM is started, add scsi disk to the VM. They will be allocated to "sdb,sdc,sdd....." .
  3.If we got a disk name > sdg, virt-manager will also assign a virtio-scsi controller for this disk.And the VM will be shutdown.
  4.Start the VM, will see the error log.

  
  Expected result
  ===============
  Start the vm smoothly.The added disks can work.

  Actual result
  =============
  Got the error:
  starting domain: internal error: process exited while connecting to monitor: qemu-system-aarch64: /build/qemu-zxCwKP/qemu-2.5+dfsg/migration/savevm.c:620: vmstate_register_with_alias_id: Assertion `!se->compat || se->instance_id == 0' failed.
  details=Traceback (most recent call last):
    File "/usr/share/virt-manager/virtManager/asyncjob.py", line 90, in cb_wrapper
      callback(asyncjob, *args, **kwargs)
    File "/usr/share/virt-manager/virtManager/asyncjob.py", line 126, in tmpcb
      callback(*args, **kwargs)
    File "/usr/share/virt-manager/virtManager/libvirtobject.py", line 83, in newfn
      ret = fn(self, *args, **kwargs)
    File "/usr/share/virt-manager/virtManager/domain.py", line 1402, in startup
      self._backend.create()
    File "/usr/local/lib/python2.7/dist-packages/libvirt.py", line 1035, in create
      if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self)
  libvirtError: internal error: process exited while connecting to monitor: qemu-system-aarch64: /build/qemu-zxCwKP/qemu-2.5+dfsg/migration/savevm.c:620: vmstate_register_with_alias_id: Assertion `!se->compat || se->instance_id == 0' failed.

  
  Environment
  ===========
  1. virt-manager version is 1.3.2

  2. Which hypervisor did you use?
      Libvirt+KVM
      $ kvm --version
      QEMU emulator version 2.5.0 (Debian 1:2.5+dfsg-5ubuntu10.1), Copyright (c) 2003-2008 Fabrice Bellard
      $ libvirtd --version
      libvirtd (libvirt) 1.3.1

  3. Which storage type did you use?
     In the host file system,all in one physics machine.
  stack@u202154:/opt/stack/nova$ df -hl
  Filesystem Size Used Avail Use% Mounted on
  udev 7.8G 0 7.8G 0% /dev
  tmpfs 1.6G 61M 1.6G 4% /run
  /dev/sda2 917G 41G 830G 5% /
  tmpfs 7.9G 0 7.9G 0% /dev/shm
  tmpfs 5.0M 0 5.0M 0% /run/lock
  tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
  /dev/sda1 511M 888K 511M 1% /boot/efi
  cgmfs 100K 0 100K 0% /run/cgmanager/fs
  tmpfs 1.6G 0 1.6G 0% /run/user/1002
  tmpfs 1.6G 0 1.6G 0% /run/user/1000
  tmpfs 1.6G 0 1.6G 0% /run/user/0

  4. Environment information:
     Architecture : AARCH64
     OS: Ubuntu 16.04

  The Qemu commmand of libvirt is :
  2016-06-20 02:39:46.561+0000: starting up libvirt version: 1.3.1, package: 1ubuntu10 (William Grant <wgrant@ubuntu.com> Fri, 15 Apr 2016 12:08:21 +1000), qemu version: 2.5.0 (Debian 1:2.5+dfsg-5ubuntu10.1), hostname: u202154
  LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin QEMU_AUDIO_DRV=none /usr/bin/kvm -name cent7 -S -machine virt,accel=kvm,usb=off -cpu host -drive file=/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw,if=pflash,format=raw,unit=0,readonly=on -drive file=/var/lib/libvirt/qemu/nvram/cent7_VARS.fd,if=pflash,format=raw,unit=1 -m 2048 -realtime mlock=off -smp 2,sockets=2,cores=1,threads=1 -uuid d5462bb6-159e-4dbd-9266-bf8c07fa1695 -nographic -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-cent7/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -boot strict=on -device i82801b11-bridge,id=pci.1,bus=pcie.0,addr=0x1 -device pci-bridge,chassis_nr=2,id=pci.2,bus=pci.1,addr=0x1 -device virtio-scsi-device,id=scsi0 -device lsi,id=scsi1 -device lsi,id=scsi2 -device virtio-scsi-device,id=scsi3 -usb -drive file=/var/lib/libvirt/images/cent7-2.img,format=qcow2,if=none,id=drive-scsi0-0-0-0 -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0-0-0-0,id=scsi0-0-0-0,bootindex=1 -drive if=none,id=drive-scsi0-0-0-1,readonly=on -device scsi-cd,bus=scsi0.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi0-0-0-1,id=scsi0-0-0-1 -drive file=/var/lib/libvirt/images/cent7-10.img,format=qcow2,if=none,id=drive-scsi0-0-0-2 -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=2,drive=drive-scsi0-0-0-2,id=scsi0-0-0-2 -drive file=/var/lib/libvirt/images/cent7-11.img,format=qcow2,if=none,id=drive-scsi0-0-0-3 -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=3,drive=drive-scsi0-0-0-3,id=scsi0-0-0-3 -drive file=/var/lib/libvirt/images/cent7-13.img,format=qcow2,if=none,id=drive-scsi3-0-0-0 -device scsi-hd,bus=scsi3.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi3-0-0-0,id=scsi3-0-0-0 -netdev tap,fd=33,id=hostnet0,vhost=on,vhostfd=35 -device virtio-net-device,netdev=hostnet0,id=net0,mac=52:54:00:a1:6e:75 -serial pty -msg timestamp=on
  Domain id=11 is tainted: host-cpu

  The libvirt xml is:
  <domain type='kvm'>
    <name>cent7</name>
    <uuid>d5462bb6-159e-4dbd-9266-bf8c07fa1695</uuid>
    <memory unit='KiB'>2097152</memory>
    <currentMemory unit='KiB'>2097152</currentMemory>
    <vcpu placement='static'>2</vcpu>
    <os>
      <type arch='aarch64' machine='virt'>hvm</type>
      <loader readonly='yes' type='pflash'>/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw</loader>
      <nvram>/var/lib/libvirt/qemu/nvram/cent7_VARS.fd</nvram>
      <boot dev='hd'/>
    </os>
    <cpu mode='host-passthrough'/>
    <clock offset='utc'/>
    <on_poweroff>destroy</on_poweroff>
    <on_reboot>restart</on_reboot>
    <on_crash>restart</on_crash>
    <devices>
      <emulator>/usr/bin/kvm</emulator>
      <disk type='file' device='disk'>
        <driver name='qemu' type='qcow2'/>
        <source file='/var/lib/libvirt/images/cent7-2.img'/>
        <target dev='sda' bus='scsi'/>
        <address type='drive' controller='0' bus='0' target='0' unit='0'/>
      </disk>
      <disk type='file' device='cdrom'>
        <driver name='qemu' type='raw'/>
        <target dev='sdb' bus='scsi'/>
        <readonly/>
        <address type='drive' controller='0' bus='0' target='0' unit='1'/>
      </disk>
      <disk type='file' device='disk'>
        <driver name='qemu' type='qcow2'/>
        <source file='/var/lib/libvirt/images/cent7-10.img'/>
        <target dev='sdc' bus='scsi'/>
        <address type='drive' controller='0' bus='0' target='0' unit='2'/>
      </disk>
      <disk type='file' device='disk'>
        <driver name='qemu' type='qcow2'/>
        <source file='/var/lib/libvirt/images/cent7-11.img'/>
        <target dev='sdd' bus='scsi'/>
        <address type='drive' controller='0' bus='0' target='0' unit='3'/>
      </disk>
      <disk type='file' device='disk'>
        <driver name='qemu' type='qcow2'/>
        <source file='/var/lib/libvirt/images/cent7-13.img'/>
        <target dev='sdv' bus='scsi'/>
        <address type='drive' controller='3' bus='0' target='0' unit='0'/>
      </disk>
      <controller type='scsi' index='0' model='virtio-scsi'>
        <address type='virtio-mmio'/>
      </controller>
      <controller type='scsi' index='1'>
        <address type='virtio-mmio'/>
      </controller>
      <controller type='scsi' index='2'>
        <address type='virtio-mmio'/>
      </controller>
      <controller type='scsi' index='3' model='virtio-scsi'>
        <address type='virtio-mmio'/>
      </controller>
      <controller type='pci' index='0' model='pcie-root'/>
      <controller type='pci' index='1' model='dmi-to-pci-bridge'>
        <model name='i82801b11-bridge'/>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
      </controller>
      <controller type='pci' index='2' model='pci-bridge'>
        <model name='pci-bridge'/>
        <target chassisNr='2'/>
        <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/>
      </controller>
      <interface type='bridge'>
        <mac address='52:54:00:a1:6e:75'/>
        <source bridge='br0'/>
        <model type='virtio'/>
        <address type='virtio-mmio'/>
      </interface>
      <serial type='pty'>
        <target port='0'/>
      </serial>
      <console type='pty'>
        <target type='serial' port='0'/>
      </console>
    </devices>
  </domain>

To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1594239/+subscriptions

  parent reply	other threads:[~2016-07-02  9:25 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-20  3:21 [Qemu-devel] [Bug 1594239] [NEW] After adding more scsi disks for Aarch64 virtual machine, start the VM and got Qemu Error Kevin Zhao
2016-06-27 14:53 ` [Qemu-devel] [Bug 1594239] " Peter Maydell
2016-06-28 13:37 ` Kevin Zhao
2016-06-28 16:46 ` Cole Robinson
2016-06-28 17:22 ` Dr. David Alan Gilbert
2016-07-01  0:45 ` Tom Hanson
2016-07-01  4:21 ` Tom Hanson
2016-07-01  8:27 ` Dr. David Alan Gilbert
2016-07-01 14:22   ` Tom Hanson
2016-07-01 15:08 ` Dr. David Alan Gilbert
2016-07-01 22:33   ` Tom Hanson
2016-07-02  1:07 ` Tom Hanson
2016-07-02  9:19 ` Laszlo Ersek (Red Hat) [this message]
2016-07-05 14:41 ` Tom Hanson
2016-07-05 15:02   ` Peter Maydell
2016-07-05 15:03     ` Peter Maydell
2016-07-05 14:58 ` Dr. David Alan Gilbert
2016-07-05 15:20 ` Tom Hanson
2016-07-05 16:29   ` Peter Maydell
2016-07-05 16:43     ` Tom Hanson
2016-07-05 19:57       ` Peter Maydell
2016-07-05 15:29 ` Laszlo Ersek (Red Hat)
2016-07-05 15:46   ` Tom Hanson
2016-07-05 15:47 ` Laszlo Ersek (Red Hat)
2016-07-05 16:34 ` Tom Hanson
2016-07-05 17:50 ` Laszlo Ersek (Red Hat)
2016-07-05 19:10 ` Tom Hanson
2016-07-05 19:26 ` Laszlo Ersek (Red Hat)
2016-07-05 20:22   ` Tom Hanson
2016-07-05 20:40     ` Tom Hanson
2016-07-14 18:04 ` Laszlo Ersek (Red Hat)
2016-09-02 21:34 ` T. Huth
2016-11-18 22:52 ` PabloSaenz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160702091956.17855.9445.malone@wampee.canonical.com \
    --to=lersek@redhat.com \
    --cc=1594239@bugs.launchpad.net \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.