OSDN Git Service
Viresh Kumar [Mon, 19 Aug 2013 14:44:27 +0000 (20:14 +0530)]
tty: serial: tegra: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Cc: Stephen Warren <swarren@wwwdotorg.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:26 +0000 (20:14 +0530)]
tty: serial: samsung: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:25 +0000 (20:14 +0530)]
tty: serial: sa1100: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:24 +0000 (20:14 +0530)]
tty: serial: rp2: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:23 +0000 (20:14 +0530)]
tty: serial: pnx8xxx: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:22 +0000 (20:14 +0530)]
tty: serial: nwpserial: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:21 +0000 (20:14 +0530)]
tty: serial: netx: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:20 +0000 (20:14 +0530)]
tty: serial: msm: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Cc: David Brown <davidb@codeaurora.org> (maintainer:ARM/QUALCOMM MSM...)
Cc: Daniel Walker <dwalker@fifo99.com> (maintainer:ARM/QUALCOMM MSM...)
Cc: Bryan Huntsman <bryanh@codeaurora.org> (maintainer:ARM/QUALCOMM MSM...)
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:19 +0000 (20:14 +0530)]
tty: serial: mpsc: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:18 +0000 (20:14 +0530)]
tty: serial: mfd: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:17 +0000 (20:14 +0530)]
tty: serial: mcf: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:16 +0000 (20:14 +0530)]
tty: serial: m32r_sio: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:15 +0000 (20:14 +0530)]
tty: serial: lpc32xx_hs: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:14 +0000 (20:14 +0530)]
tty: serial: lpc32xx_hs: don't call tty_flip_buffer_push() twice
serial_lpc32xx_interrupt() calls __serial_lpc32xx_rx() first and then
tty_flip_buffer_push() immediately after that. But last statement of
__serial_lpc32xx_rx() already called tty_flip_buffer_push()..
So, probably its not required to be called twice. Lets remove one of them.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:13 +0000 (20:14 +0530)]
tty: serial: icom: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:12 +0000 (20:14 +0530)]
tty: serial: efm32: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:11 +0000 (20:14 +0530)]
tty: serial: bfin_sport: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:10 +0000 (20:14 +0530)]
tty: serial: bcm63xx: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:09 +0000 (20:14 +0530)]
tty: serial: arc: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:08 +0000 (20:14 +0530)]
tty: serial: ar933x: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:07 +0000 (20:14 +0530)]
tty: serial: apbuart: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:06 +0000 (20:14 +0530)]
tty: serial: altera: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Cc: Tobias Klauser <tklauser@distanz.ch>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Viresh Kumar [Mon, 19 Aug 2013 14:44:05 +0000 (20:14 +0530)]
tty: serial: altera_jtag: drop uart_port->lock before calling tty_flip_buffer_push()
The current driver triggers a lockdep warning for if tty_flip_buffer_push() is
called with uart_port->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):
-----
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8)
[<
c01b59ac>] (do_raw_spin_unlock+0xc4/0xd8) from [<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0)
[<
c03627e4>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<
c020a1a8>] (s3c24xx_serial_rx_chars+0)
[<
c020a1a8>] (s3c24xx_serial_rx_chars+0x12c/0x260) from [<
c020aae8>] (s3c64xx_serial_handle_irq+)
[<
c020aae8>] (s3c64xx_serial_handle_irq+0x48/0x60) from [<
c006aaa0>] (handle_irq_event_percpu+0x)
[<
c006aaa0>] (handle_irq_event_percpu+0x50/0x194) from [<
c006ac20>] (handle_irq_event+0x3c/0x5c)
[<
c006ac20>] (handle_irq_event+0x3c/0x5c) from [<
c006d864>] (handle_fasteoi_irq+0x80/0x13c)
[<
c006d864>] (handle_fasteoi_irq+0x80/0x13c) from [<
c006a4a4>] (generic_handle_irq+0x20/0x30)
[<
c006a4a4>] (generic_handle_irq+0x20/0x30) from [<
c000f454>] (handle_IRQ+0x38/0x94)
[<
c000f454>] (handle_IRQ+0x38/0x94) from [<
c0008538>] (gic_handle_irq+0x34/0x68)
[<
c0008538>] (gic_handle_irq+0x34/0x68) from [<
c00123c0>] (__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
[<
c00123c0>] (__irq_svc+0x40/0x70) from [<
c000f75c>] (arch_cpu_idle+0x28/0x30)
[<
c000f75c>] (arch_cpu_idle+0x28/0x30) from [<
c0054888>] (cpu_startup_entry+0x5c/0x148)
[<
c0054888>] (cpu_startup_entry+0x5c/0x148) from [<
c0497aa4>] (start_kernel+0x334/0x38c)
BUG: spinlock lockup suspected on CPU#0, kworker/0:1/360
lock: s3c24xx_serial_ports+0x1d8/0x370, .magic:
dead4ead, .owner: <none>/-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
[<
c0014d58>] (unwind_backtrace+0x0/0xf8) from [<
c0011908>] (show_stack+0x10/0x14)
[<
c0011908>] (show_stack+0x10/0x14) from [<
c035da34>] (dump_stack+0x6c/0xac)
[<
c035da34>] (dump_stack+0x6c/0xac) from [<
c01b581c>] (do_raw_spin_lock+0x100/0x17c)
[<
c01b581c>] (do_raw_spin_lock+0x100/0x17c) from [<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28)
[<
c03628a0>] (_raw_spin_lock_irqsave+0x20/0x28) from [<
c0203224>] (uart_start+0x18/0x34)
[<
c0203224>] (uart_start+0x18/0x34) from [<
c01ef890>] (__receive_buf+0x4b4/0x738)
[<
c01ef890>] (__receive_buf+0x4b4/0x738) from [<
c01efb44>] (n_tty_receive_buf2+0x30/0x98)
[<
c01efb44>] (n_tty_receive_buf2+0x30/0x98) from [<
c01f2ba8>] (flush_to_ldisc+0xec/0x138)
[<
c01f2ba8>] (flush_to_ldisc+0xec/0x138) from [<
c0031af0>] (process_one_work+0xfc/0x348)
[<
c0031af0>] (process_one_work+0xfc/0x348) from [<
c0032138>] (worker_thread+0x138/0x37c)
[<
c0032138>] (worker_thread+0x138/0x37c) from [<
c0037a7c>] (kthread+0xa4/0xb0)
[<
c0037a7c>] (kthread+0xa4/0xb0) from [<
c000e5f8>] (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 <tglx@linutronix.de>
Date: Tue May 29 21:53:50 2007 +0100
[ARM] 4417/1: Serial: Fix AMBA drivers locking
Cc: Tobias Klauser <tklauser@distanz.ch>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Greg Kroah-Hartman [Tue, 27 Aug 2013 23:02:18 +0000 (16:02 -0700)]
Revert "OMAP: UART: Keep the TX fifo full when possible"
This reverts commit
c4415084218c68c5ee2fc583431e89a78d896b19.
Kevin writes:
Hmm, another OMAP serial patch that wasn't Cc'd to linux-omap
where OMAP users might have seen it. :(
I just bisected a strange problem in linux-next on OMAP3 down to
this patch. Reverting it fixes the problem.
On OMAP3530 Beagle and Overo, after boot, doing a 'cat
/proc/cpuinfo' was not returning to a prompt, suggesting
something strange with the FIFO. Hitting return gets me back to
a prompt.
Greg, this one should also be dropped from tty-next until it can
be further investgated and the problem solved.
Reported-by: Kevin Hilman <khilman@linaro.org>
Cc: Dmitry Fink <finik@ti.com>
Cc: Alexander Savchenko <oleksandr.savchenko@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Greg Kroah-Hartman [Tue, 27 Aug 2013 22:59:53 +0000 (15:59 -0700)]
Revert "serial: omap: Fix IRQ handling return value"
This reverts commit
908fd7e566b4c12e36e4487d2d5946de5e5ea30f.
Kevin writes:
Greg, without a better justification in the changelog, I think
this patch should be dropped from tty-next.
Reported-by: Kevin Hilman <khilman@linaro.org>
Cc: Ruchika Kharwar <ruchika@ti.com>
Cc: Alexander Savchenko <oleksandr.savchenko@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Qipan Li [Mon, 19 Aug 2013 03:47:53 +0000 (11:47 +0800)]
serial: sirf: add DMA support using dmaengine APIs
if we get the valid dma channels from dts, move to use dmaengine to do
rx/tx. because the dma hardware requires dma address and length to be
4bytes aligned, in this driver, we will still use PIO for non-aligned
bytes, and use dma for aligned bytes.
for rx, to keep the dmaengine always active, we use double-buffer, so
we issue two dma_desc at first, and maintain the status of both
1. dma transfer done: update in rx dma finish callback
2. dma buffer is inserted into tty: update in rx dma finish tasklet and
rx timeout tasklet
so we re-issue the dma_desc only if both 1&2 are finished.
for tx, as we know the actual length for every transfer, we don't need
the above double buffering.
Signed-off-by: Qipan Li <Qipan.Li@csr.com>
Signed-off-by: Barry Song <Baohua.Song@csr.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Qipan Li [Mon, 19 Aug 2013 03:47:52 +0000 (11:47 +0800)]
serial: sirf: fix the namespace of startup_uart entry
startup_uart_controller() loses namespace, this patch
drops the function directly and move the content into
sirfsoc_uart_startup().
Signed-off-by: Qipan Li <Qipan.Li@csr.com>
Signed-off-by: Barry Song <Baohua.Song@csr.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Qipan Li [Mon, 19 Aug 2013 03:47:51 +0000 (11:47 +0800)]
serial: sirf: fix the typo for rts/cts gpio
fix the typo in commit
2eb5618de87927e54 which uses two
gpios for rts/cts.
Signed-off-by: Qipan Li <Qipan.Li@csr.com>
Signed-off-by: Barry Song <Baohua.Song@csr.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Julia Lawall [Mon, 19 Aug 2013 11:20:36 +0000 (13:20 +0200)]
serial: st-asc: replace devm_request_and_ioremap by devm_ioremap_resource
Use devm_ioremap_resource instead of devm_request_and_ioremap.
This was done using the semantic patch
scripts/coccinelle/api/devm_ioremap_resource.cocci
and various manual modifications to move associated calls to
platform_get_resource closer to the resulting call to devm_ioremap_resource
and to remove the associated error handling code.
The initialization of port->mapbase is also moved lower, to take advantage
of the NULL test on res performed by devm_ioremap_resource.
Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Tim Kryger [Fri, 16 Aug 2013 20:50:15 +0000 (13:50 -0700)]
serial: 8250_dw: Report CTS asserted for auto flow
When a serial port is configured for RTS/CTS flow control, serial core
will disable the transmitter if it observes CTS is de-asserted. This is
perfectly reasonable and appropriate when the UART lacks the ability to
automatically perform CTS flow control.
However, if the UART hardware can manage flow control automatically, it
is important that software not get involved. When the DesignWare UART
enables 16C750 style auto-RTS/CTS it stops generating interrupts for
changes in CTS state so software mostly stays out of the way. However,
it does report the true state of CTS in the MSR so software may notice
it is de-asserted and respond by improperly disabling the transmitter.
Once this happens the transmitter will be blocked forever.
To avoid this situation, we simply lie to the 8250 and serial core by
reporting that CTS is asserted whenever auto-RTS/CTS mode is enabled.
Signed-off-by: Tim Kryger <tim.kryger@linaro.org>
Reviewed-by: Matt Porter <matt.porter@linaro.org>
Reviewed-by: Markus Mayer <markus.mayer@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Mark Jackson [Thu, 15 Aug 2013 07:53:44 +0000 (08:53 +0100)]
OMAP: serial: Remove incorrect disabling of IER interrupt
The recent patch to add RS485 contained a bug whereby the IER
interrupt was cleared down incorrectly.
This patch fixes the problem.
Signed-off-by: Mark Jackson <mpfj@newflow.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Luis Henriques [Wed, 14 Aug 2013 22:18:37 +0000 (23:18 +0100)]
serial: pch_uart: fix compilation warning
Function wait_for_xmitr is invoked only on functions that either depend
on CONFIG_CONSOLE_POLL or CONFIG_SERIAL_PCH_UART_CONSOLE.
This patch fixes the following warning:
drivers/tty/serial/pch_uart.c:1504:13: warning: ‘wait_for_xmitr’ defined but not used [-Wunused-function]
Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Qipan Li [Wed, 14 Aug 2013 22:52:16 +0000 (06:52 +0800)]
serial: sirf: add DT-binding document to describle detailed properties
we defined some special properties for hardware flow control, document them
for DT-binding.
Signed-off-by: Qipan Li <Qipan.Li@csr.com>
Signed-off-by: Barry Song <Baohua.Song@csr.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Qipan Li [Wed, 14 Aug 2013 22:52:15 +0000 (06:52 +0800)]
serial: sirf: fix the hardware-flow-ctrl for USP-based UART
for USP-based UART, we use two gpios as RTS and CST pins.
Signed-off-by: Qipan Li <Qipan.Li@csr.com>
Signed-off-by: Barry Song <Baohua.Song@csr.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Barry Song [Wed, 14 Aug 2013 22:52:14 +0000 (06:52 +0800)]
serial: sirf: drop redundant pinctrl_get_select_default as pinctrl core does it
pinctrl core will get default pinmux, so drop it in the sirfsoc serial driver.
Cc: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Barry Song <Baohua.Song@csr.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Mark Jackson [Wed, 14 Aug 2013 10:29:38 +0000 (11:29 +0100)]
OMAP: add RS485 support
This patch adds RS485 support to the OMAP serial driver, as
defined in:-
Documentation/devicetree/bindings/serial/rs485.txt
When a UART transmitter is connected to (eg) a RS485 driver, it is
necessary to turn the driver on/off as quickly as possible. This is
best achieved in the serial driver itself (rather than in userspace
where the latency can be quite large).
This patch allows a GPIO pin to be defined (via DT) that controls
the enabling of the driver at the start of a message, and disables
the driver when the message has been completed.
When RS485 is disabled, the RTS pin is set to on.
Signed-off-by: Mark Jackson <mpfj@newflow.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Julia Lawall [Wed, 14 Aug 2013 09:11:22 +0000 (11:11 +0200)]
tty: ar933x_uart: simplify use of devm_ioremap_resource
Remove unneeded error handling on the result of a call to
platform_get_resource when the value is passed to devm_ioremap_resource.
Move the call to platform_get_resource adjacent to the call to
devm_ioremap_resource to make the connection between them more clear.
A simplified version of the semantic patch that makes this change is as
follows: (http://coccinelle.lip6.fr/)
// <smpl>
@@
expression pdev,res,n,e,e1;
expression ret != 0;
identifier l;
@@
- res = platform_get_resource(pdev, IORESOURCE_MEM, n);
... when != res
- if (res == NULL) { ... \(goto l;\|return ret;\) }
... when != res
+ res = platform_get_resource(pdev, IORESOURCE_MEM, n);
e = devm_ioremap_resource(e1, res);
// </smpl>
Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Fabio Estevam [Fri, 9 Aug 2013 20:58:51 +0000 (17:58 -0300)]
serial: amba-pl011: Use __releases/__acquires annotations
Fix the following sparse warnings:
drivers/tty/serial/amba-pl011.c:687:20: warning: context imbalance in 'pl011_dma_flush_buffer' - unexpected unlock
drivers/tty/serial/amba-pl011.c:1200:13: warning: context imbalance in 'pl011_rx_chars' - unexpected unlock
Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
John Crispin [Fri, 9 Aug 2013 18:54:31 +0000 (20:54 +0200)]
serial: MIPS: lantiq: fix clock error check
The clock should be checked with the proper IS_ERR() api before using it.
Signed-off-by: John Crispin <blogic@openwrt.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Thomas Langer [Fri, 9 Aug 2013 18:54:30 +0000 (20:54 +0200)]
serial: MIPS: lantiq: add clk_enable() call to driver
Enable the clock if one is present when setting up the console.
Signed-off-by: Thomas Langer <thomas.langer@lantiq.com>
Acked-by: John Crispin <blogic@openwrt.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Sachin Kamat [Thu, 8 Aug 2013 11:40:51 +0000 (17:10 +0530)]
serial: bfin_uart: Fix incorrect placement of __initdata
__initdata should be placed between the variable name and equal
sign for the variable to be placed in the intended section.
Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Sachin Kamat [Thu, 8 Aug 2013 11:40:50 +0000 (17:10 +0530)]
serial: bfin_sport_uart: Fix incorrect placement of __initdata
__initdata should be placed between the variable name and equal
sign for the variable to be placed in the intended section.
Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
Acked-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Jingoo Han [Thu, 8 Aug 2013 08:40:55 +0000 (17:40 +0900)]
serial: tegra: use NULL instead of 0
'cons' is a pointer; thus NULL should be used instead of 0.
Also, local symbols are staticized.
Fix the following sparse warnings:
drivers/tty/serial/serial-tegra.c:1209:27: warning: Using plain integer as NULL pointer
drivers/tty/serial/serial-tegra.c:1240:29: warning: symbol 'tegra20_uart_chip_data' was not declared. Should it be static?
drivers/tty/serial/serial-tegra.c:1246:29: warning: symbol 'tegra30_uart_chip_data' was not declared. Should it be static?
Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Jingoo Han [Thu, 8 Aug 2013 08:38:20 +0000 (17:38 +0900)]
serial: msm_serial: fix comparison of different types
Fix the following sparse warning:
drivers/tty/serial/msm_serial.c:237:37: error: incompatible types in comparison expression (different type sizes)
Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Jingoo Han [Thu, 8 Aug 2013 08:36:27 +0000 (17:36 +0900)]
serial: ioc4_serial: Staticize ioc4_serial_attach_one()
ioc4_serial_attach_one() is used only in this file.
Also, ioc4_serial is not used; it can be removed.
Fix the following sparse warnings:
drivers/tty/serial/ioc4_serial.c:300:3: warning: symbol 'ioc4_serial' was not declared. Should it be static?
drivers/tty/serial/ioc4_serial.c:2771:1: warning: symbol 'ioc4_serial_attach_one' was not declared. Should it be static?
Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Acked-by: Patrick Gefre <pfg@sgi.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Jingoo Han [Thu, 8 Aug 2013 08:34:03 +0000 (17:34 +0900)]
serial: icom: fix casting warning
icom_port->uart_port.membase is (unsigned char __iomem *); thus,
casting (unsigned char __iomem *) is necessary to fix the
following warning. Also, local symbols are staticized.
drivers/tty/serial/icom.c:108:26: warning: symbol 'start_proc' was not declared. Should it be static?
drivers/tty/serial/icom.c:116:26: warning: symbol 'stop_proc' was not declared. Should it be static?
drivers/tty/serial/icom.c:123:25: warning: symbol 'int_mask_tbl' was not declared. Should it be static?
drivers/tty/serial/icom.c:1569:54: warning: incorrect type in assignment (different address spaces)
drivers/tty/serial/icom.c:1569:54: expected unsigned char [noderef] <asn:2>*membase
drivers/tty/serial/icom.c:1569:54: got char *<noident>
drivers/tty/serial/icom.c:1090:9: warning: cast truncates bits from constant value (
ffffff7f becomes 7f)
Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Jingoo Han [Thu, 8 Aug 2013 08:33:27 +0000 (17:33 +0900)]
serial: timbuart: Staticize local symbols
These local symbols are used only in this file.
Fix the following sparse warnings:
drivers/tty/serial/timbuart.c:165:6: warning: symbol 'timbuart_handle_rx_port' was not declared. Should it be static?
drivers/tty/serial/timbuart.c:187:6: warning: symbol 'timbuart_tasklet' was not declared. Should it be static?
Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Jingoo Han [Thu, 8 Aug 2013 08:32:52 +0000 (17:32 +0900)]
serial: mrst_max3110: fix casting warning
max->port.membase is (unsigned char __iomem *); thus,
casting (unsigned char __iomem *) is necessary to fix
the following warning. Also, serial_m3110_ops() is staticized.
drivers/tty/serial/mrst_max3110.c:716:17: warning: symbol 'serial_m3110_ops' was not declared. Should it be static?
drivers/tty/serial/mrst_max3110.c:847:27: warning: incorrect type in assignment (different address spaces)
drivers/tty/serial/mrst_max3110.c:847:27: expected unsigned char [noderef] <asn:2>*membase
drivers/tty/serial/mrst_max3110.c:847:27: got void *<noident>
Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Jingoo Han [Thu, 8 Aug 2013 08:32:04 +0000 (17:32 +0900)]
serial: 8250_early: fix comparison of different types
Fix the following sparse warning:
drivers/tty/serial/8250/8250_early.c:196:26: error: incompatible types in comparison expression (different type sizes)
Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Jingoo Han [Thu, 8 Aug 2013 08:29:48 +0000 (17:29 +0900)]
serial: samsung: fix casting warning
port->membase is (unsigned char __iomem *), not (unsigned long *)
__set_bit() uses (unsigned long *) as the second argument.
Thus, casting (unsigned long *)(unsigned long) is necessary
to fix the following sparse warnings.
drivers/tty/serial/samsung.c:142:33: warning: cast removes address space of expression
drivers/tty/serial/samsung.c:161:33: warning: cast removes address space of expression
drivers/tty/serial/samsung.c:176:33: warning: cast removes address space of expression
drivers/tty/serial/samsung.c:526:40: warning: cast removes address space of expression
Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Jingoo Han [Thu, 8 Aug 2013 08:41:43 +0000 (17:41 +0900)]
serial: sirf: Staticize local symbols
These local symbols are used only in this file.
Fix the following sparse warnings:
drivers/tty/serial/sirfsoc_uart.c:147:6: warning: symbol 'sirfsoc_uart_start_tx' was not declared. Should it be static?
drivers/tty/serial/sirfsoc_uart.c:636:5: warning: symbol 'sirfsoc_uart_probe' was not declared. Should it be static?
Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Acked-by: Barry Song <Baohua.Song@csr.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Qipan Li [Mon, 12 Aug 2013 10:15:35 +0000 (18:15 +0800)]
serial: sirf: make the driver also support USP-based UART
Universal Serial Ports (USP) can be used as PCM, UART, SPI,
I2S etc. this makes the USP work as UART. the basic work
flow is same with UART controller, the main difference will
be offset of registers and bits.
this patch makes the old sirfsoc uart driver support both
sirf UART and USP-based UART by making their differences
become private data.
Signed-off-by: Qipan Li <Qipan.Li@csr.com>
Signed-off-by: Barry Song <Baohua.Song@csr.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Barry Song [Wed, 7 Aug 2013 05:35:38 +0000 (13:35 +0800)]
serial: sirf: add support for Marco chip
the marco and coming new CSR multiple SoCs have SET/CLR pair for
INTEN registers to avoid some read-modify-write.
this patch adds support for this and make the driver support current
up and coming mp SoCs.
Signed-off-by: Barry Song <Baohua.Song@csr.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Sascha Hauer [Mon, 5 Aug 2013 12:40:45 +0000 (14:40 +0200)]
serial: i.MX: evaluate linux,stdout-path property
devicetrees may have the linux,stdout-path property to specify the
console. This patch adds support to the i.MX serial driver for this.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Sascha Hauer [Mon, 5 Aug 2013 12:40:44 +0000 (14:40 +0200)]
OF: Add helper for matching against linux,stdout-path
devicetrees may have a linux,stdout-path property in the chosen
node describing the console device. This adds a helper function
to match a device against this property so a driver can call
add_preferred_console for a matching device.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Acked-by: Rob Herring <rob.herring@calxeda.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Gabor Juhos [Sat, 10 Aug 2013 07:32:15 +0000 (09:32 +0200)]
tty: ar933x_uart: convert to use devm_* functions
Use devm_* functions in order to simplify cleanup
paths.
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Peter Hurley [Sun, 11 Aug 2013 12:04:23 +0000 (08:04 -0400)]
n_tty: Fix termios_rwsem lockdep false positive
Lockdep reports a circular lock dependency between
atomic_read_lock and termios_rwsem [1]. However, a lock
order deadlock is not possible since CPU1 only holds a
read lock which cannot prevent CPU0 from also acquiring
a read lock on the same r/w semaphore.
Unfortunately, lockdep cannot currently distinguish whether
the locks are read or write for any particular lock graph,
merely that the locks _were_ previously read and/or write.
Until lockdep is fixed, re-order atomic_read_lock so
termios_rwsem can be dropped and reacquired without
triggering lockdep.
Patch based on original posted here https://lkml.org/lkml/2013/8/1/510
by Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
[1] Initial lockdep report from Artem Savkov <artem.savkov@gmail.com>
======================================================
[ INFO: possible circular locking dependency detected ]
3.11.0-rc3-next-
20130730+ #140 Tainted: G W
-------------------------------------------------------
bash/1198 is trying to acquire lock:
(&tty->termios_rwsem){++++..}, at: [<
ffffffff816aa3bb>] n_tty_read+0x49b/0x660
but task is already holding lock:
(&ldata->atomic_read_lock){+.+...}, at: [<
ffffffff816aa0f0>] n_tty_read+0x1d0/0x660
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #1 (&ldata->atomic_read_lock){+.+...}:
[<
ffffffff811111cc>] validate_chain+0x73c/0x850
[<
ffffffff811117e0>] __lock_acquire+0x500/0x5d0
[<
ffffffff81111a29>] lock_acquire+0x179/0x1d0
[<
ffffffff81d34b9c>] mutex_lock_interruptible_nested+0x7c/0x540
[<
ffffffff816aa0f0>] n_tty_read+0x1d0/0x660
[<
ffffffff816a3bb6>] tty_read+0x86/0xf0
[<
ffffffff811f21d3>] vfs_read+0xc3/0x130
[<
ffffffff811f2702>] SyS_read+0x62/0xa0
[<
ffffffff81d45259>] system_call_fastpath+0x16/0x1b
-> #0 (&tty->termios_rwsem){++++..}:
[<
ffffffff8111064f>] check_prev_add+0x14f/0x590
[<
ffffffff811111cc>] validate_chain+0x73c/0x850
[<
ffffffff811117e0>] __lock_acquire+0x500/0x5d0
[<
ffffffff81111a29>] lock_acquire+0x179/0x1d0
[<
ffffffff81d372c1>] down_read+0x51/0xa0
[<
ffffffff816aa3bb>] n_tty_read+0x49b/0x660
[<
ffffffff816a3bb6>] tty_read+0x86/0xf0
[<
ffffffff811f21d3>] vfs_read+0xc3/0x130
[<
ffffffff811f2702>] SyS_read+0x62/0xa0
[<
ffffffff81d45259>] system_call_fastpath+0x16/0x1b
other info that might help us debug this:
Possible unsafe locking scenario:
CPU0 CPU1
---- ----
lock(&ldata->atomic_read_lock);
lock(&tty->termios_rwsem);
lock(&ldata->atomic_read_lock);
lock(&tty->termios_rwsem);
*** DEADLOCK ***
2 locks held by bash/1198:
#0: (&tty->ldisc_sem){.+.+.+}, at: [<
ffffffff816ade04>] tty_ldisc_ref_wait+0x24/0x60
#1: (&ldata->atomic_read_lock){+.+...}, at: [<
ffffffff816aa0f0>] n_tty_read+0x1d0/0x660
stack backtrace:
CPU: 1 PID: 1198 Comm: bash Tainted: G W 3.11.0-rc3-next-
20130730+ #140
Hardware name: Bochs Bochs, BIOS Bochs 01/01/2007
0000000000000000 ffff880019acdb28 ffffffff81d34074 0000000000000002
0000000000000000 ffff880019acdb78 ffffffff8110ed75 ffff880019acdb98
ffff880019fd0000 ffff880019acdb78 ffff880019fd0638 ffff880019fd0670
Call Trace:
[<
ffffffff81d34074>] dump_stack+0x59/0x7d
[<
ffffffff8110ed75>] print_circular_bug+0x105/0x120
[<
ffffffff8111064f>] check_prev_add+0x14f/0x590
[<
ffffffff81d3ab5f>] ? _raw_spin_unlock_irq+0x4f/0x70
[<
ffffffff811111cc>] validate_chain+0x73c/0x850
[<
ffffffff8110ae0f>] ? trace_hardirqs_off_caller+0x1f/0x190
[<
ffffffff811117e0>] __lock_acquire+0x500/0x5d0
[<
ffffffff81111a29>] lock_acquire+0x179/0x1d0
[<
ffffffff816aa3bb>] ? n_tty_read+0x49b/0x660
[<
ffffffff81d372c1>] down_read+0x51/0xa0
[<
ffffffff816aa3bb>] ? n_tty_read+0x49b/0x660
[<
ffffffff816aa3bb>] n_tty_read+0x49b/0x660
[<
ffffffff810e4130>] ? try_to_wake_up+0x210/0x210
[<
ffffffff816a3bb6>] tty_read+0x86/0xf0
[<
ffffffff811f21d3>] vfs_read+0xc3/0x130
[<
ffffffff811f2702>] SyS_read+0x62/0xa0
[<
ffffffff815e24ee>] ? trace_hardirqs_on_thunk+0x3a/0x3f
[<
ffffffff81d45259>] system_call_fastpath+0x16/0x1b
Reported-by: Artem Savkov <artem.savkov@gmail.com>
Reported-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Jingoo Han [Thu, 8 Aug 2013 08:39:51 +0000 (17:39 +0900)]
serial: pxa: Staticize local symbols
These local symbols are used only in this file.
Fix the following sparse warnings:
drivers/tty/serial/pxa.c:793:17: warning: symbol 'serial_pxa_pops' was not declared. Should it be static?
drivers/tty/serial/pxa.c:971:12: warning: symbol 'serial_pxa_init' was not declared. Should it be static?
drivers/tty/serial/pxa.c:986:13: warning: symbol 'serial_pxa_exit' was not declared. Should it be static?
Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Daniel Mack [Wed, 7 Aug 2013 15:33:55 +0000 (17:33 +0200)]
tty: serial: pxa: remove old cruft
This #if-0'd block wouldn't compile, so let's dispose it.
Signed-off-by: Daniel Mack <zonque@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Andreas Bießmann [Fri, 2 Aug 2013 10:23:34 +0000 (12:23 +0200)]
register_console: prevent adding the same console twice
This patch guards the console_drivers list to be corrupted. The
for_each_console() macro insist on a strictly forward list ended by NULL:
con0->next->con1->next->NULL
Without this patch it may happen easily to destroy this list for example by
adding 'earlyprintk' twice, especially on embedded devices where the early
console is often a single static instance. This will result in the following
list:
con0->next->con0
This in turn will result in an endless loop in console_unlock() later on by
printing the first __log_buf line endlessly.
Signed-off-by: Andreas Bießmann <andreas@biessmann.de>
Cc: Kay Sievers <kay@vrfy.org>
Cc: Ben Hutchings <ben@decadent.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Clemens Ladisch [Sun, 4 Aug 2013 11:09:50 +0000 (13:09 +0200)]
vt: make the default color configurable
The virtual console has (undocumented) module parameters to set the
colors for italic and underlined text, but the default text color was
hardcoded for some reason. This made it impossible to change the color
for startup messages, or to set the default for new virtual consoles.
Add a module parameter for that, and document the entire bunch.
Any hacker who thinks that a command prompt on a "black screen with
white font" is not supicious enough can now use the kernel parameter
vt.color=10 to get a nice, evil green.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Huang Shijie [Sat, 3 Aug 2013 14:09:16 +0000 (10:09 -0400)]
ARM: dts: imx28-evk: add the RTS/CTS property for auart0
Add the RTS/CTS property for auart0 which means we enable the
DMA support for it.
Signed-off-by: Huang Shijie <b32955@freescale.com>
Acked-by: Shawn Guo <shawn.guo@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Huang Shijie [Sat, 3 Aug 2013 14:09:15 +0000 (10:09 -0400)]
serial: mxs: remove the MXS_AUART_DMA_CONFIG
The MXS_AUART_DMA_CONFIG is originally used to check if the DT node
is configured with the DMA property.
But now, the MXS_AUART_DMA_CONFIG is set unconditionally in the
serial_mxs_probe_dt(), so the check in the mxs_auart_settermios() is
not necessary anymore. This patch removes this macro.
Signed-off-by: Huang Shijie <shijie8@gmail.com>
Acked-by: Shawn Guo <shawn.guo@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Huang Shijie [Sat, 3 Aug 2013 14:09:14 +0000 (10:09 -0400)]
serial: mxs: enable the DMA only when the RTS/CTS is valid
The original DMA support works only when RTS/CTS is enabled.
(see the "
e800163 serial: mxs-auart: add the DMA support for mx28")
But after several patches, DMA support has lost this limit.
(see the "
bcc20f9 serial: mxs-auart: move to use generic DMA helper")
So an UART without the RTS/CTS lines may also enables the DMA support,
in which case the UART may gets unpredictable results.
This patch adds an optional property for the UART DT node
which indicates the UART has RTS and CTS lines, and it also means you
enable the DMA support for this UART.
This patch also adds a macro MXS_AUART_RTSCTS, and uses it to check
RTS/CTS before we enable the DMA for the UART.
Signed-off-by: Huang Shijie <b32955@freescale.com>
Signed-off-by: Huang Shijie <shijie8@gmail.com>
Acked-by: Shawn Guo <shawn.guo@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Greg Kroah-Hartman [Sun, 4 Aug 2013 21:41:03 +0000 (05:41 +0800)]
Merge 3.11-rc4 into tty-next
We want the tty fixes in here as well.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Linus Torvalds [Sun, 4 Aug 2013 20:46:46 +0000 (13:46 -0700)]
Linux 3.11-rc4
Linus Torvalds [Sun, 4 Aug 2013 18:46:07 +0000 (11:46 -0700)]
Merge branch 'fixes' of git://git.infradead.org/users/vkoul/slave-dma
Pull dmaengine fixes from Vinod Koul:
"Two fixes for slave dmaengine. The first fixes cyclic dma transfers
for pl330 and the second one makes us return the correct error code on
probe"
* 'fixes' of git://git.infradead.org/users/vkoul/slave-dma:
dma: pl330: Fix cyclic transfers
pch_dma: fix error return code in pch_dma_probe()
Linus Torvalds [Sun, 4 Aug 2013 18:44:18 +0000 (11:44 -0700)]
Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux
Pull drm fix from Dave Airlie:
"Just a quick fix that a few people have reported, be nice to have in
asap"
The drm tree seems to be very confused about 64-bit divides. Here it
uses a slow 64-by-64 bit divide to divide by a small constant. Oh well.
Doesn't look performance-critical, just stupid.
* 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
drm/radeon: fix 64 bit divide in SI spm code
Hugh Dickins [Sun, 4 Aug 2013 18:30:25 +0000 (11:30 -0700)]
tmpfs: fix SEEK_DATA/SEEK_HOLE regression
Commit
46a1c2c7ae53 ("vfs: export lseek_execute() to modules") broke the
tmpfs SEEK_DATA/SEEK_HOLE implementation, because vfs_setpos() converts
the carefully prepared -ENXIO to -EINVAL. Other filesystems avoid it in
error cases: do the same in tmpfs.
Signed-off-by: Hugh Dickins <hughd@google.com>
Cc: Jie Liu <jeff.liu@oracle.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Linus Torvalds [Sun, 4 Aug 2013 18:00:43 +0000 (11:00 -0700)]
Merge tag 'sound-3.11' of git://git./linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai:
"All small regression or small fixes, nothing surprising at this stage.
- regression fix for intel Mac Mini quirk
- compress ioctl error fix
- ASoC fixes for control change notifications, some UI fixes,
driver-specific fixes (resource leak, build errors, etc)"
* tag 'sound-3.11' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
ALSA: hda - Fix missing fixup for Mac Mini with STAC9221
ASoC: wm0010: Fix resource leak
ASoC: au1x: Fix build
ASoC: bf5xx-ac97: Fix compile error with SND_BF5XX_HAVE_COLD_RESET
ASoC: bfin-ac97: Fix prototype error following AC'97 refactoring
ALSA: compress: fix the return value for SNDRV_COMPRESS_VERSION
ASoC: dapm: Fix return value of snd_soc_dapm_put_{volsw,enum_virt}()
Alex Deucher [Thu, 1 Aug 2013 13:03:29 +0000 (09:03 -0400)]
drm/radeon: fix 64 bit divide in SI spm code
Forgot to use the appropriate math64 function.
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Dave Airlie <airlied@gmail.com>
Linus Torvalds [Sat, 3 Aug 2013 22:00:23 +0000 (15:00 -0700)]
Merge git://git./linux/kernel/git/davem/net
Pull networking fixes from David Miller:
1) Don't ignore user initiated wireless regulatory settings on cards
with custom regulatory domains, from Arik Nemtsov.
2) Fix length check of bluetooth information responses, from Jaganath
Kanakkassery.
3) Fix misuse of PTR_ERR in btusb, from Adam Lee.
4) Handle rfkill properly while iwlwifi devices are offline, from
Emmanuel Grumbach.
5) Fix r815x devices DMA'ing to stack buffers, from Hayes Wang.
6) Kernel info leak in ATM packet scheduler, from Dan Carpenter.
7) 8139cp doesn't check for DMA mapping errors, from Neil Horman.
8) Fix bridge multicast code to not snoop when no querier exists,
otherwise mutlicast traffic is lost. From Linus Lüssing.
9) Avoid soft lockups in fib6_run_gc(), from Michal Kubecek.
10) Fix races in automatic address asignment on ipv6, which can result
in incorrect lifetime assignments. From Jiri Benc.
11) Cure build bustage when CONFIG_NET_LL_RX_POLL is not set and rename
it CONFIG_NET_RX_BUSY_POLL to eliminate the last reference to the
original naming of this feature. From Cong Wang.
12) Fix crash in TIPC when server socket creation fails, from Ying Xue.
13) macvlan_changelink() silently succeeds when it shouldn't, from
Michael S Tsirkin.
14) HTB packet scheduler can crash due to sign extension, fix from
Stephen Hemminger.
15) With the cable unplugged, r8169 prints out a message every 10
seconds, make it netif_dbg() instead of netif_warn(). From Peter
Wu.
16) Fix memory leak in rtm_to_ifaddr(), from Daniel Borkmann.
17) sis900 gets spurious TX queue timeouts due to mismanagement of link
carrier state, from Denis Kirjanov.
18) Validate somaxconn sysctl to make sure it fits inside of a u16.
From Roman Gushchin.
19) Fix MAC address filtering on qlcnic, from Shahed Shaikh.
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (68 commits)
qlcnic: Fix for flash update failure on 83xx adapter
qlcnic: Fix link speed and duplex display for 83xx adapter
qlcnic: Fix link speed display for 82xx adapter
qlcnic: Fix external loopback test.
qlcnic: Removed adapter series name from warning messages.
qlcnic: Free up memory in error path.
qlcnic: Fix ingress MAC learning
qlcnic: Fix MAC address filter issue on 82xx adapter
net: ethernet: davinci_emac: drop IRQF_DISABLED
netlabel: use domain based selectors when address based selectors are not available
net: check net.core.somaxconn sysctl values
sis900: Fix the tx queue timeout issue
net: rtm_to_ifaddr: free ifa if ifa_cacheinfo processing fails
r8169: remove "PHY reset until link up" log spam
net: ethernet: cpsw: drop IRQF_DISABLED
htb: fix sign extension bug
macvlan: handle set_promiscuity failures
macvlan: better mode validation
tipc: fix oops when creating server socket fails
net: rename CONFIG_NET_LL_RX_POLL to CONFIG_NET_RX_BUSY_POLL
...
Himanshu Madhani [Sat, 3 Aug 2013 03:16:01 +0000 (23:16 -0400)]
qlcnic: Fix for flash update failure on 83xx adapter
Flash update routine was improperly checking register read API return value.
Modify register read API and perform proper error check.
Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Rajesh Borundia [Sat, 3 Aug 2013 03:16:00 +0000 (23:16 -0400)]
qlcnic: Fix link speed and duplex display for 83xx adapter
o Set link speed and duplex to unknown when link is not up.
Signed-off-by: Rajesh Borundia <rajesh.borundia@qlogic.com>
Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Rajesh Borundia [Sat, 3 Aug 2013 03:15:59 +0000 (23:15 -0400)]
qlcnic: Fix link speed display for 82xx adapter
o Do not obtain link speed from register when adapter
link is down.
Signed-off-by: Rajesh Borundia <rajesh.borundia@qlogic.com>
Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Shahed Shaikh [Sat, 3 Aug 2013 03:15:58 +0000 (23:15 -0400)]
qlcnic: Fix external loopback test.
Driver was not handling external loopback diagnostic
test request.
Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Pratik Pujar [Sat, 3 Aug 2013 03:15:57 +0000 (23:15 -0400)]
qlcnic: Removed adapter series name from warning messages.
Signed-off-by: Pratik Pujar <pratik.pujar@qlogic.com>
Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Himanshu Madhani [Sat, 3 Aug 2013 03:15:56 +0000 (23:15 -0400)]
qlcnic: Free up memory in error path.
Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com>
Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Shahed Shaikh [Sat, 3 Aug 2013 03:15:55 +0000 (23:15 -0400)]
qlcnic: Fix ingress MAC learning
o Delete MAC address from the adapter's filter table
if the source MAC address of ingress packet matches.
Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Shahed Shaikh [Sat, 3 Aug 2013 03:15:54 +0000 (23:15 -0400)]
qlcnic: Fix MAC address filter issue on 82xx adapter
Driver was passing the address of a pointer instead of
the pointer itself.
Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Mugunthan V N [Sat, 3 Aug 2013 11:09:45 +0000 (16:39 +0530)]
net: ethernet: davinci_emac: drop IRQF_DISABLED
IRQF_DISABLED is a no-op by now and should be removed.
Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Linus Torvalds [Sat, 3 Aug 2013 18:15:03 +0000 (11:15 -0700)]
Merge branch 'for-3.11' of git://linux-nfs.org/~bfields/linux
Pull nfsd bugfixes from Bruce Fields:
"Most of this is due to a screwup on my part -- some gss-proxy crashes
got fixed before the merge window but somehow never made it out of a
temporary git repo on my laptop...."
* 'for-3.11' of git://linux-nfs.org/~bfields/linux:
svcrpc: set cr_gss_mech from gss-proxy as well as legacy upcall
svcrpc: fix kfree oops in gss-proxy code
svcrpc: fix gss-proxy xdr decoding oops
svcrpc: fix gss_rpc_upcall create error
NFSD/sunrpc: avoid deadlock on TCP connection due to memory pressure.
Linus Torvalds [Sat, 3 Aug 2013 18:14:25 +0000 (11:14 -0700)]
Merge tag 'hwmon-for-linus' of git://git./linux/kernel/git/groeck/linux-staging
Pull hwmon fix from Guenter Roeck:
"Fix chip initialization/configuration in MAX6697 driver"
* tag 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging:
hwmon: (max6697) fix MAX6581 ideality
Linus Torvalds [Sat, 3 Aug 2013 18:12:09 +0000 (11:12 -0700)]
Merge branch 'fixes' of git://git.linaro.org/people/rmk/linux-arm
Pull arm fixes fixes from Russell King:
"This fixes a couple of problems with commit
48be69a026b2 ("ARM: move
signal handlers into a vdso-like page"), one of which was originally
discovered via my testing originally, but the fix for it was never
actually committed.
The other shows up on noMMU builds, and such platforms are extremely
rare and as such are not part of my nightly testing"
* 'fixes' of git://git.linaro.org/people/rmk/linux-arm:
ARM: fix nommu builds with
48be69a02 (ARM: move signal handlers into a vdso-like page)
ARM: fix a cockup in
48be69a02 (ARM: move signal handlers into a vdso-like page)
Vivien Didelot [Tue, 30 Jul 2013 21:14:34 +0000 (17:14 -0400)]
hwmon: (max6697) fix MAX6581 ideality
Without this patch, the values for ideality (register 0x4b) and ideality
selection mask (register 0x4c) are inverted.
Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Cc: stable@vger.kernel.org # 3.9+
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Russell King [Sat, 3 Aug 2013 09:49:38 +0000 (10:49 +0100)]
Merge branch 'security-fixes' into fixes
Russell King [Sat, 3 Aug 2013 09:39:51 +0000 (10:39 +0100)]
ARM: fix nommu builds with
48be69a02 (ARM: move signal handlers into a vdso-like page)
Olof reports that noMMU builds error out with:
arch/arm/kernel/signal.c: In function 'setup_return':
arch/arm/kernel/signal.c:413:25: error: 'mm_context_t' has no member named 'sigpage'
This shows one of the evilnesses of IS_ENABLED(). Get rid of it here
and replace it with #ifdef's - and as no noMMU platform can make use
of sigpage, depend on CONIFG_MMU not CONFIG_ARM_MPU.
Reported-by: Olof Johansson <olof@lixom.net>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Russell King [Sat, 3 Aug 2013 09:30:05 +0000 (10:30 +0100)]
ARM: fix a cockup in
48be69a02 (ARM: move signal handlers into a vdso-like page)
Unfortunately, I never committed the fix to a nasty oops which can
occur as a result of that commit:
------------[ cut here ]------------
kernel BUG at /home/olof/work/batch/include/linux/mm.h:414!
Internal error: Oops - BUG: 0 [#1] PREEMPT SMP ARM
Modules linked in:
CPU: 0 PID: 490 Comm: killall5 Not tainted
3.11.0-rc3-00288-gabe0308 #53
task:
e90acac0 ti:
e9be8000 task.ti:
e9be8000
PC is at special_mapping_fault+0xa4/0xc4
LR is at __do_fault+0x68/0x48c
This doesn't show up unless you do quite a bit of testing; a simple
boot test does not do this, so all my nightly tests were passing fine.
The reason for this is that install_special_mapping() expects the
page array to stick around, and as this was only inserting one page
which was stored on the kernel stack, that's why this was blowing up.
Reported-by: Olof Johansson <olof@lixom.net>
Tested-by: Olof Johansson <olof@lixom.net>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Srinivas Kandagatla [Fri, 2 Aug 2013 09:23:51 +0000 (10:23 +0100)]
serial: st-asc: Fix unused variable warning for non DT.
This patch fixes a below warning reported by kbuild test robot.
drivers/tty/serial/st-asc.c:727:28: warning: 'asc_match' defined but
not used [-Wunused-variable]
The code used in DT case is now ifdefed under CONFIG_OF to fix this
warning.
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@st.com>
Reported-by: Kbuild Test Robot <fengguang.wu@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Paul Moore [Fri, 2 Aug 2013 18:45:08 +0000 (14:45 -0400)]
netlabel: use domain based selectors when address based selectors are not available
NetLabel has the ability to selectively assign network security labels
to outbound traffic based on either the LSM's "domain" (different for
each LSM), the network destination, or a combination of both. Depending
on the type of traffic, local or forwarded, and the type of traffic
selector, domain or address based, different hooks are used to label the
traffic; the goal being minimal overhead.
Unfortunately, there is a bug such that a system using NetLabel domain
based traffic selectors does not correctly label outbound local traffic
that is not assigned to a socket. The issue is that in these cases
the associated NetLabel hook only looks at the address based selectors
and not the domain based selectors. This patch corrects this by
checking both the domain and address based selectors so that the correct
labeling is applied, regardless of the configuration type.
In order to acomplish this fix, this patch also simplifies some of the
NetLabel domainhash structures to use a more common outbound traffic
mapping type: struct netlbl_dommap_def. This simplifies some of the code
in this patch and paves the way for further simplifications in the
future.
Signed-off-by: Paul Moore <pmoore@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Roman Gushchin [Fri, 2 Aug 2013 14:36:40 +0000 (18:36 +0400)]
net: check net.core.somaxconn sysctl values
It's possible to assign an invalid value to the net.core.somaxconn
sysctl variable, because there is no checks at all.
The sk_max_ack_backlog field of the sock structure is defined as
unsigned short. Therefore, the backlog argument in inet_listen()
shouldn't exceed USHRT_MAX. The backlog argument in the listen() syscall
is truncated to the somaxconn value. So, the somaxconn value shouldn't
exceed 65535 (USHRT_MAX).
Also, negative values of somaxconn are meaningless.
before:
$ sysctl -w net.core.somaxconn=256
net.core.somaxconn = 256
$ sysctl -w net.core.somaxconn=65536
net.core.somaxconn = 65536
$ sysctl -w net.core.somaxconn=-100
net.core.somaxconn = -100
after:
$ sysctl -w net.core.somaxconn=256
net.core.somaxconn = 256
$ sysctl -w net.core.somaxconn=65536
error: "Invalid argument" setting key "net.core.somaxconn"
$ sysctl -w net.core.somaxconn=-100
error: "Invalid argument" setting key "net.core.somaxconn"
Based on a prior patch from Changli Gao.
Signed-off-by: Roman Gushchin <klamm@yandex-team.ru>
Reported-by: Changli Gao <xiaosuo@gmail.com>
Suggested-by: Eric Dumazet <edumazet@google.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Denis Kirjanov [Fri, 2 Aug 2013 09:50:54 +0000 (13:50 +0400)]
sis900: Fix the tx queue timeout issue
[ 198.720048] ------------[ cut here ]------------
[ 198.720108] WARNING: CPU: 0 PID: 0 at net/sched/sch_generic.c:255 dev_watchdog+0x229/0x240()
[ 198.720118] NETDEV WATCHDOG: eth0 (sis900): transmit queue 0 timed out
[ 198.720125] Modules linked in: bridge stp llc dmfe sundance 3c59x sis900 mii
[ 198.720159] CPU: 0 PID: 0 Comm: swapper Not tainted 3.11.0-rc3+ #12
[ 198.720167] Hardware name: System Manufacturer System Name/TUSI-M, BIOS ASUS TUSI-M ACPI BIOS
Revision 1013 Beta 001 12/14/2001
[ 198.720175]
000000ff c13fa6b9 c169ddcc c12208d6 c169ddf8 c1031e4d c1664a84 c169de24
[ 198.720197]
00000000 c165f5ea 000000ff c13fa6b9 00000001 000000ff c1664a84 c169de10
[ 198.720217]
c1031f13 00000009 c169de08 c1664a84 c169de24 c169de50 c13fa6b9 c165f5ea
[ 198.720240] Call Trace:
[ 198.720257] [<
c13fa6b9>] ? dev_watchdog+0x229/0x240
[ 198.720274] [<
c12208d6>] dump_stack+0x16/0x20
[ 198.720306] [<
c1031e4d>] warn_slowpath_common+0x7d/0xa0
[ 198.720318] [<
c13fa6b9>] ? dev_watchdog+0x229/0x240
[ 198.720330] [<
c1031f13>] warn_slowpath_fmt+0x33/0x40
[ 198.720342] [<
c13fa6b9>] dev_watchdog+0x229/0x240
[ 198.720357] [<
c103f158>] call_timer_fn+0x78/0x150
[ 198.720369] [<
c103f0e0>] ? internal_add_timer+0x40/0x40
[ 198.720381] [<
c13fa490>] ? dev_init_scheduler+0xa0/0xa0
[ 198.720392] [<
c103f33f>] run_timer_softirq+0x10f/0x200
[ 198.720412] [<
c103954f>] ? __do_softirq+0x6f/0x210
[ 198.720424] [<
c13fa490>] ? dev_init_scheduler+0xa0/0xa0
[ 198.720435] [<
c1039598>] __do_softirq+0xb8/0x210
[ 198.720467] [<
c14b54d2>] ? _raw_spin_unlock+0x22/0x30
[ 198.720484] [<
c1003245>] ? handle_irq+0x25/0xd0
[ 198.720496] [<
c1039c0c>] irq_exit+0x9c/0xb0
[ 198.720508] [<
c14bc9d7>] do_IRQ+0x47/0x94
[ 198.720534] [<
c1056078>] ? hrtimer_start+0x28/0x30
[ 198.720564] [<
c14bc8b1>] common_interrupt+0x31/0x38
[ 198.720589] [<
c1008692>] ? default_idle+0x22/0xa0
[ 198.720600] [<
c10083c7>] arch_cpu_idle+0x17/0x30
[ 198.720631] [<
c106d23d>] cpu_startup_entry+0xcd/0x180
[ 198.720643] [<
c14ae30a>] rest_init+0xaa/0xb0
[ 198.720654] [<
c14ae260>] ? reciprocal_value+0x50/0x50
[ 198.720668] [<
c17044e0>] ? repair_env_string+0x60/0x60
[ 198.720679] [<
c1704bda>] start_kernel+0x29a/0x350
[ 198.720690] [<
c17044e0>] ? repair_env_string+0x60/0x60
[ 198.720721] [<
c1704269>] i386_start_kernel+0x39/0xa0
[ 198.720729] ---[ end trace
81e0a6266f5c73a8 ]---
[ 198.720740] eth0: Transmit timeout, status
00000204 00000000
timer routine checks the link status and if it's up calls
netif_carrier_on() allowing upper layer to start the tx queue
even if the auto-negotiation process is not finished.
Also remove ugly auto-negotiation check from the sis900_start_xmit()
CC: Duan Fugang <B38611@freescale.com>
CC: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: Denis Kirjanov <kda@linux-powerpc.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Linus Torvalds [Fri, 2 Aug 2013 21:58:30 +0000 (14:58 -0700)]
Merge tag 'rdma-for-linus' of git://git./linux/kernel/git/roland/infiniband
Pull infiniband/rdma fixes from Roland Dreier:
- Fixes for the newly merged mlx5 hardware driver
- Stack info leak fixes from Dan Carpenter
- Fixes for pkey table handling with SR-IOV
- A few other small things
* tag 'rdma-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband:
IPoIB: Fix pkey change flow for virtualization environments
IPoIB: Make sure child devices use valid/proper pkeys
IB/core: Create QP1 using the pkey index which contains the default pkey
mlx5_core: Variable may be used uninitialized
mlx5_core: Implement new initialization sequence
mlx5_core: Fix use after free in mlx5_cmd_comp_handler()
IB/mlx5: Fix stack info leak in mlx5_ib_alloc_ucontext()
IB/mlx5: Fix error return code in init_one()
IB/mlx4: Use default pkey when creating tunnel QPs
RDMA/cma: Only call cma_save_ib_info() for CM REQs
RDMA/cma: Fix accessing invalid private data for UD
RDMA/cma: Fix gcc warning
Revert "RDMA/nes: Fix compilation error when nes_debug is enabled"
IB/qib: Add err_decode() call for ring dump
RDMA/cxgb3: Fix stack info leak in iwch_create_cq()
RDMA/nes: Fix info leaks in nes_create_qp() and nes_create_cq()
RDMA/ocrdma: Fix several stack info leaks
RDMA/cxgb4: Fix stack info leak in c4iw_create_qp()
RDMA/ocrdma: Remove unused include
Linus Torvalds [Fri, 2 Aug 2013 21:57:24 +0000 (14:57 -0700)]
Merge tag 'gpio-for-v3.11-3' of git://git./linux/kernel/git/linusw/linux-gpio
Pull GPIO fixes from Linus Walleij:
"Yet another GPIO pull request, fixing the fix from the last one. It
turns out that fixing the boot path for device tree boots on OMAP
breaks out antique systems (such as OMAP1) and we need to find a
better way. So we're reverting that "fix" for the moment and thinking
about something better.
Also fixing a build issue on the MSM driver"
* tag 'gpio-for-v3.11-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio:
gpio_msm: Fix build error due to missing err.h
Revert "gpio/omap: don't create an IRQ mapping for every GPIO on DT"
Revert "gpio/omap: auto request GPIO as input if used as IRQ via DT"
Revert "gpio/omap: fix build error when OF_GPIO is not defined."
Daniel Borkmann [Fri, 2 Aug 2013 09:32:43 +0000 (11:32 +0200)]
net: rtm_to_ifaddr: free ifa if ifa_cacheinfo processing fails
Commit
5c766d642 ("ipv4: introduce address lifetime") leaves the ifa
resource that was allocated via inet_alloc_ifa() unfreed when returning
the function with -EINVAL. Thus, free it first via inet_free_ifa().
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
Reviewed-by: Jiri Pirko <jiri@resnulli.us>
Signed-off-by: David S. Miller <davem@davemloft.net>
Lekensteyn [Fri, 2 Aug 2013 08:36:55 +0000 (10:36 +0200)]
r8169: remove "PHY reset until link up" log spam
This message was added in commit
a7154cb8 (June 2004, [PATCH] r8169:
link handling and phy reset rework) and is printed every ten seconds
when no cable is connected and runtime power management is disabled.
(Before that commit, "Reset RTL8169s PHY" would be printed instead.)
Signed-off-by: Peter Wu <lekensteyn@gmail.com>
Acked-by: Francois Romieu <romieu@fr.zoreil.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Felipe Balbi [Fri, 2 Aug 2013 07:44:10 +0000 (10:44 +0300)]
net: ethernet: cpsw: drop IRQF_DISABLED
IRQF_DISABLED is a no-op by now and should be
removed.
Signed-off-by: Felipe Balbi <balbi@ti.com>
Acked-by: Mugunthan V N <mugunthanvnm@ti.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
stephen hemminger [Fri, 2 Aug 2013 05:32:07 +0000 (22:32 -0700)]
htb: fix sign extension bug
When userspace passes a large priority value
the assignment of the unsigned value hopt->prio
to signed int cl->prio causes cl->prio to become negative and the
comparison is with TC_HTB_NUMPRIO is always false.
The result is that HTB crashes by referencing outside
the array when processing packets. With this patch the large value
wraps around like other values outside the normal range.
See: https://bugzilla.kernel.org/show_bug.cgi?id=60669
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Linus Torvalds [Fri, 2 Aug 2013 21:39:49 +0000 (14:39 -0700)]
Merge branch 'merge' of git://git./linux/kernel/git/benh/powerpc
Pull powerpc fixes from Ben Herrenschmidt:
"Here is not quite a handful of powerpc fixes for rc3.
The windfarm fix is a regression fix (though not a new one), the PMU
interrupt rename is not a fix per-se but has been submitted a long
time ago and I kept forgetting to put it in (it puts us back in sync
with x86), the other perf bit is just about putting an API/ABI bit
definition in the right place for userspace to consume, and finally,
we have a fix for the VPHN (Virtual Partition Home Node) feature
(notification that the hypervisor is moving nodes around) which could
cause lockups so we may as well fix it now"
* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc:
powerpc/windfarm: Fix noisy slots-fan on Xserve (rm31)
powerpc: VPHN topology change updates all siblings
powerpc/perf: Export PERF_EVENT_CONFIG_EBB_SHIFT to userspace
powerpc: Rename PMU interrupts from CNT to PMI
Linus Torvalds [Fri, 2 Aug 2013 21:37:45 +0000 (14:37 -0700)]
Merge branch 'fixes' of git://git.linaro.org/people/rmk/linux-arm
Pull ARM fixes from Russell King:
"I've thought long and hard about what to say for this pull request,
and I really can't work out anything sane to say to summarise much of
these commits. The problem is, for most of these are, yet again, lots
of small bits scattered around the place without any real overall
theme to them"
Most notable is probably the kuser page helper improvements.
* 'fixes' of git://git.linaro.org/people/rmk/linux-arm: (22 commits)
ARM: Add .text annotations where required after __CPUINIT removal
ARM: 7803/1: Fix deadlock scenario with smp_send_stop()
ARM: make vectors page inaccessible from userspace
ARM: move signal handlers into a vdso-like page
ARM: allow kuser helpers to be removed from the vector page
ARM: update FIQ support for relocation of vectors
ARM: use linker magic for vectors and vector stubs
ARM: move vector stubs
ARM: poison memory between kuser helpers
ARM: poison the vectors page
ARM: 7801/1: v6: prevent gcc 4.5 from reordering extended CP15 reads above is_smp() test
ARM: 7800/1: ARMv7-M: Fix name of NVIC handler function
ARM: Fix sorting of machine- initializers
ARM: 7791/1: a.out: remove partial a.out support
ARM: 7790/1: Fix deferred mm switch on VIVT processors
ARM: 7789/1: Do not run dummy_flush_tlb_a15_erratum() on non-Cortex-A15
ARM: 7787/1: virt: ensure visibility of __boot_cpu_mode
ARM: 7788/1: elf: fix lpae hwcap feature reporting in proc/cpuinfo
ARM: 7786/1: hyp: fix macro parameterisation
ARM: 7785/1: mm: restrict early_alloc to section-aligned memory
...