diff options
author | Grygorii Strashko <grygorii.strashko@ti.com> | 2016-08-04 11:20:51 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-08-08 19:12:17 -0400 |
commit | aeec3021043b66a1418df416e1ba83def070cef1 (patch) | |
tree | 26b9f3542d1b13f5689778122e9756f70130516c | |
parent | 37088f617d5b025b0e3ddd38a48e3b10ca7d89d9 (diff) |
net: ethernet: ti: cpdma: remove used_desc counter
The struct cpdma_desc_pool->used_desc field can be safely removed from
CPDMA driver (and hot patch) because used_descs counter is used just
for pool consistency check at CPDMA deinitialization and now this
check can be re-implemnted using gen_pool_size(pool->gen_pool) !=
gen_pool_avail(pool->gen_pool).
More over, this will allow to get rid of warnings in
cpdma_desc_pool_destro()-> WARN_ON(pool->used_desc) which may happen
because the used_descs is used unprotected, since CPDMA has been
switched to use genalloc, and may get wrong values on SMP.
Hence, remove used_desc from struct cpdma_desc_pool.
Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
Reviewed-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/ti/davinci_cpdma.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/drivers/net/ethernet/ti/davinci_cpdma.c b/drivers/net/ethernet/ti/davinci_cpdma.c index 19e5f32a8a64..cf72b3390d85 100644 --- a/drivers/net/ethernet/ti/davinci_cpdma.c +++ b/drivers/net/ethernet/ti/davinci_cpdma.c | |||
@@ -86,7 +86,7 @@ struct cpdma_desc_pool { | |||
86 | void __iomem *iomap; /* ioremap map */ | 86 | void __iomem *iomap; /* ioremap map */ |
87 | void *cpumap; /* dma_alloc map */ | 87 | void *cpumap; /* dma_alloc map */ |
88 | int desc_size, mem_size; | 88 | int desc_size, mem_size; |
89 | int num_desc, used_desc; | 89 | int num_desc; |
90 | struct device *dev; | 90 | struct device *dev; |
91 | struct gen_pool *gen_pool; | 91 | struct gen_pool *gen_pool; |
92 | }; | 92 | }; |
@@ -148,7 +148,10 @@ static void cpdma_desc_pool_destroy(struct cpdma_desc_pool *pool) | |||
148 | if (!pool) | 148 | if (!pool) |
149 | return; | 149 | return; |
150 | 150 | ||
151 | WARN_ON(pool->used_desc); | 151 | WARN(gen_pool_size(pool->gen_pool) != gen_pool_avail(pool->gen_pool), |
152 | "cpdma_desc_pool size %d != avail %d", | ||
153 | gen_pool_size(pool->gen_pool), | ||
154 | gen_pool_avail(pool->gen_pool)); | ||
152 | if (pool->cpumap) | 155 | if (pool->cpumap) |
153 | dma_free_coherent(pool->dev, pool->mem_size, pool->cpumap, | 156 | dma_free_coherent(pool->dev, pool->mem_size, pool->cpumap, |
154 | pool->phys); | 157 | pool->phys); |
@@ -232,21 +235,14 @@ desc_from_phys(struct cpdma_desc_pool *pool, dma_addr_t dma) | |||
232 | static struct cpdma_desc __iomem * | 235 | static struct cpdma_desc __iomem * |
233 | cpdma_desc_alloc(struct cpdma_desc_pool *pool) | 236 | cpdma_desc_alloc(struct cpdma_desc_pool *pool) |
234 | { | 237 | { |
235 | struct cpdma_desc __iomem *desc = NULL; | 238 | return (struct cpdma_desc __iomem *) |
236 | 239 | gen_pool_alloc(pool->gen_pool, pool->desc_size); | |
237 | desc = (struct cpdma_desc __iomem *)gen_pool_alloc(pool->gen_pool, | ||
238 | pool->desc_size); | ||
239 | if (desc) | ||
240 | pool->used_desc++; | ||
241 | |||
242 | return desc; | ||
243 | } | 240 | } |
244 | 241 | ||
245 | static void cpdma_desc_free(struct cpdma_desc_pool *pool, | 242 | static void cpdma_desc_free(struct cpdma_desc_pool *pool, |
246 | struct cpdma_desc __iomem *desc, int num_desc) | 243 | struct cpdma_desc __iomem *desc, int num_desc) |
247 | { | 244 | { |
248 | gen_pool_free(pool->gen_pool, (unsigned long)desc, pool->desc_size); | 245 | gen_pool_free(pool->gen_pool, (unsigned long)desc, pool->desc_size); |
249 | pool->used_desc--; | ||
250 | } | 246 | } |
251 | 247 | ||
252 | struct cpdma_ctlr *cpdma_ctlr_create(struct cpdma_params *params) | 248 | struct cpdma_ctlr *cpdma_ctlr_create(struct cpdma_params *params) |