<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux/drivers/dma, branch v3.12.5</title>
<subtitle>Linux kernel source tree</subtitle>
<id>https://git.amat.us/linux/atom/drivers/dma?h=v3.12.5</id>
<link rel='self' href='https://git.amat.us/linux/atom/drivers/dma?h=v3.12.5'/>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/'/>
<updated>2013-12-04T19:05:37Z</updated>
<entry>
<title>ioatdma: fix selection of 16 vs 8 source path</title>
<updated>2013-12-04T19:05:37Z</updated>
<author>
<name>Dan Williams</name>
<email>dan.j.williams@intel.com</email>
</author>
<published>2013-11-13T18:37:36Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=a009902c0d2e86c28cb76a2d4e54d12f098a8ef8'/>
<id>urn:sha1:a009902c0d2e86c28cb76a2d4e54d12f098a8ef8</id>
<content type='text'>
commit 21e96c7313486390c694919522a76dfea0a86c59 upstream.

When performing continuations there are implied sources that need to be
added to the source count. Quoting dma_set_maxpq:

/* dma_maxpq - reduce maxpq in the face of continued operations
 * @dma - dma device with PQ capability
 * @flags - to check if DMA_PREP_CONTINUE and DMA_PREP_PQ_DISABLE_P are set
 *
 * When an engine does not support native continuation we need 3 extra
 * source slots to reuse P and Q with the following coefficients:
 * 1/ {00} * P : remove P from Q', but use it as a source for P'
 * 2/ {01} * Q : use Q to continue Q' calculation
 * 3/ {00} * Q : subtract Q from P' to cancel (2)
 *
 * In the case where P is disabled we only need 1 extra source:
 * 1/ {01} * Q : use Q to continue Q' calculation
 */

...fix the selection of the 16 source path to take these implied sources
into account.

Note this also kills the BUG_ON(src_cnt &lt; 9) check in
__ioat3_prep_pq16_lock().  Besides not accounting for implied sources
the check is redundant given we already made the path selection.

Cc: Dave Jiang &lt;dave.jiang@intel.com&gt;
Acked-by: Dave Jiang &lt;dave.jiang@intel.com&gt;
Signed-off-by: Dan Williams &lt;dan.j.williams@intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>ioatdma: fix sed pool selection</title>
<updated>2013-12-04T19:05:36Z</updated>
<author>
<name>Dan Williams</name>
<email>dan.j.williams@intel.com</email>
</author>
<published>2013-11-13T18:15:42Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=1bb87f93deb4958aecbd4d60b62f8426f297646b'/>
<id>urn:sha1:1bb87f93deb4958aecbd4d60b62f8426f297646b</id>
<content type='text'>
commit 5d48b9b5d80e3aa38a5161565398b1e48a650573 upstream.

The array to lookup the sed pool based on the number of sources
(pq16_idx_to_sedi) is 16 entries and expects a max source index.
However, we pass the total source count which runs off the end of the
array when src_cnt == 16.  The minimal fix is to just pass src_cnt-1,
but given we know the source count is &gt; 8 we can just calculate the sed
pool by (src_cnt - 2) &gt;&gt; 3.

Cc: Dave Jiang &lt;dave.jiang@intel.com&gt;
Acked-by: Dave Jiang &lt;dave.jiang@intel.com&gt;
Signed-off-by: Dan Williams &lt;dan.j.williams@intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>ioatdma: Fix bug in selftest after removal of DMA_MEMSET.</title>
<updated>2013-12-04T19:05:36Z</updated>
<author>
<name>Dave Jiang</name>
<email>dave.jiang@intel.com</email>
</author>
<published>2013-11-06T15:50:09Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=b9c4b04c214848774fbbee4d946aa39ecb8f1010'/>
<id>urn:sha1:b9c4b04c214848774fbbee4d946aa39ecb8f1010</id>
<content type='text'>
commit ac7d631f7d9f9e4e6116c4a72b6308067d0a2226 upstream.

Commit 48a9db4 (3.11) removed the memset op in the xor selftest for ioatdma.
The issue is that with the removal of that op, it never replaced the memset
with a CPU memset. The memory being operated on is expected to be zeroes but
was not. This is causing the xor selftest to fail.

Signed-off-by: Dave Jiang &lt;dave.jiang@intel.com&gt;
Signed-off-by: Dan Williams &lt;dan.j.williams@intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>dmaengine: edma: fix another memory leak</title>
<updated>2013-10-24T16:47:50Z</updated>
<author>
<name>Vinod Koul</name>
<email>vinod.koul@intel.com</email>
</author>
<published>2013-10-24T16:47:50Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=7261828776b33ff434837674413df2920e9ca2ff'/>
<id>urn:sha1:7261828776b33ff434837674413df2920e9ca2ff</id>
<content type='text'>
commit 4b6271a6 fix a menory leak but one more existed in driver so fix that

Signed-off-by: Vinod Koul &lt;vinod.koul@intel.com&gt;
</content>
</entry>
<entry>
<title>dma: edma: Fix memory leak</title>
<updated>2013-10-24T16:46:15Z</updated>
<author>
<name>Valentin Ilie</name>
<email>valentin.ilie@gmail.com</email>
</author>
<published>2013-10-24T13:14:22Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=4b6271a64463f4fcbaf8b2e1d84704b7eb8c407c'/>
<id>urn:sha1:4b6271a64463f4fcbaf8b2e1d84704b7eb8c407c</id>
<content type='text'>
When it fails to allocate a slot, edesc should be free'd before return;

Signed-off-by: Valentin Ilie &lt;valentin.ilie@gmail.com&gt;
Signed-off-by: Vinod Koul &lt;vinod.koul@intel.com&gt;
</content>
</entry>
<entry>
<title>dma: edma.c: remove edma_desc leakage</title>
<updated>2013-10-11T02:01:47Z</updated>
<author>
<name>Geyslan G. Bem</name>
<email>geyslan@gmail.com</email>
</author>
<published>2013-10-07T22:19:58Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=2f6d8fad0a1636e675308088c35e863d066e0949'/>
<id>urn:sha1:2f6d8fad0a1636e675308088c35e863d066e0949</id>
<content type='text'>
Free memory allocated to edma_desc when failing to allocate slot.

Signed-off-by: Geyslan G. Bem &lt;geyslan@gmail.com&gt;
Signed-off-by: Vinod Koul &lt;vinod.koul@intel.com&gt;
</content>
</entry>
<entry>
<title>rcar-hpbdma: add parameter to set_slave() method</title>
<updated>2013-10-11T01:54:36Z</updated>
<author>
<name>Sergei Shtylyov</name>
<email>sergei.shtylyov@cogentembedded.com</email>
</author>
<published>2013-09-25T22:31:37Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=08d08bcdee30d3a28426bd60dfbdae44b36250bc'/>
<id>urn:sha1:08d08bcdee30d3a28426bd60dfbdae44b36250bc</id>
<content type='text'>
Commit 4981c4dc194efb18f0e9a02f1b43e926f2f0d2bb (DMA: shdma: switch DT mode to
use configuration data from a match table) added a new parameter to set_slave()
method but unfortunately got merged later than commit c4f6c41ba790bbbfcebb4c47a
(dma: add driver for R-Car HPB-DMAC), so that the HPB-DMAC driver retained the
old prototype which caused this warning:

drivers/dma/sh/rcar-hpbdma.c:485: warning: initialization from incompatible
pointer type

The newly added parameter  is used to override DMA slave address from 'struct
hpb_dmae_slave_config', so we have to add the 'slave_addr' field to 'struct
hpb_dmae_chan', conditionally assign it in set_slave() method, and return in
slave_addr() method.

Signed-off-by: Sergei Shtylyov &lt;sergei.shtylyov@cogentembedded.com&gt;
Tested-by: Simon Horman &lt;horms+renesas@verge.net.au&gt;
Signed-off-by: Vinod Koul &lt;vinod.koul@intel.com&gt;
</content>
</entry>
<entry>
<title>rcar-hpbdma: remove shdma_free_irq() calls</title>
<updated>2013-10-11T01:54:35Z</updated>
<author>
<name>Sergei Shtylyov</name>
<email>sergei.shtylyov@cogentembedded.com</email>
</author>
<published>2013-09-25T22:28:37Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=cdeb5c033f0389c44e5b36cafd623bdf44bbe25c'/>
<id>urn:sha1:cdeb5c033f0389c44e5b36cafd623bdf44bbe25c</id>
<content type='text'>
Commit c1c63a14f4f2419d093acd7164eccdff315baa86 (DMA: shdma: switch to managed
resource allocation) got rid of shdma_free_irq() but  unfortunately got merged
later than commit c4f6c41ba790bbbfcebb4c47a709ac8ff1fe1af9 (dma: add driver for
R-Car HPB-DMAC), so that the HPB-DMAC driver retained the calls and got broken:

drivers/dma/sh/rcar-hpbdma.c: In function `hpb_dmae_alloc_chan_resources':
drivers/dma/sh/rcar-hpbdma.c:435: error: implicit declaration of function
`shdma_free_irq'

Fix this compilation error by removing the remaining shdma_free_irq() calls.

Reported-by: Simon Horman &lt;horms@verge.net.au&gt;
Signed-off-by: Sergei Shtylyov &lt;sergei.shtylyov@cogentembedded.com&gt;
Tested-by: Simon Horman &lt;horms+renesas@verge.net.au&gt;
Signed-off-by: Vinod Koul &lt;vinod.koul@intel.com&gt;
</content>
</entry>
<entry>
<title>dmaengine: imx-dma: fix callback path in tasklet</title>
<updated>2013-10-04T09:05:03Z</updated>
<author>
<name>Michael Grzeschik</name>
<email>m.grzeschik@pengutronix.de</email>
</author>
<published>2013-09-17T13:56:08Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=fcaaba6c7136fe47e5a13352f99a64b019b6d2c5'/>
<id>urn:sha1:fcaaba6c7136fe47e5a13352f99a64b019b6d2c5</id>
<content type='text'>
We need to free the ld_active list head before jumping into the callback
routine. Otherwise the callback could run into issue_pending and change
our ld_active list head we just going to free. This will run the channel
list into an currupted and undefined state.

Signed-off-by: Michael Grzeschik &lt;m.grzeschik@pengutronix.de&gt;
Signed-off-by: Vinod Koul &lt;vinod.koul@intel.com&gt;
</content>
</entry>
<entry>
<title>dmaengine: imx-dma: fix lockdep issue between irqhandler and tasklet</title>
<updated>2013-10-04T09:04:54Z</updated>
<author>
<name>Michael Grzeschik</name>
<email>m.grzeschik@pengutronix.de</email>
</author>
<published>2013-09-17T13:56:07Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=5a276fa6bdf82fd442046969603968c83626ce0b'/>
<id>urn:sha1:5a276fa6bdf82fd442046969603968c83626ce0b</id>
<content type='text'>
The tasklet and irqhandler are using spin_lock while other routines are
using spin_lock_irqsave/restore. This leads to lockdep issues as
described bellow. This patch is changing the code to use
spinlock_irq_save/restore in both code pathes.

As imxdma_xfer_desc always gets called with spin_lock_irqsave lock held,
this patch also removes the spare call inside the routine to avoid
double locking.

[  403.358162] =================================
[  403.362549] [ INFO: inconsistent lock state ]
[  403.366945] 3.10.0-20130823+ #904 Not tainted
[  403.371331] ---------------------------------
[  403.375721] inconsistent {IN-HARDIRQ-W} -&gt; {HARDIRQ-ON-W} usage.
[  403.381769] swapper/0 [HC0[0]:SC1[1]:HE1:SE0] takes:
[  403.386762]  (&amp;(&amp;imxdma-&gt;lock)-&gt;rlock){?.-...}, at: [&lt;c019d77c&gt;] imxdma_tasklet+0x20/0x134
[  403.395201] {IN-HARDIRQ-W} state was registered at:
[  403.400108]   [&lt;c004b264&gt;] mark_lock+0x2a0/0x6b4
[  403.404798]   [&lt;c004d7c8&gt;] __lock_acquire+0x650/0x1a64
[  403.410004]   [&lt;c004f15c&gt;] lock_acquire+0x94/0xa8
[  403.414773]   [&lt;c02f74e4&gt;] _raw_spin_lock+0x54/0x8c
[  403.419720]   [&lt;c019d094&gt;] dma_irq_handler+0x78/0x254
[  403.424845]   [&lt;c0061124&gt;] handle_irq_event_percpu+0x38/0x1b4
[  403.430670]   [&lt;c00612e4&gt;] handle_irq_event+0x44/0x64
[  403.435789]   [&lt;c0063a70&gt;] handle_level_irq+0xd8/0xf0
[  403.440903]   [&lt;c0060a20&gt;] generic_handle_irq+0x28/0x38
[  403.446194]   [&lt;c0009cc4&gt;] handle_IRQ+0x68/0x8c
[  403.450789]   [&lt;c0008714&gt;] avic_handle_irq+0x3c/0x48
[  403.455811]   [&lt;c0008f84&gt;] __irq_svc+0x44/0x74
[  403.460314]   [&lt;c0040b04&gt;] cpu_startup_entry+0x88/0xf4
[  403.465525]   [&lt;c02f00d0&gt;] rest_init+0xb8/0xe0
[  403.470045]   [&lt;c03e07dc&gt;] start_kernel+0x28c/0x2d4
[  403.474986]   [&lt;a0008040&gt;] 0xa0008040
[  403.478709] irq event stamp: 50854
[  403.482140] hardirqs last  enabled at (50854): [&lt;c001c6b8&gt;] tasklet_action+0x38/0xdc
[  403.489954] hardirqs last disabled at (50853): [&lt;c001c6a0&gt;] tasklet_action+0x20/0xdc
[  403.497761] softirqs last  enabled at (50850): [&lt;c001bc64&gt;] _local_bh_enable+0x14/0x18
[  403.505741] softirqs last disabled at (50851): [&lt;c001c268&gt;] irq_exit+0x88/0xdc
[  403.513026]
[  403.513026] other info that might help us debug this:
[  403.519593]  Possible unsafe locking scenario:
[  403.519593]
[  403.525548]        CPU0
[  403.528020]        ----
[  403.530491]   lock(&amp;(&amp;imxdma-&gt;lock)-&gt;rlock);
[  403.534828]   &lt;Interrupt&gt;
[  403.537474]     lock(&amp;(&amp;imxdma-&gt;lock)-&gt;rlock);
[  403.541983]
[  403.541983]  *** DEADLOCK ***
[  403.541983]
[  403.547951] no locks held by swapper/0.
[  403.551813]
[  403.551813] stack backtrace:
[  403.556222] CPU: 0 PID: 0 Comm: swapper Not tainted 3.10.0-20130823+ #904
[  403.563039] Backtrace:
[  403.565581] [&lt;c000b98c&gt;] (dump_backtrace+0x0/0x10c) from [&lt;c000bb28&gt;] (show_stack+0x18/0x1c)
[  403.574054]  r6:00000000 r5:c05c51d8 r4:c040bd58 r3:00200000
[  403.579872] [&lt;c000bb10&gt;] (show_stack+0x0/0x1c) from [&lt;c02f398c&gt;] (dump_stack+0x20/0x28)
[  403.587955] [&lt;c02f396c&gt;] (dump_stack+0x0/0x28) from [&lt;c02f29c8&gt;] (print_usage_bug.part.28+0x224/0x28c)
[  403.597340] [&lt;c02f27a4&gt;] (print_usage_bug.part.28+0x0/0x28c) from [&lt;c004b404&gt;] (mark_lock+0x440/0x6b4)
[  403.606682]  r8:c004a41c r7:00000000 r6:c040bd58 r5:c040c040 r4:00000002
[  403.613566] [&lt;c004afc4&gt;] (mark_lock+0x0/0x6b4) from [&lt;c004d844&gt;] (__lock_acquire+0x6cc/0x1a64)
[  403.622244] [&lt;c004d178&gt;] (__lock_acquire+0x0/0x1a64) from [&lt;c004f15c&gt;] (lock_acquire+0x94/0xa8)
[  403.631010] [&lt;c004f0c8&gt;] (lock_acquire+0x0/0xa8) from [&lt;c02f74e4&gt;] (_raw_spin_lock+0x54/0x8c)
[  403.639614] [&lt;c02f7490&gt;] (_raw_spin_lock+0x0/0x8c) from [&lt;c019d77c&gt;] (imxdma_tasklet+0x20/0x134)
[  403.648434]  r6:c3847010 r5:c040e890 r4:c38470d4
[  403.653194] [&lt;c019d75c&gt;] (imxdma_tasklet+0x0/0x134) from [&lt;c001c70c&gt;] (tasklet_action+0x8c/0xdc)
[  403.662013]  r8:c0599160 r7:00000000 r6:00000000 r5:c040e890 r4:c3847114 r3:c019d75c
[  403.670042] [&lt;c001c680&gt;] (tasklet_action+0x0/0xdc) from [&lt;c001bd4c&gt;] (__do_softirq+0xe4/0x1f0)
[  403.678687]  r7:00000101 r6:c0402000 r5:c059919c r4:00000001
[  403.684498] [&lt;c001bc68&gt;] (__do_softirq+0x0/0x1f0) from [&lt;c001c268&gt;] (irq_exit+0x88/0xdc)
[  403.692652] [&lt;c001c1e0&gt;] (irq_exit+0x0/0xdc) from [&lt;c0009cc8&gt;] (handle_IRQ+0x6c/0x8c)
[  403.700514]  r4:00000030 r3:00000110
[  403.704192] [&lt;c0009c5c&gt;] (handle_IRQ+0x0/0x8c) from [&lt;c0008714&gt;] (avic_handle_irq+0x3c/0x48)
[  403.712664]  r5:c0403f28 r4:c0593ebc
[  403.716343] [&lt;c00086d8&gt;] (avic_handle_irq+0x0/0x48) from [&lt;c0008f84&gt;] (__irq_svc+0x44/0x74)
[  403.724733] Exception stack(0xc0403f28 to 0xc0403f70)
[  403.729841] 3f20:                   00000001 00000004 00000000 20000013 c0402000 c04104a8
[  403.738078] 3f40: 00000002 c0b69620 a0004000 41069264 a03fb5f4 c0403f7c c0403f40 c0403f70
[  403.746301] 3f60: c004b92c c0009e74 20000013 ffffffff
[  403.751383]  r6:ffffffff r5:20000013 r4:c0009e74 r3:c004b92c
[  403.757210] [&lt;c0009e30&gt;] (arch_cpu_idle+0x0/0x4c) from [&lt;c0040b04&gt;] (cpu_startup_entry+0x88/0xf4)
[  403.766161] [&lt;c0040a7c&gt;] (cpu_startup_entry+0x0/0xf4) from [&lt;c02f00d0&gt;] (rest_init+0xb8/0xe0)
[  403.774753] [&lt;c02f0018&gt;] (rest_init+0x0/0xe0) from [&lt;c03e07dc&gt;] (start_kernel+0x28c/0x2d4)
[  403.783051]  r6:c03fc484 r5:ffffffff r4:c040a0e0
[  403.787797] [&lt;c03e0550&gt;] (start_kernel+0x0/0x2d4) from [&lt;a0008040&gt;] (0xa0008040)

Signed-off-by: Michael Grzeschik &lt;m.grzeschik@pengutronix.de&gt;
Signed-off-by: Vinod Koul &lt;vinod.koul@intel.com&gt;
</content>
</entry>
</feed>
