git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rtlwifi: rtl8192se: Fix gcc 4.7.x warning
[pandora-kernel.git]
/
drivers
/
dma
/
at_hdmac.c
diff --git
a/drivers/dma/at_hdmac.c
b/drivers/dma/at_hdmac.c
index
fcfa0a8
..
c60d9c1
100644
(file)
--- a/
drivers/dma/at_hdmac.c
+++ b/
drivers/dma/at_hdmac.c
@@
-239,10
+239,6
@@
static void atc_dostart(struct at_dma_chan *atchan, struct at_desc *first)
vdbg_dump_regs(atchan);
vdbg_dump_regs(atchan);
- /* clear any pending interrupt */
- while (dma_readl(atdma, EBCISR))
- cpu_relax();
-
channel_writel(atchan, SADDR, 0);
channel_writel(atchan, DADDR, 0);
channel_writel(atchan, CTRLA, 0);
channel_writel(atchan, SADDR, 0);
channel_writel(atchan, DADDR, 0);
channel_writel(atchan, CTRLA, 0);
@@
-682,7
+678,7
@@
atc_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
flags);
if (unlikely(!atslave || !sg_len)) {
flags);
if (unlikely(!atslave || !sg_len)) {
- dev_dbg(chan2dev(chan), "prep_
dma_memcpy:
length is zero!\n");
+ dev_dbg(chan2dev(chan), "prep_
slave_sg: sg
length is zero!\n");
return NULL;
}
return NULL;
}
@@
-710,6
+706,11
@@
atc_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
mem = sg_dma_address(sg);
len = sg_dma_len(sg);
mem = sg_dma_address(sg);
len = sg_dma_len(sg);
+ if (unlikely(!len)) {
+ dev_dbg(chan2dev(chan),
+ "prep_slave_sg: sg(%d) data length is zero\n", i);
+ goto err;
+ }
mem_width = 2;
if (unlikely(mem & 3 || len & 3))
mem_width = 0;
mem_width = 2;
if (unlikely(mem & 3 || len & 3))
mem_width = 0;
@@
-744,6
+745,11
@@
atc_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
mem = sg_dma_address(sg);
len = sg_dma_len(sg);
mem = sg_dma_address(sg);
len = sg_dma_len(sg);
+ if (unlikely(!len)) {
+ dev_dbg(chan2dev(chan),
+ "prep_slave_sg: sg(%d) data length is zero\n", i);
+ goto err;
+ }
mem_width = 2;
if (unlikely(mem & 3 || len & 3))
mem_width = 0;
mem_width = 2;
if (unlikely(mem & 3 || len & 3))
mem_width = 0;
@@
-777,6
+783,7
@@
atc_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
err_desc_get:
dev_err(chan2dev(chan), "not enough descriptors available\n");
err_desc_get:
dev_err(chan2dev(chan), "not enough descriptors available\n");
+err:
atc_desc_put(atchan, first);
return NULL;
}
atc_desc_put(atchan, first);
return NULL;
}
@@
-1286,7
+1293,7
@@
static int __init at_dma_probe(struct platform_device *pdev)
tasklet_init(&atchan->tasklet, atc_tasklet,
(unsigned long)atchan);
tasklet_init(&atchan->tasklet, atc_tasklet,
(unsigned long)atchan);
- atc_enable_
irq(atchan
);
+ atc_enable_
chan_irq(atdma, i
);
}
/* set base routines */
}
/* set base routines */
@@
-1353,7
+1360,7
@@
static int __exit at_dma_remove(struct platform_device *pdev)
struct at_dma_chan *atchan = to_at_dma_chan(chan);
/* Disable interrupts */
struct at_dma_chan *atchan = to_at_dma_chan(chan);
/* Disable interrupts */
- atc_disable_
irq(atchan
);
+ atc_disable_
chan_irq(atdma, chan->chan_id
);
tasklet_disable(&atchan->tasklet);
tasklet_kill(&atchan->tasklet);
tasklet_disable(&atchan->tasklet);
tasklet_kill(&atchan->tasklet);