mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-19 02:04:19 +08:00
net: bcmgenet: simplify bcmgenet_init_dma()
Do the two kcalloc() calls first, before proceeding into Rx/Tx DMA init. Makes the error case handling much simpler. Signed-off-by: Petri Gynther <pgynther@google.com> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Reviewed-by: Jaedon Shin <jaedon.shin@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
9dbac28fc1
commit
ebbd96fb28
@ -2050,9 +2050,6 @@ static int bcmgenet_init_dma(struct bcmgenet_priv *priv)
|
||||
|
||||
netif_dbg(priv, hw, priv->dev, "%s\n", __func__);
|
||||
|
||||
/* Init rDma */
|
||||
bcmgenet_rdma_writel(priv, DMA_MAX_BURST_LENGTH, DMA_SCB_BURST_SIZE);
|
||||
|
||||
/* Initialize common Rx ring structures */
|
||||
priv->rx_bds = priv->base + priv->hw_params->rdma_offset;
|
||||
priv->num_rx_bds = TOTAL_DESC;
|
||||
@ -2066,25 +2063,13 @@ static int bcmgenet_init_dma(struct bcmgenet_priv *priv)
|
||||
cb->bd_addr = priv->rx_bds + i * DMA_DESC_SIZE;
|
||||
}
|
||||
|
||||
/* Initialize Rx queues */
|
||||
ret = bcmgenet_init_rx_queues(priv->dev);
|
||||
if (ret) {
|
||||
netdev_err(priv->dev, "failed to initialize Rx queues\n");
|
||||
bcmgenet_free_rx_buffers(priv);
|
||||
kfree(priv->rx_cbs);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Init tDma */
|
||||
bcmgenet_tdma_writel(priv, DMA_MAX_BURST_LENGTH, DMA_SCB_BURST_SIZE);
|
||||
|
||||
/* Initialize common TX ring structures */
|
||||
priv->tx_bds = priv->base + priv->hw_params->tdma_offset;
|
||||
priv->num_tx_bds = TOTAL_DESC;
|
||||
priv->tx_cbs = kcalloc(priv->num_tx_bds, sizeof(struct enet_cb),
|
||||
GFP_KERNEL);
|
||||
if (!priv->tx_cbs) {
|
||||
__bcmgenet_fini_dma(priv);
|
||||
kfree(priv->rx_cbs);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
@ -2093,6 +2078,22 @@ static int bcmgenet_init_dma(struct bcmgenet_priv *priv)
|
||||
cb->bd_addr = priv->tx_bds + i * DMA_DESC_SIZE;
|
||||
}
|
||||
|
||||
/* Init rDma */
|
||||
bcmgenet_rdma_writel(priv, DMA_MAX_BURST_LENGTH, DMA_SCB_BURST_SIZE);
|
||||
|
||||
/* Initialize Rx queues */
|
||||
ret = bcmgenet_init_rx_queues(priv->dev);
|
||||
if (ret) {
|
||||
netdev_err(priv->dev, "failed to initialize Rx queues\n");
|
||||
bcmgenet_free_rx_buffers(priv);
|
||||
kfree(priv->rx_cbs);
|
||||
kfree(priv->tx_cbs);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Init tDma */
|
||||
bcmgenet_tdma_writel(priv, DMA_MAX_BURST_LENGTH, DMA_SCB_BURST_SIZE);
|
||||
|
||||
/* Initialize Tx queues */
|
||||
bcmgenet_init_tx_queues(priv->dev);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user