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,