2003-11-12 22:56:26

by Tonnerre Anklin

[permalink] [raw]
Subject: [2.6] VC (keyboard) doesn't clean up its buffers

Salut,

I've got into trouble with the Linux 2.6 keyboard layer of Linux
2.6.0-test9* (That is, I've tested the original as well as BK and the
mm1 and mm2 patches.) The problem is the keyboard buffer.

tty->filp.char_buf is filled correctly by my typings. The buffer state
goes up, and once I've typed 255 characters, of course it's
full. *But* the big deal with the keyboard buffer is usually somebody
who's reading out the contents and processing it, so that the
characters I typed are processed. This is *not* taking place. The
buffer just fills up and there we are.

I'm of course trying to solve that problem on my own (I remember that
last time I've had a problem no one even read my email), but I'd be
glad if you'd give me some additional hints on what to do.

If I use SysRq, the whole thing works, of course, as SysRqs aren't
read from the input buffer.

(The input is processed corectly all the way from the keyboard (PS/2
or USB, doesn't matter, as it works both ways.) into the buffers. The
up/down events are handled correctly. The only thing that's wrong is
that nobody is reading out the buffer afterwards.)

Thanks a lot for every helpful response.

Thunder


Attachments:
(No filename) (1.20 kB)
signature.asc (189.00 B)
Digital signature
Download all attachments

2003-11-14 04:40:40

by Tonnerre Anklin

[permalink] [raw]
Subject: Re: [2.6] VC (keyboard) doesn't clean up its buffers

Salut,

> tty->filp.char_buf is filled correctly by my typings. The buffer
> state goes up, and once I've typed 255 characters, of course it's
> full. *But* the big deal with the keyboard buffer is usually
> somebody who's reading out the contents and processing it, so that
> the characters I typed are processed. This is *not* taking
> place. The buffer just fills up and there we are.

I've explored the kernel stack a bit using SysRq hacks, and I found
out that this misbehavior was in fact caused by ISDN. It added a work
for "isac_bh()" into the CPU workqueue with list heads inited, so
every time the work got executed, execution looped, and since ISDN was
loaded before I typed the first character, the flush_to_ldisc() work
was never run. I'm going to fix that bug soon.

Thunder


Attachments:
(No filename) (831.00 B)
signature.asc (189.00 B)
Digital signature
Download all attachments