[dpdk-dev] [PATCH] net/ixgbe: fix TDH register setting issue
Wu, Yanglong
yanglong.wu at intel.com
Tue Nov 20 03:11:39 CET 2018
Hi, qi
I don't understand why dose this patch not change register write order. THD is write before TXDCTL.ENABL.
The Intel 82599 data sheet (https://www.intel.com/content/dam/www/public/us/en/documents/datasheets/82599-10-gbe-controller-datasheet.pdf, §8.2.3.9.8) states that "The only time that software should write to [the TDH] register is after a reset (hardware reset or CTRL.RST) and before enabling the transmit function (TXDCTL.ENABLE). If software were to write to this register while the transmit function was enabled, the on-chip descriptor buffers might be invalidated and the hardware could become confused".
Regard
yanglong
-----Original Message-----
From: Zhang, Qi Z
Sent: Saturday, November 17, 2018 3:52 AM
To: Wu, Yanglong <yanglong.wu at intel.com>; dev at dpdk.org
Cc: Wu, Jingjing <jingjing.wu at intel.com>; Byrne, Stephen1 <stephen1.byrne at intel.com>
Subject: RE: [PATCH] net/ixgbe: fix TDH register setting issue
Hi Yanglong:
> -----Original Message-----
> From: Wu, Yanglong
> Sent: Thursday, November 15, 2018 6:32 PM
> To: dev at dpdk.org
> Cc: Zhang, Qi Z <qi.z.zhang at intel.com>; Wu, Jingjing
> <jingjing.wu at intel.com>; Byrne, Stephen1 <stephen1.byrne at intel.com>;
> Wu, Yanglong <yanglong.wu at intel.com>
> Subject: [PATCH] net/ixgbe: fix TDH register setting issue
>
> The only time that software should write to the TDH register is after
> a reset (hardware reset or CTRL.RST) and before enabling the transmit
> function (TXDCTL.ENABLE).
> If software were to write to this register while the transmit function
> was enabled, the on-chip descriptor buffers might be invalidated and
> the hardware could become confused.
>
> Fixes: a8cdaf0964f7 ("net/ixgbe: remove redundant queue id checks")
I try to understand why this patch is going to fix above commit.
seems the commit didn't change the register write order, and even if we go much early I saw the TDH register is always be written after TXDCTL.ENABL.
Did I missed something?
btw, I'm also curious why only TDH matters but TDT does not.
> Signed-off-by: Yanglong Wu <yanglong.wu at intel.com>
> ---
> drivers/net/ixgbe/ixgbe_rxtx.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/net/ixgbe/ixgbe_rxtx.c
> b/drivers/net/ixgbe/ixgbe_rxtx.c index 2f0262ae1..ddc7efa87 100644
> --- a/drivers/net/ixgbe/ixgbe_rxtx.c
> +++ b/drivers/net/ixgbe/ixgbe_rxtx.c
> @@ -5264,6 +5264,7 @@ ixgbe_dev_tx_queue_start(struct rte_eth_dev
> *dev, uint16_t tx_queue_id)
> hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
>
> txq = dev->data->tx_queues[tx_queue_id];
> + IXGBE_WRITE_REG(hw, IXGBE_TDH(txq->reg_idx), 0);
> txdctl = IXGBE_READ_REG(hw, IXGBE_TXDCTL(txq->reg_idx));
> txdctl |= IXGBE_TXDCTL_ENABLE;
> IXGBE_WRITE_REG(hw, IXGBE_TXDCTL(txq->reg_idx), txdctl); @@
> -5281,7 +5282,6 @@ ixgbe_dev_tx_queue_start(struct rte_eth_dev *dev,
> uint16_t tx_queue_id)
> tx_queue_id);
> }
> rte_wmb();
> - IXGBE_WRITE_REG(hw, IXGBE_TDH(txq->reg_idx), 0);
> IXGBE_WRITE_REG(hw, IXGBE_TDT(txq->reg_idx), 0);
> dev->data->tx_queue_state[tx_queue_id] =
> RTE_ETH_QUEUE_STATE_STARTED;
>
> --
> 2.11.0
More information about the dev
mailing list