From patchwork Fri Apr 19 14:24:20 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 237995 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 6E97A2C023C for ; Sat, 20 Apr 2013 00:29:59 +1000 (EST) Received: from localhost ([::1]:52256 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UTCK5-0008II-MA for incoming@patchwork.ozlabs.org; Fri, 19 Apr 2013 10:29:57 -0400 Received: from eggs.gnu.org ([208.118.235.92]:36802) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UTCF4-0000u4-Sk for qemu-devel@nongnu.org; Fri, 19 Apr 2013 10:24:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UTCF2-0003Wh-Jc for qemu-devel@nongnu.org; Fri, 19 Apr 2013 10:24:46 -0400 Received: from mail-ea0-x236.google.com ([2a00:1450:4013:c01::236]:36847) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UTCF2-0003Uu-8Q for qemu-devel@nongnu.org; Fri, 19 Apr 2013 10:24:44 -0400 Received: by mail-ea0-f182.google.com with SMTP id q15so1837223ead.13 for ; Fri, 19 Apr 2013 07:24:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:sender:from:to:cc:subject:date:message-id:x-mailer :in-reply-to:references; bh=CUBAJl6h3tfOg3hBjCwqn/aV5b95MG16EHnPZYRxqDc=; b=o5D2kXIUiTQ1o0aW/J4syh5ejH/i5cKDlS9GgkEwEIY61klAdyuDJxZX8tkv//S1y9 INoLwYTn7Nb3c+oHGLCEU26vQyG9gxVp9pltdIryLgLMK1Sc6OQRzz40UDPWjC8JR5J9 p7oyPmM5D4pH0B3XOV2ar3sovuQtoiUmernJMl2DMB+S+hXTlxYhBKlGLDx/bWN8TB1O bFps7FV1FbzZbIiGGNIm+oOFF5Cycx5FBfNqe349LKfXSh5d9QLyk6D9z2ZLCuBA5/y3 Y1sfKxWWWaRn04NPTR2nBiON1p/SJLmR7K2+K+wjJYU8g2HbMup5EqqoQFEgJe4I4C7F tQnw== X-Received: by 10.15.36.135 with SMTP id i7mr10450879eev.34.1366381483519; Fri, 19 Apr 2013 07:24:43 -0700 (PDT) Received: from playground.lan (93-34-176-20.ip50.fastwebnet.it. [93.34.176.20]) by mx.google.com with ESMTPS id cb50sm23384359eeb.14.2013.04.19.07.24.42 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Fri, 19 Apr 2013 07:24:42 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Fri, 19 Apr 2013 16:24:20 +0200 Message-Id: <1366381460-6041-10-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.1.4 In-Reply-To: <1366381460-6041-1-git-send-email-pbonzini@redhat.com> References: <1366381460-6041-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:4013:c01::236 Cc: asias@redhat.com, nab@linux-iscsi.org, "Michael S. Tsirkin" Subject: [Qemu-devel] [PATCH 9/9] vhost-scsi-s390: new device supporting the tcm_vhost Linux kernel module X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Signed-off-by: Paolo Bonzini Signed-off-by: Asias He Cc: Michael S. Tsirkin Signed-off-by: Nicholas Bellinger Signed-off-by: Paolo Bonzini --- hw/s390x/s390-virtio-bus.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++ hw/s390x/s390-virtio-bus.h | 16 +++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/hw/s390x/s390-virtio-bus.c b/hw/s390x/s390-virtio-bus.c index 8f29b5e..dabbc2e 100644 --- a/hw/s390x/s390-virtio-bus.c +++ b/hw/s390x/s390-virtio-bus.c @@ -28,6 +28,7 @@ #include "hw/virtio/virtio-rng.h" #include "hw/virtio/virtio-serial.h" #include "hw/virtio/virtio-net.h" +#include "hw/virtio/vhost-scsi.h" #include "hw/sysbus.h" #include "sysemu/kvm.h" @@ -239,6 +240,28 @@ static void s390_virtio_scsi_instance_init(Object *obj) object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL); } +#ifdef CONFIG_VHOST_SCSI +static int s390_vhost_scsi_init(VirtIOS390Device *s390_dev) +{ + VHostSCSIS390 *dev = VHOST_SCSI_S390(s390_dev); + DeviceState *vdev = DEVICE(&dev->vdev); + + qdev_set_parent_bus(vdev, BUS(&s390_dev->bus)); + if (qdev_init(vdev) < 0) { + return -1; + } + + return s390_virtio_device_init(s390_dev, VIRTIO_DEVICE(vdev)); +} + +static void s390_vhost_scsi_instance_init(Object *obj) +{ + VHostSCSIS390 *dev = VHOST_SCSI_S390(obj); + object_initialize(OBJECT(&dev->vdev), TYPE_VHOST_SCSI); + object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL); +} +#endif + static int s390_virtio_rng_init(VirtIOS390Device *dev) { VirtIODevice *vdev; @@ -582,6 +605,31 @@ static const TypeInfo s390_virtio_scsi = { .class_init = s390_virtio_scsi_class_init, }; +#ifdef CONFIG_VHOST_SCSI +static Property s390_vhost_scsi_properties[] = { + DEFINE_VIRTIO_COMMON_FEATURES(VirtIOS390Device, host_features), + DEFINE_VHOST_SCSI_PROPERTIES(VHostSCSIS390, vdev.parent_obj.conf), + DEFINE_PROP_END_OF_LIST(), +}; + +static void s390_vhost_scsi_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc = DEVICE_CLASS(klass); + VirtIOS390DeviceClass *k = VIRTIO_S390_DEVICE_CLASS(klass); + + k->init = s390_vhost_scsi_init; + dc->props = s390_vhost_scsi_properties; +} + +static const TypeInfo s390_vhost_scsi = { + .name = TYPE_VHOST_SCSI_S390, + .parent = TYPE_VIRTIO_S390_DEVICE, + .instance_size = sizeof(VHostSCSIS390), + .instance_init = s390_vhost_scsi_instance_init, + .class_init = s390_vhost_scsi_class_init, +}; +#endif + /***************** S390 Virtio Bus Bridge Device *******************/ /* Only required to have the virtio bus as child in the system bus */ @@ -643,6 +691,7 @@ static void s390_virtio_register_types(void) type_register_static(&s390_virtio_blk); type_register_static(&s390_virtio_net); type_register_static(&s390_virtio_scsi); + type_register_static(&s390_vhost_scsi); type_register_static(&s390_virtio_rng); type_register_static(&s390_virtio_bridge_info); } diff --git a/hw/s390x/s390-virtio-bus.h b/hw/s390x/s390-virtio-bus.h index 925ed2b..d7c47db 100644 --- a/hw/s390x/s390-virtio-bus.h +++ b/hw/s390x/s390-virtio-bus.h @@ -25,6 +25,9 @@ #include "hw/virtio/virtio-serial.h" #include "hw/virtio/virtio-scsi.h" #include "hw/virtio/virtio-bus.h" +#ifdef CONFIG_VHOST_SCSI +#include "hw/virtio/vhost-scsi.h" +#endif #define VIRTIO_DEV_OFFS_TYPE 0 /* 8 bits */ #define VIRTIO_DEV_OFFS_NUM_VQ 1 /* 8 bits */ @@ -160,4 +163,17 @@ typedef struct VirtIONetS390 { VirtIONet vdev; } VirtIONetS390; +/* vhost-scsi-s390 */ + +#ifdef CONFIG_VHOST_SCSI +#define TYPE_VHOST_SCSI_S390 "vhost-scsi-s390" +#define VHOST_SCSI_S390(obj) \ + OBJECT_CHECK(VHostSCSIS390, (obj), TYPE_VHOST_SCSI_S390) + +typedef struct VHostSCSIS390 { + VirtIOS390Device parent_obj; + VHostSCSI vdev; +} VHostSCSIS390; +#endif + #endif