Re: [PATCH net-next 1/6] net: mvpp2: only free the TSO header buffers when it was allocated
On Thu, Dec 07, 2017 at 02:53:29PM -0500, David Miller wrote: > From: Antoine Tenart> Date: Thu, 7 Dec 2017 09:48:58 +0100 > > > This patch adds a check to only free the TSO header buffer when its > > allocation previously succeeded. > > > > Signed-off-by: Antoine Tenart > > No, please keep this as a failure to bring up. > > Even if you emit a log message, it is completely unintuitive to > have netdev features change on the user just because of a memory > allocation failure. One thing I forgot, this patch still is needed for a proper error path handling. We can't be sure all buffers were allocated correctly when calling mvpp2_txq_deinit() (e.g. if one of them was the reason of the fail). I'll send a v2 without the patch 2/6, but I'll keep this one. Thanks, Antoine -- Antoine Ténart, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com
Re: [PATCH net-next 1/6] net: mvpp2: only free the TSO header buffers when it was allocated
From: Antoine TenartDate: Thu, 7 Dec 2017 09:48:58 +0100 > This patch adds a check to only free the TSO header buffer when its > allocation previously succeeded. > > Signed-off-by: Antoine Tenart No, please keep this as a failure to bring up. Even if you emit a log message, it is completely unintuitive to have netdev features change on the user just because of a memory allocation failure.
[PATCH net-next 1/6] net: mvpp2: only free the TSO header buffers when it was allocated
This patch adds a check to only free the TSO header buffer when its allocation previously succeeded. Signed-off-by: Antoine Tenart--- drivers/net/ethernet/marvell/mvpp2.c | 12 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/marvell/mvpp2.c b/drivers/net/ethernet/marvell/mvpp2.c index fed2b2f909fc..d67f40ee63b3 100644 --- a/drivers/net/ethernet/marvell/mvpp2.c +++ b/drivers/net/ethernet/marvell/mvpp2.c @@ -5802,6 +5802,7 @@ static int mvpp2_txq_init(struct mvpp2_port *port, txq_pcpu->reserved_num = 0; txq_pcpu->txq_put_index = 0; txq_pcpu->txq_get_index = 0; + txq_pcpu->tso_headers = NULL; txq_pcpu->stop_threshold = txq->size - MVPP2_MAX_SKB_DESCS; txq_pcpu->wake_threshold = txq_pcpu->stop_threshold / 2; @@ -5829,10 +5830,13 @@ static void mvpp2_txq_deinit(struct mvpp2_port *port, txq_pcpu = per_cpu_ptr(txq->pcpu, cpu); kfree(txq_pcpu->buffs); - dma_free_coherent(port->dev->dev.parent, - txq_pcpu->size * TSO_HEADER_SIZE, - txq_pcpu->tso_headers, - txq_pcpu->tso_headers_dma); + if (txq_pcpu->tso_headers) + dma_free_coherent(port->dev->dev.parent, + txq_pcpu->size * TSO_HEADER_SIZE, + txq_pcpu->tso_headers, + txq_pcpu->tso_headers_dma); + + txq_pcpu->tso_headers = NULL; } if (txq->descs) -- 2.14.3