Re: [Bug #14388] keyboard under X with 2.6.31

From: Frédéric L. W. Meunier
Date: Mon Oct 12 2009 - 22:55:41 EST


On Mon, 12 Oct 2009, Linus Torvalds wrote:

On Mon, 12 Oct 2009, Nix wrote:
On 12 Oct 2009, Justin P. Mattock uttered the following:

Not sure where this stands. Right now all three machines I have seem to be having no issues with the kayboard
(xserver 1.6.*) I can go and build the latest xserver(1.7) to see if I hit something.
[...]
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14388
Subject : keyboard under X with 2.6.31
Submitter : Frédéric L. W. Meunier <fredlwm@xxxxxxxxx>
Date : 2009-10-07 20:19 (5 days old)
First-Bad-Commit: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e043e42bdb66885b3ac10d27a01ccb9972e2b0a3
References : http://marc.info/?l=linux-kernel&m=125494753228217&w=4

I have been seeing problems precisely like those described (sometimes
the keyboard dies, sometimes it gets 'stuck' with a key held down, until
I switch TTYs, which generally means killing X as I'm not aware of an
easy way to switch VTs using only the mouse), since I moved to 2.6.31

The particular commit that was bisected to should really not matter for X,
except perhaps from a timing standpoint.

The problem it fixed was in pty's, and X doesn't use them much if at all
(various X _programs_ may, of course, but the symptoms don't sound like
it's just a particular X app that has issues, but more of a generic X
keyboard handling thing)

But for non-pty's, there should be no semantic changes from that commit
outside of some general tty timing differences by doing that
tty_flush_to_ldisc() at new points.

I could fairly easily imagine that some timing difference does expose
another longer-standing problem in either the kernel or X itself. So the
bisection isn't necessarily wrong, it's just not likely telling us what
the real problem is.

Of course, maybe there is some race condition in the tty_buffer.c code. We
_used_ to not call flush_to_ldisc() except through the workqueue code, so
races would not be seen in normal circumstances. Now that flush_to_ldisc()
could easily get called both synchronously from tty_read()/tty_poll(),
while also being hit from the workqueues.

Alan, Ogawa-san, do either of you see some problem in tty_buffer.c,
perhaps?

Just a note. With me, all the keyboard problems happened while I was under X, but doing something in a terminal running screen. Reverting the commit stopped the problem.