diff options
author | Ioana Radulescu <ruxandra.radulescu@nxp.com> | 2017-06-07 12:58:28 (GMT) |
---|---|---|
committer | Xie Xiaobo <xiaobo.xie@nxp.com> | 2017-09-25 07:25:25 (GMT) |
commit | 309fcd6049907201c2899f923011a33761467c71 (patch) | |
tree | 06e7bd71f851cf28125efff06e7f9e35b79c2f93 | |
parent | 16aa1a45e21ced37cb748c484c06425b8ec4b6a2 (diff) | |
download | linux-309fcd6049907201c2899f923011a33761467c71.tar.xz |
staging: fsl-dpaa2/eth: Fix kfree bug
Fix an issue where we weren't freeing the allocated pointer,
but rather the 16-byte aligned address based on it.
Signed-off-by: Ioana Radulescu <ruxandra.radulescu@nxp.com>
-rw-r--r-- | drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c | 12 | ||||
-rw-r--r-- | drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.h | 1 |
2 files changed, 7 insertions, 6 deletions
diff --git a/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c b/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c index aac85ae..ef94547 100644 --- a/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c +++ b/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c @@ -1936,12 +1936,12 @@ static int setup_tx_congestion(struct dpaa2_eth_priv *priv) struct device *dev = priv->net_dev->dev.parent; int err; - priv->cscn_mem = kzalloc(DPAA2_CSCN_SIZE + DPAA2_CSCN_ALIGN, - GFP_KERNEL); - if (!priv->cscn_mem) + priv->cscn_unaligned = kzalloc(DPAA2_CSCN_SIZE + DPAA2_CSCN_ALIGN, + GFP_KERNEL); + if (!priv->cscn_unaligned) return -ENOMEM; - priv->cscn_mem = PTR_ALIGN(priv->cscn_mem, DPAA2_CSCN_ALIGN); + priv->cscn_mem = PTR_ALIGN(priv->cscn_unaligned, DPAA2_CSCN_ALIGN); priv->cscn_dma = dma_map_single(dev, priv->cscn_mem, DPAA2_CSCN_SIZE, DMA_FROM_DEVICE); if (dma_mapping_error(dev, priv->cscn_dma)) { @@ -1971,7 +1971,7 @@ static int setup_tx_congestion(struct dpaa2_eth_priv *priv) err_set_cong: dma_unmap_single(dev, priv->cscn_dma, DPAA2_CSCN_SIZE, DMA_FROM_DEVICE); err_dma_map: - kfree(priv->cscn_mem); + kfree(priv->cscn_unaligned); return err; } @@ -2147,7 +2147,7 @@ static void free_dpni(struct dpaa2_eth_priv *priv) kfree(priv->cls_rule); dma_unmap_single(dev, priv->cscn_dma, DPAA2_CSCN_SIZE, DMA_FROM_DEVICE); - kfree(priv->cscn_mem); + kfree(priv->cscn_unaligned); } int setup_fqs_taildrop(struct dpaa2_eth_priv *priv, diff --git a/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.h b/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.h index 82f86bc..a53aab4 100644 --- a/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.h +++ b/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.h @@ -393,6 +393,7 @@ struct dpaa2_eth_priv { /* Tx congestion notifications are written here */ void *cscn_mem; + void *cscn_unaligned; dma_addr_t cscn_dma; u8 num_fqs; |