Re: [PATCH] tty: fix stall caused by missing memory barrier indrivers/tty/n_tty.c

From: Kosuke Tatsukawa
Date: Wed Sep 30 2015 - 21:56:19 EST


Peter-san,
thank you for the reply.

In message <560BE5FE.50505@xxxxxxxxxxxxxxxxxx> Peter Hurley <peter@xxxxxxxxxxxxxxxxxx> wrote:
> On 09/28/2015 09:59 PM, Kosuke Tatsukawa wrote:
>> My colleague ran into a program stall on a x86_64 server, where
>> n_tty_read() was waiting for data even if there was data in the buffer
>> in the pty. kernel stack for the stuck process looks like below.
>> #0 [ffff88303d107b58] __schedule at ffffffff815c4b20
>> #1 [ffff88303d107bd0] schedule at ffffffff815c513e
>> #2 [ffff88303d107bf0] schedule_timeout at ffffffff815c7818
>> #3 [ffff88303d107ca0] wait_woken at ffffffff81096bd2
>> #4 [ffff88303d107ce0] n_tty_read at ffffffff8136fa23
>> #5 [ffff88303d107dd0] tty_read at ffffffff81368013
>> #6 [ffff88303d107e20] __vfs_read at ffffffff811a3704
>> #7 [ffff88303d107ec0] vfs_read at ffffffff811a3a57
>> #8 [ffff88303d107f00] sys_read at ffffffff811a4306
>> #9 [ffff88303d107f50] entry_SYSCALL_64_fastpath at ffffffff815c86d7
>>
>> There seems to be two problems causing this issue.
>>
>> First, in drivers/tty/n_tty.c, __receive_buf() stores the data and
>> updates ldata->commit_head using smp_store_release() and then checks
>> the wait queue using waitqueue_active(). However, since there is no
>> memory barrier, __receive_buf() could return without calling
>> wake_up_interactive_poll(), and at the same time, n_tty_read() could
>> start to wait in wait_woken() as in the following chart.
>>
>> __receive_buf() n_tty_read()
>> ------------------------------------------------------------------------
>> if (waitqueue_active(&tty->read_wait))
>> /* Memory operations issued after the
>> RELEASE may be completed before the
>> RELEASE operation has completed */
>> add_wait_queue(&tty->read_wait, &wait);
>> ...
>> if (!input_available_p(tty, 0)) {
>> smp_store_release(&ldata->commit_head,
>> ldata->read_head);
>> ...
>> timeout = wait_woken(&wait,
>> TASK_INTERRUPTIBLE, timeout);
>
> Thank you for reporting this, Tatsukawa-san.
>
> While I agree that a read memory barrier is required before checking
> waitqueue_active() in __receive_buf() and n_tty_receive_char_special(),
> on x86/64 that sequence would never have been reordered by the CPU, and
> thus cannot be the cause of the observed stall.
>
> Further, the compiler should not have been able to reorder the
> load of tty->read_wait before the store of ldata->commit_head since it
> has no visibility into kill_fasync().
>
> So I'm concerned that some other cause is to blame.
>
> To eliminate a compiler problem, would you please attach a combined listing
> for drivers/tty/n_tty.c for the machine this occurred on?
>
> What kernel version was the stall observed?

I'm testing now on linux-4.3-rc3, but it also occurs on release kernels
such as linux-4.2.

I've attached "dis -l __receive_buf" output from crash at the bottom of
this message. The code produced looks fine to me. I think it's the CPU
that is doing the reordering (or more precisely, delaying the store).

I have a reproducer for this issue. I'll send that in a separate
message.


>> ------------------------------------------------------------------------
>>
>> The second problem is that n_tty_read() also lacks a memory barrier
>> call and could also cause __receive_buf() to return without calling
>> wake_up_interactive_poll(), and n_tty_read() to wait in wait_woken()
>> as in the chart below.
>>
>> __receive_buf() n_tty_read()
>> ------------------------------------------------------------------------
>> spin_lock_irqsave(&q->lock, flags);
>> /* from add_wait_queue() */
>> ...
>> if (!input_available_p(tty, 0)) {
>> /* Memory operations issued after the
>> RELEASE may be completed before the
>> RELEASE operation has completed */
>> smp_store_release(&ldata->commit_head,
>> ldata->read_head);
>> if (waitqueue_active(&tty->read_wait))
>> __add_wait_queue(q, wait);
>> spin_unlock_irqrestore(&q->lock,flags);
>> /* from add_wait_queue() */
>> ...
>> timeout = wait_woken(&wait,
>> TASK_INTERRUPTIBLE, timeout);
>
> This problem was introduced by the wait_woken() mess; prior to that
> there was a full memory barrier in n_tty_read() loop to set the task state
> _before evaluating conditions_.
>
> Though, again, the sequence above is not possible at all on x86/64 since
> neither the CPU nor the compiler can produce the hypothetical code in
> n_tty_read() above.
>
> I need to think further on the consequences of the missing full memory
> barrier in n_tty_read().
>
> Other notes below.
<snip>

Thank you for the comments. I'll reflect your comments in the next
version.

Best regards.
---
Kosuke TATSUKAWA | 3rd IT Platform Department
| IT Platform Division, NEC Corporation
| tatsu@xxxxxxxxxxxxx

------------------------------------------------------------------------
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1632
0xffffffff8136ef40 <__receive_buf>: push %rbp
0xffffffff8136ef41 <__receive_buf+1>: mov %rsp,%rbp
0xffffffff8136ef44 <__receive_buf+4>: push %r15
0xffffffff8136ef46 <__receive_buf+6>: push %r14
0xffffffff8136ef48 <__receive_buf+8>: push %r13
0xffffffff8136ef4a <__receive_buf+10>: push %r12
0xffffffff8136ef4c <__receive_buf+12>: push %rbx
0xffffffff8136ef4d <__receive_buf+13>: sub $0x28,%rsp
0xffffffff8136ef51 <__receive_buf+17>: nopl 0x0(%rax,%rax,1)
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1634
0xffffffff8136ef56 <__receive_buf+22>: mov 0x130(%rdi),%eax
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1633
0xffffffff8136ef5c <__receive_buf+28>: mov 0x280(%rdi),%rbx
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1634
0xffffffff8136ef63 <__receive_buf+35>: mov $0x1,%r15d
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1632
0xffffffff8136ef69 <__receive_buf+41>: mov %rdi,%r12
0xffffffff8136ef6c <__receive_buf+44>: mov %rsi,%r13
0xffffffff8136ef6f <__receive_buf+47>: mov %rdx,%r14
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1634
0xffffffff8136ef72 <__receive_buf+50>: test $0x20,%al
0xffffffff8136ef74 <__receive_buf+52>: jne 0xffffffff8136ef82 <__receive_buf+66>
0xffffffff8136ef76 <__receive_buf+54>: xor %r15d,%r15d
0xffffffff8136ef79 <__receive_buf+57>: test $0x2,%ah
0xffffffff8136ef7c <__receive_buf+60>: jne 0xffffffff8136f146 <__receive_buf+518>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1636
0xffffffff8136ef82 <__receive_buf+66>: movzbl 0x5d(%rbx),%eax
0xffffffff8136ef86 <__receive_buf+70>: test $0x8,%al
0xffffffff8136ef88 <__receive_buf+72>: jne 0xffffffff8136f161 <__receive_buf+545>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1638
0xffffffff8136ef8e <__receive_buf+78>: test $0x4,%al
0xffffffff8136ef90 <__receive_buf+80>: je 0xffffffff8136f069 <__receive_buf+297>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 143
0xffffffff8136ef96 <__receive_buf+86>: lea 0x5e(%rbx),%r15
0xffffffff8136ef9a <__receive_buf+90>: add $0x1,%r13
0xffffffff8136ef9e <__receive_buf+94>: xor %eax,%eax
0xffffffff8136efa0 <__receive_buf+96>: jmp 0xffffffff8136efd4 <__receive_buf+148>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1545
0xffffffff8136efa2 <__receive_buf+98>: test %r14,%r14
0xffffffff8136efa5 <__receive_buf+101>: je 0xffffffff8136efaf <__receive_buf+111>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1546
0xffffffff8136efa7 <__receive_buf+103>: movzbl (%r14),%eax
0xffffffff8136efab <__receive_buf+107>: add $0x1,%r14
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1547
0xffffffff8136efaf <__receive_buf+111>: test %al,%al
0xffffffff8136efb1 <__receive_buf+113>: jne 0xffffffff8136f1ff <__receive_buf+703>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 310
0xffffffff8136efb7 <__receive_buf+119>: mov (%rbx),%rdx
0xffffffff8136efba <__receive_buf+122>: movzbl -0x1(%r13),%esi
0xffffffff8136efbf <__receive_buf+127>: and $0xfff,%edx
0xffffffff8136efc5 <__receive_buf+133>: mov %sil,(%r15,%rdx,1)
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 311
0xffffffff8136efc9 <__receive_buf+137>: addq $0x1,(%rbx)
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1550
0xffffffff8136efcd <__receive_buf+141>: sub $0x1,%ecx
0xffffffff8136efd0 <__receive_buf+144>: add $0x1,%r13
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1544
0xffffffff8136efd4 <__receive_buf+148>: test %ecx,%ecx
0xffffffff8136efd6 <__receive_buf+150>: jne 0xffffffff8136efa2 <__receive_buf+98>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1662
0xffffffff8136efd8 <__receive_buf+152>: testb $0x10,0x5d(%rbx)
0xffffffff8136efdc <__receive_buf+156>: je 0xffffffff8136efe9 <__receive_buf+169>
0xffffffff8136efde <__receive_buf+158>: testb $0x1,0x13e(%r12)
0xffffffff8136efe7 <__receive_buf+167>: je 0xffffffff8136f05a <__receive_buf+282>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1666
0xffffffff8136efe9 <__receive_buf+169>: mov (%rbx),%rax
0xffffffff8136efec <__receive_buf+172>: mov %rax,-0x40(%rbp)
/root/linux-4.3-rc3/include/linux/compiler.h: 221
0xffffffff8136eff0 <__receive_buf+176>: mov %rax,0x8(%rbx)
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1668
0xffffffff8136eff4 <__receive_buf+180>: movslq 0x2260(%rbx),%rdx
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 133
0xffffffff8136effb <__receive_buf+187>: mov (%rbx),%rax
0xffffffff8136effe <__receive_buf+190>: sub 0x2268(%rbx),%rax
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1668
0xffffffff8136f005 <__receive_buf+197>: cmp %rax,%rdx
0xffffffff8136f008 <__receive_buf+200>: jbe 0xffffffff8136f015 <__receive_buf+213>
0xffffffff8136f00a <__receive_buf+202>: testb $0x1,0x13e(%r12)
0xffffffff8136f013 <__receive_buf+211>: je 0xffffffff8136f05a <__receive_buf+282>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1669
0xffffffff8136f015 <__receive_buf+213>: lea 0x220(%r12),%rdi
0xffffffff8136f01d <__receive_buf+221>: mov $0x20001,%edx
0xffffffff8136f022 <__receive_buf+226>: mov $0x1d,%esi
0xffffffff8136f027 <__receive_buf+231>: callq 0xffffffff811b4a60 <kill_fasync>
/root/linux-4.3-rc3/include/linux/wait.h: 107
0xffffffff8136f02c <__receive_buf+236>: lea 0x250(%r12),%rax
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1670
0xffffffff8136f034 <__receive_buf+244>: cmp %rax,0x250(%r12)
0xffffffff8136f03c <__receive_buf+252>: je 0xffffffff8136f05a <__receive_buf+282>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1671
0xffffffff8136f03e <__receive_buf+254>: lea 0x248(%r12),%rdi
0xffffffff8136f046 <__receive_buf+262>: mov $0x1,%ecx
0xffffffff8136f04b <__receive_buf+267>: mov $0x1,%edx
0xffffffff8136f050 <__receive_buf+272>: mov $0x1,%esi
0xffffffff8136f055 <__receive_buf+277>: callq 0xffffffff81096eb0 <__wake_up>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1673
0xffffffff8136f05a <__receive_buf+282>: add $0x28,%rsp
0xffffffff8136f05e <__receive_buf+286>: pop %rbx
0xffffffff8136f05f <__receive_buf+287>: pop %r12
0xffffffff8136f061 <__receive_buf+289>: pop %r13
0xffffffff8136f063 <__receive_buf+291>: pop %r14
0xffffffff8136f065 <__receive_buf+293>: pop %r15
0xffffffff8136f067 <__receive_buf+295>: leaveq
0xffffffff8136f068 <__receive_buf+296>: retq
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1638
0xffffffff8136f069 <__receive_buf+297>: mov 0x13c(%r12),%edx
0xffffffff8136f071 <__receive_buf+305>: and $0x10000,%edx
0xffffffff8136f077 <__receive_buf+311>: je 0xffffffff8136f082 <__receive_buf+322>
0xffffffff8136f079 <__receive_buf+313>: test %r15b,%r15b
0xffffffff8136f07c <__receive_buf+316>: je 0xffffffff8136ef96 <__receive_buf+86>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1640
0xffffffff8136f082 <__receive_buf+322>: mov 0x2a0(%r12),%r10d
0xffffffff8136f08a <__receive_buf+330>: test %r10d,%r10d
0xffffffff8136f08d <__receive_buf+333>: je 0xffffffff8136f097 <__receive_buf+343>
0xffffffff8136f08f <__receive_buf+335>: test %edx,%edx
0xffffffff8136f091 <__receive_buf+337>: je 0xffffffff8136f1d9 <__receive_buf+665>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1643
0xffffffff8136f097 <__receive_buf+343>: test $0x1,%al
0xffffffff8136f099 <__receive_buf+345>: je 0xffffffff8136f0c4 <__receive_buf+388>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1646
0xffffffff8136f09b <__receive_buf+347>: xor %edx,%edx
0xffffffff8136f09d <__receive_buf+349>: test %r14,%r14
0xffffffff8136f0a0 <__receive_buf+352>: je 0xffffffff8136f0aa <__receive_buf+362>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1647
0xffffffff8136f0a2 <__receive_buf+354>: movsbl (%r14),%edx
0xffffffff8136f0a6 <__receive_buf+358>: add $0x1,%r14
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1648
0xffffffff8136f0aa <__receive_buf+362>: movzbl 0x0(%r13),%esi
0xffffffff8136f0af <__receive_buf+367>: mov %r12,%rdi
0xffffffff8136f0b2 <__receive_buf+370>: mov %ecx,-0x48(%rbp)
0xffffffff8136f0b5 <__receive_buf+373>: add $0x1,%r13
0xffffffff8136f0b9 <__receive_buf+377>: callq 0xffffffff8136de10 <n_tty_receive_char_lnext>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1649
0xffffffff8136f0be <__receive_buf+382>: mov -0x48(%rbp),%ecx
0xffffffff8136f0c1 <__receive_buf+385>: sub $0x1,%ecx
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1652
0xffffffff8136f0c4 <__receive_buf+388>: test %r15b,%r15b
0xffffffff8136f0c7 <__receive_buf+391>: jne 0xffffffff8136f0d8 <__receive_buf+408>
0xffffffff8136f0c9 <__receive_buf+393>: testb $0x8,0x130(%r12)
0xffffffff8136f0d2 <__receive_buf+402>: je 0xffffffff8136f1ec <__receive_buf+684>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1655
0xffffffff8136f0d8 <__receive_buf+408>: mov %r14,%rdx
0xffffffff8136f0db <__receive_buf+411>: mov %r13,%rsi
0xffffffff8136f0de <__receive_buf+414>: mov %r12,%rdi
0xffffffff8136f0e1 <__receive_buf+417>: callq 0xffffffff8136ec70 <n_tty_receive_buf_standard>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 825
0xffffffff8136f0e6 <__receive_buf+422>: testb $0x48,0x13c(%r12)
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 823
0xffffffff8136f0ef <__receive_buf+431>: mov 0x280(%r12),%r14
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 825
0xffffffff8136f0f7 <__receive_buf+439>: je 0xffffffff8136f12a <__receive_buf+490>
0xffffffff8136f0f9 <__receive_buf+441>: mov 0x18(%r14),%rax
0xffffffff8136f0fd <__receive_buf+445>: cmp %rax,0x20(%r14)
0xffffffff8136f101 <__receive_buf+449>: je 0xffffffff8136f12a <__receive_buf+490>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 829
0xffffffff8136f103 <__receive_buf+451>: lea 0x22b0(%r14),%r13
0xffffffff8136f10a <__receive_buf+458>: mov %r13,%rdi
0xffffffff8136f10d <__receive_buf+461>: callq 0xffffffff815c6940 <mutex_lock>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 830
0xffffffff8136f112 <__receive_buf+466>: mov 0x18(%r14),%rax
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 831
0xffffffff8136f116 <__receive_buf+470>: mov %r12,%rdi
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 830
0xffffffff8136f119 <__receive_buf+473>: mov %rax,0x20(%r14)
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 831
0xffffffff8136f11d <__receive_buf+477>: callq 0xffffffff8136ca60 <__process_echoes>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 832
0xffffffff8136f122 <__receive_buf+482>: mov %r13,%rdi
0xffffffff8136f125 <__receive_buf+485>: callq 0xffffffff815c61f0 <mutex_unlock>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1658
0xffffffff8136f12a <__receive_buf+490>: mov 0x18(%r12),%rax
0xffffffff8136f12f <__receive_buf+495>: mov 0x48(%rax),%rax
0xffffffff8136f133 <__receive_buf+499>: test %rax,%rax
0xffffffff8136f136 <__receive_buf+502>: je 0xffffffff8136efd8 <__receive_buf+152>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1659
0xffffffff8136f13c <__receive_buf+508>: mov %r12,%rdi
0xffffffff8136f13f <__receive_buf+511>: callq *%rax
0xffffffff8136f141 <__receive_buf+513>: jmpq 0xffffffff8136efd8 <__receive_buf+152>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1630
0xffffffff8136f146 <__receive_buf+518>: mov 0x13c(%rdi),%r15d
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1636
0xffffffff8136f14d <__receive_buf+525>: movzbl 0x5d(%rbx),%eax
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1630
0xffffffff8136f151 <__receive_buf+529>: shr $0xf,%r15d
0xffffffff8136f155 <__receive_buf+533>: and $0x1,%r15d
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1636
0xffffffff8136f159 <__receive_buf+537>: test $0x8,%al
0xffffffff8136f15b <__receive_buf+539>: je 0xffffffff8136ef8e <__receive_buf+78>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1524
0xffffffff8136f161 <__receive_buf+545>: mov (%rbx),%rdi
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1525
0xffffffff8136f164 <__receive_buf+548>: mov $0x1000,%r15d
0xffffffff8136f16a <__receive_buf+554>: movslq %ecx,%r14
0xffffffff8136f16d <__receive_buf+557>: mov %r15,%rax
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 143
0xffffffff8136f170 <__receive_buf+560>: lea 0x5e(%rbx),%r8
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1526
0xffffffff8136f174 <__receive_buf+564>: mov %r13,%rsi
0xffffffff8136f177 <__receive_buf+567>: mov %ecx,-0x48(%rbp)
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1524
0xffffffff8136f17a <__receive_buf+570>: and $0xfff,%edi
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1526
0xffffffff8136f180 <__receive_buf+576>: mov %r8,-0x50(%rbp)
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1525
0xffffffff8136f184 <__receive_buf+580>: sub %rdi,%rax
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1526
0xffffffff8136f187 <__receive_buf+583>: lea (%r8,%rdi,1),%rdi
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1525
0xffffffff8136f18b <__receive_buf+587>: cmp %rax,%r14
0xffffffff8136f18e <__receive_buf+590>: cmova %rax,%r14
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1526
0xffffffff8136f192 <__receive_buf+594>: mov %r14,%rdx
0xffffffff8136f195 <__receive_buf+597>: callq 0xffffffff812b2210 <__memcpy>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1527
0xffffffff8136f19a <__receive_buf+602>: mov %r14,%rdi
0xffffffff8136f19d <__receive_buf+605>: add (%rbx),%rdi
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1533
0xffffffff8136f1a0 <__receive_buf+608>: lea 0x0(%r13,%r14,1),%rsi
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1527
0xffffffff8136f1a5 <__receive_buf+613>: mov %rdi,(%rbx)
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1532
0xffffffff8136f1a8 <__receive_buf+616>: mov -0x48(%rbp),%ecx
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1531
0xffffffff8136f1ab <__receive_buf+619>: and $0xfff,%edi
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1533
0xffffffff8136f1b1 <__receive_buf+625>: mov -0x50(%rbp),%r8
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1532
0xffffffff8136f1b5 <__receive_buf+629>: sub %rdi,%r15
0xffffffff8136f1b8 <__receive_buf+632>: sub %r14d,%ecx
0xffffffff8136f1bb <__receive_buf+635>: movslq %ecx,%rcx
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1533
0xffffffff8136f1be <__receive_buf+638>: lea (%r8,%rdi,1),%rdi
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1532
0xffffffff8136f1c2 <__receive_buf+642>: cmp %r15,%rcx
0xffffffff8136f1c5 <__receive_buf+645>: cmovbe %rcx,%r15
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1533
0xffffffff8136f1c9 <__receive_buf+649>: mov %r15,%rdx
0xffffffff8136f1cc <__receive_buf+652>: callq 0xffffffff812b2210 <__memcpy>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1534
0xffffffff8136f1d1 <__receive_buf+657>: add %r15,(%rbx)
0xffffffff8136f1d4 <__receive_buf+660>: jmpq 0xffffffff8136efd8 <__receive_buf+152>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1641
0xffffffff8136f1d9 <__receive_buf+665>: mov %r14,%rdx
0xffffffff8136f1dc <__receive_buf+668>: mov %r13,%rsi
0xffffffff8136f1df <__receive_buf+671>: mov %r12,%rdi
0xffffffff8136f1e2 <__receive_buf+674>: callq 0xffffffff8136dce0 <n_tty_receive_buf_closing>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1640
0xffffffff8136f1e7 <__receive_buf+679>: jmpq 0xffffffff8136efd8 <__receive_buf+152>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1653
0xffffffff8136f1ec <__receive_buf+684>: mov %r14,%rdx
0xffffffff8136f1ef <__receive_buf+687>: mov %r13,%rsi
0xffffffff8136f1f2 <__receive_buf+690>: mov %r12,%rdi
0xffffffff8136f1f5 <__receive_buf+693>: callq 0xffffffff8136e620 <n_tty_receive_buf_fast>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1652
0xffffffff8136f1fa <__receive_buf+698>: jmpq 0xffffffff8136f0e6 <__receive_buf+422>
/root/linux-4.3-rc3/drivers/tty/n_tty.c: 1550
0xffffffff8136f1ff <__receive_buf+703>: movzbl -0x1(%r13),%esi
0xffffffff8136f204 <__receive_buf+708>: movsbl %al,%edx
0xffffffff8136f207 <__receive_buf+711>: mov %r12,%rdi
0xffffffff8136f20a <__receive_buf+714>: mov %al,-0x50(%rbp)
0xffffffff8136f20d <__receive_buf+717>: mov %ecx,-0x48(%rbp)
0xffffffff8136f210 <__receive_buf+720>: callq 0xffffffff8136dae0 <n_tty_receive_char_flagged>
0xffffffff8136f215 <__receive_buf+725>: mov -0x48(%rbp),%ecx
0xffffffff8136f218 <__receive_buf+728>: movzbl -0x50(%rbp),%eax
0xffffffff8136f21c <__receive_buf+732>: jmpq 0xffffffff8136efcd <__receive_buf+141>
0xffffffff8136f221 <__receive_buf+737>: data32 data32 data32 data32 data32 nopw %cs:0x0(%rax,%rax,1)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/