@@ -1399,8 +1399,6 @@ static int init_dma_rx_desc_rings(struct net_device *dev, gfp_t flags)
"(%s) dma_rx_phy=0x%08x\n", __func__,
(u32)rx_q->dma_rx_phy);
- stmmac_clear_rx_descriptors(priv, queue);
-
for (i = 0; i < priv->dma_rx_size; i++) {
struct dma_desc *p;
@@ -1522,14 +1520,14 @@ static int init_dma_desc_rings(struct net_device *dev, gfp_t flags)
struct stmmac_priv *priv = netdev_priv(dev);
int ret;
+ stmmac_clear_descriptors(priv);
+
ret = init_dma_rx_desc_rings(dev, flags);
if (ret)
return ret;
ret = init_dma_tx_desc_rings(dev);
- stmmac_clear_descriptors(priv);
-
if (netif_msg_hw(priv))
stmmac_display_rings(priv);
According to the methods naming and partly based on their semantics the descriptors need to be cleared first, then they can be properly initialized. That specifically concerns the Tx descriptors and the chain mode. Moreover doing the Rx-descriptors clearance twice is redundant. Fix all of that by discarding the Rx descriptor clearance from the init_dma_rx_desc_rings() method and move the generic method of all descriptors clearance to the head of the init_dma_desc_rings() function. Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> --- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)