summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIoana Radulescu <ruxandra.radulescu@nxp.com>2017-06-07 12:58:28 (GMT)
committerXie Xiaobo <xiaobo.xie@nxp.com>2017-09-25 07:25:25 (GMT)
commit309fcd6049907201c2899f923011a33761467c71 (patch)
tree06e7bd71f851cf28125efff06e7f9e35b79c2f93
parent16aa1a45e21ced37cb748c484c06425b8ec4b6a2 (diff)
downloadlinux-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.c12
-rw-r--r--drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.h1
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;