<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git, branch v3.4.66</title>
<subtitle>Linux kernel for Apalis and Colibri modules</subtitle>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/'/>
<entry>
<title>Linux 3.4.66</title>
<updated>2013-10-13T23:02:48+00:00</updated>
<author>
<name>Greg Kroah-Hartman</name>
<email>gregkh@linuxfoundation.org</email>
</author>
<published>2013-10-13T23:02:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=dc3a8b0c212a563bf21c91ac9e776a0875861d3f'/>
<id>dc3a8b0c212a563bf21c91ac9e776a0875861d3f</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>ext4: avoid hang when mounting non-journal filesystems with orphan list</title>
<updated>2013-10-13T22:42:50+00:00</updated>
<author>
<name>Theodore Ts'o</name>
<email>tytso@mit.edu</email>
</author>
<published>2012-12-27T06:42:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=016a3592cc34fa349235b5a8b48af5cece2cbfeb'/>
<id>016a3592cc34fa349235b5a8b48af5cece2cbfeb</id>
<content type='text'>
commit 0e9a9a1ad619e7e987815d20262d36a2f95717ca upstream.

When trying to mount a file system which does not contain a journal,
but which does have a orphan list containing an inode which needs to
be truncated, the mount call with hang forever in
ext4_orphan_cleanup() because ext4_orphan_del() will return
immediately without removing the inode from the orphan list, leading
to an uninterruptible loop in kernel code which will busy out one of
the CPU's on the system.

This can be trivially reproduced by trying to mount the file system
found in tests/f_orphan_extents_inode/image.gz from the e2fsprogs
source tree.  If a malicious user were to put this on a USB stick, and
mount it on a Linux desktop which has automatic mounts enabled, this
could be considered a potential denial of service attack.  (Not a big
deal in practice, but professional paranoids worry about such things,
and have even been known to allocate CVE numbers for such problems.)

-js: This is a fix for CVE-2013-2015.

Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
Reviewed-by: Zheng Liu &lt;wenqing.lz@taobao.com&gt;
Acked-by: Jan Kara &lt;jack@suse.cz&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 0e9a9a1ad619e7e987815d20262d36a2f95717ca upstream.

When trying to mount a file system which does not contain a journal,
but which does have a orphan list containing an inode which needs to
be truncated, the mount call with hang forever in
ext4_orphan_cleanup() because ext4_orphan_del() will return
immediately without removing the inode from the orphan list, leading
to an uninterruptible loop in kernel code which will busy out one of
the CPU's on the system.

This can be trivially reproduced by trying to mount the file system
found in tests/f_orphan_extents_inode/image.gz from the e2fsprogs
source tree.  If a malicious user were to put this on a USB stick, and
mount it on a Linux desktop which has automatic mounts enabled, this
could be considered a potential denial of service attack.  (Not a big
deal in practice, but professional paranoids worry about such things,
and have even been known to allocate CVE numbers for such problems.)

-js: This is a fix for CVE-2013-2015.

Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
Reviewed-by: Zheng Liu &lt;wenqing.lz@taobao.com&gt;
Acked-by: Jan Kara &lt;jack@suse.cz&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>Btrfs: change how we queue blocks for backref checking</title>
<updated>2013-10-13T22:42:50+00:00</updated>
<author>
<name>Josef Bacik</name>
<email>jbacik@fusionio.com</email>
</author>
<published>2013-07-30T20:30:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=027a76bf3d56c7d7ef17aadfaec826a5d33f28f3'/>
<id>027a76bf3d56c7d7ef17aadfaec826a5d33f28f3</id>
<content type='text'>
commit b6c60c8018c4e9beb2f83fc82c09f9d033766571 upstream.

Previously we only added blocks to the list to have their backrefs checked if
the level of the block is right above the one we are searching for.  This is
because we want to make sure we don't add the entire path up to the root to the
lists to make sure we process things one at a time.  This assumes that if any
blocks in the path to the root are going to be not checked (shared in other
words) then they will be in the level right above the current block on up.  This
isn't quite right though since we can have blocks higher up the list that are
shared because they are attached to a reloc root.  But we won't add this block
to be checked and then later on we will BUG_ON(!upper-&gt;checked).  So instead
keep track of wether or not we've queued a block to be checked in this current
search, and if we haven't go ahead and queue it to be checked.  This patch fixed
the panic I was seeing where we BUG_ON(!upper-&gt;checked).  Thanks,

Signed-off-by: Josef Bacik &lt;jbacik@fusionio.com&gt;
Signed-off-by: Chris Mason &lt;chris.mason@fusionio.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit b6c60c8018c4e9beb2f83fc82c09f9d033766571 upstream.

Previously we only added blocks to the list to have their backrefs checked if
the level of the block is right above the one we are searching for.  This is
because we want to make sure we don't add the entire path up to the root to the
lists to make sure we process things one at a time.  This assumes that if any
blocks in the path to the root are going to be not checked (shared in other
words) then they will be in the level right above the current block on up.  This
isn't quite right though since we can have blocks higher up the list that are
shared because they are attached to a reloc root.  But we won't add this block
to be checked and then later on we will BUG_ON(!upper-&gt;checked).  So instead
keep track of wether or not we've queued a block to be checked in this current
search, and if we haven't go ahead and queue it to be checked.  This patch fixed
the panic I was seeing where we BUG_ON(!upper-&gt;checked).  Thanks,

Signed-off-by: Josef Bacik &lt;jbacik@fusionio.com&gt;
Signed-off-by: Chris Mason &lt;chris.mason@fusionio.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>tile: use a more conservative __my_cpu_offset in CONFIG_PREEMPT</title>
<updated>2013-10-13T22:42:50+00:00</updated>
<author>
<name>Chris Metcalf</name>
<email>cmetcalf@tilera.com</email>
</author>
<published>2013-09-26T17:24:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=5df7085368ce132b9d93e5cff406df4684615419'/>
<id>5df7085368ce132b9d93e5cff406df4684615419</id>
<content type='text'>
commit f862eefec0b68e099a9fa58d3761ffb10bad97e1 upstream.

It turns out the kernel relies on barrier() to force a reload of the
percpu offset value.  Since we can't easily modify the definition of
barrier() to include "tp" as an output register, we instead provide a
definition of __my_cpu_offset as extended assembly that includes a fake
stack read to hazard against barrier(), forcing gcc to know that it
must reread "tp" and recompute anything based on "tp" after a barrier.

This fixes observed hangs in the slub allocator when we are looping
on a percpu cmpxchg_double.

A similar fix for ARMv7 was made in June in change 509eb76ebf97.

Signed-off-by: Chris Metcalf &lt;cmetcalf@tilera.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit f862eefec0b68e099a9fa58d3761ffb10bad97e1 upstream.

It turns out the kernel relies on barrier() to force a reload of the
percpu offset value.  Since we can't easily modify the definition of
barrier() to include "tp" as an output register, we instead provide a
definition of __my_cpu_offset as extended assembly that includes a fake
stack read to hazard against barrier(), forcing gcc to know that it
must reread "tp" and recompute anything based on "tp" after a barrier.

This fixes observed hangs in the slub allocator when we are looping
on a percpu cmpxchg_double.

A similar fix for ARMv7 was made in June in change 509eb76ebf97.

Signed-off-by: Chris Metcalf &lt;cmetcalf@tilera.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>ACPI / IPMI: Fix atomic context requirement of ipmi_msg_handler()</title>
<updated>2013-10-13T22:42:49+00:00</updated>
<author>
<name>Lv Zheng</name>
<email>lv.zheng@intel.com</email>
</author>
<published>2013-09-13T05:13:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=b55ef2eddc365446b824aa9d457dd9daf4d4d4be'/>
<id>b55ef2eddc365446b824aa9d457dd9daf4d4d4be</id>
<content type='text'>
commit 06a8566bcf5cf7db9843a82cde7a33c7bf3947d9 upstream.

This patch fixes the issues indicated by the test results that
ipmi_msg_handler() is invoked in atomic context.

BUG: scheduling while atomic: kipmi0/18933/0x10000100
Modules linked in: ipmi_si acpi_ipmi ...
CPU: 3 PID: 18933 Comm: kipmi0 Tainted: G       AW    3.10.0-rc7+ #2
Hardware name: QCI QSSC-S4R/QSSC-S4R, BIOS QSSC-S4R.QCI.01.00.0027.070120100606 07/01/2010
 ffff8838245eea00 ffff88103fc63c98 ffffffff814c4a1e ffff88103fc63ca8
 ffffffff814bfbab ffff88103fc63d28 ffffffff814c73e0 ffff88103933cbd4
 0000000000000096 ffff88103fc63ce8 ffff88102f618000 ffff881035c01fd8
Call Trace:
 &lt;IRQ&gt;  [&lt;ffffffff814c4a1e&gt;] dump_stack+0x19/0x1b
 [&lt;ffffffff814bfbab&gt;] __schedule_bug+0x46/0x54
 [&lt;ffffffff814c73e0&gt;] __schedule+0x83/0x59c
 [&lt;ffffffff81058853&gt;] __cond_resched+0x22/0x2d
 [&lt;ffffffff814c794b&gt;] _cond_resched+0x14/0x1d
 [&lt;ffffffff814c6d82&gt;] mutex_lock+0x11/0x32
 [&lt;ffffffff8101e1e9&gt;] ? __default_send_IPI_dest_field.constprop.0+0x53/0x58
 [&lt;ffffffffa09e3f9c&gt;] ipmi_msg_handler+0x23/0x166 [ipmi_si]
 [&lt;ffffffff812bf6e4&gt;] deliver_response+0x55/0x5a
 [&lt;ffffffff812c0fd4&gt;] handle_new_recv_msgs+0xb67/0xc65
 [&lt;ffffffff81007ad1&gt;] ? read_tsc+0x9/0x19
 [&lt;ffffffff814c8620&gt;] ? _raw_spin_lock_irq+0xa/0xc
 [&lt;ffffffffa09e1128&gt;] ipmi_thread+0x5c/0x146 [ipmi_si]
 ...

Also Tony Camuso says:

 We were getting occasional "Scheduling while atomic" call traces
 during boot on some systems. Problem was first seen on a Cisco C210
 but we were able to reproduce it on a Cisco c220m3. Setting
 CONFIG_LOCKDEP and LOCKDEP_SUPPORT to 'y' exposed a lockdep around
 tx_msg_lock in acpi_ipmi.c struct acpi_ipmi_device.

 =================================
 [ INFO: inconsistent lock state ]
 2.6.32-415.el6.x86_64-debug-splck #1
 ---------------------------------
 inconsistent {SOFTIRQ-ON-W} -&gt; {IN-SOFTIRQ-W} usage.
 ksoftirqd/3/17 [HC0[0]:SC1[1]:HE1:SE0] takes:
  (&amp;ipmi_device-&gt;tx_msg_lock){+.?...}, at: [&lt;ffffffff81337a27&gt;] ipmi_msg_handler+0x71/0x126
 {SOFTIRQ-ON-W} state was registered at:
   [&lt;ffffffff810ba11c&gt;] __lock_acquire+0x63c/0x1570
   [&lt;ffffffff810bb0f4&gt;] lock_acquire+0xa4/0x120
   [&lt;ffffffff815581cc&gt;] __mutex_lock_common+0x4c/0x400
   [&lt;ffffffff815586ea&gt;] mutex_lock_nested+0x4a/0x60
   [&lt;ffffffff8133789d&gt;] acpi_ipmi_space_handler+0x11b/0x234
   [&lt;ffffffff81321c62&gt;] acpi_ev_address_space_dispatch+0x170/0x1be

The fix implemented by this change has been tested by Tony:

 Tested the patch in a boot loop with lockdep debug enabled and never
 saw the problem in over 400 reboots.

Reported-and-tested-by: Tony Camuso &lt;tcamuso@redhat.com&gt;
Signed-off-by: Lv Zheng &lt;lv.zheng@intel.com&gt;
Reviewed-by: Huang Ying &lt;ying.huang@intel.com&gt;
Signed-off-by: Rafael J. Wysocki &lt;rafael.j.wysocki@intel.com&gt;
Cc: Jonghwan Choi &lt;jhbird.choi@samsung.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 06a8566bcf5cf7db9843a82cde7a33c7bf3947d9 upstream.

This patch fixes the issues indicated by the test results that
ipmi_msg_handler() is invoked in atomic context.

BUG: scheduling while atomic: kipmi0/18933/0x10000100
Modules linked in: ipmi_si acpi_ipmi ...
CPU: 3 PID: 18933 Comm: kipmi0 Tainted: G       AW    3.10.0-rc7+ #2
Hardware name: QCI QSSC-S4R/QSSC-S4R, BIOS QSSC-S4R.QCI.01.00.0027.070120100606 07/01/2010
 ffff8838245eea00 ffff88103fc63c98 ffffffff814c4a1e ffff88103fc63ca8
 ffffffff814bfbab ffff88103fc63d28 ffffffff814c73e0 ffff88103933cbd4
 0000000000000096 ffff88103fc63ce8 ffff88102f618000 ffff881035c01fd8
Call Trace:
 &lt;IRQ&gt;  [&lt;ffffffff814c4a1e&gt;] dump_stack+0x19/0x1b
 [&lt;ffffffff814bfbab&gt;] __schedule_bug+0x46/0x54
 [&lt;ffffffff814c73e0&gt;] __schedule+0x83/0x59c
 [&lt;ffffffff81058853&gt;] __cond_resched+0x22/0x2d
 [&lt;ffffffff814c794b&gt;] _cond_resched+0x14/0x1d
 [&lt;ffffffff814c6d82&gt;] mutex_lock+0x11/0x32
 [&lt;ffffffff8101e1e9&gt;] ? __default_send_IPI_dest_field.constprop.0+0x53/0x58
 [&lt;ffffffffa09e3f9c&gt;] ipmi_msg_handler+0x23/0x166 [ipmi_si]
 [&lt;ffffffff812bf6e4&gt;] deliver_response+0x55/0x5a
 [&lt;ffffffff812c0fd4&gt;] handle_new_recv_msgs+0xb67/0xc65
 [&lt;ffffffff81007ad1&gt;] ? read_tsc+0x9/0x19
 [&lt;ffffffff814c8620&gt;] ? _raw_spin_lock_irq+0xa/0xc
 [&lt;ffffffffa09e1128&gt;] ipmi_thread+0x5c/0x146 [ipmi_si]
 ...

Also Tony Camuso says:

 We were getting occasional "Scheduling while atomic" call traces
 during boot on some systems. Problem was first seen on a Cisco C210
 but we were able to reproduce it on a Cisco c220m3. Setting
 CONFIG_LOCKDEP and LOCKDEP_SUPPORT to 'y' exposed a lockdep around
 tx_msg_lock in acpi_ipmi.c struct acpi_ipmi_device.

 =================================
 [ INFO: inconsistent lock state ]
 2.6.32-415.el6.x86_64-debug-splck #1
 ---------------------------------
 inconsistent {SOFTIRQ-ON-W} -&gt; {IN-SOFTIRQ-W} usage.
 ksoftirqd/3/17 [HC0[0]:SC1[1]:HE1:SE0] takes:
  (&amp;ipmi_device-&gt;tx_msg_lock){+.?...}, at: [&lt;ffffffff81337a27&gt;] ipmi_msg_handler+0x71/0x126
 {SOFTIRQ-ON-W} state was registered at:
   [&lt;ffffffff810ba11c&gt;] __lock_acquire+0x63c/0x1570
   [&lt;ffffffff810bb0f4&gt;] lock_acquire+0xa4/0x120
   [&lt;ffffffff815581cc&gt;] __mutex_lock_common+0x4c/0x400
   [&lt;ffffffff815586ea&gt;] mutex_lock_nested+0x4a/0x60
   [&lt;ffffffff8133789d&gt;] acpi_ipmi_space_handler+0x11b/0x234
   [&lt;ffffffff81321c62&gt;] acpi_ev_address_space_dispatch+0x170/0x1be

The fix implemented by this change has been tested by Tony:

 Tested the patch in a boot loop with lockdep debug enabled and never
 saw the problem in over 400 reboots.

Reported-and-tested-by: Tony Camuso &lt;tcamuso@redhat.com&gt;
Signed-off-by: Lv Zheng &lt;lv.zheng@intel.com&gt;
Reviewed-by: Huang Ying &lt;ying.huang@intel.com&gt;
Signed-off-by: Rafael J. Wysocki &lt;rafael.j.wysocki@intel.com&gt;
Cc: Jonghwan Choi &lt;jhbird.choi@samsung.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>mm, show_mem: suppress page counts in non-blockable contexts</title>
<updated>2013-10-13T22:42:49+00:00</updated>
<author>
<name>David Rientjes</name>
<email>rientjes@google.com</email>
</author>
<published>2013-04-29T22:06:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=022a41db8aa1bc0b4ff4c013f889292324a1c465'/>
<id>022a41db8aa1bc0b4ff4c013f889292324a1c465</id>
<content type='text'>
commit 4b59e6c4730978679b414a8da61514a2518da512 upstream.

On large systems with a lot of memory, walking all RAM to determine page
types may take a half second or even more.

In non-blockable contexts, the page allocator will emit a page allocation
failure warning unless __GFP_NOWARN is specified.  In such contexts, irqs
are typically disabled and such a lengthy delay may even result in NMI
watchdog timeouts.

To fix this, suppress the page walk in such contexts when printing the
page allocation failure warning.

Signed-off-by: David Rientjes &lt;rientjes@google.com&gt;
Cc: Mel Gorman &lt;mgorman@suse.de&gt;
Acked-by: Michal Hocko &lt;mhocko@suse.cz&gt;
Cc: Dave Hansen &lt;dave@linux.vnet.ibm.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
Cc: Xishi Qiu &lt;qiuxishi@huawei.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 4b59e6c4730978679b414a8da61514a2518da512 upstream.

On large systems with a lot of memory, walking all RAM to determine page
types may take a half second or even more.

In non-blockable contexts, the page allocator will emit a page allocation
failure warning unless __GFP_NOWARN is specified.  In such contexts, irqs
are typically disabled and such a lengthy delay may even result in NMI
watchdog timeouts.

To fix this, suppress the page walk in such contexts when printing the
page allocation failure warning.

Signed-off-by: David Rientjes &lt;rientjes@google.com&gt;
Cc: Mel Gorman &lt;mgorman@suse.de&gt;
Acked-by: Michal Hocko &lt;mhocko@suse.cz&gt;
Cc: Dave Hansen &lt;dave@linux.vnet.ibm.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
Cc: Xishi Qiu &lt;qiuxishi@huawei.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>staging: comedi: ni_65xx: (bug fix) confine insn_bits to one subdevice</title>
<updated>2013-10-13T22:42:49+00:00</updated>
<author>
<name>Ian Abbott</name>
<email>abbotti@mev.co.uk</email>
</author>
<published>2013-10-10T09:53:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=9712612a91e92824349ce9fece31dba6d2fbde70'/>
<id>9712612a91e92824349ce9fece31dba6d2fbde70</id>
<content type='text'>
commit 677a31565692d596ef42ea589b53ba289abf4713 upstream.

The `insn_bits` handler `ni_65xx_dio_insn_bits()` has a `for` loop that
currently writes (optionally) and reads back up to 5 "ports" consisting
of 8 channels each.  It reads up to 32 1-bit channels but can only read
and write a whole port at once - it needs to handle up to 5 ports as the
first channel it reads might not be aligned on a port boundary.  It
breaks out of the loop early if the next port it handles is beyond the
final port on the card.  It also breaks out early on the 5th port in the
loop if the first channel was aligned.  Unfortunately, it doesn't check
that the current port it is dealing with belongs to the comedi subdevice
the `insn_bits` handler is acting on.  That's a bug.

Redo the `for` loop to terminate after the final port belonging to the
subdevice, changing the loop variable in the process to simplify things
a bit.  The `for` loop could now try and handle more than 5 ports if the
subdevice has more than 40 channels, but the test `if (bitshift &gt;= 32)`
ensures it will break out early after 4 or 5 ports (depending on whether
the first channel is aligned on a port boundary).  (`bitshift` will be
between -7 and 7 inclusive on the first iteration, increasing by 8 for
each subsequent operation.)

Signed-off-by: Ian Abbott &lt;abbotti@mev.co.uk&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 677a31565692d596ef42ea589b53ba289abf4713 upstream.

The `insn_bits` handler `ni_65xx_dio_insn_bits()` has a `for` loop that
currently writes (optionally) and reads back up to 5 "ports" consisting
of 8 channels each.  It reads up to 32 1-bit channels but can only read
and write a whole port at once - it needs to handle up to 5 ports as the
first channel it reads might not be aligned on a port boundary.  It
breaks out of the loop early if the next port it handles is beyond the
final port on the card.  It also breaks out early on the 5th port in the
loop if the first channel was aligned.  Unfortunately, it doesn't check
that the current port it is dealing with belongs to the comedi subdevice
the `insn_bits` handler is acting on.  That's a bug.

Redo the `for` loop to terminate after the final port belonging to the
subdevice, changing the loop variable in the process to simplify things
a bit.  The `for` loop could now try and handle more than 5 ports if the
subdevice has more than 40 channels, but the test `if (bitshift &gt;= 32)`
ensures it will break out early after 4 or 5 ports (depending on whether
the first channel is aligned on a port boundary).  (`bitshift` will be
between -7 and 7 inclusive on the first iteration, increasing by 8 for
each subsequent operation.)

Signed-off-by: Ian Abbott &lt;abbotti@mev.co.uk&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>dmaengine: imx-dma: fix slow path issue in prep_dma_cyclic</title>
<updated>2013-10-13T22:42:49+00:00</updated>
<author>
<name>Michael Grzeschik</name>
<email>m.grzeschik@pengutronix.de</email>
</author>
<published>2013-09-17T13:56:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=d11fb4bbd90fd424834f51f8f85f6df51d76e5d9'/>
<id>d11fb4bbd90fd424834f51f8f85f6df51d76e5d9</id>
<content type='text'>
commit edc530fe7ee5a562680615d2e7cd205879c751a7 upstream.

When perparing cyclic_dma buffers by the sound layer, it will dump the
following lockdep trace. The leading snd_pcm_action_single get called
with read_lock_irq called. To fix this, we change the kcalloc call from
GFP_KERNEL to GFP_ATOMIC.

WARNING: at kernel/lockdep.c:2740 lockdep_trace_alloc+0xcc/0x114()
DEBUG_LOCKS_WARN_ON(irqs_disabled_flags(flags))
Modules linked in:
CPU: 0 PID: 832 Comm: aplay Not tainted 3.11.0-20130823+ #903
Backtrace:
[&lt;c000b98c&gt;] (dump_backtrace+0x0/0x10c) from [&lt;c000bb28&gt;] (show_stack+0x18/0x1c)
 r6:c004c090 r5:00000009 r4:c2e0bd18 r3:00404000
[&lt;c000bb10&gt;] (show_stack+0x0/0x1c) from [&lt;c02f397c&gt;] (dump_stack+0x20/0x28)
[&lt;c02f395c&gt;] (dump_stack+0x0/0x28) from [&lt;c001531c&gt;] (warn_slowpath_common+0x54/0x70)
[&lt;c00152c8&gt;] (warn_slowpath_common+0x0/0x70) from [&lt;c00153dc&gt;] (warn_slowpath_fmt+0x38/0x40)
 r8:00004000 r7:a3b90000 r6:000080d0 r5:60000093 r4:c2e0a000 r3:00000009
[&lt;c00153a4&gt;] (warn_slowpath_fmt+0x0/0x40) from [&lt;c004c090&gt;] (lockdep_trace_alloc+0xcc/0x114)
 r3:c03955d8 r2:c03907db
[&lt;c004bfc4&gt;] (lockdep_trace_alloc+0x0/0x114) from [&lt;c008f16c&gt;] (__kmalloc+0x34/0x118)
 r6:000080d0 r5:c3800120 r4:000080d0 r3:c040a0f8
[&lt;c008f138&gt;] (__kmalloc+0x0/0x118) from [&lt;c019c95c&gt;] (imxdma_prep_dma_cyclic+0x64/0x168)
 r7:a3b90000 r6:00000004 r5:c39d8420 r4:c3847150
[&lt;c019c8f8&gt;] (imxdma_prep_dma_cyclic+0x0/0x168) from [&lt;c024618c&gt;] (snd_dmaengine_pcm_trigger+0xa8/0x160)
[&lt;c02460e4&gt;] (snd_dmaengine_pcm_trigger+0x0/0x160) from [&lt;c0241fa8&gt;] (soc_pcm_trigger+0x90/0xb4)
 r8:c058c7b0 r7:c3b8140c r6:c39da560 r5:00000001 r4:c3b81000
[&lt;c0241f18&gt;] (soc_pcm_trigger+0x0/0xb4) from [&lt;c022ece4&gt;] (snd_pcm_do_start+0x2c/0x38)
 r7:00000000 r6:00000003 r5:c058c7b0 r4:c3b81000
[&lt;c022ecb8&gt;] (snd_pcm_do_start+0x0/0x38) from [&lt;c022e958&gt;] (snd_pcm_action_single+0x40/0x6c)
[&lt;c022e918&gt;] (snd_pcm_action_single+0x0/0x6c) from [&lt;c022ea64&gt;] (snd_pcm_action_lock_irq+0x7c/0x9c)
 r7:00000003 r6:c3b810f0 r5:c3b810f0 r4:c3b81000
[&lt;c022e9e8&gt;] (snd_pcm_action_lock_irq+0x0/0x9c) from [&lt;c023009c&gt;] (snd_pcm_common_ioctl1+0x7f8/0xfd0)
 r8:c3b7f888 r7:005407b8 r6:c2c991c0 r5:c3b81000 r4:c3b81000 r3:00004142
[&lt;c022f8a4&gt;] (snd_pcm_common_ioctl1+0x0/0xfd0) from [&lt;c023117c&gt;] (snd_pcm_playback_ioctl1+0x464/0x488)
[&lt;c0230d18&gt;] (snd_pcm_playback_ioctl1+0x0/0x488) from [&lt;c02311d4&gt;] (snd_pcm_playback_ioctl+0x34/0x40)
 r8:c3b7f888 r7:00004142 r6:00000004 r5:c2c991c0 r4:005407b8
[&lt;c02311a0&gt;] (snd_pcm_playback_ioctl+0x0/0x40) from [&lt;c00a14a4&gt;] (vfs_ioctl+0x30/0x44)
[&lt;c00a1474&gt;] (vfs_ioctl+0x0/0x44) from [&lt;c00a1fe8&gt;] (do_vfs_ioctl+0x55c/0x5c0)
[&lt;c00a1a8c&gt;] (do_vfs_ioctl+0x0/0x5c0) from [&lt;c00a208c&gt;] (SyS_ioctl+0x40/0x68)
[&lt;c00a204c&gt;] (SyS_ioctl+0x0/0x68) from [&lt;c0009380&gt;] (ret_fast_syscall+0x0/0x44)
 r8:c0009544 r7:00000036 r6:bedeaa58 r5:00000000 r4:000000c0

Signed-off-by: Michael Grzeschik &lt;m.grzeschik@pengutronix.de&gt;
Signed-off-by: Vinod Koul &lt;vinod.koul@intel.com&gt;
Cc: Jonghwan Choi &lt;jhbird.choi@samsung.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit edc530fe7ee5a562680615d2e7cd205879c751a7 upstream.

When perparing cyclic_dma buffers by the sound layer, it will dump the
following lockdep trace. The leading snd_pcm_action_single get called
with read_lock_irq called. To fix this, we change the kcalloc call from
GFP_KERNEL to GFP_ATOMIC.

WARNING: at kernel/lockdep.c:2740 lockdep_trace_alloc+0xcc/0x114()
DEBUG_LOCKS_WARN_ON(irqs_disabled_flags(flags))
Modules linked in:
CPU: 0 PID: 832 Comm: aplay Not tainted 3.11.0-20130823+ #903
Backtrace:
[&lt;c000b98c&gt;] (dump_backtrace+0x0/0x10c) from [&lt;c000bb28&gt;] (show_stack+0x18/0x1c)
 r6:c004c090 r5:00000009 r4:c2e0bd18 r3:00404000
[&lt;c000bb10&gt;] (show_stack+0x0/0x1c) from [&lt;c02f397c&gt;] (dump_stack+0x20/0x28)
[&lt;c02f395c&gt;] (dump_stack+0x0/0x28) from [&lt;c001531c&gt;] (warn_slowpath_common+0x54/0x70)
[&lt;c00152c8&gt;] (warn_slowpath_common+0x0/0x70) from [&lt;c00153dc&gt;] (warn_slowpath_fmt+0x38/0x40)
 r8:00004000 r7:a3b90000 r6:000080d0 r5:60000093 r4:c2e0a000 r3:00000009
[&lt;c00153a4&gt;] (warn_slowpath_fmt+0x0/0x40) from [&lt;c004c090&gt;] (lockdep_trace_alloc+0xcc/0x114)
 r3:c03955d8 r2:c03907db
[&lt;c004bfc4&gt;] (lockdep_trace_alloc+0x0/0x114) from [&lt;c008f16c&gt;] (__kmalloc+0x34/0x118)
 r6:000080d0 r5:c3800120 r4:000080d0 r3:c040a0f8
[&lt;c008f138&gt;] (__kmalloc+0x0/0x118) from [&lt;c019c95c&gt;] (imxdma_prep_dma_cyclic+0x64/0x168)
 r7:a3b90000 r6:00000004 r5:c39d8420 r4:c3847150
[&lt;c019c8f8&gt;] (imxdma_prep_dma_cyclic+0x0/0x168) from [&lt;c024618c&gt;] (snd_dmaengine_pcm_trigger+0xa8/0x160)
[&lt;c02460e4&gt;] (snd_dmaengine_pcm_trigger+0x0/0x160) from [&lt;c0241fa8&gt;] (soc_pcm_trigger+0x90/0xb4)
 r8:c058c7b0 r7:c3b8140c r6:c39da560 r5:00000001 r4:c3b81000
[&lt;c0241f18&gt;] (soc_pcm_trigger+0x0/0xb4) from [&lt;c022ece4&gt;] (snd_pcm_do_start+0x2c/0x38)
 r7:00000000 r6:00000003 r5:c058c7b0 r4:c3b81000
[&lt;c022ecb8&gt;] (snd_pcm_do_start+0x0/0x38) from [&lt;c022e958&gt;] (snd_pcm_action_single+0x40/0x6c)
[&lt;c022e918&gt;] (snd_pcm_action_single+0x0/0x6c) from [&lt;c022ea64&gt;] (snd_pcm_action_lock_irq+0x7c/0x9c)
 r7:00000003 r6:c3b810f0 r5:c3b810f0 r4:c3b81000
[&lt;c022e9e8&gt;] (snd_pcm_action_lock_irq+0x0/0x9c) from [&lt;c023009c&gt;] (snd_pcm_common_ioctl1+0x7f8/0xfd0)
 r8:c3b7f888 r7:005407b8 r6:c2c991c0 r5:c3b81000 r4:c3b81000 r3:00004142
[&lt;c022f8a4&gt;] (snd_pcm_common_ioctl1+0x0/0xfd0) from [&lt;c023117c&gt;] (snd_pcm_playback_ioctl1+0x464/0x488)
[&lt;c0230d18&gt;] (snd_pcm_playback_ioctl1+0x0/0x488) from [&lt;c02311d4&gt;] (snd_pcm_playback_ioctl+0x34/0x40)
 r8:c3b7f888 r7:00004142 r6:00000004 r5:c2c991c0 r4:005407b8
[&lt;c02311a0&gt;] (snd_pcm_playback_ioctl+0x0/0x40) from [&lt;c00a14a4&gt;] (vfs_ioctl+0x30/0x44)
[&lt;c00a1474&gt;] (vfs_ioctl+0x0/0x44) from [&lt;c00a1fe8&gt;] (do_vfs_ioctl+0x55c/0x5c0)
[&lt;c00a1a8c&gt;] (do_vfs_ioctl+0x0/0x5c0) from [&lt;c00a208c&gt;] (SyS_ioctl+0x40/0x68)
[&lt;c00a204c&gt;] (SyS_ioctl+0x0/0x68) from [&lt;c0009380&gt;] (ret_fast_syscall+0x0/0x44)
 r8:c0009544 r7:00000036 r6:bedeaa58 r5:00000000 r4:000000c0

Signed-off-by: Michael Grzeschik &lt;m.grzeschik@pengutronix.de&gt;
Signed-off-by: Vinod Koul &lt;vinod.koul@intel.com&gt;
Cc: Jonghwan Choi &lt;jhbird.choi@samsung.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>dmaengine: imx-dma: fix callback path in tasklet</title>
<updated>2013-10-13T22:42:49+00:00</updated>
<author>
<name>Michael Grzeschik</name>
<email>m.grzeschik@pengutronix.de</email>
</author>
<published>2013-09-17T13:56:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=cd8ccd534cf8782116049336a31b2476b9049ed2'/>
<id>cd8ccd534cf8782116049336a31b2476b9049ed2</id>
<content type='text'>
commit fcaaba6c7136fe47e5a13352f99a64b019b6d2c5 upstream.

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;
Cc: Jonghwan Choi &lt;jhbird.choi@samsung.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit fcaaba6c7136fe47e5a13352f99a64b019b6d2c5 upstream.

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;
Cc: Jonghwan Choi &lt;jhbird.choi@samsung.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>dmaengine: imx-dma: fix lockdep issue between irqhandler and tasklet</title>
<updated>2013-10-13T22:42:49+00:00</updated>
<author>
<name>Michael Grzeschik</name>
<email>m.grzeschik@pengutronix.de</email>
</author>
<published>2013-09-17T13:56:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=218118c73db0a1b9aaece4c9ae697745218c3aa5'/>
<id>218118c73db0a1b9aaece4c9ae697745218c3aa5</id>
<content type='text'>
commit 5a276fa6bdf82fd442046969603968c83626ce0b upstream.

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;
Cc: Jonghwan Choi &lt;jhbird.choi@samsung.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 5a276fa6bdf82fd442046969603968c83626ce0b upstream.

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;
Cc: Jonghwan Choi &lt;jhbird.choi@samsung.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
</feed>
