From patchwork Mon Aug 10 19:28:09 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Michael S. Tsirkin" X-Patchwork-Id: 31103 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by bilbo.ozlabs.org (Postfix) with ESMTPS id C819BB6EDF for ; Tue, 11 Aug 2009 05:30:15 +1000 (EST) Received: from localhost ([127.0.0.1]:54814 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MaaZM-0001JN-HT for incoming@patchwork.ozlabs.org; Mon, 10 Aug 2009 15:30:08 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MaaYp-0001Gj-9y for qemu-devel@nongnu.org; Mon, 10 Aug 2009 15:29:35 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MaaYj-0001CK-Up for qemu-devel@nongnu.org; Mon, 10 Aug 2009 15:29:34 -0400 Received: from [199.232.76.173] (port=35252 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MaaYj-0001CB-Gz for qemu-devel@nongnu.org; Mon, 10 Aug 2009 15:29:29 -0400 Received: from mx2.redhat.com ([66.187.237.31]:42052) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MaaYi-0004mW-Ki for qemu-devel@nongnu.org; Mon, 10 Aug 2009 15:29:29 -0400 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n7AJTNwL013938; Mon, 10 Aug 2009 15:29:23 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n7AJTNXw017939; Mon, 10 Aug 2009 15:29:23 -0400 Received: from redhat.com (vpn-6-19.tlv.redhat.com [10.35.6.19]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n7AJTKWM002721; Mon, 10 Aug 2009 15:29:21 -0400 Date: Mon, 10 Aug 2009 22:28:09 +0300 From: "Michael S. Tsirkin" To: anthony@codemonkey.ws, qemu-devel@nongnu.org Message-ID: <20090810192809.GA16800@redhat.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.19 (2009-01-05) X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 3) Cc: rusty@rustcorp.com.au, virtualization@lists.linux-foundation.org Subject: [Qemu-devel] [PATCH] qemu/virtio: move features to an inline function X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org devices should have the final say over which virtio features they support. E.g. indirect entries may or may not make sense in the context of virtio-console. Move the common bits from virtio-pci to an inline function and let each device call it. No functional changes. Signed-off-by: Michael S. Tsirkin --- This is part of my vhost work, but IMO the patch makes sense separately as well: the common features are not related to pci at all. hw/virtio-balloon.c | 2 +- hw/virtio-blk.c | 2 +- hw/virtio-console.c | 2 +- hw/virtio-net.c | 2 +- hw/virtio-pci.c | 3 --- hw/virtio.h | 10 ++++++++++ 6 files changed, 14 insertions(+), 7 deletions(-) diff --git a/hw/virtio-balloon.c b/hw/virtio-balloon.c index 7ca783e..15b50bb 100644 --- a/hw/virtio-balloon.c +++ b/hw/virtio-balloon.c @@ -127,7 +127,7 @@ static void virtio_balloon_set_config(VirtIODevice *vdev, static uint32_t virtio_balloon_get_features(VirtIODevice *vdev) { - return 0; + return virtio_common_features(); } static ram_addr_t virtio_balloon_to_target(void *opaque, ram_addr_t target) diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c index 2beff52..7d33fee 100644 --- a/hw/virtio-blk.c +++ b/hw/virtio-blk.c @@ -364,7 +364,7 @@ static uint32_t virtio_blk_get_features(VirtIODevice *vdev) if (strcmp(s->serial_str, "0")) features |= 1 << VIRTIO_BLK_F_IDENTIFY; - return features; + return features | virtio_common_features(); } static void virtio_blk_save(QEMUFile *f, void *opaque) diff --git a/hw/virtio-console.c b/hw/virtio-console.c index 663c8b9..ac25499 100644 --- a/hw/virtio-console.c +++ b/hw/virtio-console.c @@ -53,7 +53,7 @@ static void virtio_console_handle_input(VirtIODevice *vdev, VirtQueue *vq) static uint32_t virtio_console_get_features(VirtIODevice *vdev) { - return 0; + return virtio_common_features(); } static int vcon_can_read(void *opaque) diff --git a/hw/virtio-net.c b/hw/virtio-net.c index ef9e7ff..2e51a6a 100644 --- a/hw/virtio-net.c +++ b/hw/virtio-net.c @@ -154,7 +154,7 @@ static uint32_t virtio_net_get_features(VirtIODevice *vdev) } #endif - return features; + return features | virtio_common_features(); } static uint32_t virtio_net_bad_features(VirtIODevice *vdev) diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c index 3b9bfd1..90f51be 100644 --- a/hw/virtio-pci.c +++ b/hw/virtio-pci.c @@ -232,9 +232,6 @@ static uint32_t virtio_ioport_read(VirtIOPCIProxy *proxy, uint32_t addr) switch (addr) { case VIRTIO_PCI_HOST_FEATURES: ret = vdev->get_features(vdev); - ret |= (1 << VIRTIO_F_NOTIFY_ON_EMPTY); - ret |= (1 << VIRTIO_RING_F_INDIRECT_DESC); - ret |= (1 << VIRTIO_F_BAD_FEATURE); break; case VIRTIO_PCI_GUEST_FEATURES: ret = vdev->features; diff --git a/hw/virtio.h b/hw/virtio.h index aa55677..de620a7 100644 --- a/hw/virtio.h +++ b/hw/virtio.h @@ -166,4 +166,14 @@ VirtIODevice *virtio_net_init(DeviceState *dev); VirtIODevice *virtio_console_init(DeviceState *dev); VirtIODevice *virtio_balloon_init(DeviceState *dev); +static inline uint32_t virtio_common_features(void) +{ + uint32_t features = 0; + features |= (1 << VIRTIO_F_NOTIFY_ON_EMPTY); + features |= (1 << VIRTIO_RING_F_INDIRECT_DESC); + features |= (1 << VIRTIO_F_BAD_FEATURE); + + return features; +} + #endif