net/virtio: fix Tx queue 0 override by queue 128

Message ID 20211202135045.194092-1-xuemingl@nvidia.com (mailing list archive)
State Accepted, archived
Delegated to: Maxime Coquelin
Headers
Series net/virtio: fix Tx queue 0 override by queue 128 |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/intel-Testing success Testing PASS
ci/iol-broadcom-Functional success Functional Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-x86_64-unit-testing success Testing PASS
ci/iol-x86_64-compile-testing success Testing PASS
ci/iol-aarch64-unit-testing success Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS
ci/github-robot: build success github build: passed

Commit Message

Xueming Li Dec. 2, 2021, 1:50 p.m. UTC
  Both Rx queue and Tx queue are VirtQ in virtio, VQ index is 256 for Tx
queue 128. Uint8 type of TxQ VQ index overflows and overrides Tx queue 0
data.

This patch fixes VQ index type with uint16 type.

Fixes: c1f86306a026 ("virtio: add new driver")
Cc: stable@dpdk.org

Signed-off-by: Xueming Li <xuemingl@nvidia.com>
---
 drivers/net/virtio/virtio_rxtx.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
  

Comments

Maxime Coquelin Jan. 26, 2022, 1:21 p.m. UTC | #1
On 12/2/21 14:50, Xueming Li wrote:
> Both Rx queue and Tx queue are VirtQ in virtio, VQ index is 256 for Tx
> queue 128. Uint8 type of TxQ VQ index overflows and overrides Tx queue 0
> data.
> 
> This patch fixes VQ index type with uint16 type.
> 
> Fixes: c1f86306a026 ("virtio: add new driver")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Xueming Li <xuemingl@nvidia.com>
> ---
>   drivers/net/virtio/virtio_rxtx.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c
> index 2e115ded023..f0eafd29dc1 100644
> --- a/drivers/net/virtio/virtio_rxtx.c
> +++ b/drivers/net/virtio/virtio_rxtx.c
> @@ -814,7 +814,7 @@ virtio_dev_tx_queue_setup(struct rte_eth_dev *dev,
>   			unsigned int socket_id __rte_unused,
>   			const struct rte_eth_txconf *tx_conf)
>   {
> -	uint8_t vq_idx = 2 * queue_idx + VTNET_SQ_TQ_QUEUE_IDX;
> +	uint16_t vq_idx = 2 * queue_idx + VTNET_SQ_TQ_QUEUE_IDX;
>   	struct virtio_hw *hw = dev->data->dev_private;
>   	struct virtqueue *vq = hw->vqs[vq_idx];
>   	struct virtnet_tx *txvq;
> @@ -858,7 +858,7 @@ int
>   virtio_dev_tx_queue_setup_finish(struct rte_eth_dev *dev,
>   				uint16_t queue_idx)
>   {
> -	uint8_t vq_idx = 2 * queue_idx + VTNET_SQ_TQ_QUEUE_IDX;
> +	uint16_t vq_idx = 2 * queue_idx + VTNET_SQ_TQ_QUEUE_IDX;
>   	struct virtio_hw *hw = dev->data->dev_private;
>   	struct virtqueue *vq = hw->vqs[vq_idx];
>   

Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>

Thanks for the fix!
Maxime
  
Chenbo Xia Jan. 27, 2022, 5:12 a.m. UTC | #2
> -----Original Message-----
> From: Xueming Li <xuemingl@nvidia.com>
> Sent: Thursday, December 2, 2021 9:51 PM
> To: dev@dpdk.org
> Cc: xuemingl@nvidia.com; stable@dpdk.org; Maxime Coquelin
> <maxime.coquelin@redhat.com>; Xia, Chenbo <chenbo.xia@intel.com>
> Subject: [PATCH] net/virtio: fix Tx queue 0 override by queue 128
> 
> Both Rx queue and Tx queue are VirtQ in virtio, VQ index is 256 for Tx
> queue 128. Uint8 type of TxQ VQ index overflows and overrides Tx queue 0
> data.
> 
> This patch fixes VQ index type with uint16 type.
> 
> Fixes: c1f86306a026 ("virtio: add new driver")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Xueming Li <xuemingl@nvidia.com>
> ---
> --
> 2.34.0

Applied to next-virtio/main, thanks
  

Patch

diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c
index 2e115ded023..f0eafd29dc1 100644
--- a/drivers/net/virtio/virtio_rxtx.c
+++ b/drivers/net/virtio/virtio_rxtx.c
@@ -814,7 +814,7 @@  virtio_dev_tx_queue_setup(struct rte_eth_dev *dev,
 			unsigned int socket_id __rte_unused,
 			const struct rte_eth_txconf *tx_conf)
 {
-	uint8_t vq_idx = 2 * queue_idx + VTNET_SQ_TQ_QUEUE_IDX;
+	uint16_t vq_idx = 2 * queue_idx + VTNET_SQ_TQ_QUEUE_IDX;
 	struct virtio_hw *hw = dev->data->dev_private;
 	struct virtqueue *vq = hw->vqs[vq_idx];
 	struct virtnet_tx *txvq;
@@ -858,7 +858,7 @@  int
 virtio_dev_tx_queue_setup_finish(struct rte_eth_dev *dev,
 				uint16_t queue_idx)
 {
-	uint8_t vq_idx = 2 * queue_idx + VTNET_SQ_TQ_QUEUE_IDX;
+	uint16_t vq_idx = 2 * queue_idx + VTNET_SQ_TQ_QUEUE_IDX;
 	struct virtio_hw *hw = dev->data->dev_private;
 	struct virtqueue *vq = hw->vqs[vq_idx];