All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sasha Levin <levinsasha928@gmail.com>
To: Peter Hurley <peter@hurleysoftware.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Jiri Slaby <jslaby@suse.cz>,
	Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
	linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org,
	Ilya Zykov <ilya@ilyx.ru>, Dave Jones <davej@redhat.com>,
	Michael Ellerman <michael@ellerman.id.au>,
	Shawn Guo <shawn.guo@linaro.org>
Subject: Re: [PATCH v4 00/32] ldisc patchset
Date: Sat, 23 Feb 2013 15:02:00 -0500	[thread overview]
Message-ID: <51292038.3010100@gmail.com> (raw)
In-Reply-To: <1361645001.3407.21.camel@thor.lan>

On 02/23/2013 01:43 PM, Peter Hurley wrote:
> On Sat, 2013-02-23 at 10:24 -0500, Sasha Levin wrote:
>> On 02/22/2013 01:37 PM, Peter Hurley wrote:
>>> On Thu, 2013-02-21 at 08:38 -0500, Peter Hurley wrote:
>>>> On Thu, 2013-02-21 at 08:16 -0500, Sasha Levin wrote:
>>>>> On 02/20/2013 03:02 PM, Peter Hurley wrote:
>>>>>> Sasha and Dave, my trinity testbeds die in other areas right now;
>>>>>> I would really appreciate if you would please re-test this series.
>>>>>
>>>>> Hi Peter,
>>>>>
>>>>> I saw this twice in overnight fuzzing:
>>>>>
>>>>> [ 1473.912280] =================================
>>>>> [ 1473.913180] [ BUG: bad contention detected! ]
>>>>> [ 1473.914071] 3.8.0-next-20130220-sasha-00038-g1ad55df-dirty #8 Tainted: G        W
>>>>> [ 1473.915684] ---------------------------------
>>>>> [ 1473.916549] kworker/1:1/361 is trying to contend lock (&tty->ldisc_sem) at:
>>>>> [ 1473.918031] [<ffffffff81c493df>] tty_ldisc_ref+0x1f/0x60
>>>>> [ 1473.919060] but there are no locks held!
>>>>
>>>> Ahh, of course. That explains why the rwsem trylock doesn't track lock
>>>> stats -- because by the time lock_contended() is called, up_write()
>>>> could have just called lockdep_release(), so that it appears as if the
>>>> lock has been released when in fact it has not but is about to.
>>>>
>>>> I'll just remove the lock contention test from the trylocks.
>>>
>>> Hi Sasha,
>>>
>>> Sorry for the delay. I was actually looking into if I could tickle
>>> lockdep into just recording the lock contention without testing, but
>>> unfortunately, changes to where lockdep stores the contention now
>>> requires the lockdep state to have an existing owner.
>>>
>>> So here's the trivial patch:
>>
>> Hi Peter,
>>
>> After more fuzzing, I'm seeing this sort of hangs (which are new):
>>
>> [ 2644.723879] INFO: task trinity:17893 blocked for more than 120 seconds.
>> [ 2644.727112] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
>> [ 2644.731916] trinity         D ffff8800a9c904a8  5192 17893   8043 0x00000000
>> [ 2644.733517]  ffff88006efb3a78 0000000000000002 ffff8800aa0c3b10 ffff8800bb3d7180
>> [ 2644.739350]  ffff880019103000 ffff880097a78000 ffff88006efb3a78 00000000001d7180
>> [ 2644.741459]  ffff880097a78000 ffff88006efb3fd8 00000000001d7180 00000000001d7180
>> [ 2644.746590] Call Trace:
>> [ 2644.747177]  [<ffffffff83db9909>] __schedule+0x2e9/0x3b0
>> [ 2644.748294]  [<ffffffff83db9b35>] schedule+0x55/0x60
>> [ 2644.752382]  [<ffffffff83db9e83>] schedule_preempt_disabled+0x13/0x20
>> [ 2644.753737]  [<ffffffff83db7fdd>] __mutex_lock_common+0x34d/0x560
>> [ 2644.759037]  [<ffffffff81c40893>] ? ptmx_open+0x83/0x190
>> [ 2644.760590]  [<ffffffff83db84b5>] ? __mutex_unlock_slowpath+0x185/0x1e0
>> [ 2644.762064]  [<ffffffff81c40893>] ? ptmx_open+0x83/0x190
>> [ 2644.768967]  [<ffffffff83db831f>] mutex_lock_nested+0x3f/0x50
>> [ 2644.770314]  [<ffffffff81c40893>] ptmx_open+0x83/0x190
>> [ 2644.771413]  [<ffffffff812917ae>] chrdev_open+0x11e/0x190
>> [ 2644.780456]  [<ffffffff81291690>] ? cdev_put+0x30/0x30
>> [ 2644.781421]  [<ffffffff8128af59>] do_dentry_open+0x1f9/0x310
>> [ 2644.785550]  [<ffffffff8128b0bc>] finish_open+0x4c/0x70
>> [ 2644.786724]  [<ffffffff8129c3eb>] do_last+0x61b/0x810
>> [ 2644.787676]  [<ffffffff8129c699>] path_openat+0xb9/0x4d0
>> [ 2644.791868]  [<ffffffff812ac278>] ? __alloc_fd+0x1e8/0x200
>> [ 2644.792817]  [<ffffffff81185214>] ? lock_release_nested+0xb4/0xf0
>> [ 2644.794010]  [<ffffffff81185331>] ? __lock_release+0xe1/0x100
>> [ 2644.797401]  [<ffffffff8129cebd>] do_filp_open+0x3d/0xa0
>> [ 2644.798467]  [<ffffffff812ac278>] ? __alloc_fd+0x1e8/0x200
>> [ 2644.799577]  [<ffffffff8128c51b>] do_sys_open+0x12b/0x1d0
>> [ 2644.804667]  [<ffffffff8128c5dc>] sys_open+0x1c/0x20
>> [ 2644.805542]  [<ffffffff83dc49d8>] tracesys+0xe1/0xe6
>> [ 2644.822807] 1 lock held by trinity/17893:
>> [ 2644.823685]  #0:  (tty_mutex){+.+.+.}, at: [<ffffffff81c40893>] ptmx_open+0x83/0x190
>>
>> The mutex is 'tty_mutex' at drivers/tty/pty.c:701 .
>>
>> I didn't grab sysrq-t this time since it was an overnight run, but I'll
>> try to grab one when it happens again.
> 
> Hi Sasha,
> 
> Can you please 'make drivers/tty/pty.lst'  for this kernel config and
> paste ptmx_open() here?
> 
> This report makes no sense: this stack trace shows this task waiting on
> a mutex that is not owned.

static int ptmx_open(struct inode *inode, struct file *filp)
{
 6c0:	55                   	push   %rbp
 6c1:	48 89 e5             	mov    %rsp,%rbp
 6c4:	48 83 ec 30          	sub    $0x30,%rsp
 6c8:	48 89 5d d8          	mov    %rbx,-0x28(%rbp)
 6cc:	48 89 f3             	mov    %rsi,%rbx
 6cf:	4c 89 65 e0          	mov    %r12,-0x20(%rbp)
 6d3:	49 89 fc             	mov    %rdi,%r12
 6d6:	4c 89 7d f8          	mov    %r15,-0x8(%rbp)
 6da:	4c 89 6d e8          	mov    %r13,-0x18(%rbp)
 6de:	4c 89 75 f0          	mov    %r14,-0x10(%rbp)
	struct tty_struct *tty;
	struct inode *slave_inode;
	int retval;
	int index;

	nonseekable_open(inode, filp);
 6e2:	e8 00 00 00 00       	callq  6e7 <ptmx_open+0x27>
			6e3: R_X86_64_PC32	nonseekable_open-0x4

	retval = tty_alloc_file(filp);
 6e7:	48 89 df             	mov    %rbx,%rdi
 6ea:	e8 00 00 00 00       	callq  6ef <ptmx_open+0x2f>
			6eb: R_X86_64_PC32	tty_alloc_file-0x4
	if (retval)
 6ef:	85 c0                	test   %eax,%eax
	int retval;
	int index;

	nonseekable_open(inode, filp);

	retval = tty_alloc_file(filp);
 6f1:	41 89 c7             	mov    %eax,%r15d
	if (retval)
 6f4:	0f 85 36 01 00 00    	jne    830 <ptmx_open+0x170>
		return retval;

	/* find a device that is not in use. */
	mutex_lock(&devpts_mutex);
 6fa:	31 f6                	xor    %esi,%esi
 6fc:	48 c7 c7 00 00 00 00 	mov    $0x0,%rdi
			6ff: R_X86_64_32S	.data+0x20
 703:	e8 00 00 00 00       	callq  708 <ptmx_open+0x48>
			704: R_X86_64_PC32	mutex_lock_nested-0x4
	index = devpts_new_index(inode);
 708:	4c 89 e7             	mov    %r12,%rdi
 70b:	e8 00 00 00 00       	callq  710 <ptmx_open+0x50>
			70c: R_X86_64_PC32	devpts_new_index-0x4
	if (index < 0) {
		retval = index;
		mutex_unlock(&devpts_mutex);
 710:	48 c7 c7 00 00 00 00 	mov    $0x0,%rdi
			713: R_X86_64_32S	.data+0x20
		return retval;

	/* find a device that is not in use. */
	mutex_lock(&devpts_mutex);
	index = devpts_new_index(inode);
	if (index < 0) {
 717:	85 c0                	test   %eax,%eax
	if (retval)
		return retval;

	/* find a device that is not in use. */
	mutex_lock(&devpts_mutex);
	index = devpts_new_index(inode);
 719:	41 89 c6             	mov    %eax,%r14d
	if (index < 0) {
 71c:	79 12                	jns    730 <ptmx_open+0x70>
		retval = index;
		mutex_unlock(&devpts_mutex);
 71e:	e8 00 00 00 00       	callq  723 <ptmx_open+0x63>
			71f: R_X86_64_PC32	mutex_unlock-0x4
		goto err_file;
 723:	45 89 f7             	mov    %r14d,%r15d
 726:	e9 fd 00 00 00       	jmpq   828 <ptmx_open+0x168>
 72b:	0f 1f 44 00 00       	nopl   0x0(%rax,%rax,1)
	}

	mutex_unlock(&devpts_mutex);
 730:	e8 00 00 00 00       	callq  735 <ptmx_open+0x75>
			731: R_X86_64_PC32	mutex_unlock-0x4

	mutex_lock(&tty_mutex);
 735:	31 f6                	xor    %esi,%esi
 737:	48 c7 c7 00 00 00 00 	mov    $0x0,%rdi
			73a: R_X86_64_32S	tty_mutex
 73e:	e8 00 00 00 00       	callq  743 <ptmx_open+0x83>
			73f: R_X86_64_PC32	mutex_lock_nested-0x4
	tty = tty_init_dev(ptm_driver, index);
 743:	48 8b 3d 00 00 00 00 	mov    0x0(%rip),%rdi        # 74a <ptmx_open+0x8a>
			746: R_X86_64_PC32	.bss-0x4
 74a:	44 89 f6             	mov    %r14d,%esi
 74d:	e8 00 00 00 00       	callq  752 <ptmx_open+0x92>
			74e: R_X86_64_PC32	tty_init_dev-0x4

	if (IS_ERR(tty)) {
 752:	48 3d 00 f0 ff ff    	cmp    $0xfffffffffffff000,%rax
	}

	mutex_unlock(&devpts_mutex);

	mutex_lock(&tty_mutex);
	tty = tty_init_dev(ptm_driver, index);
 758:	49 89 c5             	mov    %rax,%r13

	if (IS_ERR(tty)) {
 75b:	76 23                	jbe    780 <ptmx_open+0xc0>
err_release:
	tty_unlock(tty);
	tty_release(inode, filp);
	return retval;
out:
	mutex_unlock(&tty_mutex);
 75d:	48 c7 c7 00 00 00 00 	mov    $0x0,%rdi
			760: R_X86_64_32S	tty_mutex

	mutex_lock(&tty_mutex);
	tty = tty_init_dev(ptm_driver, index);

	if (IS_ERR(tty)) {
		retval = PTR_ERR(tty);
 764:	41 89 c7             	mov    %eax,%r15d
err_release:
	tty_unlock(tty);
	tty_release(inode, filp);
	return retval;
out:
	mutex_unlock(&tty_mutex);
 767:	e8 00 00 00 00       	callq  76c <ptmx_open+0xac>
			768: R_X86_64_PC32	mutex_unlock-0x4
	devpts_kill_index(inode, index);
 76c:	44 89 f6             	mov    %r14d,%esi
 76f:	4c 89 e7             	mov    %r12,%rdi
 772:	e8 00 00 00 00       	callq  777 <ptmx_open+0xb7>
			773: R_X86_64_PC32	devpts_kill_index-0x4
 777:	e9 ac 00 00 00       	jmpq   828 <ptmx_open+0x168>
 77c:	0f 1f 40 00          	nopl   0x0(%rax)
		goto out;
	}

	/* The tty returned here is locked so we can safely
	   drop the mutex */
	mutex_unlock(&tty_mutex);
 780:	48 c7 c7 00 00 00 00 	mov    $0x0,%rdi
			783: R_X86_64_32S	tty_mutex
 787:	e8 00 00 00 00       	callq  78c <ptmx_open+0xcc>
			788: R_X86_64_PC32	mutex_unlock-0x4
 78c:	f0 41 80 8d da 03 00 	lock orb $0x1,0x3da(%r13)
 793:	00 01

	set_bit(TTY_PTY_LOCK, &tty->flags); /* LOCK THE SLAVE */
	tty->driver_data = inode;

	tty_add_file(tty, filp);
 795:	48 89 de             	mov    %rbx,%rsi
 798:	4c 89 ef             	mov    %r13,%rdi
	/* The tty returned here is locked so we can safely
	   drop the mutex */
	mutex_unlock(&tty_mutex);

	set_bit(TTY_PTY_LOCK, &tty->flags); /* LOCK THE SLAVE */
	tty->driver_data = inode;
 79b:	4d 89 a5 18 05 00 00 	mov    %r12,0x518(%r13)

	tty_add_file(tty, filp);
 7a2:	e8 00 00 00 00       	callq  7a7 <ptmx_open+0xe7>
			7a3: R_X86_64_PC32	tty_add_file-0x4

	slave_inode = devpts_pty_new(inode,
 7a7:	49 8b 8d f8 03 00 00 	mov    0x3f8(%r13),%rcx
			MKDEV(UNIX98_PTY_SLAVE_MAJOR, index), index,
 7ae:	44 89 f6             	mov    %r14d,%esi
 7b1:	81 ce 00 00 80 08    	or     $0x8800000,%esi
	set_bit(TTY_PTY_LOCK, &tty->flags); /* LOCK THE SLAVE */
	tty->driver_data = inode;

	tty_add_file(tty, filp);

	slave_inode = devpts_pty_new(inode,
 7b7:	44 89 f2             	mov    %r14d,%edx
 7ba:	4c 89 e7             	mov    %r12,%rdi
 7bd:	e8 00 00 00 00       	callq  7c2 <ptmx_open+0x102>
			7be: R_X86_64_PC32	devpts_pty_new-0x4
			MKDEV(UNIX98_PTY_SLAVE_MAJOR, index), index,
			tty->link);
	if (IS_ERR(slave_inode)) {
 7c2:	48 3d 00 f0 ff ff    	cmp    $0xfffffffffffff000,%rax
 7c8:	76 06                	jbe    7d0 <ptmx_open+0x110>
		retval = PTR_ERR(slave_inode);
 7ca:	41 89 c7             	mov    %eax,%r15d
		goto err_release;
 7cd:	eb 41                	jmp    810 <ptmx_open+0x150>
 7cf:	90                   	nop
	}
	tty->link->driver_data = slave_inode;
 7d0:	49 8b 95 f8 03 00 00 	mov    0x3f8(%r13),%rdx

	retval = ptm_driver->ops->open(tty, filp);
 7d7:	48 89 de             	mov    %rbx,%rsi
 7da:	4c 89 ef             	mov    %r13,%rdi
			tty->link);
	if (IS_ERR(slave_inode)) {
		retval = PTR_ERR(slave_inode);
		goto err_release;
	}
	tty->link->driver_data = slave_inode;
 7dd:	48 89 82 18 05 00 00 	mov    %rax,0x518(%rdx)

	retval = ptm_driver->ops->open(tty, filp);
 7e4:	48 8b 05 00 00 00 00 	mov    0x0(%rip),%rax        # 7eb <ptmx_open+0x12b>
			7e7: R_X86_64_PC32	.bss-0x4
 7eb:	48 8b 80 a0 00 00 00 	mov    0xa0(%rax),%rax
 7f2:	ff 50 18             	callq  *0x18(%rax)
	if (retval)
 7f5:	85 c0                	test   %eax,%eax
		retval = PTR_ERR(slave_inode);
		goto err_release;
	}
	tty->link->driver_data = slave_inode;

	retval = ptm_driver->ops->open(tty, filp);
 7f7:	41 89 c7             	mov    %eax,%r15d
	if (retval)
 7fa:	75 14                	jne    810 <ptmx_open+0x150>
		goto err_release;

	tty_unlock(tty);
 7fc:	4c 89 ef             	mov    %r13,%rdi
 7ff:	e8 00 00 00 00       	callq  804 <ptmx_open+0x144>
			800: R_X86_64_PC32	tty_unlock-0x4
	return 0;
 804:	eb 2a                	jmp    830 <ptmx_open+0x170>
 806:	66 2e 0f 1f 84 00 00 	nopw   %cs:0x0(%rax,%rax,1)
 80d:	00 00 00
err_release:
	tty_unlock(tty);
 810:	4c 89 ef             	mov    %r13,%rdi
 813:	e8 00 00 00 00       	callq  818 <ptmx_open+0x158>
			814: R_X86_64_PC32	tty_unlock-0x4
	tty_release(inode, filp);
 818:	48 89 de             	mov    %rbx,%rsi
 81b:	4c 89 e7             	mov    %r12,%rdi
 81e:	e8 00 00 00 00       	callq  823 <ptmx_open+0x163>
			81f: R_X86_64_PC32	tty_release-0x4
	return retval;
 823:	eb 0b                	jmp    830 <ptmx_open+0x170>
 825:	0f 1f 00             	nopl   (%rax)
out:
	mutex_unlock(&tty_mutex);
	devpts_kill_index(inode, index);
err_file:
	tty_free_file(filp);
 828:	48 89 df             	mov    %rbx,%rdi
 82b:	e8 00 00 00 00       	callq  830 <ptmx_open+0x170>
			82c: R_X86_64_PC32	tty_free_file-0x4
	return retval;
}
 830:	44 89 f8             	mov    %r15d,%eax
 833:	48 8b 5d d8          	mov    -0x28(%rbp),%rbx
 837:	4c 8b 65 e0          	mov    -0x20(%rbp),%r12
 83b:	4c 8b 6d e8          	mov    -0x18(%rbp),%r13
 83f:	4c 8b 75 f0          	mov    -0x10(%rbp),%r14
 843:	4c 8b 7d f8          	mov    -0x8(%rbp),%r15
 847:	c9                   	leaveq
 848:	c3                   	retq
 849:	0f 1f 80 00 00 00 00 	nopl   0x0(%rax)


Thanks,
Sasha


  reply	other threads:[~2013-02-23 20:01 UTC|newest]

Thread overview: 181+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-14 18:22 [PATCH v2 00/11] tty: Fix buffer work access-after-free Peter Hurley
2012-12-14 18:22 ` [PATCH v2 01/11] tty: debug buffer work race with tty free Peter Hurley
2012-12-14 18:22 ` [PATCH v2 02/11] tty: WARN if buffer work racing " Peter Hurley
2012-12-14 18:22 ` [PATCH v2 03/11] tty: Add diagnostic for halted line discipline Peter Hurley
2012-12-14 18:22 ` [PATCH v2 04/11] tty: Refactor n_tty_flush_buffer Peter Hurley
2012-12-14 18:22 ` [PATCH v2 05/11] tty: Don't flush buffer when closing ldisc Peter Hurley
2012-12-14 18:22 ` [PATCH v2 06/11] tty: Refactor wait for ldisc refs out of tty_ldisc_hangup() Peter Hurley
2012-12-14 18:22 ` [PATCH v2 07/11] tty: Remove unnecessary re-test of ldisc ref count Peter Hurley
2012-12-14 18:22 ` [PATCH v2 08/11] tty: Fix ldisc halt sequence on hangup Peter Hurley
2012-12-14 18:22 ` [PATCH v2 09/11] tty: Strengthen no-subsequent-use guarantee of tty_ldisc_halt() Peter Hurley
2012-12-14 18:22 ` [PATCH v2 10/11] tty: Remove unnecessary buffer work flush Peter Hurley
2012-12-14 18:22 ` [PATCH v2 11/11] tty: Halt both ldiscs concurrently Peter Hurley
2012-12-18 15:44 ` [PATCH v2 00/11] tty: Fix buffer work access-after-free Sasha Levin
2012-12-18 16:48   ` Peter Hurley
2012-12-18 20:44     ` Ilya Zykov
2012-12-19 20:27       ` Peter Hurley
2012-12-19 20:38     ` Sasha Levin
2012-12-20 19:03       ` Peter Hurley
2013-02-05 20:20 ` [PATCH v3 00/23] ldisc fixes Peter Hurley
2013-02-05 20:20   ` [PATCH v3 01/23] tty: Add diagnostic for halted line discipline Peter Hurley
2013-02-07 14:50     ` Jiri Slaby
2013-02-07 15:53       ` Peter Hurley
2013-02-07 15:55         ` Jiri Slaby
2013-02-05 20:20   ` [PATCH v3 02/23] n_tty: Factor packet mode status change for reuse Peter Hurley
2013-02-07 14:51     ` Jiri Slaby
2013-02-07 15:58       ` Peter Hurley
2013-02-05 20:20   ` [PATCH v3 03/23] n_tty: Don't flush buffer when closing ldisc Peter Hurley
2013-02-07 14:57     ` Jiri Slaby
2013-02-05 20:20   ` [PATCH v3 04/23] tty: Refactor wait for ldisc refs out of tty_ldisc_hangup() Peter Hurley
2013-02-07 15:11     ` Jiri Slaby
2013-02-05 20:20   ` [PATCH v3 05/23] tty: Remove unnecessary re-test of ldisc ref count Peter Hurley
2013-02-07 15:16     ` Jiri Slaby
2013-02-07 15:59       ` Peter Hurley
2013-02-07 16:02         ` Jiri Slaby
2013-02-05 20:20   ` [PATCH v3 06/23] tty: Fix ldisc halt sequence on hangup Peter Hurley
2013-02-05 20:20   ` [PATCH v3 07/23] tty: Strengthen no-subsequent-use guarantee of tty_ldisc_halt() Peter Hurley
2013-02-07 15:38     ` Jiri Slaby
2013-02-07 16:22       ` Peter Hurley
2013-02-05 20:20   ` [PATCH v3 08/23] tty: Halt both ldiscs concurrently Peter Hurley
2013-02-05 20:20   ` [PATCH v3 09/23] tty: Remove unnecessary buffer work flush Peter Hurley
2013-02-05 20:20   ` [PATCH v3 10/23] tty: Wait for SAK work before waiting for hangup work Peter Hurley
2013-02-05 20:20   ` [PATCH v3 11/23] n_tty: Correct unthrottle-with-buffer-flush comments Peter Hurley
2013-02-05 20:20   ` [PATCH v3 12/23] tty: Kick waiters _after_ the ldisc is locked Peter Hurley
2013-02-07 15:47     ` Jiri Slaby
2013-02-08  3:16       ` Peter Hurley
2013-02-05 20:20   ` [PATCH v3 13/23] n_tty: Fully initialize ldisc before restarting buffer work Peter Hurley
2013-02-05 20:20   ` [PATCH v3 14/23] tty: Don't reenable already enabled ldisc Peter Hurley
2013-02-05 20:20   ` [PATCH v3 15/23] tty: Don't restart ldisc on hangup if racing ldisc kill Peter Hurley
2013-02-05 20:20   ` [PATCH v3 16/23] tty: Make core responsible for synchronizing its work Peter Hurley
2013-02-05 21:04     ` Peter Hurley
2013-02-05 20:20   ` [PATCH v3 17/23] tty: Document lock requirements to halt ldisc Peter Hurley
2013-02-05 20:20   ` [PATCH v3 18/23] tty: Remove stale comment re: tty_ldisc_flush_works() Peter Hurley
2013-02-05 20:20   ` [PATCH v3 19/23] tty: Fix 'deferred reopen' ldisc comment Peter Hurley
2013-02-05 20:20   ` [PATCH v3 20/23] tty: Remove stale comment re: locking in tty_ldisc_release() Peter Hurley
2013-02-05 20:20   ` [PATCH v3 21/23] tty: Re-parent orphaned tty_set_ldisc() comments Peter Hurley
2013-02-05 20:20   ` [PATCH v3 22/23] tty: Bracket ldisc release with TTY_DEBUG_HANGUP messages Peter Hurley
2013-02-05 20:20   ` [PATCH v3 23/23] tty: Add ldisc hangup debug messages Peter Hurley
2013-02-20 20:02   ` [PATCH v4 00/32] ldisc patchset Peter Hurley
2013-02-21  2:33     ` Shawn Guo
2013-02-21  2:33       ` Shawn Guo
2013-02-21  7:55     ` Sebastian Andrzej Siewior
2013-02-21 13:16     ` Sasha Levin
2013-02-21 13:38       ` Peter Hurley
2013-02-22 18:37         ` Peter Hurley
2013-02-23 15:24           ` Sasha Levin
2013-02-23 16:42             ` Sasha Levin
2013-02-27  3:08               ` Peter Hurley
2013-02-23 18:43             ` Peter Hurley
2013-02-23 20:02               ` Sasha Levin [this message]
2013-03-05 17:39           ` Peter Hurley
2013-03-05 21:18     ` Sebastian Andrzej Siewior
2013-03-11 20:44     ` [PATCH v5 00/44] " Peter Hurley
2013-03-11 20:44       ` [PATCH v5 01/44] tty: Add diagnostic for halted line discipline Peter Hurley
2013-03-11 20:44       ` [PATCH v5 02/44] n_tty: Factor packet mode status change for reuse Peter Hurley
2013-03-11 20:44       ` [PATCH v5 03/44] n_tty: Don't flush buffer when closing ldisc Peter Hurley
2013-03-11 20:44       ` [PATCH v5 04/44] tty: Refactor wait for ldisc refs out of tty_ldisc_hangup() Peter Hurley
2013-03-11 20:44       ` [PATCH v5 05/44] tty: Remove unnecessary re-test of ldisc ref count Peter Hurley
2013-03-11 20:44       ` [PATCH v5 06/44] tty: Fix ldisc halt sequence on hangup Peter Hurley
2013-03-11 20:44       ` [PATCH v5 07/44] tty: Relocate tty_ldisc_halt() to avoid forward declaration Peter Hurley
2013-03-11 20:44       ` [PATCH v5 08/44] tty: Strengthen no-subsequent-use guarantee of tty_ldisc_halt() Peter Hurley
2013-03-11 20:44       ` [PATCH v5 09/44] tty: Halt both ldiscs concurrently Peter Hurley
2013-03-11 20:44       ` [PATCH v5 10/44] tty: Wait for SAK work before waiting for hangup work Peter Hurley
2013-03-11 20:44       ` [PATCH v5 11/44] n_tty: Correct unthrottle-with-buffer-flush comments Peter Hurley
2013-03-11 20:44       ` [PATCH v5 12/44] n_tty: Fully initialize ldisc before restarting buffer work Peter Hurley
2013-03-11 20:44       ` [PATCH v5 13/44] tty: Don't reenable already enabled ldisc Peter Hurley
2013-03-11 20:44       ` [PATCH v5 14/44] tty: Complete ownership transfer of flip buffers Peter Hurley
2013-03-11 20:44       ` [PATCH v5 15/44] tty: Make core responsible for synchronizing its work Peter Hurley
2013-03-11 20:44       ` [PATCH v5 16/44] tty: Fix 'deferred reopen' ldisc comment Peter Hurley
2013-03-11 20:44       ` [PATCH v5 17/44] tty: Bracket ldisc release with TTY_DEBUG_HANGUP messages Peter Hurley
2013-03-11 20:44       ` [PATCH v5 18/44] tty: Add ldisc hangup debug messages Peter Hurley
2013-03-11 20:44       ` [PATCH v5 19/44] tty: Don't protect atomic operation with mutex Peter Hurley
2013-03-11 20:44       ` [PATCH v5 20/44] tty: Separate release semantics of ldisc reference Peter Hurley
2013-03-11 20:44       ` [PATCH v5 21/44] tty: Document unsafe ldisc reference acquire Peter Hurley
2013-03-11 20:44       ` [PATCH v5 22/44] tty: Fold one-line assign function into callers Peter Hurley
2013-03-11 20:44       ` [PATCH v5 23/44] tty: Locate get/put ldisc functions together Peter Hurley
2013-03-11 20:44       ` [PATCH v5 24/44] tty: Remove redundant tty_wait_until_sent() Peter Hurley
2013-03-11 20:44       ` [PATCH v5 25/44] tty: Fix recursive deadlock in tty_perform_flush() Peter Hurley
2013-03-11 21:36         ` Peter Hurley
2013-03-11 21:36           ` Peter Hurley
2013-03-11 20:44       ` [PATCH v5 26/44] tty: Add read-recursive, writer-prioritized rw semaphore Peter Hurley
2013-03-18 23:58         ` Greg Kroah-Hartman
2013-03-19  1:01           ` Peter Hurley
2013-03-19  1:59             ` Greg Kroah-Hartman
2013-03-19 15:43               ` Peter Hurley
2013-03-26 23:47               ` Peter Hurley
2013-03-11 20:44       ` [PATCH v5 27/44] tty: Drop lock contention stat from ldsem trylocks Peter Hurley
2013-03-11 20:44       ` [PATCH v5 28/44] tty: Remove ldsem recursion support Peter Hurley
2013-03-18 23:59         ` Greg Kroah-Hartman
2013-03-19  0:01           ` Peter Hurley
2013-03-19  0:05             ` Greg Kroah-Hartman
2013-03-19  0:12               ` Peter Hurley
2013-03-11 20:44       ` [PATCH v5 29/44] tty: Add lock/unlock ldisc pair functions Peter Hurley
2013-03-11 20:44       ` [PATCH v5 30/44] tty: Replace ldisc locking with ldisc_sem Peter Hurley
2013-03-11 20:44       ` [PATCH v5 31/44] tty: Clarify ldisc variable Peter Hurley
2013-03-11 20:44       ` [PATCH v5 32/44] tty: Fix hangup race with TIOCSETD ioctl Peter Hurley
2013-03-11 20:44       ` [PATCH v5 33/44] tty: Clarify multiple-references comment in " Peter Hurley
2013-03-11 20:44       ` [PATCH v5 34/44] tty: Fix tty_ldisc_lock name collision Peter Hurley
2013-03-11 20:44       ` [PATCH v5 35/44] tty: Drop "tty is NULL" flip buffer diagnostic Peter Hurley
2013-03-11 20:44       ` [PATCH v5 36/44] tty: Inline ldsem down_failed() into down_{read,write}_failed() Peter Hurley
2013-03-11 20:44       ` [PATCH v5 37/44] tty: Drop ldsem wait type Peter Hurley
2013-03-11 20:44       ` [PATCH v5 38/44] tty: Drop wake type optimization Peter Hurley
2013-03-11 20:44       ` [PATCH v5 39/44] tty: Factor ldsem writer trylock Peter Hurley
2013-03-11 20:45       ` [PATCH v5 40/44] tty: Simplify lock taking for waiting writers Peter Hurley
2013-03-11 20:45       ` [PATCH v5 41/44] tty: Implement ldsem fast path write lock stealing Peter Hurley
2013-03-11 20:45       ` [PATCH v5 42/44] tty: Reduce and simplify ldsem atomic ops Peter Hurley
2013-03-11 20:45       ` [PATCH v5 43/44] tty: Early-out ldsem write lock stealing Peter Hurley
2013-03-11 20:45       ` [PATCH v5 44/44] tty: Early-out tardy ldsem readers Peter Hurley
2013-03-12  2:28       ` [PATCH v5 00/44] ldisc patchset Michel Lespinasse
2013-03-12 16:47         ` Peter Hurley
2013-03-13 11:36           ` Michel Lespinasse
2013-03-14  1:12             ` Peter Hurley
2013-03-14  7:25               ` Michel Lespinasse
2013-03-14 11:42                 ` Peter Hurley
2013-03-14 12:13                   ` Michel Lespinasse
2013-03-18 23:54       ` Greg Kroah-Hartman
2013-03-19 19:26       ` [PATCH 0/7] ldsem patchset Peter Hurley
2013-03-19 19:26         ` [PATCH 1/7] tty: Add timed, writer-prioritized rw semaphore Peter Hurley
2013-03-19 19:26         ` [PATCH 2/7] tty: Add lock/unlock ldisc pair functions Peter Hurley
2013-03-19 19:26         ` [PATCH 3/7] tty: Replace ldisc locking with ldisc_sem Peter Hurley
2013-03-19 19:26         ` [PATCH 4/7] tty: Clarify ldisc variable Peter Hurley
2013-03-19 19:26         ` [PATCH 5/7] tty: Fix hangup race with TIOCSETD ioctl Peter Hurley
2013-03-19 19:26         ` [PATCH 6/7] tty: Clarify multiple-references comment in " Peter Hurley
2013-03-19 19:26         ` [PATCH 7/7] tty: Fix tty_ldisc_lock name collision Peter Hurley
2013-02-20 20:02   ` [PATCH v4 01/32] tty: Add diagnostic for halted line discipline Peter Hurley
2013-02-20 20:02   ` [PATCH v4 02/32] n_tty: Factor packet mode status change for reuse Peter Hurley
2013-02-20 20:02   ` [PATCH v4 03/32] n_tty: Don't flush buffer when closing ldisc Peter Hurley
2013-02-20 20:02   ` [PATCH v4 04/32] tty: Refactor wait for ldisc refs out of tty_ldisc_hangup() Peter Hurley
2013-02-20 20:02   ` [PATCH v4 05/32] tty: Remove unnecessary re-test of ldisc ref count Peter Hurley
2013-02-20 20:02   ` [PATCH v4 06/32] tty: Fix ldisc halt sequence on hangup Peter Hurley
2013-02-20 20:02   ` [PATCH v4 07/32] tty: Relocate tty_ldisc_halt() to avoid forward declaration Peter Hurley
2013-02-20 20:02   ` [PATCH v4 08/32] tty: Strengthen no-subsequent-use guarantee of tty_ldisc_halt() Peter Hurley
2013-02-20 20:02   ` [PATCH v4 09/32] tty: Halt both ldiscs concurrently Peter Hurley
2013-02-20 20:02   ` [PATCH v4 10/32] tty: Wait for SAK work before waiting for hangup work Peter Hurley
2013-02-20 20:02   ` [PATCH v4 11/32] n_tty: Correct unthrottle-with-buffer-flush comments Peter Hurley
2013-02-20 20:02   ` [PATCH v4 12/32] n_tty: Fully initialize ldisc before restarting buffer work Peter Hurley
2013-02-20 20:03   ` [PATCH v4 13/32] tty: Don't reenable already enabled ldisc Peter Hurley
2013-02-20 20:03   ` [PATCH v4 14/32] tty: Complete ownership transfer of flip buffers Peter Hurley
2013-02-20 20:03   ` [PATCH v4 15/32] tty: Make core responsible for synchronizing its work Peter Hurley
2013-02-20 20:03   ` [PATCH v4 16/32] tty: Fix 'deferred reopen' ldisc comment Peter Hurley
2013-02-20 20:03   ` [PATCH v4 17/32] tty: Bracket ldisc release with TTY_DEBUG_HANGUP messages Peter Hurley
2013-02-20 20:03   ` [PATCH v4 18/32] tty: Add ldisc hangup debug messages Peter Hurley
2013-02-20 20:03   ` [PATCH v4 19/32] tty: Don't protect atomic operation with mutex Peter Hurley
2013-02-20 20:03   ` [PATCH v4 20/32] tty: Separate release semantics of ldisc reference Peter Hurley
2013-02-20 20:03   ` [PATCH v4 21/32] tty: Document unsafe ldisc reference acquire Peter Hurley
2013-02-20 20:03   ` [PATCH v4 22/32] tty: Fold one-line assign function into callers Peter Hurley
2013-02-20 20:03   ` [PATCH v4 23/32] tty: Locate get/put ldisc functions together Peter Hurley
2013-02-20 20:03   ` [PATCH v4 24/32] tty: Remove redundant tty_wait_until_sent() Peter Hurley
2013-02-20 20:03   ` [PATCH v4 25/32] tty: Add read-recursive, writer-prioritized rw semaphore Peter Hurley
2013-03-08 17:12     ` Peter Hurley
2013-02-20 20:03   ` [PATCH v4 26/32] tty: Add lock/unlock ldisc pair functions Peter Hurley
2013-02-20 20:03   ` [PATCH v4 27/32] tty: Replace ldisc locking with ldisc_sem Peter Hurley
2013-02-20 20:03   ` [PATCH v4 28/32] tty: Clarify ldisc variable Peter Hurley
2013-02-20 20:03   ` [PATCH v4 29/32] tty: Fix hangup race with TIOCSETD ioctl Peter Hurley
2013-02-20 20:03   ` [PATCH v4 30/32] tty: Clarify multiple-references comment in " Peter Hurley
2013-02-20 20:03   ` [PATCH v4 31/32] tty: Fix tty_ldisc_lock name collision Peter Hurley
2013-02-20 20:03   ` [PATCH v4 32/32] tty: Drop "tty is NULL" flip buffer diagnostic Peter Hurley
2013-03-05 20:50   ` [PATCH v3 00/23] ldisc fixes Sebastian Andrzej Siewior
2013-03-05 22:20     ` Peter Hurley
2013-03-05 22:39       ` Jiri Slaby
2013-03-05 23:14         ` Peter Hurley
2013-03-17 18:50       ` Sebastian Andrzej Siewior

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51292038.3010100@gmail.com \
    --to=levinsasha928@gmail.com \
    --cc=bigeasy@linutronix.de \
    --cc=davej@redhat.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=ilya@ilyx.ru \
    --cc=jslaby@suse.cz \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=michael@ellerman.id.au \
    --cc=peter@hurleysoftware.com \
    --cc=shawn.guo@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.