Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 316632
b: refs/heads/master
c: 0a07603
h: refs/heads/master
v: v3
  • Loading branch information
Vinod Koul committed Jun 14, 2012
1 parent d8d383d commit e0ad5ca
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 17 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f7ceb362c4d2f4e613982148ddb143ad6a205485
refs/heads/master: 0a0760358cbe922ba7440389ddae649bc56221ef
26 changes: 10 additions & 16 deletions trunk/drivers/dma/pl330.c
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,8 @@ struct pl330_req {
struct pl330_reqcfg *cfg;
/* Pointer to first xfer in the request. */
struct pl330_xfer *x;
/* Hook to attach to DMAC's list of reqs with due callback */
struct list_head rqd;
};

/*
Expand Down Expand Up @@ -461,8 +463,6 @@ struct _pl330_req {
/* Number of bytes taken to setup MC for the req */
u32 mc_len;
struct pl330_req *r;
/* Hook to attach to DMAC's list of reqs with due callback */
struct list_head rqd;
};

/* ToBeDone for tasklet */
Expand Down Expand Up @@ -1683,7 +1683,7 @@ static void pl330_dotask(unsigned long data)
/* Returns 1 if state was updated, 0 otherwise */
static int pl330_update(const struct pl330_info *pi)
{
struct _pl330_req *rqdone;
struct pl330_req *rqdone, *tmp;
struct pl330_dmac *pl330;
unsigned long flags;
void __iomem *regs;
Expand Down Expand Up @@ -1750,7 +1750,10 @@ static int pl330_update(const struct pl330_info *pi)
if (active == -1) /* Aborted */
continue;

rqdone = &thrd->req[active];
/* Detach the req */
rqdone = thrd->req[active].r;
thrd->req[active].r = NULL;

mark_free(thrd, active);

/* Get going again ASAP */
Expand All @@ -1762,20 +1765,11 @@ static int pl330_update(const struct pl330_info *pi)
}

/* Now that we are in no hurry, do the callbacks */
while (!list_empty(&pl330->req_done)) {
struct pl330_req *r;

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;
list_for_each_entry_safe(rqdone, tmp, &pl330->req_done, rqd) {
list_del(&rqdone->rqd);

spin_unlock_irqrestore(&pl330->lock, flags);
_callback(r, PL330_ERR_NONE);
_callback(rqdone, PL330_ERR_NONE);
spin_lock_irqsave(&pl330->lock, flags);
}

Expand Down

0 comments on commit e0ad5ca

Please sign in to comment.