From nobody Sun May 5 13:57:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1498675760279550.6751214236905; Wed, 28 Jun 2017 11:49:20 -0700 (PDT) Received: from localhost ([::1]:35176 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQI1c-0005wz-Qv for importer@patchew.org; Wed, 28 Jun 2017 14:49:16 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35993) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQI04-0004Qb-1g for qemu-devel@nongnu.org; Wed, 28 Jun 2017 14:47:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dQI03-0000jx-Cu for qemu-devel@nongnu.org; Wed, 28 Jun 2017 14:47:40 -0400 Received: from mx1.redhat.com ([209.132.183.28]:55964) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dQI01-0000h1-HL; Wed, 28 Jun 2017 14:47:37 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8C2357F6AC; Wed, 28 Jun 2017 18:47:36 +0000 (UTC) Received: from localhost (ovpn-116-41.ams2.redhat.com [10.36.116.41]) by smtp.corp.redhat.com (Postfix) with ESMTP id CCB9D81F3B; Wed, 28 Jun 2017 18:47:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 8C2357F6AC Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=stefanha@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 8C2357F6AC From: Stefan Hajnoczi To: Date: Wed, 28 Jun 2017 19:47:19 +0100 Message-Id: <20170628184724.21378-2-stefanha@redhat.com> In-Reply-To: <20170628184724.21378-1-stefanha@redhat.com> References: <20170628184724.21378-1-stefanha@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Wed, 28 Jun 2017 18:47:36 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 1/6] libqos: fix typo in virtio.h QVirtQueue->used comment 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: Kevin Wolf , Stefan Hajnoczi , qemu-block@nongnu.org, "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Stefan Hajnoczi Reviewed-by: Fam Zheng Reviewed-by: Michael S. Tsirkin Tested-by: Eric Blake Tested-by: Kevin Wolf --- tests/libqos/virtio.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/libqos/virtio.h b/tests/libqos/virtio.h index 3397a08..829de5e 100644 --- a/tests/libqos/virtio.h +++ b/tests/libqos/virtio.h @@ -26,7 +26,7 @@ typedef struct QVirtioDevice { typedef struct QVirtQueue { uint64_t desc; /* This points to an array of struct vring_desc */ uint64_t avail; /* This points to a struct vring_avail */ - uint64_t used; /* This points to a struct vring_desc */ + uint64_t used; /* This points to a struct vring_used */ uint16_t index; uint32_t size; uint32_t free_head; --=20 2.9.4 From nobody Sun May 5 13:57:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1498675787638467.832339796827; Wed, 28 Jun 2017 11:49:47 -0700 (PDT) Received: from localhost ([::1]:35178 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQI25-0006OU-MK for importer@patchew.org; Wed, 28 Jun 2017 14:49:45 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36057) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQI0H-0004b0-3u for qemu-devel@nongnu.org; Wed, 28 Jun 2017 14:47:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dQI0G-0000pX-5F for qemu-devel@nongnu.org; Wed, 28 Jun 2017 14:47:53 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42096) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dQI0B-0000nU-80; Wed, 28 Jun 2017 14:47:47 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 30A58C04B321; Wed, 28 Jun 2017 18:47:46 +0000 (UTC) Received: from localhost (ovpn-116-41.ams2.redhat.com [10.36.116.41]) by smtp.corp.redhat.com (Postfix) with ESMTP id E6D9F183A8; Wed, 28 Jun 2017 18:47:37 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 30A58C04B321 Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=stefanha@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 30A58C04B321 From: Stefan Hajnoczi To: Date: Wed, 28 Jun 2017 19:47:20 +0100 Message-Id: <20170628184724.21378-3-stefanha@redhat.com> In-Reply-To: <20170628184724.21378-1-stefanha@redhat.com> References: <20170628184724.21378-1-stefanha@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Wed, 28 Jun 2017 18:47:46 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 2/6] libqos: add virtio used ring support 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: Kevin Wolf , Stefan Hajnoczi , qemu-block@nongnu.org, "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Existing tests do not touch the virtqueue used ring. Instead they poll the virtqueue ISR register and peek into their request's device-specific status field. It turns out that the virtqueue ISR register can be set to 1 more than once for a single notification (see commit 83d768b5640946b7da55ce8335509df297e2c7cd "virtio: set ISR on dataplane notifications"). This causes problems for tests that assume a 1:1 correspondence between the ISR being 1 and request completion. Peeking at device-specific status fields is also problematic if the device has no field that can be abused for EINPROGRESS polling semantics. This is the case if all the field's values may be set by the device; there's no magic constant left for polling. It's time to process the used ring for completed requests, just like a real virtio guest driver. This patch adds the necessary APIs. Signed-off-by: Stefan Hajnoczi Reviewed-by: Fam Zheng Reviewed-by: Michael S. Tsirkin Tested-by: Eric Blake Tested-by: Kevin Wolf --- tests/libqos/virtio.h | 6 ++++++ tests/libqos/virtio.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 66 insertions(+) diff --git a/tests/libqos/virtio.h b/tests/libqos/virtio.h index 829de5e..8fbcd18 100644 --- a/tests/libqos/virtio.h +++ b/tests/libqos/virtio.h @@ -32,6 +32,7 @@ typedef struct QVirtQueue { uint32_t free_head; uint32_t num_free; uint32_t align; + uint16_t last_used_idx; bool indirect; bool event; } QVirtQueue; @@ -120,6 +121,10 @@ uint8_t qvirtio_wait_status_byte_no_isr(QVirtioDevice = *d, QVirtQueue *vq, uint64_t addr, gint64 timeout_us); +void qvirtio_wait_used_elem(QVirtioDevice *d, + QVirtQueue *vq, + uint32_t desc_idx, + gint64 timeout_us); void qvirtio_wait_config_isr(QVirtioDevice *d, gint64 timeout_us); QVirtQueue *qvirtqueue_setup(QVirtioDevice *d, QGuestAllocator *alloc, uint16_t index); @@ -135,6 +140,7 @@ uint32_t qvirtqueue_add(QVirtQueue *vq, uint64_t data, = uint32_t len, bool write, bool n= ext); uint32_t qvirtqueue_add_indirect(QVirtQueue *vq, QVRingIndirectDesc *indir= ect); void qvirtqueue_kick(QVirtioDevice *d, QVirtQueue *vq, uint32_t free_head); +bool qvirtqueue_get_buf(QVirtQueue *vq, uint32_t *desc_idx); =20 void qvirtqueue_set_used_event(QVirtQueue *vq, uint16_t idx); #endif diff --git a/tests/libqos/virtio.c b/tests/libqos/virtio.c index ec30cb9..9880a69 100644 --- a/tests/libqos/virtio.c +++ b/tests/libqos/virtio.c @@ -116,6 +116,35 @@ uint8_t qvirtio_wait_status_byte_no_isr(QVirtioDevice = *d, return val; } =20 +/* + * qvirtio_wait_used_elem: + * @desc_idx: The next expected vq->desc[] index in the used ring + * @timeout_us: How many microseconds to wait before failing + * + * This function waits for the next completed request on the used ring. + */ +void qvirtio_wait_used_elem(QVirtioDevice *d, + QVirtQueue *vq, + uint32_t desc_idx, + gint64 timeout_us) +{ + gint64 start_time =3D g_get_monotonic_time(); + + for (;;) { + uint32_t got_desc_idx; + + clock_step(100); + + if (d->bus->get_queue_isr_status(d, vq) && + qvirtqueue_get_buf(vq, &got_desc_idx)) { + g_assert_cmpint(got_desc_idx, =3D=3D, desc_idx); + return; + } + + g_assert(g_get_monotonic_time() - start_time <=3D timeout_us); + } +} + void qvirtio_wait_config_isr(QVirtioDevice *d, gint64 timeout_us) { gint64 start_time =3D g_get_monotonic_time(); @@ -272,6 +301,37 @@ void qvirtqueue_kick(QVirtioDevice *d, QVirtQueue *vq,= uint32_t free_head) } } =20 +/* + * qvirtqueue_get_buf: + * @desc_idx: A pointer that is filled with the vq->desc[] index, may be N= ULL + * + * This function gets the next used element if there is one ready. + * + * Returns: true if an element was ready, false otherwise + */ +bool qvirtqueue_get_buf(QVirtQueue *vq, uint32_t *desc_idx) +{ + uint16_t idx; + + idx =3D readw(vq->used + offsetof(struct vring_used, idx)); + if (idx =3D=3D vq->last_used_idx) { + return false; + } + + if (desc_idx) { + uint64_t elem_addr; + + elem_addr =3D vq->used + + offsetof(struct vring_used, ring) + + (vq->last_used_idx % vq->size) * + sizeof(struct vring_used_elem); + *desc_idx =3D readl(elem_addr + offsetof(struct vring_used_elem, i= d)); + } + + vq->last_used_idx++; + return true; +} + void qvirtqueue_set_used_event(QVirtQueue *vq, uint16_t idx) { g_assert(vq->event); --=20 2.9.4 From nobody Sun May 5 13:57:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1498675907641914.920379619894; Wed, 28 Jun 2017 11:51:47 -0700 (PDT) Received: from localhost ([::1]:35197 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQI42-000835-2O for importer@patchew.org; Wed, 28 Jun 2017 14:51:46 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36086) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQI0J-0004dB-Hn for qemu-devel@nongnu.org; Wed, 28 Jun 2017 14:47:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dQI0I-0000qf-Sg for qemu-devel@nongnu.org; Wed, 28 Jun 2017 14:47:55 -0400 Received: from mx1.redhat.com ([209.132.183.28]:56748) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dQI0G-0000pd-Vv; Wed, 28 Jun 2017 14:47:53 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id DE4C07F404; Wed, 28 Jun 2017 18:47:51 +0000 (UTC) Received: from localhost (ovpn-116-41.ams2.redhat.com [10.36.116.41]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8B3C262930; Wed, 28 Jun 2017 18:47:47 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com DE4C07F404 Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=stefanha@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com DE4C07F404 From: Stefan Hajnoczi To: Date: Wed, 28 Jun 2017 19:47:21 +0100 Message-Id: <20170628184724.21378-4-stefanha@redhat.com> In-Reply-To: <20170628184724.21378-1-stefanha@redhat.com> References: <20170628184724.21378-1-stefanha@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Wed, 28 Jun 2017 18:47:52 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 3/6] tests: fix virtio-scsi-test ISR dependence 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: Kevin Wolf , Stefan Hajnoczi , qemu-block@nongnu.org, "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Use the new used ring APIs instead of assuming ISR being set means the request has completed. Signed-off-by: Stefan Hajnoczi Reviewed-by: Fam Zheng Reviewed-by: Michael S. Tsirkin Tested-by: Eric Blake Tested-by: Kevin Wolf --- tests/virtio-scsi-test.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/virtio-scsi-test.c b/tests/virtio-scsi-test.c index eff71df..87a3b6e 100644 --- a/tests/virtio-scsi-test.c +++ b/tests/virtio-scsi-test.c @@ -121,7 +121,7 @@ static uint8_t virtio_scsi_do_command(QVirtIOSCSI *vs, = const uint8_t *cdb, } =20 qvirtqueue_kick(vs->dev, vq, free_head); - qvirtio_wait_queue_isr(vs->dev, vq, QVIRTIO_SCSI_TIMEOUT_US); + qvirtio_wait_used_elem(vs->dev, vq, free_head, QVIRTIO_SCSI_TIMEOUT_US= ); =20 response =3D readb(resp_addr + offsetof(struct virtio_scsi_cmd_resp, response)); --=20 2.9.4 From nobody Sun May 5 13:57:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1498675798393799.5762408169077; Wed, 28 Jun 2017 11:49:58 -0700 (PDT) Received: from localhost ([::1]:35179 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQI2G-0006Yn-H8 for importer@patchew.org; Wed, 28 Jun 2017 14:49:56 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36328) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQI0U-0004lo-SJ for qemu-devel@nongnu.org; Wed, 28 Jun 2017 14:48:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dQI0S-00010C-Hc for qemu-devel@nongnu.org; Wed, 28 Jun 2017 14:48:06 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42898) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dQI0M-0000s5-He; Wed, 28 Jun 2017 14:47:58 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 70419C0467D9; Wed, 28 Jun 2017 18:47:57 +0000 (UTC) Received: from localhost (ovpn-116-41.ams2.redhat.com [10.36.116.41]) by smtp.corp.redhat.com (Postfix) with ESMTP id 49AC15C6E9; Wed, 28 Jun 2017 18:47:53 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 70419C0467D9 Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=stefanha@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 70419C0467D9 From: Stefan Hajnoczi To: Date: Wed, 28 Jun 2017 19:47:22 +0100 Message-Id: <20170628184724.21378-5-stefanha@redhat.com> In-Reply-To: <20170628184724.21378-1-stefanha@redhat.com> References: <20170628184724.21378-1-stefanha@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Wed, 28 Jun 2017 18:47:57 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 4/6] tests: fix virtio-blk-test ISR dependence 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: Kevin Wolf , Stefan Hajnoczi , qemu-block@nongnu.org, "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Use the new used ring APIs instead of assuming ISR being set means the request has completed. Signed-off-by: Stefan Hajnoczi Reviewed-by: Fam Zheng Reviewed-by: Michael S. Tsirkin Tested-by: Eric Blake Tested-by: Kevin Wolf --- tests/virtio-blk-test.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/tests/virtio-blk-test.c b/tests/virtio-blk-test.c index fd2078c..0576cb1 100644 --- a/tests/virtio-blk-test.c +++ b/tests/virtio-blk-test.c @@ -196,7 +196,7 @@ static void test_basic(QVirtioDevice *dev, QGuestAlloca= tor *alloc, =20 qvirtqueue_kick(dev, vq, free_head); =20 - qvirtio_wait_queue_isr(dev, vq, QVIRTIO_BLK_TIMEOUT_US); + qvirtio_wait_used_elem(dev, vq, free_head, QVIRTIO_BLK_TIMEOUT_US); status =3D readb(req_addr + 528); g_assert_cmpint(status, =3D=3D, 0); =20 @@ -218,7 +218,7 @@ static void test_basic(QVirtioDevice *dev, QGuestAlloca= tor *alloc, =20 qvirtqueue_kick(dev, vq, free_head); =20 - qvirtio_wait_queue_isr(dev, vq, QVIRTIO_BLK_TIMEOUT_US); + qvirtio_wait_used_elem(dev, vq, free_head, QVIRTIO_BLK_TIMEOUT_US); status =3D readb(req_addr + 528); g_assert_cmpint(status, =3D=3D, 0); =20 @@ -246,7 +246,7 @@ static void test_basic(QVirtioDevice *dev, QGuestAlloca= tor *alloc, qvirtqueue_add(vq, req_addr + 528, 1, true, false); qvirtqueue_kick(dev, vq, free_head); =20 - qvirtio_wait_queue_isr(dev, vq, QVIRTIO_BLK_TIMEOUT_US); + qvirtio_wait_used_elem(dev, vq, free_head, QVIRTIO_BLK_TIMEOUT_US); status =3D readb(req_addr + 528); g_assert_cmpint(status, =3D=3D, 0); =20 @@ -267,7 +267,7 @@ static void test_basic(QVirtioDevice *dev, QGuestAlloca= tor *alloc, =20 qvirtqueue_kick(dev, vq, free_head); =20 - qvirtio_wait_queue_isr(dev, vq, QVIRTIO_BLK_TIMEOUT_US); + qvirtio_wait_used_elem(dev, vq, free_head, QVIRTIO_BLK_TIMEOUT_US); status =3D readb(req_addr + 528); g_assert_cmpint(status, =3D=3D, 0); =20 @@ -348,7 +348,7 @@ static void pci_indirect(void) free_head =3D qvirtqueue_add_indirect(&vqpci->vq, indirect); qvirtqueue_kick(&dev->vdev, &vqpci->vq, free_head); =20 - qvirtio_wait_queue_isr(&dev->vdev, &vqpci->vq, + qvirtio_wait_used_elem(&dev->vdev, &vqpci->vq, free_head, QVIRTIO_BLK_TIMEOUT_US); status =3D readb(req_addr + 528); g_assert_cmpint(status, =3D=3D, 0); @@ -373,7 +373,7 @@ static void pci_indirect(void) free_head =3D qvirtqueue_add_indirect(&vqpci->vq, indirect); qvirtqueue_kick(&dev->vdev, &vqpci->vq, free_head); =20 - qvirtio_wait_queue_isr(&dev->vdev, &vqpci->vq, + qvirtio_wait_used_elem(&dev->vdev, &vqpci->vq, free_head, QVIRTIO_BLK_TIMEOUT_US); status =3D readb(req_addr + 528); g_assert_cmpint(status, =3D=3D, 0); @@ -484,7 +484,7 @@ static void pci_msix(void) qvirtqueue_add(&vqpci->vq, req_addr + 528, 1, true, false); qvirtqueue_kick(&dev->vdev, &vqpci->vq, free_head); =20 - qvirtio_wait_queue_isr(&dev->vdev, &vqpci->vq, + qvirtio_wait_used_elem(&dev->vdev, &vqpci->vq, free_head, QVIRTIO_BLK_TIMEOUT_US); =20 status =3D readb(req_addr + 528); @@ -509,7 +509,7 @@ static void pci_msix(void) qvirtqueue_kick(&dev->vdev, &vqpci->vq, free_head); =20 =20 - qvirtio_wait_queue_isr(&dev->vdev, &vqpci->vq, + qvirtio_wait_used_elem(&dev->vdev, &vqpci->vq, free_head, QVIRTIO_BLK_TIMEOUT_US); =20 status =3D readb(req_addr + 528); @@ -540,6 +540,8 @@ static void pci_idx(void) uint64_t capacity; uint32_t features; uint32_t free_head; + uint32_t write_head; + uint32_t desc_idx; uint8_t status; char *data; =20 @@ -581,7 +583,8 @@ static void pci_idx(void) qvirtqueue_add(&vqpci->vq, req_addr + 528, 1, true, false); qvirtqueue_kick(&dev->vdev, &vqpci->vq, free_head); =20 - qvirtio_wait_queue_isr(&dev->vdev, &vqpci->vq, QVIRTIO_BLK_TIMEOUT_US); + qvirtio_wait_used_elem(&dev->vdev, &vqpci->vq, free_head, + QVIRTIO_BLK_TIMEOUT_US); =20 /* Write request */ req.type =3D VIRTIO_BLK_T_OUT; @@ -600,6 +603,7 @@ static void pci_idx(void) qvirtqueue_add(&vqpci->vq, req_addr + 16, 512, false, true); qvirtqueue_add(&vqpci->vq, req_addr + 528, 1, true, false); qvirtqueue_kick(&dev->vdev, &vqpci->vq, free_head); + write_head =3D free_head; =20 /* No notification expected */ status =3D qvirtio_wait_status_byte_no_isr(&dev->vdev, @@ -625,8 +629,11 @@ static void pci_idx(void) =20 qvirtqueue_kick(&dev->vdev, &vqpci->vq, free_head); =20 - qvirtio_wait_queue_isr(&dev->vdev, &vqpci->vq, + /* We get just one notification for both requests */ + qvirtio_wait_used_elem(&dev->vdev, &vqpci->vq, write_head, QVIRTIO_BLK_TIMEOUT_US); + g_assert(qvirtqueue_get_buf(&vqpci->vq, &desc_idx)); + g_assert_cmpint(desc_idx, =3D=3D, free_head); =20 status =3D readb(req_addr + 528); g_assert_cmpint(status, =3D=3D, 0); --=20 2.9.4 From nobody Sun May 5 13:57:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1498675944766514.356232429525; Wed, 28 Jun 2017 11:52:24 -0700 (PDT) Received: from localhost ([::1]:35199 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQI4d-0008V4-FS for importer@patchew.org; Wed, 28 Jun 2017 14:52:23 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36536) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQI0a-0004r6-NM for qemu-devel@nongnu.org; Wed, 28 Jun 2017 14:48:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dQI0Z-00017n-QJ for qemu-devel@nongnu.org; Wed, 28 Jun 2017 14:48:12 -0400 Received: from mx1.redhat.com ([209.132.183.28]:48826) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dQI0U-00012B-OM; Wed, 28 Jun 2017 14:48:06 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6EA9C334597; Wed, 28 Jun 2017 18:48:05 +0000 (UTC) Received: from localhost (ovpn-116-41.ams2.redhat.com [10.36.116.41]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0A1CF60F87; Wed, 28 Jun 2017 18:47:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 6EA9C334597 Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=stefanha@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 6EA9C334597 From: Stefan Hajnoczi To: Date: Wed, 28 Jun 2017 19:47:23 +0100 Message-Id: <20170628184724.21378-6-stefanha@redhat.com> In-Reply-To: <20170628184724.21378-1-stefanha@redhat.com> References: <20170628184724.21378-1-stefanha@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Wed, 28 Jun 2017 18:48:05 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 5/6] tests: fix virtio-net-test ISR dependence 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: Kevin Wolf , Stefan Hajnoczi , qemu-block@nongnu.org, "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Use the new used ring APIs instead of assuming ISR being set means the request has completed. Signed-off-by: Stefan Hajnoczi Reviewed-by: Fam Zheng Reviewed-by: Michael S. Tsirkin Tested-by: Eric Blake Tested-by: Kevin Wolf --- tests/virtio-net-test.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/virtio-net-test.c b/tests/virtio-net-test.c index 8f94360..635b942 100644 --- a/tests/virtio-net-test.c +++ b/tests/virtio-net-test.c @@ -108,7 +108,7 @@ static void rx_test(QVirtioDevice *dev, ret =3D iov_send(socket, iov, 2, 0, sizeof(len) + sizeof(test)); g_assert_cmpint(ret, =3D=3D, sizeof(test) + sizeof(len)); =20 - qvirtio_wait_queue_isr(dev, vq, QVIRTIO_NET_TIMEOUT_US); + qvirtio_wait_used_elem(dev, vq, free_head, QVIRTIO_NET_TIMEOUT_US); memread(req_addr + VNET_HDR_SIZE, buffer, sizeof(test)); g_assert_cmpstr(buffer, =3D=3D, "TEST"); =20 @@ -131,7 +131,7 @@ static void tx_test(QVirtioDevice *dev, free_head =3D qvirtqueue_add(vq, req_addr, 64, false, false); qvirtqueue_kick(dev, vq, free_head); =20 - qvirtio_wait_queue_isr(dev, vq, QVIRTIO_NET_TIMEOUT_US); + qvirtio_wait_used_elem(dev, vq, free_head, QVIRTIO_NET_TIMEOUT_US); guest_free(alloc, req_addr); =20 ret =3D qemu_recv(socket, &len, sizeof(len), 0); @@ -182,7 +182,7 @@ static void rx_stop_cont_test(QVirtioDevice *dev, rsp =3D qmp("{ 'execute' : 'cont'}"); QDECREF(rsp); =20 - qvirtio_wait_queue_isr(dev, vq, QVIRTIO_NET_TIMEOUT_US); + qvirtio_wait_used_elem(dev, vq, free_head, QVIRTIO_NET_TIMEOUT_US); memread(req_addr + VNET_HDR_SIZE, buffer, sizeof(test)); g_assert_cmpstr(buffer, =3D=3D, "TEST"); =20 --=20 2.9.4 From nobody Sun May 5 13:57:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 149867593537986.93419341230629; Wed, 28 Jun 2017 11:52:15 -0700 (PDT) Received: from localhost ([::1]:35198 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQI4U-0008Ms-2o for importer@patchew.org; Wed, 28 Jun 2017 14:52:14 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36541) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQI0a-0004rM-WD for qemu-devel@nongnu.org; Wed, 28 Jun 2017 14:48:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dQI0a-00017x-4W for qemu-devel@nongnu.org; Wed, 28 Jun 2017 14:48:13 -0400 Received: from mx1.redhat.com ([209.132.183.28]:43220) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dQI0W-00014U-TK; Wed, 28 Jun 2017 14:48:09 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A72B8C04B333; Wed, 28 Jun 2017 18:48:07 +0000 (UTC) Received: from localhost (ovpn-116-41.ams2.redhat.com [10.36.116.41]) by smtp.corp.redhat.com (Postfix) with ESMTP id 063CC60F87; Wed, 28 Jun 2017 18:48:06 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com A72B8C04B333 Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=stefanha@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com A72B8C04B333 From: Stefan Hajnoczi To: Date: Wed, 28 Jun 2017 19:47:24 +0100 Message-Id: <20170628184724.21378-7-stefanha@redhat.com> In-Reply-To: <20170628184724.21378-1-stefanha@redhat.com> References: <20170628184724.21378-1-stefanha@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Wed, 28 Jun 2017 18:48:07 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 6/6] virtio-pci: use ioeventfd even when KVM is disabled 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: Kevin Wolf , Stefan Hajnoczi , qemu-block@nongnu.org, "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Old kvm.ko versions only supported a tiny number of ioeventfds so virtio-pci avoids ioeventfds when kvm_has_many_ioeventfds() returns 0. Do not check kvm_has_many_ioeventfds() when KVM is disabled since it always returns 0. Since commit 8c56c1a592b5092d91da8d8943c17777d6462a6f ("memory: emulate ioeventfd") it has been possible to use ioeventfds in qtest or TCG mode. This patch makes -device virtio-blk-pci,iothread=3Diothread0 work even when KVM is disabled. I have tested that virtio-blk-pci works under TCG both with and without iothread. This patch fixes qemu-iotests 068, which was accidentally merged early despite the dependency on ioeventfd. Cc: Michael S. Tsirkin Signed-off-by: Stefan Hajnoczi Reviewed-by: Michael S. Tsirkin Message-id: 20170615163813.7255-2-stefanha@redhat.com Signed-off-by: Stefan Hajnoczi Reviewed-by: Fam Zheng Tested-by: Eric Blake Tested-by: Kevin Wolf --- hw/virtio/virtio-pci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index 20d6a08..301920e 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -1740,7 +1740,7 @@ static void virtio_pci_realize(PCIDevice *pci_dev, Er= ror **errp) bool pcie_port =3D pci_bus_is_express(pci_dev->bus) && !pci_bus_is_root(pci_dev->bus); =20 - if (!kvm_has_many_ioeventfds()) { + if (kvm_enabled() && !kvm_has_many_ioeventfds()) { proxy->flags &=3D ~VIRTIO_PCI_FLAG_USE_IOEVENTFD; } =20 --=20 2.9.4