From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0056945A0C; Mon, 23 Sep 2024 09:12:07 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9EAD8402CA; Mon, 23 Sep 2024 09:12:07 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2059.outbound.protection.outlook.com [40.107.223.59]) by mails.dpdk.org (Postfix) with ESMTP id 210A6402B4 for ; Mon, 23 Sep 2024 09:12:06 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Z8kdPPY4fsOTeN2I7oTRyZKmsd3zvreRhGPWYAZSuDzTfnMbWyWbd0q8KZUZA5eUBxIvIYtajuv5A+Vk1Oe7wse2Ovm7+bRFSydySTOJx3Kq9QtDDMIVoEspyNXA86Cr7/96cQhhYDgRv5Kr7lkFnEiAwKyP6KyHDRcpOAiK6pPz3YrEFFD6x31uLsa+Ckz+MxvjOUtnIQGMx44p9bIyi0VBmSRIWv2uYH77ETwcdbV9P9L1P7BOI+y15nxnQ+tFHdmW/u7ebQ0tZE34ed08ehVmvEOc1p7cXKsF51k0WLpSi8cE+XzbeWjAQCk0GBkrDvf9H6PVFMMDlcO5nzbAxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=WhQXAyoIEhp39HBlmC/OoILvA3PkmEwaNdDAz73j8Ew=; b=UTwgst4o6xqiV5GxRySchh1Y7zAMye44bV3KjA/x7PyCaxgSZ5LSG/LW+5j2mG20EA03C9Nrs9JHmGHjr9zTmonUCznqPTyF0XngNjt0Td783U9SGfied0Pd1UkFg+icch5PlshDdKHmilgi9a3enNJw3MlS0LU+RNP1xZv7RaKKtnyati2mIyzv7o8ovYeRVSYtlHtj6u/VMu+TMFdnrY2uY37+PdApYD6fFDJp+/tu6rhqzu9JySmJTc6/fkvWsbl/eUHMhmen7cHKI2yczM0C/J6ktoATBax2C6nO6HqRChjols7e2tQE5d63hZbko0FDOVly/NUsIF2kFX4AyA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WhQXAyoIEhp39HBlmC/OoILvA3PkmEwaNdDAz73j8Ew=; b=gw/dhCP7XJQ+ctjRXyJs0vOjybJPK9vRXyVQ7oa9wJxhssOFY8yb7lhjnybjld5Jzyr70z4zS9mENnkEmilrFhP+C0XxpGv+j7UyUi8lYEiXhyju77snUYQldh69qNV59pI9rG9mFa49JogHgiBKtHsbp9m1uODjBwStfiwmMU4H0MA/OzNmrunf0DP1r7GASkFL09TqslYqEo1ENCZZUdJv4XbHqJ8IP11aFd6lrrplKvBX1iF1Piy6Fycvno3CLNxTtD72HZOWrrAHgf3uMCMIIMLhEkGK+UCfxBno6cX11y2YyLUGYpLghqYTKDjKmhdSGkoEIEZ3yZx+2+0QkQ== Received: from IA0PR12MB8983.namprd12.prod.outlook.com (2603:10b6:208:490::17) by CY8PR12MB7754.namprd12.prod.outlook.com (2603:10b6:930:86::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7982.25; Mon, 23 Sep 2024 07:12:03 +0000 Received: from IA0PR12MB8983.namprd12.prod.outlook.com ([fe80::68e7:8370:b169:fa0e]) by IA0PR12MB8983.namprd12.prod.outlook.com ([fe80::68e7:8370:b169:fa0e%5]) with mapi id 15.20.7982.022; Mon, 23 Sep 2024 07:12:02 +0000 From: Chenbo Xia To: Maxime Coquelin CC: "dev@dpdk.org" , David Marchand Subject: Re: [PATCH v2 1/2] vhost: add logging mechanism for reconnection Thread-Topic: [PATCH v2 1/2] vhost: add logging mechanism for reconnection Thread-Index: AQHbC28b5aAhY+0XuUm+jbFS5gbhqbJk+NwA Date: Mon, 23 Sep 2024 07:12:02 +0000 Message-ID: <58EF732F-9683-4BDB-83ED-B555B9554296@nvidia.com> References: <20240920150921.994434-1-maxime.coquelin@redhat.com> <20240920150921.994434-2-maxime.coquelin@redhat.com> In-Reply-To: <20240920150921.994434-2-maxime.coquelin@redhat.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: IA0PR12MB8983:EE_|CY8PR12MB7754:EE_ x-ms-office365-filtering-correlation-id: e34ee2be-5539-4e2f-d088-08dcdb9f061f x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|366016|1800799024|376014|38070700018; x-microsoft-antispam-message-info: =?us-ascii?Q?Sl7xwvPLGc1di3HxIG6/1VZsHgzM/vx/Xf+C1iHeovKKY+FzCx6fGAjlPE3N?= =?us-ascii?Q?bKfV9dm8pJBLqVG4WiQksSOHBCVnfmMwP/kc9GSWf26UA46Si5QKa4QZNEEZ?= =?us-ascii?Q?a7W0eMr7PyN3TetklUY0w7NgB5n9MMqQ/3kRopff/6dkz+P/Mj25NwHXHr+h?= =?us-ascii?Q?99PDqLbYy0rgMbSnfjK+zjnLKUBN4ox68/kkqMwkn+rxPz5JOzK4zCRkWUkq?= =?us-ascii?Q?s53ydL/xbTjHwRvc5ac+oqlJaMBXlt5rCJfKDEMHXf+UNRJVn9bBaocH0khL?= =?us-ascii?Q?IPH+hrFQbOiUWXhu4io1Jq2xFRhdsv19VX/CKfxIqC66zBFQxuTUOMxbZFZ3?= =?us-ascii?Q?WDZs3ZOuU1tFiHjBo7CjQiYcCUcd37Xbc0mt3y5CVEBO2V0JXM5OCUawtKHU?= =?us-ascii?Q?knoBaX59ymTKz5xxQW6NL3eRG6rLui7E3++9oEi57C/+CLlYzuvrDhHeNdv2?= =?us-ascii?Q?WWObHipntncxvTXOrTSoE1OKHmFjEPLnH4qkjniTqu3NDUTXhQiLyI05Ls8S?= =?us-ascii?Q?LnVH2N3RmlzA8QDahUT7chE26dNC8EovSnhj34GGZT+FOZYVZji/bwnmBarj?= =?us-ascii?Q?WWsLWk3rVrDXTvo3I6nBB77ONtk9a3adAGqVVUvvgTQet9ewuqo5rjsKvaHL?= =?us-ascii?Q?bL/r4U3MSbMI+p4Ryt/390Ctq96mf6YIFkeHRjU5xLJwdXsQpdJzPD9kyp3E?= =?us-ascii?Q?33nnoyprSZqfPSxa9/eglx7eFCDfp5RkJlqUOX3RcXE9Knkmar+gmG/QA48L?= =?us-ascii?Q?oim42X9RVwvXicFWHGCJhvRhNm30XDBStySwGzKW1DlRcT8qKaHfX+XKCPLm?= =?us-ascii?Q?Fe5Q2Y9pqaVOZ3yIkc5VBy9uYW+NT5bgEvEJz+nrAOiY6ieg7HJYVI9vJUle?= =?us-ascii?Q?KhqX7HJiFna+V6A4ni+KWl73Nx48wtEzSq7ndhIYAC3BuUqKBi5GdxsLWgQx?= =?us-ascii?Q?lmpegshfw0A/RGYMrQYUYlOLBB5Smex1A/lgCA+FHx7vIi9K2pL/URZqUdgq?= =?us-ascii?Q?kCurXG8nfxD+6NYY9D5WT7QMEQH0nSy1hCZjsXA6AKUWp5N3DSMnurZ+q6nK?= =?us-ascii?Q?8H+NBJJTJHke41C99lyrAaG4HWOxBZOURsjFayKBYvHo4Yj62sUGOR9eXpb5?= =?us-ascii?Q?L34KwySSRbq5gVW0LodTpCYeaAgM1mMDkFd7P3OVDqPwv1GnniOfaxs1M9tq?= =?us-ascii?Q?cRLJLASfzCpO/NZRAHWbVwuNJFkY89Gj5Tw8jkc3pfZgoGxPP9ygZCMayK/o?= =?us-ascii?Q?xXPd8IvYwpZKzN+epbH8jY+wgvTZjcW9I8xj6+Viww173f7NA1X/k8OhcC2/?= =?us-ascii?Q?vVPjqWfshlZ1qmuteNy4uXIg1f5h8a56jRGo5pBoazA79A=3D=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:IA0PR12MB8983.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(1800799024)(376014)(38070700018); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?ZgFaV+F2JNXxsVhdKaGGMLpU0pYxrf+vOwDlDUPm+n7dX3sDRq9hIGA1XNxr?= =?us-ascii?Q?RA5MqssKAl9mVSaytR4vL6Z5BdRMNW6WJXY+Tn08YUhCXXaYnbQtT9NTxGMz?= =?us-ascii?Q?vfLOEBGSKaDT5lML9CvzRmKbtjMc1oBIWvbz67exAVa6rw7qrHuKKFNUQSzi?= =?us-ascii?Q?SNnbz2/STLUB9uakcLx+w+T1odeYCJvLdcohS159aJIPTLz+Bwk4NUNGbILj?= =?us-ascii?Q?rH7h5WDiXG+RmRyC5tqiTcfU6/qW6iphxrCGe2BC/TBIwPPTtJm67SiGpeAS?= =?us-ascii?Q?xCASv0qDj4JXdOvHKAzJ28FP7lzrSUSZ9C1bkntDDRCsM+EnNhid0c3+p+ji?= =?us-ascii?Q?4yLMstRGpqNAwOxr13dHmHpmvRLIpbW/r1tiIOI3q1gR0CV42bBZqEFOxUnT?= =?us-ascii?Q?A2g+FHkiurpKGvYnp0D2rCkvWtcnM86xhpdtTUfl9iAThBTIR6RY1M+MpO4p?= =?us-ascii?Q?LGD0FMIoE/tFs7yOSp2qsq3KbOPeYMF0cSXw3goUJnfu8LzwTzWfx5tSIhc7?= =?us-ascii?Q?dE3GGwuMmOM81cNE6/ndsVqUzN1afiINX27U5+ztvNRbkrA2mlQ8UFRCi6zJ?= =?us-ascii?Q?QsPHYQaqhcINv2mn2xESzwBzvVN7fVCtafDBlmTPq29NrfFmFYnU4z0Trkc7?= =?us-ascii?Q?JSgqCqMdbllhP239PzjZh4jtNaS/i15dUwBjuTYiJI1yagdOtbb5kyTZPX2b?= =?us-ascii?Q?z1eHh1BtlWwIfXNEAQLmBU9TVP1jFG7SmcX5g0FXvoS/D4PvEOG0eQkZ4Axy?= =?us-ascii?Q?GkeHqkiAOtDJ84EZz6vE1AgkiZXydJNIZEwc5yGNMEvUGcm12+fhDW5eygKy?= =?us-ascii?Q?qD7Ct7razJh0NCf+vHxE1urjG8LB+lU+RPPobKgatRqEk1K0fLl2wHL+nT8H?= =?us-ascii?Q?TfNtVzHQsWiGLeQ1cHWZ7ApUK/9f2PTAnXa3aXMhq8ohqTf1QdxYTOQjs3ar?= =?us-ascii?Q?cmkg4tC65KAdT1NbXOXvsZ8pdk7yKa1cDD03SO1FacrhClVgblRoZYWWC6Ay?= =?us-ascii?Q?s3xJOpc+kEZ26iHNIYmSM8X5Aj8x8YC4arjjKGjSBiNuS+++gYwz/8XZxat1?= =?us-ascii?Q?oGVl+OWWhOS+wepKjhljS7Hy2SnUFo5jS6ZLCPHYX7ocW9+Kfs2V+CMS+vrj?= =?us-ascii?Q?QAVJ+O5W7uxjSUxJuJBcaWi8rOP7eE5FacXMTz4IlSRBDXo0sToLJmonuQ7T?= =?us-ascii?Q?bHZmszCEaL3x6AIWI+GFq0tBwfRC6qw6rlntCUA9yhvxqcDx3yPtpt57o5kO?= =?us-ascii?Q?QU1XT6/kRwLRgrr6JzMjS6oMWwIwEuxKXNzidOzmMUJR+GYHrJeJo5INiIBY?= =?us-ascii?Q?LL4j7ylW3lViwYD1VZqHPSQ1xWMDdfK+HBFkeV3dykcUH3KGRQF4TdSiJbkM?= =?us-ascii?Q?Jy1k3fTCO0QJMnPxorbrc1BnEkOfwf3DKV81pme5vF9Ye5UxSriawYk/4VSV?= =?us-ascii?Q?+rqxuk5wbFTCQ5yBtRipRP8LeZFhJ3Rx9cyhzzoA54r3QTldQ8iypZzdtZST?= =?us-ascii?Q?UU8vxwy63ytxNt17BlqsLrN4q0Lgwvqvz4BfiSmAAz+FlG9ugHlMx64YFJJO?= =?us-ascii?Q?15Gb9AFj2PquLrHuKIsEJNEEaMy+cZjlGSeV5bU9?= Content-Type: text/plain; charset="us-ascii" Content-ID: <3B1F213AADCB2046A199559CCB1C612F@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: IA0PR12MB8983.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e34ee2be-5539-4e2f-d088-08dcdb9f061f X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Sep 2024 07:12:02.8201 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 7QB+1CSS+MzWmZ0zJeAg6msjjmn6G2f94QmAHDVDXL7nauOf341C2yHfHD2t+H+M2il2GgEbMD/GPfBBQaJBIw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR12MB7754 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org > On Sep 20, 2024, at 23:09, Maxime Coquelin w= rote: >=20 > External email: Use caution opening links or attachments >=20 >=20 > This patch introduces a way for backend to keep track > of the needed information to be able to reconnect without > frontend cooperation. >=20 > It will be used for VDUSE, which does not provide interface > for the backend to save and later recover local virtqueues > metadata needed to reconnect. >=20 > Vhost-user support could also be added for improved packed > ring reconnection support. >=20 > Signed-off-by: Maxime Coquelin > --- > lib/vhost/vhost.h | 41 ++++++++++++++++++++++++++++++++++--- > lib/vhost/virtio_net.c | 8 ++++++++ > lib/vhost/virtio_net_ctrl.c | 2 ++ > 3 files changed, 48 insertions(+), 3 deletions(-) >=20 > diff --git a/lib/vhost/vhost.h b/lib/vhost/vhost.h > index cd3fa55f1b..1f4192f5d1 100644 > --- a/lib/vhost/vhost.h > +++ b/lib/vhost/vhost.h > @@ -269,6 +269,24 @@ struct vhost_async { > }; > }; >=20 > +#define VHOST_RECONNECT_VERSION 0x0 > +#define VHOST_MAX_VRING 0x100 > +#define VHOST_MAX_QUEUE_PAIRS 0x80 > + > +struct __rte_cache_aligned vhost_reconnect_vring { > + uint16_t last_avail_idx; > + bool avail_wrap_counter; > +}; > + > +struct vhost_reconnect_data { > + uint32_t version; > + uint64_t features; > + uint8_t status; > + struct virtio_net_config config; > + uint32_t nr_vrings; > + struct vhost_reconnect_vring vring[VHOST_MAX_VRING]; > +}; > + > /** > * Structure contains variables relevant to RX/TX virtqueues. > */ > @@ -351,6 +369,7 @@ struct __rte_cache_aligned vhost_virtqueue { > struct virtqueue_stats stats; >=20 > RTE_ATOMIC(bool) irq_pending; > + struct vhost_reconnect_vring *reconnect_log; > }; >=20 > /* Virtio device status as per Virtio specification */ > @@ -362,9 +381,6 @@ struct __rte_cache_aligned vhost_virtqueue { > #define VIRTIO_DEVICE_STATUS_DEV_NEED_RESET 0x40 > #define VIRTIO_DEVICE_STATUS_FAILED 0x80 >=20 > -#define VHOST_MAX_VRING 0x100 > -#define VHOST_MAX_QUEUE_PAIRS 0x80 > - > /* Declare IOMMU related bits for older kernels */ > #ifndef VIRTIO_F_IOMMU_PLATFORM >=20 > @@ -538,8 +554,26 @@ struct __rte_cache_aligned virtio_net { > struct rte_vhost_user_extern_ops extern_ops; >=20 > struct vhost_backend_ops *backend_ops; > + > + struct vhost_reconnect_data *reconnect_log; > }; >=20 > +static __rte_always_inline void > +vhost_virtqueue_reconnect_log_split(struct vhost_virtqueue *vq) > +{ > + if (vq->reconnect_log !=3D NULL) > + vq->reconnect_log->last_avail_idx =3D vq->last_avail_idx; > +} > + > +static __rte_always_inline void > +vhost_virtqueue_reconnect_log_packed(struct vhost_virtqueue *vq) > +{ > + if (vq->reconnect_log !=3D NULL) { > + vq->reconnect_log->last_avail_idx =3D vq->last_avail_idx; > + vq->reconnect_log->avail_wrap_counter =3D vq->avail_wrap_= counter; > + } > +} > + > static inline void > vq_assert_lock__(struct virtio_net *dev, struct vhost_virtqueue *vq, cons= t char *func) > __rte_assert_exclusive_lock(&vq->access_lock) > @@ -584,6 +618,7 @@ vq_inc_last_avail_packed(struct vhost_virtqueue *vq, = uint16_t num) > vq->avail_wrap_counter ^=3D 1; > vq->last_avail_idx -=3D vq->size; > } > + vhost_virtqueue_reconnect_log_packed(vq); > } >=20 > void __vhost_log_cache_write(struct virtio_net *dev, > diff --git a/lib/vhost/virtio_net.c b/lib/vhost/virtio_net.c > index 370402d849..f66a0c82f8 100644 > --- a/lib/vhost/virtio_net.c > +++ b/lib/vhost/virtio_net.c > @@ -1445,6 +1445,7 @@ virtio_dev_rx_split(struct virtio_net *dev, struct = vhost_virtqueue *vq, > } >=20 > vq->last_avail_idx +=3D num_buffers; > + vhost_virtqueue_reconnect_log_split(vq); > } >=20 > do_data_copy_enqueue(dev, vq); > @@ -1857,6 +1858,7 @@ virtio_dev_rx_async_submit_split(struct virtio_net = *dev, struct vhost_virtqueue > pkts_info[slot_idx].mbuf =3D pkts[pkt_idx]; >=20 > vq->last_avail_idx +=3D num_buffers; > + vhost_virtqueue_reconnect_log_split(vq); > } >=20 > if (unlikely(pkt_idx =3D=3D 0)) > @@ -1885,6 +1887,7 @@ virtio_dev_rx_async_submit_split(struct virtio_net = *dev, struct vhost_virtqueue > /* recover shadow used ring and available ring */ > vq->shadow_used_idx -=3D num_descs; > vq->last_avail_idx -=3D num_descs; > + vhost_virtqueue_reconnect_log_split(vq); > } >=20 > /* keep used descriptors */ > @@ -2100,6 +2103,7 @@ dma_error_handler_packed(struct vhost_virtqueue *vq= , uint16_t slot_idx, > vq->last_avail_idx =3D vq->last_avail_idx + vq->size - des= cs_err; > vq->avail_wrap_counter ^=3D 1; > } > + vhost_virtqueue_reconnect_log_packed(vq); >=20 > if (async->buffer_idx_packed >=3D buffers_err) > async->buffer_idx_packed -=3D buffers_err; > @@ -3182,6 +3186,7 @@ virtio_dev_tx_split(struct virtio_net *dev, struct = vhost_virtqueue *vq, >=20 > if (likely(vq->shadow_used_idx)) { > vq->last_avail_idx +=3D vq->shadow_used_idx; > + vhost_virtqueue_reconnect_log_split(vq); > do_data_copy_dequeue(vq); > flush_shadow_used_ring_split(dev, vq); > vhost_vring_call_split(dev, vq); > @@ -3854,6 +3859,7 @@ virtio_dev_tx_async_split(struct virtio_net *dev, s= truct vhost_virtqueue *vq, > async->desc_idx_split++; >=20 > vq->last_avail_idx++; > + vhost_virtqueue_reconnect_log_split(vq); > } >=20 > if (unlikely(dropped)) > @@ -3872,6 +3878,7 @@ virtio_dev_tx_async_split(struct virtio_net *dev, s= truct vhost_virtqueue *vq, > pkt_idx =3D n_xfer; > /* recover available ring */ > vq->last_avail_idx -=3D pkt_err; > + vhost_virtqueue_reconnect_log_split(vq); >=20 > /** > * recover async channel copy related structures and free = pktmbufs > @@ -4153,6 +4160,7 @@ virtio_dev_tx_async_packed(struct virtio_net *dev, = struct vhost_virtqueue *vq, > vq->last_avail_idx +=3D vq->size - descs_err; > vq->avail_wrap_counter ^=3D 1; > } > + vhost_virtqueue_reconnect_log_packed(vq); > } >=20 > async->pkts_idx +=3D pkt_idx; > diff --git a/lib/vhost/virtio_net_ctrl.c b/lib/vhost/virtio_net_ctrl.c > index 8f78122361..b8ee94018e 100644 > --- a/lib/vhost/virtio_net_ctrl.c > +++ b/lib/vhost/virtio_net_ctrl.c > @@ -169,6 +169,7 @@ virtio_net_ctrl_pop(struct virtio_net *dev, struct vh= ost_virtqueue *cvq, > cvq->last_avail_idx++; > if (cvq->last_avail_idx >=3D cvq->size) > cvq->last_avail_idx -=3D cvq->size; > + vhost_virtqueue_reconnect_log_split(cvq); >=20 > if (dev->features & (1ULL << VIRTIO_RING_F_EVENT_IDX)) > vhost_avail_event(cvq) =3D cvq->last_avail_idx; > @@ -181,6 +182,7 @@ virtio_net_ctrl_pop(struct virtio_net *dev, struct vh= ost_virtqueue *cvq, > cvq->last_avail_idx++; > if (cvq->last_avail_idx >=3D cvq->size) > cvq->last_avail_idx -=3D cvq->size; > + vhost_virtqueue_reconnect_log_split(cvq); >=20 > if (dev->features & (1ULL << VIRTIO_RING_F_EVENT_IDX)) > vhost_avail_event(cvq) =3D cvq->last_avail_idx; > -- > 2.46.0 >=20 Reviewed-by: Chenbo Xia