<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/drivers/tty/serial/ar933x_uart.c, branch v4.4.73</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>serial: ar933x_uart: Fix off-by-one for checking valid alias id</title>
<updated>2015-03-07T02:20:25+00:00</updated>
<author>
<name>Axel Lin</name>
<email>axel.lin@ingics.com</email>
</author>
<published>2015-02-23T03:34:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=bb8478d7d676802211a9a5d77bd0f87899900e41'/>
<id>bb8478d7d676802211a9a5d77bd0f87899900e41</id>
<content type='text'>
Current code uses the alias id as array subscript of ar933x_console_ports.
So the valid id is 0 ... CONFIG_SERIAL_AR933X_NR_UARTS - 1.

Signed-off-by: Axel Lin &lt;axel.lin@ingics.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>
Current code uses the alias id as array subscript of ar933x_console_ports.
So the valid id is 0 ... CONFIG_SERIAL_AR933X_NR_UARTS - 1.

Signed-off-by: Axel Lin &lt;axel.lin@ingics.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge tag 'driver-core-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core</title>
<updated>2014-12-15T00:10:09+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2014-12-15T00:10:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=e6b5be2be4e30037eb551e0ed09dd97bd00d85d3'/>
<id>e6b5be2be4e30037eb551e0ed09dd97bd00d85d3</id>
<content type='text'>
Pull driver core update from Greg KH:
 "Here's the set of driver core patches for 3.19-rc1.

  They are dominated by the removal of the .owner field in platform
  drivers.  They touch a lot of files, but they are "simple" changes,
  just removing a line in a structure.

  Other than that, a few minor driver core and debugfs changes.  There
  are some ath9k patches coming in through this tree that have been
  acked by the wireless maintainers as they relied on the debugfs
  changes.

  Everything has been in linux-next for a while"

* tag 'driver-core-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (324 commits)
  Revert "ath: ath9k: use debugfs_create_devm_seqfile() helper for seq_file entries"
  fs: debugfs: add forward declaration for struct device type
  firmware class: Deletion of an unnecessary check before the function call "vunmap"
  firmware loader: fix hung task warning dump
  devcoredump: provide a one-way disable function
  device: Add dev_&lt;level&gt;_once variants
  ath: ath9k: use debugfs_create_devm_seqfile() helper for seq_file entries
  ath: use seq_file api for ath9k debugfs files
  debugfs: add helper function to create device related seq_file
  drivers/base: cacheinfo: remove noisy error boot message
  Revert "core: platform: add warning if driver has no owner"
  drivers: base: support cpu cache information interface to userspace via sysfs
  drivers: base: add cpu_device_create to support per-cpu devices
  topology: replace custom attribute macros with standard DEVICE_ATTR*
  cpumask: factor out show_cpumap into separate helper function
  driver core: Fix unbalanced device reference in drivers_probe
  driver core: fix race with userland in device_add()
  sysfs/kernfs: make read requests on pre-alloc files use the buffer.
  sysfs/kernfs: allow attributes to request write buffer be pre-allocated.
  fs: sysfs: return EGBIG on write if offset is larger than file size
  ...
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Pull driver core update from Greg KH:
 "Here's the set of driver core patches for 3.19-rc1.

  They are dominated by the removal of the .owner field in platform
  drivers.  They touch a lot of files, but they are "simple" changes,
  just removing a line in a structure.

  Other than that, a few minor driver core and debugfs changes.  There
  are some ath9k patches coming in through this tree that have been
  acked by the wireless maintainers as they relied on the debugfs
  changes.

  Everything has been in linux-next for a while"

* tag 'driver-core-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (324 commits)
  Revert "ath: ath9k: use debugfs_create_devm_seqfile() helper for seq_file entries"
  fs: debugfs: add forward declaration for struct device type
  firmware class: Deletion of an unnecessary check before the function call "vunmap"
  firmware loader: fix hung task warning dump
  devcoredump: provide a one-way disable function
  device: Add dev_&lt;level&gt;_once variants
  ath: ath9k: use debugfs_create_devm_seqfile() helper for seq_file entries
  ath: use seq_file api for ath9k debugfs files
  debugfs: add helper function to create device related seq_file
  drivers/base: cacheinfo: remove noisy error boot message
  Revert "core: platform: add warning if driver has no owner"
  drivers: base: support cpu cache information interface to userspace via sysfs
  drivers: base: add cpu_device_create to support per-cpu devices
  topology: replace custom attribute macros with standard DEVICE_ATTR*
  cpumask: factor out show_cpumap into separate helper function
  driver core: Fix unbalanced device reference in drivers_probe
  driver core: fix race with userland in device_add()
  sysfs/kernfs: make read requests on pre-alloc files use the buffer.
  sysfs/kernfs: allow attributes to request write buffer be pre-allocated.
  fs: sysfs: return EGBIG on write if offset is larger than file size
  ...
</pre>
</div>
</content>
</entry>
<entry>
<title>tty: ar933x_uart: use container_of to resolve ar933x_uart_port from uart_port</title>
<updated>2014-11-06T03:20:53+00:00</updated>
<author>
<name>Fabian Frederick</name>
<email>fabf@skynet.be</email>
</author>
<published>2014-10-05T17:19:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=f9c1b28e8991d37df9d58026c7f7f882b7cfae23'/>
<id>f9c1b28e8991d37df9d58026c7f7f882b7cfae23</id>
<content type='text'>
Use container_of instead of casting first structure member.

Signed-off-by: Fabian Frederick &lt;fabf@skynet.be&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>
Use container_of instead of casting first structure member.

Signed-off-by: Fabian Frederick &lt;fabf@skynet.be&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>tty: serial: drop owner assignment from platform_drivers</title>
<updated>2014-10-20T14:21:45+00:00</updated>
<author>
<name>Wolfram Sang</name>
<email>wsa@the-dreams.de</email>
</author>
<published>2014-10-20T14:21:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=9144b3cded04a05d4b4e18dc9dcfb5b8ada3f2fc'/>
<id>9144b3cded04a05d4b4e18dc9dcfb5b8ada3f2fc</id>
<content type='text'>
A platform_driver does not need to set an owner, it will be populated by the
driver core.

Signed-off-by: Wolfram Sang &lt;wsa@the-dreams.de&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
A platform_driver does not need to set an owner, it will be populated by the
driver core.

Signed-off-by: Wolfram Sang &lt;wsa@the-dreams.de&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>serial: treewide: Remove empty implementations of enable_ms()</title>
<updated>2014-07-10T00:29:38+00:00</updated>
<author>
<name>Alexander Shiyan</name>
<email>shc_work@mail.ru</email>
</author>
<published>2014-06-03T14:54:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=8b152f1096975d012f60387b899d407e4a93b46c'/>
<id>8b152f1096975d012f60387b899d407e4a93b46c</id>
<content type='text'>
Signed-off-by: Alexander Shiyan &lt;shc_work@mail.ru&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>
Signed-off-by: Alexander Shiyan &lt;shc_work@mail.ru&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>tty: ar933x_uart: add device tree support and binding documentation</title>
<updated>2013-08-30T21:11:27+00:00</updated>
<author>
<name>Gabor Juhos</name>
<email>juhosg@openwrt.org</email>
</author>
<published>2013-08-29T06:44:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=dd910d98a2e240443db0090b0ae8a719a4a460f8'/>
<id>dd910d98a2e240443db0090b0ae8a719a4a460f8</id>
<content type='text'>
Modify the probe routine to get the port line number
from device tree if the 'of_node' is populated in the
platform device. The driver can be built as module,
thus add an OF specific module device table as well
to support module auto loading.

This makes it possible to use the driver for AR9330
UART devices specified in device tree.

Cc: devicetree@vger.kernel.org
Signed-off-by: Gabor Juhos &lt;juhosg@openwrt.org&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>
Modify the probe routine to get the port line number
from device tree if the 'of_node' is populated in the
platform device. The driver can be built as module,
thus add an OF specific module device table as well
to support module auto loading.

This makes it possible to use the driver for AR9330
UART devices specified in device tree.

Cc: devicetree@vger.kernel.org
Signed-off-by: Gabor Juhos &lt;juhosg@openwrt.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>tty: ar933x_uart: use config_enabled() macro to clean up ifdefs</title>
<updated>2013-08-28T23:00:42+00:00</updated>
<author>
<name>Gabor Juhos</name>
<email>juhosg@openwrt.org</email>
</author>
<published>2013-08-28T15:08:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=124155351331a53feb00d10874f0c620405fd385'/>
<id>124155351331a53feb00d10874f0c620405fd385</id>
<content type='text'>
Add a new ar933x_uart_console_enabled() helper function
which uses the config_enable(CONFIG_SERIAL_AR933X_CONSOLE)
macro to decide if the console support is enabled or not.

Remove the 'ifdef CONFIG_SERIAL_AR933X_CONSOLE' statements
and use the new helper function to conditionally enable
console support instead.

If CONFIG_SERIAL_AR933X_CONSOLE is not enabled, the new
helper function will become a null stub which allows the
compiler to optimize out the unused console specific
functions/variables.

Signed-off-by: Gabor Juhos &lt;juhosg@openwrt.org&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>
Add a new ar933x_uart_console_enabled() helper function
which uses the config_enable(CONFIG_SERIAL_AR933X_CONSOLE)
macro to decide if the console support is enabled or not.

Remove the 'ifdef CONFIG_SERIAL_AR933X_CONSOLE' statements
and use the new helper function to conditionally enable
console support instead.

If CONFIG_SERIAL_AR933X_CONSOLE is not enabled, the new
helper function will become a null stub which allows the
compiler to optimize out the unused console specific
functions/variables.

Signed-off-by: Gabor Juhos &lt;juhosg@openwrt.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>tty: ar933x_uart: remove superfluous assignment of ar933x_uart_driver.nr</title>
<updated>2013-08-28T23:00:42+00:00</updated>
<author>
<name>Gabor Juhos</name>
<email>juhosg@openwrt.org</email>
</author>
<published>2013-08-28T12:21:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=0710e5626f524a26fe5992adb91a6289b2139928'/>
<id>0710e5626f524a26fe5992adb91a6289b2139928</id>
<content type='text'>
The 'nr' field of the 'ar933x_uart_driver' structure
is already initialized with the same value in the static
declaration. Remove the superfluous assignment in the
module init routine.

Signed-off-by: Gabor Juhos &lt;juhosg@openwrt.org&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>
The 'nr' field of the 'ar933x_uart_driver' structure
is already initialized with the same value in the static
declaration. Remove the superfluous assignment in the
module init routine.

Signed-off-by: Gabor Juhos &lt;juhosg@openwrt.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>tty: ar933x_uart: use the clk API to get the uart clock</title>
<updated>2013-08-28T23:00:42+00:00</updated>
<author>
<name>Gabor Juhos</name>
<email>juhosg@openwrt.org</email>
</author>
<published>2013-08-28T08:09:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=15ef17f622033455dcf03ae96256e474073a7b11'/>
<id>15ef17f622033455dcf03ae96256e474073a7b11</id>
<content type='text'>
The AR933x UARTs are only used on the Atheros AR933x
SoCs. The base clock frequency of the UART is passed
to the driver via platform data. The SoC support code
implements the generic clock API, and the clock rate
can be retrieved via that.

Update the code to get the clock rate via the generic
clock API instead of using the platform data.

Signed-off-by: Gabor Juhos &lt;juhosg@openwrt.org&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>
The AR933x UARTs are only used on the Atheros AR933x
SoCs. The base clock frequency of the UART is passed
to the driver via platform data. The SoC support code
implements the generic clock API, and the clock rate
can be retrieved via that.

Update the code to get the clock rate via the generic
clock API instead of using the platform data.

Signed-off-by: Gabor Juhos &lt;juhosg@openwrt.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>tty: serial: ar933x: drop uart_port-&gt;lock before calling tty_flip_buffer_push()</title>
<updated>2013-08-27T23:17:33+00:00</updated>
<author>
<name>Viresh Kumar</name>
<email>viresh.kumar@linaro.org</email>
</author>
<published>2013-08-19T14:44:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=b16c8e3eed122ec0ddac30de6cc8a904463478b6'/>
<id>b16c8e3eed122ec0ddac30de6cc8a904463478b6</id>
<content type='text'>
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port-&gt;lock locked. This never shows up on UP kernels and comes
up only on SMP kernels.

Crash looks like this (produced with samsung.c driver):

-----
[&lt;c0014d58&gt;] (unwind_backtrace+0x0/0xf8) from [&lt;c0011908&gt;] (show_stack+0x10/0x14)
[&lt;c0011908&gt;] (show_stack+0x10/0x14) from [&lt;c035da34&gt;] (dump_stack+0x6c/0xac)
[&lt;c035da34&gt;] (dump_stack+0x6c/0xac) from [&lt;c01b59ac&gt;] (do_raw_spin_unlock+0xc4/0xd8)
[&lt;c01b59ac&gt;] (do_raw_spin_unlock+0xc4/0xd8) from [&lt;c03627e4&gt;] (_raw_spin_unlock_irqrestore+0xc/0)
[&lt;c03627e4&gt;] (_raw_spin_unlock_irqrestore+0xc/0x38) from [&lt;c020a1a8&gt;] (s3c24xx_serial_rx_chars+0)
[&lt;c020a1a8&gt;] (s3c24xx_serial_rx_chars+0x12c/0x260) from [&lt;c020aae8&gt;] (s3c64xx_serial_handle_irq+)
[&lt;c020aae8&gt;] (s3c64xx_serial_handle_irq+0x48/0x60) from [&lt;c006aaa0&gt;] (handle_irq_event_percpu+0x)
[&lt;c006aaa0&gt;] (handle_irq_event_percpu+0x50/0x194) from [&lt;c006ac20&gt;] (handle_irq_event+0x3c/0x5c)
[&lt;c006ac20&gt;] (handle_irq_event+0x3c/0x5c) from [&lt;c006d864&gt;] (handle_fasteoi_irq+0x80/0x13c)
[&lt;c006d864&gt;] (handle_fasteoi_irq+0x80/0x13c) from [&lt;c006a4a4&gt;] (generic_handle_irq+0x20/0x30)
[&lt;c006a4a4&gt;] (generic_handle_irq+0x20/0x30) from [&lt;c000f454&gt;] (handle_IRQ+0x38/0x94)
[&lt;c000f454&gt;] (handle_IRQ+0x38/0x94) from [&lt;c0008538&gt;] (gic_handle_irq+0x34/0x68)
[&lt;c0008538&gt;] (gic_handle_irq+0x34/0x68) from [&lt;c00123c0&gt;] (__irq_svc+0x40/0x70)
Exception stack(0xc04cdf70 to 0xc04cdfb8)
df60:                                     00000000 00000000 0000166e 00000000
df80: c04cc000 c050278f c050278f 00000001 c04d444c 410fc0f4 c03649b0 00000000
dfa0: 00000001 c04cdfb8 c000f758 c000f75c 60070013 ffffffff
[&lt;c00123c0&gt;] (__irq_svc+0x40/0x70) from [&lt;c000f75c&gt;] (arch_cpu_idle+0x28/0x30)
[&lt;c000f75c&gt;] (arch_cpu_idle+0x28/0x30) from [&lt;c0054888&gt;] (cpu_startup_entry+0x5c/0x148)
[&lt;c0054888&gt;] (cpu_startup_entry+0x5c/0x148) from [&lt;c0497aa4&gt;] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
 lock: s3c24xx_serial_ports+0x1d8/0x370, .magic: dead4ead, .owner: &lt;none&gt;/-1, .owner_cpu: -1
CPU: 0 PID: 360 Comm: kworker/0:1 Not tainted 3.11.0-rc6-next-20130819-00003-g75485f1 #2
Workqueue: events flush_to_ldisc
[&lt;c0014d58&gt;] (unwind_backtrace+0x0/0xf8) from [&lt;c0011908&gt;] (show_stack+0x10/0x14)
[&lt;c0011908&gt;] (show_stack+0x10/0x14) from [&lt;c035da34&gt;] (dump_stack+0x6c/0xac)
[&lt;c035da34&gt;] (dump_stack+0x6c/0xac) from [&lt;c01b581c&gt;] (do_raw_spin_lock+0x100/0x17c)
[&lt;c01b581c&gt;] (do_raw_spin_lock+0x100/0x17c) from [&lt;c03628a0&gt;] (_raw_spin_lock_irqsave+0x20/0x28)
[&lt;c03628a0&gt;] (_raw_spin_lock_irqsave+0x20/0x28) from [&lt;c0203224&gt;] (uart_start+0x18/0x34)
[&lt;c0203224&gt;] (uart_start+0x18/0x34) from [&lt;c01ef890&gt;] (__receive_buf+0x4b4/0x738)
[&lt;c01ef890&gt;] (__receive_buf+0x4b4/0x738) from [&lt;c01efb44&gt;] (n_tty_receive_buf2+0x30/0x98)
[&lt;c01efb44&gt;] (n_tty_receive_buf2+0x30/0x98) from [&lt;c01f2ba8&gt;] (flush_to_ldisc+0xec/0x138)
[&lt;c01f2ba8&gt;] (flush_to_ldisc+0xec/0x138) from [&lt;c0031af0&gt;] (process_one_work+0xfc/0x348)
[&lt;c0031af0&gt;] (process_one_work+0xfc/0x348) from [&lt;c0032138&gt;] (worker_thread+0x138/0x37c)
[&lt;c0032138&gt;] (worker_thread+0x138/0x37c) from [&lt;c0037a7c&gt;] (kthread+0xa4/0xb0)
[&lt;c0037a7c&gt;] (kthread+0xa4/0xb0) from [&lt;c000e5f8&gt;] (ret_from_fork+0x14/0x3c)
-----

Release the port lock before calling tty_flip_buffer_push() and reacquire it
after the call.

Similar stuff was already done for few other drivers in the past, like:

commit 2389b272168ceec056ca1d8a870a97fa9c26e11a
Author: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Date:   Tue May 29 21:53:50 2007 +0100

    [ARM] 4417/1: Serial: Fix AMBA drivers locking

Signed-off-by: Viresh Kumar &lt;viresh.kumar@linaro.org&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>
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port-&gt;lock locked. This never shows up on UP kernels and comes
up only on SMP kernels.

Crash looks like this (produced with samsung.c driver):

-----
[&lt;c0014d58&gt;] (unwind_backtrace+0x0/0xf8) from [&lt;c0011908&gt;] (show_stack+0x10/0x14)
[&lt;c0011908&gt;] (show_stack+0x10/0x14) from [&lt;c035da34&gt;] (dump_stack+0x6c/0xac)
[&lt;c035da34&gt;] (dump_stack+0x6c/0xac) from [&lt;c01b59ac&gt;] (do_raw_spin_unlock+0xc4/0xd8)
[&lt;c01b59ac&gt;] (do_raw_spin_unlock+0xc4/0xd8) from [&lt;c03627e4&gt;] (_raw_spin_unlock_irqrestore+0xc/0)
[&lt;c03627e4&gt;] (_raw_spin_unlock_irqrestore+0xc/0x38) from [&lt;c020a1a8&gt;] (s3c24xx_serial_rx_chars+0)
[&lt;c020a1a8&gt;] (s3c24xx_serial_rx_chars+0x12c/0x260) from [&lt;c020aae8&gt;] (s3c64xx_serial_handle_irq+)
[&lt;c020aae8&gt;] (s3c64xx_serial_handle_irq+0x48/0x60) from [&lt;c006aaa0&gt;] (handle_irq_event_percpu+0x)
[&lt;c006aaa0&gt;] (handle_irq_event_percpu+0x50/0x194) from [&lt;c006ac20&gt;] (handle_irq_event+0x3c/0x5c)
[&lt;c006ac20&gt;] (handle_irq_event+0x3c/0x5c) from [&lt;c006d864&gt;] (handle_fasteoi_irq+0x80/0x13c)
[&lt;c006d864&gt;] (handle_fasteoi_irq+0x80/0x13c) from [&lt;c006a4a4&gt;] (generic_handle_irq+0x20/0x30)
[&lt;c006a4a4&gt;] (generic_handle_irq+0x20/0x30) from [&lt;c000f454&gt;] (handle_IRQ+0x38/0x94)
[&lt;c000f454&gt;] (handle_IRQ+0x38/0x94) from [&lt;c0008538&gt;] (gic_handle_irq+0x34/0x68)
[&lt;c0008538&gt;] (gic_handle_irq+0x34/0x68) from [&lt;c00123c0&gt;] (__irq_svc+0x40/0x70)
Exception stack(0xc04cdf70 to 0xc04cdfb8)
df60:                                     00000000 00000000 0000166e 00000000
df80: c04cc000 c050278f c050278f 00000001 c04d444c 410fc0f4 c03649b0 00000000
dfa0: 00000001 c04cdfb8 c000f758 c000f75c 60070013 ffffffff
[&lt;c00123c0&gt;] (__irq_svc+0x40/0x70) from [&lt;c000f75c&gt;] (arch_cpu_idle+0x28/0x30)
[&lt;c000f75c&gt;] (arch_cpu_idle+0x28/0x30) from [&lt;c0054888&gt;] (cpu_startup_entry+0x5c/0x148)
[&lt;c0054888&gt;] (cpu_startup_entry+0x5c/0x148) from [&lt;c0497aa4&gt;] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
 lock: s3c24xx_serial_ports+0x1d8/0x370, .magic: dead4ead, .owner: &lt;none&gt;/-1, .owner_cpu: -1
CPU: 0 PID: 360 Comm: kworker/0:1 Not tainted 3.11.0-rc6-next-20130819-00003-g75485f1 #2
Workqueue: events flush_to_ldisc
[&lt;c0014d58&gt;] (unwind_backtrace+0x0/0xf8) from [&lt;c0011908&gt;] (show_stack+0x10/0x14)
[&lt;c0011908&gt;] (show_stack+0x10/0x14) from [&lt;c035da34&gt;] (dump_stack+0x6c/0xac)
[&lt;c035da34&gt;] (dump_stack+0x6c/0xac) from [&lt;c01b581c&gt;] (do_raw_spin_lock+0x100/0x17c)
[&lt;c01b581c&gt;] (do_raw_spin_lock+0x100/0x17c) from [&lt;c03628a0&gt;] (_raw_spin_lock_irqsave+0x20/0x28)
[&lt;c03628a0&gt;] (_raw_spin_lock_irqsave+0x20/0x28) from [&lt;c0203224&gt;] (uart_start+0x18/0x34)
[&lt;c0203224&gt;] (uart_start+0x18/0x34) from [&lt;c01ef890&gt;] (__receive_buf+0x4b4/0x738)
[&lt;c01ef890&gt;] (__receive_buf+0x4b4/0x738) from [&lt;c01efb44&gt;] (n_tty_receive_buf2+0x30/0x98)
[&lt;c01efb44&gt;] (n_tty_receive_buf2+0x30/0x98) from [&lt;c01f2ba8&gt;] (flush_to_ldisc+0xec/0x138)
[&lt;c01f2ba8&gt;] (flush_to_ldisc+0xec/0x138) from [&lt;c0031af0&gt;] (process_one_work+0xfc/0x348)
[&lt;c0031af0&gt;] (process_one_work+0xfc/0x348) from [&lt;c0032138&gt;] (worker_thread+0x138/0x37c)
[&lt;c0032138&gt;] (worker_thread+0x138/0x37c) from [&lt;c0037a7c&gt;] (kthread+0xa4/0xb0)
[&lt;c0037a7c&gt;] (kthread+0xa4/0xb0) from [&lt;c000e5f8&gt;] (ret_from_fork+0x14/0x3c)
-----

Release the port lock before calling tty_flip_buffer_push() and reacquire it
after the call.

Similar stuff was already done for few other drivers in the past, like:

commit 2389b272168ceec056ca1d8a870a97fa9c26e11a
Author: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Date:   Tue May 29 21:53:50 2007 +0100

    [ARM] 4417/1: Serial: Fix AMBA drivers locking

Signed-off-by: Viresh Kumar &lt;viresh.kumar@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
</feed>
