From: "Xia, Chenbo" <chenbo.xia@intel.com>
To: Maxime Coquelin <maxime.coquelin@redhat.com>,
"dev@dpdk.org" <dev@dpdk.org>,
"amorenoz@redhat.com" <amorenoz@redhat.com>,
"david.marchand@redhat.com" <david.marchand@redhat.com>,
"olivier.matz@6wind.com" <olivier.matz@6wind.com>
Subject: Re: [dpdk-dev] [PATCH 1/3] net/virtio: remove reference to virtqueue in vrings
Date: Mon, 11 Jan 2021 02:17:55 +0000 [thread overview]
Message-ID: <MN2PR11MB4063B7EF2485F056C9BE0A0E9CAB0@MN2PR11MB4063.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20201221161456.31696-2-maxime.coquelin@redhat.com>
Hi Maxime,
> -----Original Message-----
> From: Maxime Coquelin <maxime.coquelin@redhat.com>
> Sent: Tuesday, December 22, 2020 12:15 AM
> To: dev@dpdk.org; Xia, Chenbo <chenbo.xia@intel.com>; amorenoz@redhat.com;
> david.marchand@redhat.com; olivier.matz@6wind.com
> Cc: Maxime Coquelin <maxime.coquelin@redhat.com>
> Subject: [PATCH 1/3] net/virtio: remove reference to virtqueue in vrings
>
> Vrings are part of the virtqueues, so we don't need
> to have a pointer to it in Vrings descriptions.
>
> Instead, let's just substract from its offset to
Subtract?
With above fixed:
Reviewed-by: Chenbo Xia <chenbo.xia@intel.com>
> calculate virtqueue address.
>
> Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
> ---
> drivers/net/virtio/virtio_ethdev.c | 36 +++++++++----------
> drivers/net/virtio/virtio_rxtx.c | 28 +++++++--------
> drivers/net/virtio/virtio_rxtx.h | 3 --
> drivers/net/virtio/virtio_rxtx_packed_avx.c | 14 ++++----
> drivers/net/virtio/virtio_rxtx_simple.h | 2 +-
> .../net/virtio/virtio_rxtx_simple_altivec.c | 2 +-
> drivers/net/virtio/virtio_rxtx_simple_neon.c | 2 +-
> drivers/net/virtio/virtio_rxtx_simple_sse.c | 2 +-
> .../net/virtio/virtio_user/virtio_user_dev.c | 4 +--
> drivers/net/virtio/virtio_user_ethdev.c | 2 +-
> drivers/net/virtio/virtqueue.h | 6 +++-
> 11 files changed, 49 insertions(+), 52 deletions(-)
>
> diff --git a/drivers/net/virtio/virtio_ethdev.c
> b/drivers/net/virtio/virtio_ethdev.c
> index 96871b7b70..297c01a70d 100644
> --- a/drivers/net/virtio/virtio_ethdev.c
> +++ b/drivers/net/virtio/virtio_ethdev.c
> @@ -133,7 +133,7 @@ virtio_send_command_packed(struct virtnet_ctl *cvq,
> struct virtio_pmd_ctrl *ctrl,
> int *dlen, int pkt_num)
> {
> - struct virtqueue *vq = cvq->vq;
> + struct virtqueue *vq = virtnet_cq_to_vq(cvq);
> int head;
> struct vring_packed_desc *desc = vq->vq_packed.ring.desc;
> struct virtio_pmd_ctrl *result;
> @@ -229,7 +229,7 @@ virtio_send_command_split(struct virtnet_ctl *cvq,
> int *dlen, int pkt_num)
> {
> struct virtio_pmd_ctrl *result;
> - struct virtqueue *vq = cvq->vq;
> + struct virtqueue *vq = virtnet_cq_to_vq(cvq);
> uint32_t head, i;
> int k, sum = 0;
>
> @@ -316,13 +316,13 @@ virtio_send_command(struct virtnet_ctl *cvq, struct
> virtio_pmd_ctrl *ctrl,
>
> ctrl->status = status;
>
> - if (!cvq || !cvq->vq) {
> + if (!cvq) {
> PMD_INIT_LOG(ERR, "Control queue is not supported.");
> return -1;
> }
>
> rte_spinlock_lock(&cvq->lock);
> - vq = cvq->vq;
> + vq = virtnet_cq_to_vq(cvq);
>
> PMD_INIT_LOG(DEBUG, "vq->vq_desc_head_idx = %d, status = %d, "
> "vq->hw->cvq = %p vq = %p",
> @@ -552,19 +552,16 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t
> queue_idx)
>
> vq->sw_ring = sw_ring;
> rxvq = &vq->rxq;
> - rxvq->vq = vq;
> rxvq->port_id = dev->data->port_id;
> rxvq->mz = mz;
> } else if (queue_type == VTNET_TQ) {
> txvq = &vq->txq;
> - txvq->vq = vq;
> txvq->port_id = dev->data->port_id;
> txvq->mz = mz;
> txvq->virtio_net_hdr_mz = hdr_mz;
> txvq->virtio_net_hdr_mem = hdr_mz->iova;
> } else if (queue_type == VTNET_CQ) {
> cvq = &vq->cq;
> - cvq->vq = vq;
> cvq->mz = mz;
> cvq->virtio_net_hdr_mz = hdr_mz;
> cvq->virtio_net_hdr_mem = hdr_mz->iova;
> @@ -851,7 +848,7 @@ virtio_dev_rx_queue_intr_enable(struct rte_eth_dev *dev,
> uint16_t queue_id)
> {
> struct virtio_hw *hw = dev->data->dev_private;
> struct virtnet_rx *rxvq = dev->data->rx_queues[queue_id];
> - struct virtqueue *vq = rxvq->vq;
> + struct virtqueue *vq = virtnet_rxq_to_vq(rxvq);
>
> virtqueue_enable_intr(vq);
> virtio_mb(hw->weak_barriers);
> @@ -862,7 +859,7 @@ static int
> virtio_dev_rx_queue_intr_disable(struct rte_eth_dev *dev, uint16_t queue_id)
> {
> struct virtnet_rx *rxvq = dev->data->rx_queues[queue_id];
> - struct virtqueue *vq = rxvq->vq;
> + struct virtqueue *vq = virtnet_rxq_to_vq(rxvq);
>
> virtqueue_disable_intr(vq);
> return 0;
> @@ -2159,8 +2156,7 @@ static int
> virtio_dev_start(struct rte_eth_dev *dev)
> {
> uint16_t nb_queues, i;
> - struct virtnet_rx *rxvq;
> - struct virtnet_tx *txvq __rte_unused;
> + struct virtqueue *vq;
> struct virtio_hw *hw = dev->data->dev_private;
> int ret;
>
> @@ -2217,27 +2213,27 @@ virtio_dev_start(struct rte_eth_dev *dev)
> PMD_INIT_LOG(DEBUG, "nb_queues=%d", nb_queues);
>
> for (i = 0; i < dev->data->nb_rx_queues; i++) {
> - rxvq = dev->data->rx_queues[i];
> + vq = virtnet_rxq_to_vq(dev->data->rx_queues[i]);
> /* Flush the old packets */
> - virtqueue_rxvq_flush(rxvq->vq);
> - virtqueue_notify(rxvq->vq);
> + virtqueue_rxvq_flush(vq);
> + virtqueue_notify(vq);
> }
>
> for (i = 0; i < dev->data->nb_tx_queues; i++) {
> - txvq = dev->data->tx_queues[i];
> - virtqueue_notify(txvq->vq);
> + vq = virtnet_txq_to_vq(dev->data->tx_queues[i]);
> + virtqueue_notify(vq);
> }
>
> PMD_INIT_LOG(DEBUG, "Notified backend at initialization");
>
> for (i = 0; i < dev->data->nb_rx_queues; i++) {
> - rxvq = dev->data->rx_queues[i];
> - VIRTQUEUE_DUMP(rxvq->vq);
> + vq = virtnet_rxq_to_vq(dev->data->rx_queues[i]);
> + VIRTQUEUE_DUMP(vq);
> }
>
> for (i = 0; i < dev->data->nb_tx_queues; i++) {
> - txvq = dev->data->tx_queues[i];
> - VIRTQUEUE_DUMP(txvq->vq);
> + vq = virtnet_txq_to_vq(dev->data->tx_queues[i]);
> + VIRTQUEUE_DUMP(vq);
> }
>
> set_rxtx_funcs(dev);
> diff --git a/drivers/net/virtio/virtio_rxtx.c
> b/drivers/net/virtio/virtio_rxtx.c
> index aca6eb9cd0..1fcce36cbd 100644
> --- a/drivers/net/virtio/virtio_rxtx.c
> +++ b/drivers/net/virtio/virtio_rxtx.c
> @@ -43,7 +43,7 @@ int
> virtio_dev_rx_queue_done(void *rxq, uint16_t offset)
> {
> struct virtnet_rx *rxvq = rxq;
> - struct virtqueue *vq = rxvq->vq;
> + struct virtqueue *vq = virtnet_rxq_to_vq(rxvq);
>
> return virtqueue_nused(vq) >= offset;
> }
> @@ -424,7 +424,7 @@ virtqueue_enqueue_xmit_inorder(struct virtnet_tx *txvq,
> uint16_t num)
> {
> struct vq_desc_extra *dxp;
> - struct virtqueue *vq = txvq->vq;
> + struct virtqueue *vq = virtnet_txq_to_vq(txvq);
> struct vring_desc *start_dp;
> struct virtio_net_hdr *hdr;
> uint16_t idx;
> @@ -470,7 +470,7 @@ virtqueue_enqueue_xmit_packed_fast(struct virtnet_tx *txvq,
> struct rte_mbuf *cookie,
> int in_order)
> {
> - struct virtqueue *vq = txvq->vq;
> + struct virtqueue *vq = virtnet_txq_to_vq(txvq);
> struct vring_packed_desc *dp;
> struct vq_desc_extra *dxp;
> uint16_t idx, id, flags;
> @@ -524,7 +524,7 @@ virtqueue_enqueue_xmit(struct virtnet_tx *txvq, struct
> rte_mbuf *cookie,
> {
> struct virtio_tx_region *txr = txvq->virtio_net_hdr_mz->addr;
> struct vq_desc_extra *dxp;
> - struct virtqueue *vq = txvq->vq;
> + struct virtqueue *vq = virtnet_txq_to_vq(txvq);
> struct vring_desc *start_dp;
> uint16_t seg_num = cookie->nb_segs;
> uint16_t head_idx, idx;
> @@ -614,9 +614,9 @@ virtio_dev_cq_start(struct rte_eth_dev *dev)
> {
> struct virtio_hw *hw = dev->data->dev_private;
>
> - if (hw->cvq && hw->cvq->vq) {
> + if (hw->cvq) {
> rte_spinlock_init(&hw->cvq->lock);
> - VIRTQUEUE_DUMP((struct virtqueue *)hw->cvq->vq);
> + VIRTQUEUE_DUMP(virtnet_cq_to_vq(hw->cvq));
> }
> }
>
> @@ -948,7 +948,7 @@ uint16_t
> virtio_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
> {
> struct virtnet_rx *rxvq = rx_queue;
> - struct virtqueue *vq = rxvq->vq;
> + struct virtqueue *vq = virtnet_rxq_to_vq(rxvq);
> struct virtio_hw *hw = vq->hw;
> struct rte_mbuf *rxm;
> uint16_t nb_used, num, nb_rx;
> @@ -1055,7 +1055,7 @@ virtio_recv_pkts_packed(void *rx_queue, struct rte_mbuf
> **rx_pkts,
> uint16_t nb_pkts)
> {
> struct virtnet_rx *rxvq = rx_queue;
> - struct virtqueue *vq = rxvq->vq;
> + struct virtqueue *vq = virtnet_rxq_to_vq(rxvq);
> struct virtio_hw *hw = vq->hw;
> struct rte_mbuf *rxm;
> uint16_t num, nb_rx;
> @@ -1158,7 +1158,7 @@ virtio_recv_pkts_inorder(void *rx_queue,
> uint16_t nb_pkts)
> {
> struct virtnet_rx *rxvq = rx_queue;
> - struct virtqueue *vq = rxvq->vq;
> + struct virtqueue *vq = virtnet_rxq_to_vq(rxvq);
> struct virtio_hw *hw = vq->hw;
> struct rte_mbuf *rxm;
> struct rte_mbuf *prev = NULL;
> @@ -1342,7 +1342,7 @@ virtio_recv_mergeable_pkts(void *rx_queue,
> uint16_t nb_pkts)
> {
> struct virtnet_rx *rxvq = rx_queue;
> - struct virtqueue *vq = rxvq->vq;
> + struct virtqueue *vq = virtnet_rxq_to_vq(rxvq);
> struct virtio_hw *hw = vq->hw;
> struct rte_mbuf *rxm;
> struct rte_mbuf *prev = NULL;
> @@ -1520,7 +1520,7 @@ virtio_recv_mergeable_pkts_packed(void *rx_queue,
> uint16_t nb_pkts)
> {
> struct virtnet_rx *rxvq = rx_queue;
> - struct virtqueue *vq = rxvq->vq;
> + struct virtqueue *vq = virtnet_rxq_to_vq(rxvq);
> struct virtio_hw *hw = vq->hw;
> struct rte_mbuf *rxm;
> struct rte_mbuf *prev = NULL;
> @@ -1731,7 +1731,7 @@ virtio_xmit_pkts_packed(void *tx_queue, struct rte_mbuf
> **tx_pkts,
> uint16_t nb_pkts)
> {
> struct virtnet_tx *txvq = tx_queue;
> - struct virtqueue *vq = txvq->vq;
> + struct virtqueue *vq = virtnet_txq_to_vq(txvq);
> struct virtio_hw *hw = vq->hw;
> uint16_t hdr_size = hw->vtnet_hdr_size;
> uint16_t nb_tx = 0;
> @@ -1812,7 +1812,7 @@ uint16_t
> virtio_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
> {
> struct virtnet_tx *txvq = tx_queue;
> - struct virtqueue *vq = txvq->vq;
> + struct virtqueue *vq = virtnet_txq_to_vq(txvq);
> struct virtio_hw *hw = vq->hw;
> uint16_t hdr_size = hw->vtnet_hdr_size;
> uint16_t nb_used, nb_tx = 0;
> @@ -1912,7 +1912,7 @@ virtio_xmit_pkts_inorder(void *tx_queue,
> uint16_t nb_pkts)
> {
> struct virtnet_tx *txvq = tx_queue;
> - struct virtqueue *vq = txvq->vq;
> + struct virtqueue *vq = virtnet_txq_to_vq(txvq);
> struct virtio_hw *hw = vq->hw;
> uint16_t hdr_size = hw->vtnet_hdr_size;
> uint16_t nb_used, nb_tx = 0, nb_inorder_pkts = 0;
> diff --git a/drivers/net/virtio/virtio_rxtx.h
> b/drivers/net/virtio/virtio_rxtx.h
> index 1eb8dae227..7f1036be6f 100644
> --- a/drivers/net/virtio/virtio_rxtx.h
> +++ b/drivers/net/virtio/virtio_rxtx.h
> @@ -18,7 +18,6 @@ struct virtnet_stats {
> };
>
> struct virtnet_rx {
> - struct virtqueue *vq;
> /* dummy mbuf, for wraparound when processing RX ring. */
> struct rte_mbuf fake_mbuf;
> uint64_t mbuf_initializer; /**< value to init mbufs. */
> @@ -34,7 +33,6 @@ struct virtnet_rx {
> };
>
> struct virtnet_tx {
> - struct virtqueue *vq;
> /**< memzone to populate hdr. */
> const struct rte_memzone *virtio_net_hdr_mz;
> rte_iova_t virtio_net_hdr_mem; /**< hdr for each xmit packet */
> @@ -49,7 +47,6 @@ struct virtnet_tx {
> };
>
> struct virtnet_ctl {
> - struct virtqueue *vq;
> /**< memzone to populate hdr. */
> const struct rte_memzone *virtio_net_hdr_mz;
> rte_iova_t virtio_net_hdr_mem; /**< hdr for each xmit packet */
> diff --git a/drivers/net/virtio/virtio_rxtx_packed_avx.c
> b/drivers/net/virtio/virtio_rxtx_packed_avx.c
> index a3dcc01a43..31f6eac340 100644
> --- a/drivers/net/virtio/virtio_rxtx_packed_avx.c
> +++ b/drivers/net/virtio/virtio_rxtx_packed_avx.c
> @@ -82,7 +82,7 @@ static inline int
> virtqueue_enqueue_batch_packed_vec(struct virtnet_tx *txvq,
> struct rte_mbuf **tx_pkts)
> {
> - struct virtqueue *vq = txvq->vq;
> + struct virtqueue *vq = virtnet_txq_to_vq(txvq);
> uint16_t head_size = vq->hw->vtnet_hdr_size;
> uint16_t idx = vq->vq_avail_idx;
> struct virtio_net_hdr *hdr;
> @@ -204,7 +204,7 @@ static inline int
> virtqueue_enqueue_single_packed_vec(struct virtnet_tx *txvq,
> struct rte_mbuf *txm)
> {
> - struct virtqueue *vq = txvq->vq;
> + struct virtqueue *vq = virtnet_txq_to_vq(txvq);
> struct virtio_hw *hw = vq->hw;
> uint16_t hdr_size = hw->vtnet_hdr_size;
> uint16_t slots, can_push = 0, use_indirect = 0;
> @@ -253,7 +253,7 @@ virtio_xmit_pkts_packed_vec(void *tx_queue, struct
> rte_mbuf **tx_pkts,
> uint16_t nb_pkts)
> {
> struct virtnet_tx *txvq = tx_queue;
> - struct virtqueue *vq = txvq->vq;
> + struct virtqueue *vq = virtnet_txq_to_vq(txvq);
> struct virtio_hw *hw = vq->hw;
> uint16_t nb_tx = 0;
> uint16_t remained;
> @@ -358,7 +358,7 @@ static inline uint16_t
> virtqueue_dequeue_batch_packed_vec(struct virtnet_rx *rxvq,
> struct rte_mbuf **rx_pkts)
> {
> - struct virtqueue *vq = rxvq->vq;
> + struct virtqueue *vq = virtnet_rxq_to_vq(rxvq);
> struct virtio_hw *hw = vq->hw;
> uint16_t hdr_size = hw->vtnet_hdr_size;
> uint64_t addrs[PACKED_BATCH_SIZE];
> @@ -460,7 +460,7 @@ virtqueue_dequeue_single_packed_vec(struct virtnet_rx
> *rxvq,
> {
> uint16_t used_idx, id;
> uint32_t len;
> - struct virtqueue *vq = rxvq->vq;
> + struct virtqueue *vq = virtnet_rxq_to_vq(rxvq);
> struct virtio_hw *hw = vq->hw;
> uint32_t hdr_size = hw->vtnet_hdr_size;
> struct virtio_net_hdr *hdr;
> @@ -512,7 +512,7 @@ virtio_recv_refill_packed_vec(struct virtnet_rx *rxvq,
> struct rte_mbuf **cookie,
> uint16_t num)
> {
> - struct virtqueue *vq = rxvq->vq;
> + struct virtqueue *vq = virtnet_rxq_to_vq(rxvq);
> struct vring_packed_desc *start_dp = vq->vq_packed.ring.desc;
> uint16_t flags = vq->vq_packed.cached_flags;
> struct virtio_hw *hw = vq->hw;
> @@ -568,7 +568,7 @@ virtio_recv_pkts_packed_vec(void *rx_queue,
> uint16_t nb_pkts)
> {
> struct virtnet_rx *rxvq = rx_queue;
> - struct virtqueue *vq = rxvq->vq;
> + struct virtqueue *vq = virtnet_rxq_to_vq(rxvq);
> struct virtio_hw *hw = vq->hw;
> uint16_t num, nb_rx = 0;
> uint32_t nb_enqueued = 0;
> diff --git a/drivers/net/virtio/virtio_rxtx_simple.h
> b/drivers/net/virtio/virtio_rxtx_simple.h
> index f2a5aedf97..f258771fcf 100644
> --- a/drivers/net/virtio/virtio_rxtx_simple.h
> +++ b/drivers/net/virtio/virtio_rxtx_simple.h
> @@ -23,7 +23,7 @@ virtio_rxq_rearm_vec(struct virtnet_rx *rxvq)
> struct rte_mbuf **sw_ring;
> struct vring_desc *start_dp;
> int ret;
> - struct virtqueue *vq = rxvq->vq;
> + struct virtqueue *vq = virtnet_rxq_to_vq(rxvq);
>
> desc_idx = vq->vq_avail_idx & (vq->vq_nentries - 1);
> sw_ring = &vq->sw_ring[desc_idx];
> diff --git a/drivers/net/virtio/virtio_rxtx_simple_altivec.c
> b/drivers/net/virtio/virtio_rxtx_simple_altivec.c
> index a260ebdf57..e1f3d8bdca 100644
> --- a/drivers/net/virtio/virtio_rxtx_simple_altivec.c
> +++ b/drivers/net/virtio/virtio_rxtx_simple_altivec.c
> @@ -41,7 +41,7 @@ virtio_recv_pkts_vec(void *rx_queue, struct rte_mbuf
> **rx_pkts,
> uint16_t nb_pkts)
> {
> struct virtnet_rx *rxvq = rx_queue;
> - struct virtqueue *vq = rxvq->vq;
> + struct virtqueue *vq = virtnet_rxq_to_vq(rxvq);
> struct virtio_hw *hw = vq->hw;
> uint16_t nb_used, nb_total;
> uint16_t desc_idx;
> diff --git a/drivers/net/virtio/virtio_rxtx_simple_neon.c
> b/drivers/net/virtio/virtio_rxtx_simple_neon.c
> index 12e034dc0a..8307dda5a4 100644
> --- a/drivers/net/virtio/virtio_rxtx_simple_neon.c
> +++ b/drivers/net/virtio/virtio_rxtx_simple_neon.c
> @@ -41,7 +41,7 @@ virtio_recv_pkts_vec(void *rx_queue,
> uint16_t nb_pkts)
> {
> struct virtnet_rx *rxvq = rx_queue;
> - struct virtqueue *vq = rxvq->vq;
> + struct virtqueue *vq = virtnet_rxq_to_vq(rxvq);
> struct virtio_hw *hw = vq->hw;
> uint16_t nb_used, nb_total;
> uint16_t desc_idx;
> diff --git a/drivers/net/virtio/virtio_rxtx_simple_sse.c
> b/drivers/net/virtio/virtio_rxtx_simple_sse.c
> index 1056e9c20b..c6191ce39e 100644
> --- a/drivers/net/virtio/virtio_rxtx_simple_sse.c
> +++ b/drivers/net/virtio/virtio_rxtx_simple_sse.c
> @@ -41,7 +41,7 @@ virtio_recv_pkts_vec(void *rx_queue, struct rte_mbuf
> **rx_pkts,
> uint16_t nb_pkts)
> {
> struct virtnet_rx *rxvq = rx_queue;
> - struct virtqueue *vq = rxvq->vq;
> + struct virtqueue *vq = virtnet_rxq_to_vq(rxvq);
> struct virtio_hw *hw = vq->hw;
> uint16_t nb_used, nb_total;
> uint16_t desc_idx;
> diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c
> b/drivers/net/virtio/virtio_user/virtio_user_dev.c
> index 154aecc209..dd60de1d74 100644
> --- a/drivers/net/virtio/virtio_user/virtio_user_dev.c
> +++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c
> @@ -846,13 +846,13 @@ virtio_user_dev_reset_queues_packed(struct rte_eth_dev
> *eth_dev)
> /* Vring reset for each Tx queue and Rx queue. */
> for (i = 0; i < eth_dev->data->nb_rx_queues; i++) {
> rxvq = eth_dev->data->rx_queues[i];
> - virtqueue_rxvq_reset_packed(rxvq->vq);
> + virtqueue_rxvq_reset_packed(virtnet_rxq_to_vq(rxvq));
> virtio_dev_rx_queue_setup_finish(eth_dev, i);
> }
>
> for (i = 0; i < eth_dev->data->nb_tx_queues; i++) {
> txvq = eth_dev->data->tx_queues[i];
> - virtqueue_txvq_reset_packed(txvq->vq);
> + virtqueue_txvq_reset_packed(virtnet_txq_to_vq(txvq));
> }
>
> hw->started = 1;
> diff --git a/drivers/net/virtio/virtio_user_ethdev.c
> b/drivers/net/virtio/virtio_user_ethdev.c
> index a287805cf2..3b8b14d704 100644
> --- a/drivers/net/virtio/virtio_user_ethdev.c
> +++ b/drivers/net/virtio/virtio_user_ethdev.c
> @@ -249,7 +249,7 @@ virtio_user_notify_queue(struct virtio_hw *hw, struct
> virtqueue *vq)
> uint64_t buf = 1;
> struct virtio_user_dev *dev = virtio_user_get_dev(hw);
>
> - if (hw->cvq && (hw->cvq->vq == vq)) {
> + if (hw->cvq && (virtnet_cq_to_vq(hw->cvq) == vq)) {
> if (virtio_with_packed_queue(vq->hw))
> virtio_user_handle_cq_packed(dev, vq->vq_queue_index);
> else
> diff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h
> index 9274c48080..c64e7dcbdf 100644
> --- a/drivers/net/virtio/virtqueue.h
> +++ b/drivers/net/virtio/virtqueue.h
> @@ -218,6 +218,10 @@ struct vq_desc_extra {
> uint16_t next;
> };
>
> +#define virtnet_rxq_to_vq(rxvq) container_of(rxvq, struct virtqueue, rxq)
> +#define virtnet_txq_to_vq(txvq) container_of(txvq, struct virtqueue, txq)
> +#define virtnet_cq_to_vq(cvq) container_of(cvq, struct virtqueue, cq)
> +
> struct virtqueue {
> struct virtio_hw *hw; /**< virtio_hw structure pointer. */
> union {
> @@ -668,7 +672,7 @@ virtqueue_enqueue_xmit_packed(struct virtnet_tx *txvq,
> struct rte_mbuf *cookie,
> {
> struct virtio_tx_region *txr = txvq->virtio_net_hdr_mz->addr;
> struct vq_desc_extra *dxp;
> - struct virtqueue *vq = txvq->vq;
> + struct virtqueue *vq = virtnet_txq_to_vq(txvq);
> struct vring_packed_desc *start_dp, *head_dp;
> uint16_t idx, id, head_idx, head_flags;
> int16_t head_size = vq->hw->vtnet_hdr_size;
> --
> 2.29.2
next prev parent reply other threads:[~2021-01-11 2:18 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-21 16:14 [dpdk-dev] [PATCH 0/3] net/virtio: make virtqueue struct cache-friendly Maxime Coquelin
2020-12-21 16:14 ` [dpdk-dev] [PATCH 1/3] net/virtio: remove reference to virtqueue in vrings Maxime Coquelin
2021-01-11 2:17 ` Xia, Chenbo [this message]
2020-12-21 16:14 ` [dpdk-dev] [PATCH 2/3] net/virtio: allocate fake mbuf in Rx queue Maxime Coquelin
2021-01-11 2:50 ` Xia, Chenbo
2021-03-15 11:29 ` Maxime Coquelin
2021-01-11 5:39 ` Xia, Chenbo
2021-03-15 13:46 ` Maxime Coquelin
2020-12-21 16:14 ` [dpdk-dev] [PATCH 3/3] net/virtio: pack virtuqueue struct Maxime Coquelin
2021-01-11 2:56 ` Xia, Chenbo
2021-01-08 2:50 ` [dpdk-dev] [PATCH 0/3] net/virtio: make virtqueue struct cache-friendly Xia, Chenbo
2021-01-08 8:25 ` Maxime Coquelin
2021-01-25 17:30 ` Maxime Coquelin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=MN2PR11MB4063B7EF2485F056C9BE0A0E9CAB0@MN2PR11MB4063.namprd11.prod.outlook.com \
--to=chenbo.xia@intel.com \
--cc=amorenoz@redhat.com \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=maxime.coquelin@redhat.com \
--cc=olivier.matz@6wind.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).