DMAENGINE: ste_dma40: moved freeing of client owned desc
authorPer Friden <per.friden@stericsson.com>
Sun, 20 Jun 2010 21:24:59 +0000 (21:24 +0000)
committerDan Williams <dan.j.williams@intel.com>
Wed, 23 Jun 2010 01:01:53 +0000 (18:01 -0700)
fixed typo and moved freeing of client owned desc to free_dma.

Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com>
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/dma/ste_dma40.c

index 9655452..d72eff6 100644 (file)
@@ -374,7 +374,6 @@ static void d40_desc_remove(struct d40_desc *d40d)
 
 static struct d40_desc *d40_desc_get(struct d40_chan *d40c)
 {
-       struct d40_desc *desc;
        struct d40_desc *d;
        struct d40_desc *_d;
 
@@ -583,8 +582,6 @@ done:
 static void d40_term_all(struct d40_chan *d40c)
 {
        struct d40_desc *d40d;
-       struct d40_desc *d;
-       struct d40_desc *_d;
 
        /* Release active descriptors */
        while ((d40d = d40_first_active_get(d40c))) {
@@ -602,15 +599,6 @@ static void d40_term_all(struct d40_chan *d40c)
                d40_desc_free(d40c, d40d);
        }
 
-       /* Release client owned descriptors */
-       if (!list_empty(&d40c->client))
-               list_for_each_entry_safe(d, _d, &d40c->client, node) {
-                       d40_pool_lli_free(d);
-                       d40_desc_remove(d);
-                       /* Return desc to free-list */
-                       d40_desc_free(d40c, d40d);
-               }
-
        d40_lcla_id_put(d40c, &d40c->base->lcla_pool,
                        d40c->lcla.src_id);
        d40_lcla_id_put(d40c, &d40c->base->lcla_pool,
@@ -1240,10 +1228,22 @@ static int d40_free_dma(struct d40_chan *d40c)
        u32 event, dir;
        struct d40_phy_res *phy = d40c->phy_chan;
        bool is_src;
+       struct d40_desc *d;
+       struct d40_desc *_d;
+
 
        /* Terminate all queued and active transfers */
        d40_term_all(d40c);
 
+       /* Release client owned descriptors */
+       if (!list_empty(&d40c->client))
+               list_for_each_entry_safe(d, _d, &d40c->client, node) {
+                       d40_pool_lli_free(d);
+                       d40_desc_remove(d);
+                       /* Return desc to free-list */
+                       d40_desc_free(d40c, d);
+               }
+
        if (phy == NULL) {
                dev_err(&d40c->chan.dev->device, "[%s] phy == null\n",
                        __func__);