From patchwork Fri Mar 22 09:28:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Wang X-Patchwork-Id: 1061012 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44QdfZ0h89z9sR0 for ; Fri, 22 Mar 2019 20:29:58 +1100 (AEDT) Received: from localhost ([127.0.0.1]:54448 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h7GUt-0006oi-Vf for incoming@patchwork.ozlabs.org; Fri, 22 Mar 2019 05:29:56 -0400 Received: from eggs.gnu.org ([209.51.188.92]:51329) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h7GTa-0006I0-7J for qemu-devel@nongnu.org; Fri, 22 Mar 2019 05:28:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h7GTZ-00046N-2l for qemu-devel@nongnu.org; Fri, 22 Mar 2019 05:28:34 -0400 Received: from mx1.redhat.com ([209.132.183.28]:51734) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h7GTY-00043X-Ji for qemu-devel@nongnu.org; Fri, 22 Mar 2019 05:28:32 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 416F5308339B; Fri, 22 Mar 2019 09:28:31 +0000 (UTC) Received: from jason-ThinkPad-X1-Carbon-6th.redhat.com (ovpn-12-96.pek2.redhat.com [10.72.12.96]) by smtp.corp.redhat.com (Postfix) with ESMTP id EE3995D9D2; Fri, 22 Mar 2019 09:28:21 +0000 (UTC) From: Jason Wang To: mst@redhat.com, yan@daynix.com, yuri.benditovich@daynix.com, qemu-devel@nongnu.org Date: Fri, 22 Mar 2019 17:28:03 +0800 Message-Id: <20190322092806.21838-2-jasowang@redhat.com> In-Reply-To: <20190322092806.21838-1-jasowang@redhat.com> References: <20190322092806.21838-1-jasowang@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Fri, 22 Mar 2019 09:28:31 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [RFT 1/4] virtio-bus: introduce a new method for querying the queue status X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Sometime we need to check whether a queue is enabled, e.g for vhost, we don't want to start the backend for the virtqueues that is not enabled. So introduce a new method to do this. Signed-off-by: Jason Wang --- include/hw/virtio/virtio-bus.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/hw/virtio/virtio-bus.h b/include/hw/virtio/virtio-bus.h index 7fec9dc929..db20fecf13 100644 --- a/include/hw/virtio/virtio-bus.h +++ b/include/hw/virtio/virtio-bus.h @@ -84,6 +84,10 @@ typedef struct VirtioBusClass { */ int (*ioeventfd_assign)(DeviceState *d, EventNotifier *notifier, int n, bool assign); + /* + * is the queue enabled? + */ + bool (*queue_enabled)(DeviceState *d, int n); /* * Does the transport have variable vring alignment? * (ie can it ever call virtio_queue_set_align()?) From patchwork Fri Mar 22 09:28:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Wang X-Patchwork-Id: 1061016 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44QdkC6W5mz9sN1 for ; Fri, 22 Mar 2019 20:33:07 +1100 (AEDT) Received: from localhost ([127.0.0.1]:54508 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h7GXx-0000r8-PQ for incoming@patchwork.ozlabs.org; Fri, 22 Mar 2019 05:33:05 -0400 Received: from eggs.gnu.org ([209.51.188.92]:51453) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h7GTo-0006WC-Fw for qemu-devel@nongnu.org; Fri, 22 Mar 2019 05:28:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h7GTm-0004WC-L1 for qemu-devel@nongnu.org; Fri, 22 Mar 2019 05:28:48 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42356) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h7GTk-0004P3-8d for qemu-devel@nongnu.org; Fri, 22 Mar 2019 05:28:44 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1F64BC1306FF; Fri, 22 Mar 2019 09:28:42 +0000 (UTC) Received: from jason-ThinkPad-X1-Carbon-6th.redhat.com (ovpn-12-96.pek2.redhat.com [10.72.12.96]) by smtp.corp.redhat.com (Postfix) with ESMTP id CEA2F5D9D2; Fri, 22 Mar 2019 09:28:31 +0000 (UTC) From: Jason Wang To: mst@redhat.com, yan@daynix.com, yuri.benditovich@daynix.com, qemu-devel@nongnu.org Date: Fri, 22 Mar 2019 17:28:04 +0800 Message-Id: <20190322092806.21838-3-jasowang@redhat.com> In-Reply-To: <20190322092806.21838-1-jasowang@redhat.com> References: <20190322092806.21838-1-jasowang@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Fri, 22 Mar 2019 09:28:42 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [RFT 2/4] virtio-pci: set enabled for legacy device X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" We don't set enabled for legacy device, this turns out to be an issue if we want to check it through vhost. So just simply set it when setting pa of a virtqueue. Signed-off-by: Jason Wang --- hw/virtio/virtio-pci.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index cb44e19b67..887ee2783c 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -306,8 +306,10 @@ static void virtio_ioport_write(void *opaque, uint32_t addr, uint32_t val) if (pa == 0) { virtio_pci_reset(DEVICE(proxy)); } - else + else { virtio_queue_set_addr(vdev, vdev->queue_sel, pa); + proxy->vqs[vdev->queue_sel].enabled = 1; + } break; case VIRTIO_PCI_QUEUE_SEL: if (val < VIRTIO_QUEUE_MAX) From patchwork Fri Mar 22 09:28:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Wang X-Patchwork-Id: 1061017 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44QdnR71rMz9sN1 for ; Fri, 22 Mar 2019 20:35:55 +1100 (AEDT) Received: from localhost ([127.0.0.1]:54554 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h7Gaf-00045f-Mu for incoming@patchwork.ozlabs.org; Fri, 22 Mar 2019 05:35:53 -0400 Received: from eggs.gnu.org ([209.51.188.92]:51494) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h7GTw-0006eS-Iu for qemu-devel@nongnu.org; Fri, 22 Mar 2019 05:28:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h7GTv-0004hX-GW for qemu-devel@nongnu.org; Fri, 22 Mar 2019 05:28:56 -0400 Received: from mx1.redhat.com ([209.132.183.28]:53392) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h7GTs-0004dF-Cl for qemu-devel@nongnu.org; Fri, 22 Mar 2019 05:28:53 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 831A9308FBB4; Fri, 22 Mar 2019 09:28:50 +0000 (UTC) Received: from jason-ThinkPad-X1-Carbon-6th.redhat.com (ovpn-12-96.pek2.redhat.com [10.72.12.96]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5285F5D9D2; Fri, 22 Mar 2019 09:28:42 +0000 (UTC) From: Jason Wang To: mst@redhat.com, yan@daynix.com, yuri.benditovich@daynix.com, qemu-devel@nongnu.org Date: Fri, 22 Mar 2019 17:28:05 +0800 Message-Id: <20190322092806.21838-4-jasowang@redhat.com> In-Reply-To: <20190322092806.21838-1-jasowang@redhat.com> References: <20190322092806.21838-1-jasowang@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.43]); Fri, 22 Mar 2019 09:28:50 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [RFT 3/4] virtio-pci: implement queue_enabled X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jason Wang --- hw/virtio/virtio-pci.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index 887ee2783c..8bce42ff6f 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -1094,6 +1094,13 @@ static AddressSpace *virtio_pci_get_dma_as(DeviceState *d) return pci_get_address_space(dev); } +static bool virtio_pci_queue_enabled(DeviceState *d, int n) +{ + VirtIOPCIProxy *proxy = VIRTIO_PCI(d); + + return proxy->vqs[n].enabled; +} + static int virtio_pci_add_mem_cap(VirtIOPCIProxy *proxy, struct virtio_pci_cap *cap) { @@ -2037,6 +2044,7 @@ static void virtio_pci_bus_class_init(ObjectClass *klass, void *data) k->ioeventfd_enabled = virtio_pci_ioeventfd_enabled; k->ioeventfd_assign = virtio_pci_ioeventfd_assign; k->get_dma_as = virtio_pci_get_dma_as; + k->queue_enabled = virtio_pci_queue_enabled; } static const TypeInfo virtio_pci_bus_info = { From patchwork Fri Mar 22 09:28:06 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Wang X-Patchwork-Id: 1061014 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44QdjD34mJz9sRj for ; Fri, 22 Mar 2019 20:32:16 +1100 (AEDT) Received: from localhost ([127.0.0.1]:54498 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h7GX8-0000BR-8A for incoming@patchwork.ozlabs.org; Fri, 22 Mar 2019 05:32:14 -0400 Received: from eggs.gnu.org ([209.51.188.92]:51599) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h7GU5-0006nj-0x for qemu-devel@nongnu.org; Fri, 22 Mar 2019 05:29:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h7GU3-0004uN-Bx for qemu-devel@nongnu.org; Fri, 22 Mar 2019 05:29:04 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42888) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h7GU2-0004tf-VX for qemu-devel@nongnu.org; Fri, 22 Mar 2019 05:29:03 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2FE8160A91; Fri, 22 Mar 2019 09:29:02 +0000 (UTC) Received: from jason-ThinkPad-X1-Carbon-6th.redhat.com (ovpn-12-96.pek2.redhat.com [10.72.12.96]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1213F5D9D2; Fri, 22 Mar 2019 09:28:51 +0000 (UTC) From: Jason Wang To: mst@redhat.com, yan@daynix.com, yuri.benditovich@daynix.com, qemu-devel@nongnu.org Date: Fri, 22 Mar 2019 17:28:06 +0800 Message-Id: <20190322092806.21838-5-jasowang@redhat.com> In-Reply-To: <20190322092806.21838-1-jasowang@redhat.com> References: <20190322092806.21838-1-jasowang@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Fri, 22 Mar 2019 09:29:02 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [RFT 4/4] vhost_net: don't start vhost for the virtqueue that is not enabled X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" According to the spec, device should not use the virtqueues that is not enabled. So this patch just try to obey the spec by checking whether queue is enabled before starting it. Signed-off-by: Jason Wang --- hw/virtio/vhost.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 7f61018f2a..b61d659a35 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1580,6 +1580,9 @@ int vhost_dev_get_inflight(struct vhost_dev *dev, uint16_t queue_size, /* Host notifiers must be enabled at this point. */ int vhost_dev_start(struct vhost_dev *hdev, VirtIODevice *vdev) { + BusState *qbus = BUS(qdev_get_parent_bus(DEVICE(vdev))); + VirtioBusState *vbus = VIRTIO_BUS(qbus); + VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(vbus); int i, r; /* should only be called after backend is connected */ @@ -1604,6 +1607,10 @@ int vhost_dev_start(struct vhost_dev *hdev, VirtIODevice *vdev) goto fail_mem; } for (i = 0; i < hdev->nvqs; ++i) { + if (k->queue_enabled && + !k->queue_enabled(qbus->parent, hdev->vq_index + i)) { + continue; + } r = vhost_virtqueue_start(hdev, vdev, hdev->vqs + i, @@ -1645,6 +1652,10 @@ fail_log: vhost_log_put(hdev, false); fail_vq: while (--i >= 0) { + if (k->queue_enabled && + !k->queue_enabled(qbus->parent, hdev->vq_index + i)) { + continue; + } vhost_virtqueue_stop(hdev, vdev, hdev->vqs + i,