Commit 0a076035 authored by Vinod Koul's avatar Vinod Koul

Merge branch 'fixes' into next

parents f7ceb362 fdec53d5
...@@ -392,6 +392,8 @@ struct pl330_req { ...@@ -392,6 +392,8 @@ struct pl330_req {
struct pl330_reqcfg *cfg; struct pl330_reqcfg *cfg;
/* Pointer to first xfer in the request. */ /* Pointer to first xfer in the request. */
struct pl330_xfer *x; struct pl330_xfer *x;
/* Hook to attach to DMAC's list of reqs with due callback */
struct list_head rqd;
}; };
/* /*
...@@ -461,8 +463,6 @@ struct _pl330_req { ...@@ -461,8 +463,6 @@ struct _pl330_req {
/* Number of bytes taken to setup MC for the req */ /* Number of bytes taken to setup MC for the req */
u32 mc_len; u32 mc_len;
struct pl330_req *r; struct pl330_req *r;
/* Hook to attach to DMAC's list of reqs with due callback */
struct list_head rqd;
}; };
/* ToBeDone for tasklet */ /* ToBeDone for tasklet */
...@@ -1683,7 +1683,7 @@ static void pl330_dotask(unsigned long data) ...@@ -1683,7 +1683,7 @@ static void pl330_dotask(unsigned long data)
/* Returns 1 if state was updated, 0 otherwise */ /* Returns 1 if state was updated, 0 otherwise */
static int pl330_update(const struct pl330_info *pi) static int pl330_update(const struct pl330_info *pi)
{ {
struct _pl330_req *rqdone; struct pl330_req *rqdone, *tmp;
struct pl330_dmac *pl330; struct pl330_dmac *pl330;
unsigned long flags; unsigned long flags;
void __iomem *regs; void __iomem *regs;
...@@ -1750,7 +1750,10 @@ static int pl330_update(const struct pl330_info *pi) ...@@ -1750,7 +1750,10 @@ static int pl330_update(const struct pl330_info *pi)
if (active == -1) /* Aborted */ if (active == -1) /* Aborted */
continue; continue;
rqdone = &thrd->req[active]; /* Detach the req */
rqdone = thrd->req[active].r;
thrd->req[active].r = NULL;
mark_free(thrd, active); mark_free(thrd, active);
/* Get going again ASAP */ /* Get going again ASAP */
...@@ -1762,20 +1765,11 @@ static int pl330_update(const struct pl330_info *pi) ...@@ -1762,20 +1765,11 @@ static int pl330_update(const struct pl330_info *pi)
} }
/* Now that we are in no hurry, do the callbacks */ /* Now that we are in no hurry, do the callbacks */
while (!list_empty(&pl330->req_done)) { list_for_each_entry_safe(rqdone, tmp, &pl330->req_done, rqd) {
struct pl330_req *r; list_del(&rqdone->rqd);
rqdone = container_of(pl330->req_done.next,
struct _pl330_req, rqd);
list_del_init(&rqdone->rqd);
/* Detach the req */
r = rqdone->r;
rqdone->r = NULL;
spin_unlock_irqrestore(&pl330->lock, flags); spin_unlock_irqrestore(&pl330->lock, flags);
_callback(r, PL330_ERR_NONE); _callback(rqdone, PL330_ERR_NONE);
spin_lock_irqsave(&pl330->lock, flags); spin_lock_irqsave(&pl330->lock, flags);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment