Re: [PATCH v2] uart: fix race between uart_put_char() and uart_shutdown()

2018-07-06 Thread Greg Kroah-Hartman
On Fri, Jun 29, 2018 at 10:43:30AM -0600, Tycho Andersen wrote:
> On Fri, Jun 29, 2018 at 04:24:46AM -0600, Tycho Andersen wrote:
> > v2: switch to locking uport->lock on allocation/deallocation instead of
> > locking the per-port mutex in uart_put_char. Note that since
> > uport->lock is a spin lock, we have to switch the allocation to
> > GFP_ATOMIC.
> 
> Serge pointed out off-list that we may want to do the allocation
> before the lock so that it's more likely to be successful. I'm happy
> to send that change to this if it's what we want to do, I don't have a
> strong preference.

That sounds like a much better thing to do.

thanks,

greg k-h


Re: [PATCH v2] uart: fix race between uart_put_char() and uart_shutdown()

2018-07-06 Thread Greg Kroah-Hartman
On Fri, Jun 29, 2018 at 10:43:30AM -0600, Tycho Andersen wrote:
> On Fri, Jun 29, 2018 at 04:24:46AM -0600, Tycho Andersen wrote:
> > v2: switch to locking uport->lock on allocation/deallocation instead of
> > locking the per-port mutex in uart_put_char. Note that since
> > uport->lock is a spin lock, we have to switch the allocation to
> > GFP_ATOMIC.
> 
> Serge pointed out off-list that we may want to do the allocation
> before the lock so that it's more likely to be successful. I'm happy
> to send that change to this if it's what we want to do, I don't have a
> strong preference.

That sounds like a much better thing to do.

thanks,

greg k-h


Re: [PATCH v2] uart: fix race between uart_put_char() and uart_shutdown()

2018-06-29 Thread Tycho Andersen
On Fri, Jun 29, 2018 at 04:24:46AM -0600, Tycho Andersen wrote:
> v2: switch to locking uport->lock on allocation/deallocation instead of
> locking the per-port mutex in uart_put_char. Note that since
> uport->lock is a spin lock, we have to switch the allocation to
> GFP_ATOMIC.

Serge pointed out off-list that we may want to do the allocation
before the lock so that it's more likely to be successful. I'm happy
to send that change to this if it's what we want to do, I don't have a
strong preference.

Tycho


Re: [PATCH v2] uart: fix race between uart_put_char() and uart_shutdown()

2018-06-29 Thread Tycho Andersen
On Fri, Jun 29, 2018 at 04:24:46AM -0600, Tycho Andersen wrote:
> v2: switch to locking uport->lock on allocation/deallocation instead of
> locking the per-port mutex in uart_put_char. Note that since
> uport->lock is a spin lock, we have to switch the allocation to
> GFP_ATOMIC.

Serge pointed out off-list that we may want to do the allocation
before the lock so that it's more likely to be successful. I'm happy
to send that change to this if it's what we want to do, I don't have a
strong preference.

Tycho


[PATCH v2] uart: fix race between uart_put_char() and uart_shutdown()

2018-06-29 Thread Tycho Andersen
We have reports of the following crash:

PID: 7 TASK: 88085c6d61c0 CPU: 1 COMMAND: "kworker/u25:0"
#0 [88085c6db710] machine_kexec at 81046239
#1 [88085c6db760] crash_kexec at 810fc248
#2 [88085c6db830] oops_end at 81008ae7
#3 [88085c6db860] no_context at 81050b8f
#4 [88085c6db8b0] __bad_area_nosemaphore at 81050d75
#5 [88085c6db900] bad_area_nosemaphore at 81050e83
#6 [88085c6db910] __do_page_fault at 8105132e
#7 [88085c6db9b0] do_page_fault at 8105152c
#8 [88085c6db9c0] page_fault at 81a3f122
[exception RIP: uart_put_char+149]
RIP: 814b67b5 RSP: 88085c6dba78 RFLAGS: 00010006
RAX: 0292 RBX: 827c5120 RCX: 0081
RDX:  RSI: 005f RDI: 827c5120
RBP: 88085c6dba98 R8: 012c R9: 822ea320
R10: 88085fe4db04 R11: 0001 R12: 881059f9c000
R13: 0001 R14: 005f R15: 0fba
ORIG_RAX:  CS: 0010 SS: 0018
#9 [88085c6dbaa0] tty_put_char at 81497544
#10 [88085c6dbac0] do_output_char at 8149c91c
#11 [88085c6dbae0] __process_echoes at 8149cb8b
#12 [88085c6dbb30] commit_echoes at 8149cdc2
#13 [88085c6dbb60] n_tty_receive_buf_fast at 8149e49b
#14 [88085c6dbbc0] __receive_buf at 8149ef5a
#15 [88085c6dbc20] n_tty_receive_buf_common at 8149f016
#16 [88085c6dbca0] n_tty_receive_buf2 at 8149f194
#17 [88085c6dbcb0] flush_to_ldisc at 814a238a
#18 [88085c6dbd50] process_one_work at 81090be2
#19 [88085c6dbe20] worker_thread at 81091b4d
#20 [88085c6dbeb0] kthread at 81096384
#21 [88085c6dbf50] ret_from_fork at 81a3d69f​

after slogging through some dissasembly:

814b6720 :
814b6720:   55  push   %rbp
814b6721:   48 89 e5mov%rsp,%rbp
814b6724:   48 83 ec 20 sub$0x20,%rsp
814b6728:   48 89 1c 24 mov%rbx,(%rsp)
814b672c:   4c 89 64 24 08  mov%r12,0x8(%rsp)
814b6731:   4c 89 6c 24 10  mov%r13,0x10(%rsp)
814b6736:   4c 89 74 24 18  mov%r14,0x18(%rsp)
814b673b:   e8 b0 8e 58 00  callq  81a3f5f0 
814b6740:   4c 8b a7 88 02 00 00mov0x288(%rdi),%r12
814b6747:   45 31 edxor%r13d,%r13d
814b674a:   41 89 f6mov%esi,%r14d
814b674d:   49 83 bc 24 70 01 00cmpq   $0x0,0x170(%r12)
814b6754:   00 00
814b6756:   49 8b 9c 24 80 01 00mov0x180(%r12),%rbx
814b675d:   00
814b675e:   74 2f   je 814b678f 

814b6760:   48 89 dfmov%rbx,%rdi
814b6763:   e8 a8 67 58 00  callq  81a3cf10 
<_raw_spin_lock_irqsave>
814b6768:   41 8b 8c 24 78 01 00mov0x178(%r12),%ecx
814b676f:   00
814b6770:   89 ca   mov%ecx,%edx
814b6772:   f7 d2   not%edx
814b6774:   41 03 94 24 7c 01 00add0x17c(%r12),%edx
814b677b:   00
814b677c:   81 e2 ff 0f 00 00   and$0xfff,%edx
814b6782:   75 23   jne814b67a7 

814b6784:   48 89 c6mov%rax,%rsi
814b6787:   48 89 dfmov%rbx,%rdi
814b678a:   e8 e1 64 58 00  callq  81a3cc70 
<_raw_spin_unlock_irqrestore>
814b678f:   44 89 e8mov%r13d,%eax
814b6792:   48 8b 1c 24 mov(%rsp),%rbx
814b6796:   4c 8b 64 24 08  mov0x8(%rsp),%r12
814b679b:   4c 8b 6c 24 10  mov0x10(%rsp),%r13
814b67a0:   4c 8b 74 24 18  mov0x18(%rsp),%r14
814b67a5:   c9  leaveq
814b67a6:   c3  retq
814b67a7:   49 8b 94 24 70 01 00mov0x170(%r12),%rdx
814b67ae:   00
814b67af:   48 63 c9movslq %ecx,%rcx
814b67b2:   41 b5 01mov$0x1,%r13b
814b67b5:   44 88 34 0a mov%r14b,(%rdx,%rcx,1)
814b67b9:   41 8b 94 24 78 01 00mov0x178(%r12),%edx
814b67c0:   00
814b67c1:   83 c2 01add$0x1,%edx
814b67c4:   81 e2 ff 0f 00 00   and$0xfff,%edx
814b67ca:   41 89 94 24 78 01 00mov%edx,0x178(%r12)
814b67d1:

[PATCH v2] uart: fix race between uart_put_char() and uart_shutdown()

2018-06-29 Thread Tycho Andersen
We have reports of the following crash:

PID: 7 TASK: 88085c6d61c0 CPU: 1 COMMAND: "kworker/u25:0"
#0 [88085c6db710] machine_kexec at 81046239
#1 [88085c6db760] crash_kexec at 810fc248
#2 [88085c6db830] oops_end at 81008ae7
#3 [88085c6db860] no_context at 81050b8f
#4 [88085c6db8b0] __bad_area_nosemaphore at 81050d75
#5 [88085c6db900] bad_area_nosemaphore at 81050e83
#6 [88085c6db910] __do_page_fault at 8105132e
#7 [88085c6db9b0] do_page_fault at 8105152c
#8 [88085c6db9c0] page_fault at 81a3f122
[exception RIP: uart_put_char+149]
RIP: 814b67b5 RSP: 88085c6dba78 RFLAGS: 00010006
RAX: 0292 RBX: 827c5120 RCX: 0081
RDX:  RSI: 005f RDI: 827c5120
RBP: 88085c6dba98 R8: 012c R9: 822ea320
R10: 88085fe4db04 R11: 0001 R12: 881059f9c000
R13: 0001 R14: 005f R15: 0fba
ORIG_RAX:  CS: 0010 SS: 0018
#9 [88085c6dbaa0] tty_put_char at 81497544
#10 [88085c6dbac0] do_output_char at 8149c91c
#11 [88085c6dbae0] __process_echoes at 8149cb8b
#12 [88085c6dbb30] commit_echoes at 8149cdc2
#13 [88085c6dbb60] n_tty_receive_buf_fast at 8149e49b
#14 [88085c6dbbc0] __receive_buf at 8149ef5a
#15 [88085c6dbc20] n_tty_receive_buf_common at 8149f016
#16 [88085c6dbca0] n_tty_receive_buf2 at 8149f194
#17 [88085c6dbcb0] flush_to_ldisc at 814a238a
#18 [88085c6dbd50] process_one_work at 81090be2
#19 [88085c6dbe20] worker_thread at 81091b4d
#20 [88085c6dbeb0] kthread at 81096384
#21 [88085c6dbf50] ret_from_fork at 81a3d69f​

after slogging through some dissasembly:

814b6720 :
814b6720:   55  push   %rbp
814b6721:   48 89 e5mov%rsp,%rbp
814b6724:   48 83 ec 20 sub$0x20,%rsp
814b6728:   48 89 1c 24 mov%rbx,(%rsp)
814b672c:   4c 89 64 24 08  mov%r12,0x8(%rsp)
814b6731:   4c 89 6c 24 10  mov%r13,0x10(%rsp)
814b6736:   4c 89 74 24 18  mov%r14,0x18(%rsp)
814b673b:   e8 b0 8e 58 00  callq  81a3f5f0 
814b6740:   4c 8b a7 88 02 00 00mov0x288(%rdi),%r12
814b6747:   45 31 edxor%r13d,%r13d
814b674a:   41 89 f6mov%esi,%r14d
814b674d:   49 83 bc 24 70 01 00cmpq   $0x0,0x170(%r12)
814b6754:   00 00
814b6756:   49 8b 9c 24 80 01 00mov0x180(%r12),%rbx
814b675d:   00
814b675e:   74 2f   je 814b678f 

814b6760:   48 89 dfmov%rbx,%rdi
814b6763:   e8 a8 67 58 00  callq  81a3cf10 
<_raw_spin_lock_irqsave>
814b6768:   41 8b 8c 24 78 01 00mov0x178(%r12),%ecx
814b676f:   00
814b6770:   89 ca   mov%ecx,%edx
814b6772:   f7 d2   not%edx
814b6774:   41 03 94 24 7c 01 00add0x17c(%r12),%edx
814b677b:   00
814b677c:   81 e2 ff 0f 00 00   and$0xfff,%edx
814b6782:   75 23   jne814b67a7 

814b6784:   48 89 c6mov%rax,%rsi
814b6787:   48 89 dfmov%rbx,%rdi
814b678a:   e8 e1 64 58 00  callq  81a3cc70 
<_raw_spin_unlock_irqrestore>
814b678f:   44 89 e8mov%r13d,%eax
814b6792:   48 8b 1c 24 mov(%rsp),%rbx
814b6796:   4c 8b 64 24 08  mov0x8(%rsp),%r12
814b679b:   4c 8b 6c 24 10  mov0x10(%rsp),%r13
814b67a0:   4c 8b 74 24 18  mov0x18(%rsp),%r14
814b67a5:   c9  leaveq
814b67a6:   c3  retq
814b67a7:   49 8b 94 24 70 01 00mov0x170(%r12),%rdx
814b67ae:   00
814b67af:   48 63 c9movslq %ecx,%rcx
814b67b2:   41 b5 01mov$0x1,%r13b
814b67b5:   44 88 34 0a mov%r14b,(%rdx,%rcx,1)
814b67b9:   41 8b 94 24 78 01 00mov0x178(%r12),%edx
814b67c0:   00
814b67c1:   83 c2 01add$0x1,%edx
814b67c4:   81 e2 ff 0f 00 00   and$0xfff,%edx
814b67ca:   41 89 94 24 78 01 00mov%edx,0x178(%r12)
814b67d1: