From nobody Sat Apr 11 23:08:14 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1772645788; cv=none; d=zohomail.com; s=zohoarc; b=GzBqBTxQBjShg85Gkbv/3QPxy16y1bW1jXXg1Jw4Vgn57uOGsTn3bhUZ3lFSwjGsoHnBb/Fl6B2WBuqMmv38LQo8kI1FQ05pTCtEYbQl7uTL5YrtWFWY4t4bSKgb/cyU0JADZ1E55zzSKkpHOxrrSeDzamNhXBSEYOcbejbZa/g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772645788; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=pJcBbWgk55Xy56aKGdb0PF2VLcZ2WdttuXvg1P3uOiQ=; b=FFaic1xIBTCEFyByacxPaB+2yK6FEjt73eva1yCl9sWBPpxrJzU+HjzqH1HJYPUMMiIxHCNgkchHiIFrF9XM6Y90Jzgcv9Ql690VU2oXRV/x58S+B4OXTgWl0Yt0+0ws0Kk6bQAAzQIHpxmv7Ol2VaPTHT5Ew+JLBY0NgVCr6pM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772645788509457.39484069898515; Wed, 4 Mar 2026 09:36:28 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vxq8i-0003CN-9u; Wed, 04 Mar 2026 12:36:04 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vxq8g-0003By-F3 for qemu-devel@nongnu.org; Wed, 04 Mar 2026 12:36:02 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vxq8d-0004sC-5K for qemu-devel@nongnu.org; Wed, 04 Mar 2026 12:36:01 -0500 Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-648-HKQLJMZtOHyBGUPV9aGh8A-1; Wed, 04 Mar 2026 12:35:51 -0500 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id C80F7195609D; Wed, 4 Mar 2026 17:35:50 +0000 (UTC) Received: from fedora.redhat.com (unknown [10.45.224.212]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id BB7BF1958DC5; Wed, 4 Mar 2026 17:35:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1772645755; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pJcBbWgk55Xy56aKGdb0PF2VLcZ2WdttuXvg1P3uOiQ=; b=B8e3STCCN8iVohedm3InJp5cMDC6IqmGiil/sUuw+q0iu+LPJmj4eDKM2a7Rx5IXFFZ5Jt BcMYFSu6Ao3BL//cRsWv9E1sP+5rDfmttHZkYE/h/xPkEdaTkPa9fSy5q+ZRMGs+fER2S5 OvhCU9BXESv9UOqUy4r4I0IsFOMM99I= X-MC-Unique: HKQLJMZtOHyBGUPV9aGh8A-1 X-Mimecast-MFC-AGG-ID: HKQLJMZtOHyBGUPV9aGh8A_1772645750 From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= To: qemu-devel@nongnu.org Cc: Laurent Vivier , Jason Wang , Dragos Tatulea DE , Jonah Palmer , "Michael S. Tsirkin" , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Lei Yang , Koushik Dutta , Stefano Garzarella , qemu-stable@nongnu.org, Cindy Lu , Maxime Coquelin Subject: [PATCH 2/7] vhost: move svq next desc array to descs state struct Date: Wed, 4 Mar 2026 18:35:30 +0100 Message-ID: <20260304173535.2702587-3-eperezma@redhat.com> In-Reply-To: <20260304173535.2702587-1-eperezma@redhat.com> References: <20260304173535.2702587-1-eperezma@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=eperezma@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 33 X-Spam_score: 3.3 X-Spam_bar: +++ X-Spam_report: (3.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.703, RCVD_IN_VALIDITY_SAFE_BLOCKED=1.386, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1772645790557158500 It's the right place for it as it is part of the descriptor state. We save the memory management of the array, and make the code changes of the next patches easier. Signed-off-by: Eugenio P=C3=A9rez Acked-by: Jason Wang --- hw/virtio/vhost-shadow-virtqueue.c | 14 ++++++-------- hw/virtio/vhost-shadow-virtqueue.h | 12 ++++++------ 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/hw/virtio/vhost-shadow-virtqueue.c b/hw/virtio/vhost-shadow-vi= rtqueue.c index 6242aeb69c1a..901253d06e50 100644 --- a/hw/virtio/vhost-shadow-virtqueue.c +++ b/hw/virtio/vhost-shadow-virtqueue.c @@ -175,7 +175,7 @@ static bool vhost_svq_vring_write_descs(VhostShadowVirt= queue *svq, hwaddr *sg, for (n =3D 0; n < num; n++) { if (more_descs || (n + 1 < num)) { descs[i].flags =3D flags | cpu_to_le16(VRING_DESC_F_NEXT); - descs[i].next =3D cpu_to_le16(svq->desc_next[i]); + descs[i].next =3D cpu_to_le16(svq->desc_state[i].next); } else { descs[i].flags =3D flags; } @@ -183,10 +183,10 @@ static bool vhost_svq_vring_write_descs(VhostShadowVi= rtqueue *svq, hwaddr *sg, descs[i].len =3D cpu_to_le32(iovec[n].iov_len); =20 last =3D i; - i =3D svq->desc_next[i]; + i =3D svq->desc_state[i].next; } =20 - svq->free_head =3D svq->desc_next[last]; + svq->free_head =3D svq->desc_state[last].next; return true; } =20 @@ -432,7 +432,7 @@ static uint16_t vhost_svq_last_desc_of_chain(const Vhos= tShadowVirtqueue *svq, uint16_t num, uint16_t i) { for (uint16_t j =3D 0; j < (num - 1); ++j) { - i =3D svq->desc_next[i]; + i =3D svq->desc_state[i].next; } =20 return i; @@ -473,7 +473,7 @@ static VirtQueueElement *vhost_svq_get_buf(VhostShadowV= irtqueue *svq, num =3D svq->desc_state[used_elem.id].ndescs; svq->desc_state[used_elem.id].ndescs =3D 0; last_used_chain =3D vhost_svq_last_desc_of_chain(svq, num, used_elem.i= d); - svq->desc_next[last_used_chain] =3D svq->free_head; + svq->desc_state[last_used_chain].next =3D svq->free_head; svq->free_head =3D used_elem.id; svq->num_free +=3D num; =20 @@ -705,9 +705,8 @@ void vhost_svq_start(VhostShadowVirtqueue *svq, VirtIOD= evice *vdev, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYM= OUS, -1, 0); svq->desc_state =3D g_new0(SVQDescState, svq->vring.num); - svq->desc_next =3D g_new0(uint16_t, svq->vring.num); for (unsigned i =3D 0; i < svq->vring.num - 1; i++) { - svq->desc_next[i] =3D i + 1; + svq->desc_state[i].next =3D i + 1; } } =20 @@ -744,7 +743,6 @@ void vhost_svq_stop(VhostShadowVirtqueue *svq) virtqueue_unpop(svq->vq, next_avail_elem, 0); } svq->vq =3D NULL; - g_free(svq->desc_next); g_free(svq->desc_state); munmap(svq->vring.desc, vhost_svq_driver_area_size(svq)); munmap(svq->vring.used, vhost_svq_device_area_size(svq)); diff --git a/hw/virtio/vhost-shadow-virtqueue.h b/hw/virtio/vhost-shadow-vi= rtqueue.h index 9c273739d6df..f52c33e65046 100644 --- a/hw/virtio/vhost-shadow-virtqueue.h +++ b/hw/virtio/vhost-shadow-virtqueue.h @@ -23,6 +23,12 @@ typedef struct SVQDescState { * guest's */ unsigned int ndescs; + + /* + * Backup next field for each descriptor so we can recover securely, n= ot + * needing to trust the device access. + */ + uint16_t next; } SVQDescState; =20 typedef struct VhostShadowVirtqueue VhostShadowVirtqueue; @@ -84,12 +90,6 @@ typedef struct VhostShadowVirtqueue { /* Next VirtQueue element that guest made available */ VirtQueueElement *next_guest_avail_elem; =20 - /* - * Backup next field for each descriptor so we can recover securely, n= ot - * needing to trust the device access. - */ - uint16_t *desc_next; - /* Caller callbacks */ const VhostShadowVirtqueueOps *ops; =20 --=20 2.53.0