<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel/drivers/net/slip/slip.h, branch linux-4.3.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.</subtitle>
<id>https://universe.0xinfinity.dev/distro/kernel/atom?h=linux-4.3.y</id>
<link rel='self' href='https://universe.0xinfinity.dev/distro/kernel/atom?h=linux-4.3.y'/>
<link rel='alternate' type='text/html' href='https://universe.0xinfinity.dev/distro/kernel/'/>
<updated>2014-06-17T04:29:12Z</updated>
<entry>
<title>slip: Fix deadlock in write_wakeup</title>
<updated>2014-06-17T04:29:12Z</updated>
<author>
<name>Tyler Hall</name>
<email>tylerwhall@gmail.com</email>
</author>
<published>2014-06-16T02:23:16Z</published>
<link rel='alternate' type='text/html' href='https://universe.0xinfinity.dev/distro/kernel/commit/?id=661f7fda21b15ec52f57fcd397c03370acc28688'/>
<id>urn:sha1:661f7fda21b15ec52f57fcd397c03370acc28688</id>
<content type='text'>
Use schedule_work() to avoid potentially taking the spinlock in
interrupt context.

Commit cc9fa74e2a ("slip/slcan: added locking in wakeup function") added
necessary locking to the wakeup function and 367525c8c2/ddcde142be ("can:
slcan: Fix spinlock variant") converted it to spin_lock_bh() because the lock
is also taken in timers.

Disabling softirqs is not sufficient, however, as tty drivers may call
write_wakeup from interrupt context. This driver calls tty-&gt;ops-&gt;write() with
its spinlock held, which may immediately cause an interrupt on the same CPU and
subsequent spin_bug().

Simply converting to spin_lock_irq/irqsave() prevents this deadlock, but
causes lockdep to point out a possible circular locking dependency
between these locks:

(&amp;(&amp;sl-&gt;lock)-&gt;rlock){-.....}, at: slip_write_wakeup
(&amp;port_lock_key){-.....}, at: serial8250_handle_irq.part.13

The slip transmit is holding the slip spinlock when calling the tty write.
This grabs the port lock. On an interrupt, the handler grabs the port
lock and calls write_wakeup which grabs the slip lock. This could be a
problem if a serial interrupt occurs on another CPU during the slip
transmit.

To deal with these issues, don't grab the lock in the wakeup function by
deferring the writeout to a workqueue. Also hold the lock during close
when de-assigning the tty pointer to safely disarm the worker and
timers.

This bug is easily reproducible on the first transmit when slip is
used with the standard 8250 serial driver.

[&lt;c0410b7c&gt;] (spin_bug+0x0/0x38) from [&lt;c006109c&gt;] (do_raw_spin_lock+0x60/0x1d0)
 r5:eab27000 r4:ec02754c
[&lt;c006103c&gt;] (do_raw_spin_lock+0x0/0x1d0) from [&lt;c04185c0&gt;] (_raw_spin_lock+0x28/0x2c)
 r10:0000001f r9:eabb814c r8:eabb8140 r7:40070193 r6:ec02754c r5:eab27000
 r4:ec02754c r3:00000000
[&lt;c0418598&gt;] (_raw_spin_lock+0x0/0x2c) from [&lt;bf3a0220&gt;] (slip_write_wakeup+0x50/0xe0 [slip])
 r4:ec027540 r3:00000003
[&lt;bf3a01d0&gt;] (slip_write_wakeup+0x0/0xe0 [slip]) from [&lt;c026e420&gt;] (tty_wakeup+0x48/0x68)
 r6:00000000 r5:ea80c480 r4:eab27000 r3:bf3a01d0
[&lt;c026e3d8&gt;] (tty_wakeup+0x0/0x68) from [&lt;c028a8ec&gt;] (uart_write_wakeup+0x2c/0x30)
 r5:ed68ea90 r4:c06790d8
[&lt;c028a8c0&gt;] (uart_write_wakeup+0x0/0x30) from [&lt;c028dc44&gt;] (serial8250_tx_chars+0x114/0x170)
[&lt;c028db30&gt;] (serial8250_tx_chars+0x0/0x170) from [&lt;c028dffc&gt;] (serial8250_handle_irq+0xa0/0xbc)
 r6:000000c2 r5:00000060 r4:c06790d8 r3:00000000
[&lt;c028df5c&gt;] (serial8250_handle_irq+0x0/0xbc) from [&lt;c02933a4&gt;] (dw8250_handle_irq+0x38/0x64)
 r7:00000000 r6:edd2f390 r5:000000c2 r4:c06790d8
[&lt;c029336c&gt;] (dw8250_handle_irq+0x0/0x64) from [&lt;c028d2f4&gt;] (serial8250_interrupt+0x44/0xc4)
 r6:00000000 r5:00000000 r4:c06791c4 r3:c029336c
[&lt;c028d2b0&gt;] (serial8250_interrupt+0x0/0xc4) from [&lt;c0067fe4&gt;] (handle_irq_event_percpu+0xb4/0x2b0)
 r10:c06790d8 r9:eab27000 r8:00000000 r7:00000000 r6:0000001f r5:edd52980
 r4:ec53b6c0 r3:c028d2b0
[&lt;c0067f30&gt;] (handle_irq_event_percpu+0x0/0x2b0) from [&lt;c006822c&gt;] (handle_irq_event+0x4c/0x6c)
 r10:c06790d8 r9:eab27000 r8:c0673ae0 r7:c05c2020 r6:ec53b6c0 r5:edd529d4
 r4:edd52980
[&lt;c00681e0&gt;] (handle_irq_event+0x0/0x6c) from [&lt;c006b140&gt;] (handle_level_irq+0xe8/0x100)
 r6:00000000 r5:edd529d4 r4:edd52980 r3:00022000
[&lt;c006b058&gt;] (handle_level_irq+0x0/0x100) from [&lt;c00676f8&gt;] (generic_handle_irq+0x30/0x40)
 r5:0000001f r4:0000001f
[&lt;c00676c8&gt;] (generic_handle_irq+0x0/0x40) from [&lt;c000f57c&gt;] (handle_IRQ+0xd0/0x13c)
 r4:ea997b18 r3:000000e0
[&lt;c000f4ac&gt;] (handle_IRQ+0x0/0x13c) from [&lt;c00086c4&gt;] (armada_370_xp_handle_irq+0x4c/0x118)
 r8:000003ff r7:ea997b18 r6:ffffffff r5:60070013 r4:c0674dc0
[&lt;c0008678&gt;] (armada_370_xp_handle_irq+0x0/0x118) from [&lt;c0013840&gt;] (__irq_svc+0x40/0x70)
Exception stack(0xea997b18 to 0xea997b60)
7b00:                                                       00000001 20070013
7b20: 00000000 0000000b 20070013 eab27000 20070013 00000000 ed10103e eab27000
7b40: c06790d8 ea997b74 ea997b60 ea997b60 c04186c0 c04186c8 60070013 ffffffff
 r9:eab27000 r8:ed10103e r7:ea997b4c r6:ffffffff r5:60070013 r4:c04186c8
[&lt;c04186a4&gt;] (_raw_spin_unlock_irqrestore+0x0/0x54) from [&lt;c0288fc0&gt;] (uart_start+0x40/0x44)
 r4:c06790d8 r3:c028ddd8
[&lt;c0288f80&gt;] (uart_start+0x0/0x44) from [&lt;c028982c&gt;] (uart_write+0xe4/0xf4)
 r6:0000003e r5:00000000 r4:ed68ea90 r3:0000003e
[&lt;c0289748&gt;] (uart_write+0x0/0xf4) from [&lt;bf3a0d20&gt;] (sl_xmit+0x1c4/0x228 [slip])
 r10:ed388e60 r9:0000003c r8:ffffffdd r7:0000003e r6:ec02754c r5:ea717eb8
 r4:ec027000
[&lt;bf3a0b5c&gt;] (sl_xmit+0x0/0x228 [slip]) from [&lt;c0368d74&gt;] (dev_hard_start_xmit+0x39c/0x6d0)
 r8:eaf163c0 r7:ec027000 r6:ea717eb8 r5:00000000 r4:00000000

Signed-off-by: Tyler Hall &lt;tylerwhall@gmail.com&gt;
Cc: Oliver Hartkopp &lt;socketcan@hartkopp.net&gt;
Cc: Andre Naujoks &lt;nautsch2@gmail.com&gt;
Cc: David S. Miller &lt;davem@davemloft.net&gt;
Cc: linux-kernel@vger.kernel.org
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>slip: Move the SLIP drivers</title>
<updated>2011-08-27T07:58:36Z</updated>
<author>
<name>Jeff Kirsher</name>
<email>jeffrey.t.kirsher@intel.com</email>
</author>
<published>2011-08-03T10:17:13Z</published>
<link rel='alternate' type='text/html' href='https://universe.0xinfinity.dev/distro/kernel/commit/?id=b5451d783ade99308dfccdf5ca284ed07affa4ff'/>
<id>urn:sha1:b5451d783ade99308dfccdf5ca284ed07affa4ff</id>
<content type='text'>
Move the Serial Line Internet Protocol (SLIP) drivers into
drivers/net/slip/ and make the necessary Kconfig and Makefile
changes.

Signed-off-by: Jeff Kirsher &lt;jeffrey.t.kirsher@intel.com&gt;
Acked-by: Alan Cox &lt;alan@linux.intel.com&gt;
</content>
</entry>
</feed>
