From d83b13eb16e7ef7cb9e5ee7797fbef5fe18ba54b Mon Sep 17 00:00:00 2001 From: Rabin Vincent Date: Wed, 6 Oct 2010 08:20:37 +0000 Subject: [PATCH] --- yaml --- r: 218788 b: refs/heads/master c: a2c15fa4c122558472f8041515072218c8652c7e h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/dma/ste_dma40.c | 23 ++++++++++++++--------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/[refs] b/[refs] index b3d1174d15b1..6ee3e220b675 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c6134c967c5b8b5986371de335fa4ec39de268bc +refs/heads/master: a2c15fa4c122558472f8041515072218c8652c7e diff --git a/trunk/drivers/dma/ste_dma40.c b/trunk/drivers/dma/ste_dma40.c index 8596c318114b..554e2942667c 100644 --- a/trunk/drivers/dma/ste_dma40.c +++ b/trunk/drivers/dma/ste_dma40.c @@ -419,24 +419,29 @@ static void d40_desc_remove(struct d40_desc *d40d) static struct d40_desc *d40_desc_get(struct d40_chan *d40c) { - struct d40_desc *d; - struct d40_desc *_d; + struct d40_desc *desc = NULL; if (!list_empty(&d40c->client)) { + struct d40_desc *d; + struct d40_desc *_d; + list_for_each_entry_safe(d, _d, &d40c->client, node) if (async_tx_test_ack(&d->txd)) { d40_pool_lli_free(d); d40_desc_remove(d); + desc = d; + memset(desc, 0, sizeof(*desc)); break; } - } else { - d = kmem_cache_alloc(d40c->base->desc_slab, GFP_NOWAIT); - if (d != NULL) { - memset(d, 0, sizeof(struct d40_desc)); - INIT_LIST_HEAD(&d->node); - } } - return d; + + if (!desc) + desc = kmem_cache_zalloc(d40c->base->desc_slab, GFP_NOWAIT); + + if (desc) + INIT_LIST_HEAD(&desc->node); + + return desc; } static void d40_desc_free(struct d40_chan *d40c, struct d40_desc *d40d)