qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH WIP 0/4] vhost-scsi: new device supporting the tcm_v


From: Paolo Bonzini
Subject: [Qemu-devel] [PATCH WIP 0/4] vhost-scsi: new device supporting the tcm_vhost Linux kernel module
Date: Wed, 30 Jan 2013 17:41:22 +0100

Ok, so here is my attempt at a vhost-scsi device.  I'm creating an
entirely separate device, with the common parts of virtio-scsi and
vhost-scsi (actually little more than the initialization) grouped into
a VirtIOSCSICommon type.  The device is used simply like "-device
vhost-scsi-pci,wwpn=WWPN", with all configuration done in configfs
beforehand.

As expected, using a separate device finds a snag: vhost-scsi is passing
force=false to vhost_dev_init, and the BIOS does not use MSI-X so it
will actually use the non-vhost implementation which is wrong.  I fixed
this by passing force=true; I'm not sure what that would break, but I
figured "not much" since the BIOS polls and does not rely on interrupts.

That makes vhost start, but it still doesn't work for me with a 3.7.2
kernel on the host.  Even Nick's patches hang the guest as soon as vhost
starts, and I get the same behavior with mine.  (Of course with my
patches the BIOS hangs and you never reach Linux; but try a BIOS without
virtio-scsi support, and you'll see Linux hanging in the same way).

Here is my configuration:

  cd /sys/kernel/config/target
  mkdir -p core/fileio_0/fileio
  echo 'fd_dev_name=/home/pbonzini/test.img,fd_dev_size=5905580032' > 
core/fileio_0/fileio/control 
  echo 1 > core/fileio_0/fileio/enable
  mkdir -p vhost/naa.600140554cf3a18e/tpgt_0/lun/lun_0
  cd vhost/naa.600140554cf3a18e/tpgt_0
  ln -sf ../../../../../core/fileio_0/fileio/ lun/lun_0/virtual_scsi_port
  echo naa.60014053226f0388 > nexus

Nick's patches are run with "-vhost-scsi id=vs,tpgt=0,wwpn=naa.600140554cf3a18e
-device virtio-scsi-pci,vhost-scsi=vs".  Perhaps I'm doing something wrong.

Another small bug I found is an ordering problem between
VHOST_SET_VRING_KICK and VHOST_SCSI_SET_ENDPOINT.  Starting the vq
causes a "vhost_scsi_handle_vq endpoint not set" error in dmesg.
Because of this I added the first two patches, which let me do
VHOST_SCSI_SET_ENDPOINT before VHOST_SET_VRING_KICK but after setting
up the vring.

Unfortunately, this is not enough to fix the hang.  And anyway, it's
probably simpler to avoid the two patches and remove this test from the
tcm_vhost.c vhost_scsi_set/clear_endpoint functions:

        mutex_lock(&vs->dev.mutex);
        /* Verify that ring has been setup correctly. */
        for (index = 0; index < vs->dev.nvqs; ++index) {
                /* Verify that ring has been setup correctly. */
                if (!vhost_vq_access_ok(&vs->vqs[index])) {
                        mutex_unlock(&vs->dev.mutex);
                        return -EFAULT;
                }
        }
        mutex_unlock(&vs->dev.mutex);

This way, VHOST_SCSI_SET_ENDPOINT can simply be invoked right after
vhost_dev_init, and likewise VHOST_SCSI_CLEAR_ENDPOINT in vhost_scsi_exit.

I placed both sets of patches on two branches (vhost-scsi-nab and
vhost-scsi) of my github repo at git://github.com/bonzini/qemu.git.
One thing I haven't done due to lack of time is applying Nick's patches
to a tree from last September.  If it works, we can bisect.  But this is
pretty much all the time I can devote to vhost-scsi.  Nick/Asias, if
you want to pick it up please do.

Paolo

Paolo Bonzini (4):
  vhost: do VHOST_SET_VRING_KICK after setting up all vrings
  vhost: add set_vhost_endpoint and clear_vhost_endpoint callbacks
  virtio-scsi: create VirtIOSCSICommon
  vhost-scsi: new device supporting the tcm_vhost Linux kernel module

 hw/Makefile.objs     |   5 +-
 hw/s390-virtio-bus.c |  35 +++++++++
 hw/vhost-scsi.c      | 188 ++++++++++++++++++++++++++++++++++++++++++++++++
 hw/vhost-scsi.h      |  62 ++++++++++++++++
 hw/vhost.c           |  75 ++++++++++++-------
 hw/virtio-pci.c      |  59 +++++++++++++++
 hw/virtio-scsi.c     | 199 +++++++++++++--------------------------------------
 hw/virtio-scsi.h     | 129 +++++++++++++++++++++++++++++++++
 hw/virtio.h          |   2 +
 include/qemu/osdep.h |   4 ++
 10 files changed, 583 insertions(+), 175 deletions(-)
 create mode 100644 hw/vhost-scsi.c
 create mode 100644 hw/vhost-scsi.h

-- 
1.8.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]