Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 297519
b: refs/heads/master
c: 884485e
h: refs/heads/master
i:
  297517: 58ac666
  297515: ae2579e
  297511: 8640cd0
  297503: f994b1a
v: v3
  • Loading branch information
Russell King - ARM Linux authored and Vinod Koul committed Mar 13, 2012
1 parent fc8ec5e commit 9efe5ea
Show file tree
Hide file tree
Showing 26 changed files with 53 additions and 273 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: d2ebfb335b0426deb1a4fb14e4e926d81ecd8235
refs/heads/master: 884485e1f12dcd39390f042e772cdbefc9ebb750
9 changes: 3 additions & 6 deletions trunk/drivers/dma/amba-pl08x.c
Original file line number Diff line number Diff line change
Expand Up @@ -921,13 +921,10 @@ static dma_cookie_t pl08x_tx_submit(struct dma_async_tx_descriptor *tx)
struct pl08x_dma_chan *plchan = to_pl08x_chan(tx->chan);
struct pl08x_txd *txd = to_pl08x_txd(tx);
unsigned long flags;
dma_cookie_t cookie;

spin_lock_irqsave(&plchan->lock, flags);

plchan->chan.cookie += 1;
if (plchan->chan.cookie < 0)
plchan->chan.cookie = 1;
tx->cookie = plchan->chan.cookie;
cookie = dma_cookie_assign(tx);

/* Put this onto the pending list */
list_add_tail(&txd->node, &plchan->pend_list);
Expand All @@ -947,7 +944,7 @@ static dma_cookie_t pl08x_tx_submit(struct dma_async_tx_descriptor *tx)

spin_unlock_irqrestore(&plchan->lock, flags);

return tx->cookie;
return cookie;
}

static struct dma_async_tx_descriptor *pl08x_prep_dma_interrupt(
Expand Down
23 changes: 1 addition & 22 deletions trunk/drivers/dma/at_hdmac.c
Original file line number Diff line number Diff line change
Expand Up @@ -192,27 +192,6 @@ static void atc_desc_chain(struct at_desc **first, struct at_desc **prev,
*prev = desc;
}

/**
* atc_assign_cookie - compute and assign new cookie
* @atchan: channel we work on
* @desc: descriptor to assign cookie for
*
* Called with atchan->lock held and bh disabled
*/
static dma_cookie_t
atc_assign_cookie(struct at_dma_chan *atchan, struct at_desc *desc)
{
dma_cookie_t cookie = atchan->chan_common.cookie;

if (++cookie < 0)
cookie = 1;

atchan->chan_common.cookie = cookie;
desc->txd.cookie = cookie;

return cookie;
}

/**
* atc_dostart - starts the DMA engine for real
* @atchan: the channel we want to start
Expand Down Expand Up @@ -548,7 +527,7 @@ static dma_cookie_t atc_tx_submit(struct dma_async_tx_descriptor *tx)
unsigned long flags;

spin_lock_irqsave(&atchan->lock, flags);
cookie = atc_assign_cookie(atchan, desc);
cookie = dma_cookie_assign(tx);

if (list_empty(&atchan->active_list)) {
dev_vdbg(chan2dev(tx->chan), "tx_submit: started %u\n",
Expand Down
20 changes: 3 additions & 17 deletions trunk/drivers/dma/coh901318.c
Original file line number Diff line number Diff line change
Expand Up @@ -318,20 +318,6 @@ static int coh901318_prep_linked_list(struct coh901318_chan *cohc,

return 0;
}
static dma_cookie_t
coh901318_assign_cookie(struct coh901318_chan *cohc,
struct coh901318_desc *cohd)
{
dma_cookie_t cookie = cohc->chan.cookie;

if (++cookie < 0)
cookie = 1;

cohc->chan.cookie = cookie;
cohd->desc.cookie = cookie;

return cookie;
}

static struct coh901318_desc *
coh901318_desc_get(struct coh901318_chan *cohc)
Expand Down Expand Up @@ -966,16 +952,16 @@ coh901318_tx_submit(struct dma_async_tx_descriptor *tx)
desc);
struct coh901318_chan *cohc = to_coh901318_chan(tx->chan);
unsigned long flags;
dma_cookie_t cookie;

spin_lock_irqsave(&cohc->lock, flags);

tx->cookie = coh901318_assign_cookie(cohc, cohd);
cookie = dma_cookie_assign(tx);

coh901318_desc_queue(cohc, cohd);

spin_unlock_irqrestore(&cohc->lock, flags);

return tx->cookie;
return cookie;
}

static struct dma_async_tx_descriptor *
Expand Down
20 changes: 20 additions & 0 deletions trunk/drivers/dma/dmaengine.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,24 @@

#include <linux/dmaengine.h>

/**
* dma_cookie_assign - assign a DMA engine cookie to the descriptor
* @tx: descriptor needing cookie
*
* Assign a unique non-zero per-channel cookie to the descriptor.
* Note: caller is expected to hold a lock to prevent concurrency.
*/
static inline dma_cookie_t dma_cookie_assign(struct dma_async_tx_descriptor *tx)
{
struct dma_chan *chan = tx->chan;
dma_cookie_t cookie;

cookie = chan->cookie + 1;
if (cookie < DMA_MIN_COOKIE)
cookie = DMA_MIN_COOKIE;
tx->cookie = chan->cookie = cookie;

return cookie;
}

#endif
17 changes: 1 addition & 16 deletions trunk/drivers/dma/dw_dmac.c
Original file line number Diff line number Diff line change
Expand Up @@ -157,21 +157,6 @@ static void dwc_desc_put(struct dw_dma_chan *dwc, struct dw_desc *desc)
}
}

/* Called with dwc->lock held and bh disabled */
static dma_cookie_t
dwc_assign_cookie(struct dw_dma_chan *dwc, struct dw_desc *desc)
{
dma_cookie_t cookie = dwc->chan.cookie;

if (++cookie < 0)
cookie = 1;

dwc->chan.cookie = cookie;
desc->txd.cookie = cookie;

return cookie;
}

static void dwc_initialize(struct dw_dma_chan *dwc)
{
struct dw_dma *dw = to_dw_dma(dwc->chan.device);
Expand Down Expand Up @@ -603,7 +588,7 @@ static dma_cookie_t dwc_tx_submit(struct dma_async_tx_descriptor *tx)
unsigned long flags;

spin_lock_irqsave(&dwc->lock, flags);
cookie = dwc_assign_cookie(dwc, desc);
cookie = dma_cookie_assign(tx);

/*
* REVISIT: We should attempt to chain as many descriptors as
Expand Down
9 changes: 1 addition & 8 deletions trunk/drivers/dma/ep93xx_dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -783,17 +783,10 @@ static dma_cookie_t ep93xx_dma_tx_submit(struct dma_async_tx_descriptor *tx)
unsigned long flags;

spin_lock_irqsave(&edmac->lock, flags);

cookie = edmac->chan.cookie;

if (++cookie < 0)
cookie = 1;
cookie = dma_cookie_assign(tx);

desc = container_of(tx, struct ep93xx_dma_desc, txd);

edmac->chan.cookie = cookie;
desc->txd.cookie = cookie;

/*
* If nothing is currently prosessed, we push this descriptor
* directly to the hardware. Otherwise we put the descriptor
Expand Down
9 changes: 1 addition & 8 deletions trunk/drivers/dma/fsldma.c
Original file line number Diff line number Diff line change
Expand Up @@ -414,17 +414,10 @@ static dma_cookie_t fsl_dma_tx_submit(struct dma_async_tx_descriptor *tx)
* assign cookies to all of the software descriptors
* that make up this transaction
*/
cookie = chan->common.cookie;
list_for_each_entry(child, &desc->tx_list, node) {
cookie++;
if (cookie < DMA_MIN_COOKIE)
cookie = DMA_MIN_COOKIE;

child->async_tx.cookie = cookie;
cookie = dma_cookie_assign(&child->async_tx);
}

chan->common.cookie = cookie;

/* put this transaction onto the tail of the pending queue */
append_ld_queue(chan, desc);

Expand Down
15 changes: 1 addition & 14 deletions trunk/drivers/dma/imx-dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -165,27 +165,14 @@ static enum dma_status imxdma_tx_status(struct dma_chan *chan,
return ret;
}

static dma_cookie_t imxdma_assign_cookie(struct imxdma_channel *imxdma)
{
dma_cookie_t cookie = imxdma->chan.cookie;

if (++cookie < 0)
cookie = 1;

imxdma->chan.cookie = cookie;
imxdma->desc.cookie = cookie;

return cookie;
}

static dma_cookie_t imxdma_tx_submit(struct dma_async_tx_descriptor *tx)
{
struct imxdma_channel *imxdmac = to_imxdma_chan(tx->chan);
dma_cookie_t cookie;

spin_lock_irq(&imxdmac->lock);

cookie = imxdma_assign_cookie(imxdmac);
cookie = dma_cookie_assign(tx);

spin_unlock_irq(&imxdmac->lock);

Expand Down
16 changes: 1 addition & 15 deletions trunk/drivers/dma/imx-sdma.c
Original file line number Diff line number Diff line change
Expand Up @@ -815,19 +815,6 @@ static int sdma_request_channel(struct sdma_channel *sdmac)
return ret;
}

static dma_cookie_t sdma_assign_cookie(struct sdma_channel *sdmac)
{
dma_cookie_t cookie = sdmac->chan.cookie;

if (++cookie < 0)
cookie = 1;

sdmac->chan.cookie = cookie;
sdmac->desc.cookie = cookie;

return cookie;
}

static struct sdma_channel *to_sdma_chan(struct dma_chan *chan)
{
return container_of(chan, struct sdma_channel, chan);
Expand All @@ -841,7 +828,7 @@ static dma_cookie_t sdma_tx_submit(struct dma_async_tx_descriptor *tx)

spin_lock_irqsave(&sdmac->lock, flags);

cookie = sdma_assign_cookie(sdmac);
cookie = dma_cookie_assign(tx);

spin_unlock_irqrestore(&sdmac->lock, flags);

Expand Down Expand Up @@ -1140,7 +1127,6 @@ static void sdma_issue_pending(struct dma_chan *chan)
struct sdma_engine *sdma = sdmac->sdma;

if (sdmac->status == DMA_IN_PROGRESS)
sdma_enable_channel(sdma, sdmac->channel);
}

#define SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V1 34
Expand Down
9 changes: 1 addition & 8 deletions trunk/drivers/dma/intel_mid_dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -436,14 +436,7 @@ static dma_cookie_t intel_mid_dma_tx_submit(struct dma_async_tx_descriptor *tx)
dma_cookie_t cookie;

spin_lock_bh(&midc->lock);
cookie = midc->chan.cookie;

if (++cookie < 0)
cookie = 1;

midc->chan.cookie = cookie;
desc->txd.cookie = cookie;

cookie = dma_cookie_assign(tx);

if (list_empty(&midc->active_list))
list_add_tail(&desc->desc_node, &midc->active_list);
Expand Down
7 changes: 1 addition & 6 deletions trunk/drivers/dma/ioat/dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -237,12 +237,7 @@ static dma_cookie_t ioat1_tx_submit(struct dma_async_tx_descriptor *tx)

spin_lock_bh(&ioat->desc_lock);
/* cookie incr and addition to used_list must be atomic */
cookie = c->cookie;
cookie++;
if (cookie < 0)
cookie = 1;
c->cookie = cookie;
tx->cookie = cookie;
cookie = dma_cookie_assign(tx);
dev_dbg(to_dev(&ioat->base), "%s: cookie: %d\n", __func__, cookie);

/* write address into NextDescriptor field of last desc in chain */
Expand Down
8 changes: 2 additions & 6 deletions trunk/drivers/dma/ioat/dma_v2.c
Original file line number Diff line number Diff line change
Expand Up @@ -400,13 +400,9 @@ static dma_cookie_t ioat2_tx_submit_unlock(struct dma_async_tx_descriptor *tx)
struct dma_chan *c = tx->chan;
struct ioat2_dma_chan *ioat = to_ioat2_chan(c);
struct ioat_chan_common *chan = &ioat->base;
dma_cookie_t cookie = c->cookie;
dma_cookie_t cookie;

cookie++;
if (cookie < 0)
cookie = 1;
tx->cookie = cookie;
c->cookie = cookie;
cookie = dma_cookie_assign(tx);
dev_dbg(to_dev(&ioat->base), "%s: cookie: %d\n", __func__, cookie);

if (!test_and_set_bit(IOAT_COMPLETION_PENDING, &chan->state))
Expand Down
14 changes: 1 addition & 13 deletions trunk/drivers/dma/iop-adma.c
Original file line number Diff line number Diff line change
Expand Up @@ -440,18 +440,6 @@ iop_adma_alloc_slots(struct iop_adma_chan *iop_chan, int num_slots,
return NULL;
}

static dma_cookie_t
iop_desc_assign_cookie(struct iop_adma_chan *iop_chan,
struct iop_adma_desc_slot *desc)
{
dma_cookie_t cookie = iop_chan->common.cookie;
cookie++;
if (cookie < 0)
cookie = 1;
iop_chan->common.cookie = desc->async_tx.cookie = cookie;
return cookie;
}

static void iop_adma_check_threshold(struct iop_adma_chan *iop_chan)
{
dev_dbg(iop_chan->device->common.dev, "pending: %d\n",
Expand Down Expand Up @@ -479,7 +467,7 @@ iop_adma_tx_submit(struct dma_async_tx_descriptor *tx)
slots_per_op = grp_start->slots_per_op;

spin_lock_bh(&iop_chan->lock);
cookie = iop_desc_assign_cookie(iop_chan, sw_desc);
cookie = dma_cookie_assign(tx);

old_chain_tail = list_entry(iop_chan->chain.prev,
struct iop_adma_desc_slot, chain_node);
Expand Down
9 changes: 1 addition & 8 deletions trunk/drivers/dma/ipu/ipu_idmac.c
Original file line number Diff line number Diff line change
Expand Up @@ -867,14 +867,7 @@ static dma_cookie_t idmac_tx_submit(struct dma_async_tx_descriptor *tx)

dev_dbg(dev, "Submitting sg %p\n", &desc->sg[0]);

cookie = ichan->dma_chan.cookie;

if (++cookie < 0)
cookie = 1;

/* from dmaengine.h: "last cookie value returned to client" */
ichan->dma_chan.cookie = cookie;
tx->cookie = cookie;
cookie = dma_cookie_assign(tx);

/* ipu->lock can be taken under ichan->lock, but not v.v. */
spin_lock_irqsave(&ichan->lock, flags);
Expand Down
8 changes: 1 addition & 7 deletions trunk/drivers/dma/mpc512x_dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -439,13 +439,7 @@ static dma_cookie_t mpc_dma_tx_submit(struct dma_async_tx_descriptor *txd)
mpc_dma_execute(mchan);

/* Update cookie */
cookie = mchan->chan.cookie + 1;
if (cookie <= 0)
cookie = 1;

mchan->chan.cookie = cookie;
mdesc->desc.cookie = cookie;

cookie = dma_cookie_assign(txd);
spin_unlock_irqrestore(&mchan->lock, flags);

return cookie;
Expand Down
14 changes: 1 addition & 13 deletions trunk/drivers/dma/mv_xor.c
Original file line number Diff line number Diff line change
Expand Up @@ -536,18 +536,6 @@ mv_xor_alloc_slots(struct mv_xor_chan *mv_chan, int num_slots,
return NULL;
}

static dma_cookie_t
mv_desc_assign_cookie(struct mv_xor_chan *mv_chan,
struct mv_xor_desc_slot *desc)
{
dma_cookie_t cookie = mv_chan->common.cookie;

if (++cookie < 0)
cookie = 1;
mv_chan->common.cookie = desc->async_tx.cookie = cookie;
return cookie;
}

/************************ DMA engine API functions ****************************/
static dma_cookie_t
mv_xor_tx_submit(struct dma_async_tx_descriptor *tx)
Expand All @@ -565,7 +553,7 @@ mv_xor_tx_submit(struct dma_async_tx_descriptor *tx)
grp_start = sw_desc->group_head;

spin_lock_bh(&mv_chan->lock);
cookie = mv_desc_assign_cookie(mv_chan, sw_desc);
cookie = dma_cookie_assign(tx);

if (list_empty(&mv_chan->chain))
list_splice_init(&sw_desc->tx_list, &mv_chan->chain);
Expand Down
Loading

0 comments on commit 9efe5ea

Please sign in to comment.