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 395DC4555B; Wed, 3 Jul 2024 12:19:43 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2879541060; Wed, 3 Jul 2024 12:19:43 +0200 (CEST) Received: from mail-qt1-f175.google.com (mail-qt1-f175.google.com [209.85.160.175]) by mails.dpdk.org (Postfix) with ESMTP id 8587640E7C for ; Wed, 3 Jul 2024 12:19:41 +0200 (CEST) Received: by mail-qt1-f175.google.com with SMTP id d75a77b69052e-444fa363d1aso3320561cf.0 for ; Wed, 03 Jul 2024 03:19:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1720001981; x=1720606781; darn=dpdk.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=oL4BbV2yuvFUsD5IYIxzv2OsJLdyRj0bSqTkIxA09eQ=; b=GUPTKjBms7YKOloJ264Y+eW2qpZVn1024HEALW2EqNp3gTOuwyblysnXq/UrXnaQaj 0JZ9zj0wcIO0KTz/GSdW6Y84l0X4UVZkDBUSfuj7ZEMLS3Ix94vqWlxuMp30aDuOZt3G QVNMF0yuijWWXnG4HR6RLuaOOiPhRpX4zNO8ukmN42Gm/UZK7MrML4gFvbswmSk6zWuq HNbBr2lYoSsu/GsKVZCVi5LkQnDFTHtn3LpAgAU1VICm6F8zTH0wSc/z3JyAMiA9Nnf3 urVML5mt7jsa/boGdFjplDaQcR0uAYFvUcuh3gcSNiXJZ1/CmEfHr9nCiQsOA6X1oELH c/Ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1720001981; x=1720606781; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oL4BbV2yuvFUsD5IYIxzv2OsJLdyRj0bSqTkIxA09eQ=; b=Z1uqt240Lzc1pUdnNCdSlkJoQT6paWMvyEr0/yNyu/JkxNJ5uzNdIOIpjnxJYx39RZ IFX7p9PG+HDnE7XJxfFOug85zGa5RRcDZX0R4ZU9IQlz5J6a4WzWGtzE6Izm5YC/DO1H yg9LDYoXGW1899W0EfipKK7ECwEkakAACTMNJFyOHyjGgde8FbMtY+JdKRA9S3zEdvMK 4R/uAh77WHLq/PTqDGIk8hbkxeoqPbRlwCW1gFhF3Y2QR0L6SsZwGRNXN8D8O65UoAiA RiJaY7kZkItVvxUpzJ+g8Xk2K1kBKVFKU/bK/pCJYzAqr7sRvOEmd+5pkgsX/ZZ9qcQA LRRw== X-Gm-Message-State: AOJu0YzK4LwEBNGjGEYmoSEkLkHwNE6rMS28ThY0qOCKK5lkImoPKXk/ 2NO3ajvcbYFLYAkjMOW0v4NoupYb8/2J8dGBiWuJ/cEwxBsMGVCxDIS5SfabA/n4nV8CinAW3un Dh1f7B3WpzOXj8e8TzbNMfWNEyMlOlA4+qII= X-Google-Smtp-Source: AGHT+IFfHJ7ljeJHu+G8GtJ/H4JeCpTMeTA8X18VW0gi6CuloLPjJb6Nke/EsqGp1grUi6flVUv8HRCmeeEXZa6iixc= X-Received: by 2002:a05:622a:54b:b0:442:198e:cb9 with SMTP id d75a77b69052e-447bf915df8mr16455701cf.27.1720001980797; Wed, 03 Jul 2024 03:19:40 -0700 (PDT) MIME-Version: 1.0 References: <20240229132919.2186118-2-schalla@marvell.com> <20240703100353.2243038-1-schalla@marvell.com> <20240703100353.2243038-2-schalla@marvell.com> In-Reply-To: <20240703100353.2243038-2-schalla@marvell.com> From: Jerin Jacob Date: Wed, 3 Jul 2024 15:49:14 +0530 Message-ID: Subject: Re: [PATCH v3 1/3] net/virtio_user: convert cq descriptor IOVA address to Virtual address To: Srujana Challa Cc: dev@dpdk.org, maxime.coquelin@redhat.com, chenbox@nvidia.com, jerinj@marvell.com, ndabilpuram@marvell.com, vattunuru@marvell.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable 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 Wed, Jul 3, 2024 at 3:43=E2=80=AFPM Srujana Challa = wrote: > > This patch modifies the code to convert descriptor buffer IOVA > addresses to virtual addresses during the processing of shadow > control queue when IOVA mode is PA. This change enables Virtio-user > to operate with IOVA as the descriptor buffer address. > > Signed-off-by: Srujana Challa > --- > .../net/virtio/virtio_user/virtio_user_dev.c | 33 ++++++++++++------- > 1 file changed, 21 insertions(+), 12 deletions(-) > > diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c b/drivers/n= et/virtio/virtio_user/virtio_user_dev.c > index 1365c8a5c8..7f35f4b06b 100644 > --- a/drivers/net/virtio/virtio_user/virtio_user_dev.c > +++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c > @@ -896,6 +896,15 @@ virtio_user_handle_mq(struct virtio_user_dev *dev, u= int16_t q_pairs) > > #define CVQ_MAX_DATA_DESCS 32 > > +static inline void * > +virtio_user_iova2virt(rte_iova_t iova) > +{ > + if (rte_eal_iova_mode() =3D=3D RTE_IOVA_PA) There is RTE_IOVA_DC as well. So we may put positive logic. i.e rte_eal_iova_mode() =3D=3D RTE_IOVA_VA > + return rte_mem_iova2virt(iova); > + else > + return (void *)(uintptr_t)iova; > +} > + > static uint32_t > virtio_user_handle_ctrl_msg_split(struct virtio_user_dev *dev, struct vr= ing *vring, > uint16_t idx_hdr) > @@ -921,17 +930,18 @@ virtio_user_handle_ctrl_msg_split(struct virtio_use= r_dev *dev, struct vring *vri > idx_status =3D i; > n_descs++; > > - hdr =3D (void *)(uintptr_t)vring->desc[idx_hdr].addr; > + hdr =3D virtio_user_iova2virt(vring->desc[idx_hdr].addr); > if (hdr->class =3D=3D VIRTIO_NET_CTRL_MQ && > hdr->cmd =3D=3D VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET) { > - uint16_t queues; > + uint16_t queues, *addr; > > - queues =3D *(uint16_t *)(uintptr_t)vring->desc[idx_data].= addr; > + addr =3D virtio_user_iova2virt(vring->desc[idx_data].addr= ); > + queues =3D *addr; > status =3D virtio_user_handle_mq(dev, queues); > } else if (hdr->class =3D=3D VIRTIO_NET_CTRL_MQ && hdr->cmd =3D= =3D VIRTIO_NET_CTRL_MQ_RSS_CONFIG) { > struct virtio_net_ctrl_rss *rss; > > - rss =3D (struct virtio_net_ctrl_rss *)(uintptr_t)vring->d= esc[idx_data].addr; > + rss =3D virtio_user_iova2virt(vring->desc[idx_data].addr)= ; > status =3D virtio_user_handle_mq(dev, rss->max_tx_vq); > } else if (hdr->class =3D=3D VIRTIO_NET_CTRL_RX || > hdr->class =3D=3D VIRTIO_NET_CTRL_MAC || > @@ -944,7 +954,7 @@ virtio_user_handle_ctrl_msg_split(struct virtio_user_= dev *dev, struct vring *vri > (struct virtio_pmd_ctrl *)hdr, dlen, nb_d= len); > > /* Update status */ > - *(virtio_net_ctrl_ack *)(uintptr_t)vring->desc[idx_status].addr = =3D status; > + *(virtio_net_ctrl_ack *)virtio_user_iova2virt(vring->desc[idx_sta= tus].addr) =3D status; > > return n_descs; > } > @@ -986,18 +996,18 @@ virtio_user_handle_ctrl_msg_packed(struct virtio_us= er_dev *dev, > n_descs++; > } > > - hdr =3D (void *)(uintptr_t)vring->desc[idx_hdr].addr; > + hdr =3D virtio_user_iova2virt(vring->desc[idx_hdr].addr); > if (hdr->class =3D=3D VIRTIO_NET_CTRL_MQ && > hdr->cmd =3D=3D VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET) { > - uint16_t queues; > + uint16_t queues, *addr; > > - queues =3D *(uint16_t *)(uintptr_t) > - vring->desc[idx_data].addr; > + addr =3D virtio_user_iova2virt(vring->desc[idx_data].addr= ); > + queues =3D *addr; > status =3D virtio_user_handle_mq(dev, queues); > } else if (hdr->class =3D=3D VIRTIO_NET_CTRL_MQ && hdr->cmd =3D= =3D VIRTIO_NET_CTRL_MQ_RSS_CONFIG) { > struct virtio_net_ctrl_rss *rss; > > - rss =3D (struct virtio_net_ctrl_rss *)(uintptr_t)vring->d= esc[idx_data].addr; > + rss =3D virtio_user_iova2virt(vring->desc[idx_data].addr)= ; > status =3D virtio_user_handle_mq(dev, rss->max_tx_vq); > } else if (hdr->class =3D=3D VIRTIO_NET_CTRL_RX || > hdr->class =3D=3D VIRTIO_NET_CTRL_MAC || > @@ -1010,8 +1020,7 @@ virtio_user_handle_ctrl_msg_packed(struct virtio_us= er_dev *dev, > (struct virtio_pmd_ctrl *)hdr, dlen, nb_d= len); > > /* Update status */ > - *(virtio_net_ctrl_ack *)(uintptr_t) > - vring->desc[idx_status].addr =3D status; > + *(virtio_net_ctrl_ack *)virtio_user_iova2virt(vring->desc[idx_sta= tus].addr) =3D status; > > /* Update used descriptor */ > vring->desc[idx_hdr].id =3D vring->desc[idx_status].id; > -- > 2.25.1 >