All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joe Peterson <joe@skyrush.com>
To: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: "Elias Oltmanns" <eo@nebensachen.de>,
	"Török Edwin" <edwintorok@gmail.com>,
	"Linux Kernel" <linux-kernel@vger.kernel.org>
Subject: Re: Ctrl+C doesn't interrupt process waiting for I/O
Date: Fri, 11 Jul 2008 18:44:12 -0600	[thread overview]
Message-ID: <4877FE5C.3000900@skyrush.com> (raw)
In-Reply-To: <20080711154748.407ea6c9@lxorguk.ukuu.org.uk>

Alan Cox wrote:
>> seems that the following two calls do the same thing in n_tty.c:
>> 		n_tty_flush_buffer(tty);
>> 		tty_driver_flush_buffer(tty);
> 
> Sorry missed this originally - they don't do the same thing. The first
> clears out anything in the ldisc internally the second clears out
> anything in the tty driver itself.

Alan, before I wrote this, I had put a printk() in n_tty_flush_buffer()
and noticed it was called twice when ^C was hit in an xterm.  Then I did
some investigating into this a few days ago, putting a dump_stack() in
n_tty_flush_buffer() so I could see how it is being called.

I realized the calls indeed have different purposes at that point.  I
still wonder, though, why when processing a ^C in an xterm/pty,
n_tty_flush_buffer() does get called again from the driver call.  See
the two traces below from the ldisc and driver flushes:

***********  CTRL-C received
Pid: 4669, comm: xterm Not tainted 2.6.26-rc8-git3 #1
 [<c0283126>] n_tty_flush_buffer+0xd/0x67
 [<c028385c>] n_tty_receive_buf+0x398/0xd87
 [<c031824b>] ? sock_aio_read+0xed/0xfb
 [<c017a824>] ? do_sync_read+0xab/0xe9
 [<c0136257>] ? hrtimer_forward+0xd6/0xec
 [<c0285569>] pty_write+0x2d/0x3b
 [<c0283450>] write_chan+0x21b/0x28f
 [<c011bfa4>] ? default_wake_function+0x0/0xd
 [<c028103f>] tty_write+0x14e/0x1be
 [<c0283235>] ? write_chan+0x0/0x28f
 [<c017a8ec>] ? rw_verify_area+0x8a/0xad
 [<c0280ef1>] ? tty_write+0x0/0x1be
 [<c017ae88>] vfs_write+0x8c/0x133
 [<c017b48c>] sys_write+0x3b/0x60
 [<c0103aa3>] sysenter_past_esp+0x78/0xb1
 =======================
Pid: 4669, comm: xterm Not tainted 2.6.26-rc8-git3 #1
 [<c02857c5>] ? pty_unthrottle+0x15/0x21
 [<c0283126>] n_tty_flush_buffer+0xd/0x67
 [<c0285663>] pty_flush_buffer+0x20/0x67
 [<c038ae61>] ? _spin_unlock_irqrestore+0x1b/0x2f
 [<c0284934>] tty_driver_flush_buffer+0x13/0x15
 [<c0283863>] n_tty_receive_buf+0x39f/0xd87
 [<c031824b>] ? sock_aio_read+0xed/0xfb
 [<c017a824>] ? do_sync_read+0xab/0xe9
 [<c0136257>] ? hrtimer_forward+0xd6/0xec
 [<c0285569>] pty_write+0x2d/0x3b
 [<c0283450>] write_chan+0x21b/0x28f
 [<c011bfa4>] ? default_wake_function+0x0/0xd
 [<c028103f>] tty_write+0x14e/0x1be
 [<c0283235>] ? write_chan+0x0/0x28f
 [<c017a8ec>] ? rw_verify_area+0x8a/0xad
 [<c0280ef1>] ? tty_write+0x0/0x1be
 [<c017ae88>] vfs_write+0x8c/0x133
 [<c017b48c>] sys_write+0x3b/0x60
 [<c0103aa3>] sysenter_past_esp+0x78/0xb1
 =======================

In a Linux virtual console/tty, however, the tty driver flush doesn't
call the ldisc flush again in my tests:

***********  CTRL-C received
Pid: 6, comm: events/0 Not tainted 2.6.26-rc8-git3 #1
 [<c0283126>] n_tty_flush_buffer+0xd/0x67
 [<c028385c>] n_tty_receive_buf+0x398/0xd87
 [<c038ab32>] ? _spin_lock_irqsave+0x27/0x41
 [<c038ab32>] ? _spin_lock_irqsave+0x27/0x41
 [<c038ae61>] ? _spin_unlock_irqrestore+0x1b/0x2f
 [<c027f3ee>] ? tty_ldisc_try+0x2f/0x35
 [<c027f9e2>] flush_to_ldisc+0xde/0x14d
 [<c013129d>] run_workqueue+0x78/0x102
 [<c027f904>] ? flush_to_ldisc+0x0/0x14d
 [<c0131a0b>] ? worker_thread+0x0/0xbf
 [<c0131abf>] worker_thread+0xb4/0xbf
 [<c0133f4d>] ? autoremove_wake_function+0x0/0x33
 [<c0133e77>] kthread+0x3b/0x64
 [<c0133e3c>] ? kthread+0x0/0x64
 [<c0104753>] kernel_thread_helper+0x7/0x10
 =======================


						-Joe

  reply	other threads:[~2008-07-12  0:44 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-28 10:38 Ctrl+C doesn't interrupt process waiting for I/O Török Edwin
2008-06-29  2:44 ` Jeremy Fitzhardinge
2008-06-29  2:45   ` Jeremy Fitzhardinge
2008-06-29  3:42   ` Avi Kivity
2008-06-29  5:13     ` Jeremy Fitzhardinge
2008-06-29  5:39       ` Avi Kivity
2008-06-29  6:25         ` Jeremy Fitzhardinge
2008-06-29  7:45           ` Török Edwin
2008-06-29 23:57           ` Bill Davidsen
2008-06-29 12:37         ` Alan Cox
2008-06-30 17:35       ` J. Bruce Fields
2008-06-29  7:09   ` Török Edwin
2008-06-29  7:23   ` David Newall
2008-06-29 12:10   ` Andi Kleen
2008-06-29 16:02     ` Jeremy Fitzhardinge
2008-06-30 10:30       ` Helge Hafting
2008-07-01  7:47 ` Elias Oltmanns
2008-07-01  8:02   ` Elias Oltmanns
2008-07-01  8:28     ` Török Edwin
2008-07-01  9:59       ` Elias Oltmanns
2008-07-01 12:07       ` Joe Peterson
2008-07-01  8:50   ` David Newall
2008-07-01  9:01     ` Török Edwin
2008-07-01  9:12       ` David Newall
2008-07-01 14:12   ` Joe Peterson
2008-07-01 14:48     ` Elias Oltmanns
2008-07-01 16:27       ` Joe Peterson
2008-07-02 21:26   ` Joe Peterson
2008-07-04 20:10   ` Joe Peterson
2008-07-04 20:23     ` Alan Cox
2008-07-04 21:17       ` Joe Peterson
2008-07-11 14:47         ` Alan Cox
2008-07-12  0:44           ` Joe Peterson [this message]
2008-07-12 10:37             ` Alan Cox
2008-07-04 21:21       ` Andi Kleen
2008-07-04 21:14         ` Alan Cox
2008-07-04 21:36           ` Andi Kleen
2008-07-04 21:44             ` Alan Cox
2008-07-04 22:09               ` Andi Kleen
2008-07-05 10:34                 ` Alan Cox
2008-07-05 11:00                   ` Andi Kleen
2008-07-05 11:34                     ` Alan Cox
2008-07-05 12:49                     ` Elias Oltmanns
2008-07-05 14:01                       ` Andi Kleen
2008-07-05 19:58                       ` Joe Peterson
2008-07-06  8:28                         ` Elias Oltmanns
  -- strict thread matches above, loose matches on Subject: below --
2008-07-03  0:59 Matthew Wilcox

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=4877FE5C.3000900@skyrush.com \
    --to=joe@skyrush.com \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=edwintorok@gmail.com \
    --cc=eo@nebensachen.de \
    --cc=linux-kernel@vger.kernel.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.