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
next prev parent 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.