* [PATCH net-next 3/7] net: bcmgenet: simplify bcmgenet_init_dma()
@ 2015-03-25 19:35 Petri Gynther
2015-03-25 22:22 ` Florian Fainelli
2015-03-26 2:34 ` Jaedon Shin
0 siblings, 2 replies; 4+ messages in thread
From: Petri Gynther @ 2015-03-25 19:35 UTC (permalink / raw)
To: netdev; +Cc: davem, f.fainelli, jaedon.shin
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>
---
drivers/net/ethernet/broadcom/genet/bcmgenet.c | 33 +++++++++++++-------------
1 file changed, 17 insertions(+), 16 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index 550bf98..1c9f9b4 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -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);
--
2.2.0.rc0.207.ga3a616c
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH net-next 3/7] net: bcmgenet: simplify bcmgenet_init_dma()
2015-03-25 19:35 [PATCH net-next 3/7] net: bcmgenet: simplify bcmgenet_init_dma() Petri Gynther
@ 2015-03-25 22:22 ` Florian Fainelli
2015-03-26 2:34 ` Jaedon Shin
1 sibling, 0 replies; 4+ messages in thread
From: Florian Fainelli @ 2015-03-25 22:22 UTC (permalink / raw)
To: Petri Gynther, netdev; +Cc: davem, jaedon.shin
On 25/03/15 12:35, Petri Gynther wrote:
> 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>
--
Florian
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH net-next 3/7] net: bcmgenet: simplify bcmgenet_init_dma()
2015-03-25 19:35 [PATCH net-next 3/7] net: bcmgenet: simplify bcmgenet_init_dma() Petri Gynther
2015-03-25 22:22 ` Florian Fainelli
@ 2015-03-26 2:34 ` Jaedon Shin
2015-03-26 17:56 ` Petri Gynther
1 sibling, 1 reply; 4+ messages in thread
From: Jaedon Shin @ 2015-03-26 2:34 UTC (permalink / raw)
To: Petri Gynther; +Cc: netdev, davem, f.fainelli
> On Mar 26, 2015, at 4:35 AM, Petri Gynther <pgynther@google.com> wrote:
>
> 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>
> ---
> drivers/net/ethernet/broadcom/genet/bcmgenet.c | 33 +++++++++++++-------------
> 1 file changed, 17 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
> index 550bf98..1c9f9b4 100644
> --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
> +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
> @@ -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);
__bcmgenet_fini_dma that may be integrated with bcmgenet_fini_dma not used in bcmgenet_init_dma.
Reviewed-by: Jaedon Shin <jaedon.shin@gmail.com>
> + 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);
>
> --
> 2.2.0.rc0.207.ga3a616c
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH net-next 3/7] net: bcmgenet: simplify bcmgenet_init_dma()
2015-03-26 2:34 ` Jaedon Shin
@ 2015-03-26 17:56 ` Petri Gynther
0 siblings, 0 replies; 4+ messages in thread
From: Petri Gynther @ 2015-03-26 17:56 UTC (permalink / raw)
To: Jaedon Shin; +Cc: netdev, David Miller, Florian Fainelli
Hi Jaedon,
On Wed, Mar 25, 2015 at 7:34 PM, Jaedon Shin <jaedon.shin@gmail.com> wrote:
>
>> On Mar 26, 2015, at 4:35 AM, Petri Gynther <pgynther@google.com> wrote:
>>
>> 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>
>> ---
>> drivers/net/ethernet/broadcom/genet/bcmgenet.c | 33 +++++++++++++-------------
>> 1 file changed, 17 insertions(+), 16 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
>> index 550bf98..1c9f9b4 100644
>> --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
>> +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
>> @@ -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);
>
> __bcmgenet_fini_dma that may be integrated with bcmgenet_fini_dma not used in bcmgenet_init_dma.
>
I'll remove __bcmgenet_fini_dma() after this patch set has been applied.
> Reviewed-by: Jaedon Shin <jaedon.shin@gmail.com>
>
>> + 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);
>>
>> --
>> 2.2.0.rc0.207.ga3a616c
>>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-03-26 17:56 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-25 19:35 [PATCH net-next 3/7] net: bcmgenet: simplify bcmgenet_init_dma() Petri Gynther
2015-03-25 22:22 ` Florian Fainelli
2015-03-26 2:34 ` Jaedon Shin
2015-03-26 17:56 ` Petri Gynther
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.