From patchwork Sun Apr 14 21:26:34 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: fred.konrad@greensocs.com X-Patchwork-Id: 236481 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 AC5932C00A5 for ; Mon, 15 Apr 2013 07:31:30 +1000 (EST) Received: from localhost ([::1]:45907 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1URUWG-0002lI-UN for incoming@patchwork.ozlabs.org; Sun, 14 Apr 2013 17:31:28 -0400 Received: from eggs.gnu.org ([208.118.235.92]:40526) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1URURz-0004RS-IY for qemu-devel@nongnu.org; Sun, 14 Apr 2013 17:27:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1URURx-00054n-Oz for qemu-devel@nongnu.org; Sun, 14 Apr 2013 17:27:03 -0400 Received: from greensocs.com ([87.106.252.221]:42688 helo=s15328186.onlinehome-server.info) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1URURx-00054i-G0 for qemu-devel@nongnu.org; Sun, 14 Apr 2013 17:27:01 -0400 Received: from localhost (unknown [127.0.0.1]) by s15328186.onlinehome-server.info (Postfix) with ESMTP id 0CB6E40B250; Sun, 14 Apr 2013 21:27:01 +0000 (UTC) Received: from s15328186.onlinehome-server.info ([127.0.0.1]) by localhost (s15328186.onlinehome-server.info [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id QBYT6sbXv-52; Sun, 14 Apr 2013 23:26:58 +0200 (CEST) Received: by s15328186.onlinehome-server.info (Postfix, from userid 491) id D98C140EC61; Sun, 14 Apr 2013 23:26:51 +0200 (CEST) Received: from compaq.katmai.xl.cx.katmai.xl.cx (lan31-11-83-155-143-136.fbx.proxad.net [83.155.143.136]) by s15328186.onlinehome-server.info (Postfix) with ESMTPSA id B9C7F40EC60; Sun, 14 Apr 2013 23:26:50 +0200 (CEST) From: fred.konrad@greensocs.com To: qemu-devel@nongnu.org, aliguori@us.ibm.com Date: Sun, 14 Apr 2013 23:26:34 +0200 Message-Id: <1365974797-13217-6-git-send-email-fred.konrad@greensocs.com> X-Mailer: git-send-email 1.7.11.7 In-Reply-To: <1365974797-13217-1-git-send-email-fred.konrad@greensocs.com> References: <1365974797-13217-1-git-send-email-fred.konrad@greensocs.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 87.106.252.221 Cc: peter.maydell@linaro.org, mark.burton@greensocs.com, Alexander Graf , cornelia.huck@de.ibm.com, fred.konrad@greensocs.com, Richard Henderson Subject: [Qemu-devel] [PATCH v3 5/8] virtio-ccw: cleanup. 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 From: KONRAD Frederic This is a cleanup for virtio-ccw. The init function is replaced by the device_plugged callback from virtio-bus. Signed-off-by: KONRAD Frederic --- hw/s390x/virtio-ccw.c | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c index 5d62606..4857f97 100644 --- a/hw/s390x/virtio-ccw.c +++ b/hw/s390x/virtio-ccw.c @@ -392,8 +392,10 @@ static int virtio_ccw_cb(SubchDev *sch, CCW1 ccw) return ret; } -static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev) +/* This is called by virtio-bus just after the device is plugged. */ +static void virtio_ccw_device_plugged(DeviceState *d) { + VirtioCcwDevice *dev = VIRTIO_CCW_DEVICE(d); unsigned int cssid = 0; unsigned int ssid = 0; unsigned int schid; @@ -401,7 +403,6 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev) bool have_devno = false; bool found = false; SubchDev *sch; - int ret; int num; DeviceState *parent = DEVICE(dev); @@ -410,7 +411,7 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev) sch->driver_data = dev; dev->sch = sch; - dev->vdev = vdev; + dev->vdev = dev->bus.vdev; dev->indicators = 0; /* Initialize subchannel structure. */ @@ -425,19 +426,16 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev) num = sscanf(dev->bus_id, "%x.%x.%04x", &cssid, &ssid, &devno); if (num == 3) { if ((cssid > MAX_CSSID) || (ssid > MAX_SSID)) { - ret = -EINVAL; error_report("Invalid cssid or ssid: cssid %x, ssid %x", cssid, ssid); goto out_err; } /* Enforce use of virtual cssid. */ if (cssid != VIRTUAL_CSSID) { - ret = -EINVAL; error_report("cssid %x not valid for virtio devices", cssid); goto out_err; } if (css_devno_used(cssid, ssid, devno)) { - ret = -EEXIST; error_report("Device %x.%x.%04x already exists", cssid, ssid, devno); goto out_err; @@ -447,7 +445,6 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev) sch->devno = devno; have_devno = true; } else { - ret = -EINVAL; error_report("Malformed devno parameter '%s'", dev->bus_id); goto out_err; } @@ -464,7 +461,6 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev) } } if (!found) { - ret = -ENODEV; error_report("No free subchannel found for %x.%x.%04x", cssid, ssid, devno); goto out_err; @@ -488,7 +484,6 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev) if (devno == MAX_SCHID) { devno = 0; } else if (devno == schid - 1) { - ret = -ENODEV; error_report("No free devno found"); goto out_err; } else { @@ -506,7 +501,6 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev) } } if (!found) { - ret = -ENODEV; error_report("Virtual channel subsystem is full!"); goto out_err; } @@ -525,20 +519,19 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev) sch->id.cu_type = VIRTIO_CCW_CU_TYPE; sch->id.cu_model = dev->vdev->device_id; - virtio_bind_device(vdev, &virtio_ccw_bindings, DEVICE(dev)); /* Only the first 32 feature bits are used. */ - dev->host_features[0] = vdev->get_features(vdev, dev->host_features[0]); + dev->host_features[0] = dev->vdev->get_features(dev->vdev, + dev->host_features[0]); dev->host_features[0] |= 0x1 << VIRTIO_F_NOTIFY_ON_EMPTY; dev->host_features[0] |= 0x1 << VIRTIO_F_BAD_FEATURE; css_generate_sch_crws(sch->cssid, sch->ssid, sch->schid, parent->hotplugged, 1); - return 0; + return; out_err: dev->sch = NULL; g_free(sch); - return ret; } static int virtio_ccw_exit(VirtioCcwDevice *dev) @@ -564,7 +557,7 @@ static int virtio_ccw_net_init(VirtioCcwDevice *ccw_dev) return -1; } - return virtio_ccw_device_init(ccw_dev, VIRTIO_DEVICE(vdev)); + return 0; } static void virtio_ccw_net_instance_init(Object *obj) @@ -584,7 +577,7 @@ static int virtio_ccw_blk_init(VirtioCcwDevice *ccw_dev) return -1; } - return virtio_ccw_device_init(ccw_dev, VIRTIO_DEVICE(vdev)); + return 0; } static void virtio_ccw_blk_instance_init(Object *obj) @@ -604,7 +597,7 @@ static int virtio_ccw_serial_init(VirtioCcwDevice *ccw_dev) return -1; } - return virtio_ccw_device_init(ccw_dev, VIRTIO_DEVICE(vdev)); + return 0; } @@ -625,7 +618,7 @@ static int virtio_ccw_balloon_init(VirtioCcwDevice *ccw_dev) return -1; } - return virtio_ccw_device_init(ccw_dev, VIRTIO_DEVICE(vdev)); + return 0; } static void virtio_ccw_balloon_instance_init(Object *obj) @@ -645,7 +638,7 @@ static int virtio_ccw_scsi_init(VirtioCcwDevice *ccw_dev) return -1; } - return virtio_ccw_device_init(ccw_dev, VIRTIO_DEVICE(vdev)); + return 0; } static void virtio_ccw_scsi_instance_init(Object *obj) @@ -669,7 +662,7 @@ static int virtio_ccw_rng_init(VirtioCcwDevice *ccw_dev) OBJECT(dev->vdev.conf.default_backend), "rng", NULL); - return virtio_ccw_device_init(ccw_dev, VIRTIO_DEVICE(vdev)); + return 0; } /* DeviceState to VirtioCcwDevice. Note: used on datapath, @@ -996,6 +989,7 @@ static void virtio_ccw_bus_class_init(ObjectClass *klass, void *data) bus_class->max_dev = 1; k->notify = virtio_ccw_notify; k->get_features = virtio_ccw_get_features; + k->device_plugged = virtio_ccw_device_plugged; } static const TypeInfo virtio_ccw_bus_info = {