lkml.org 
[lkml]   [2009]   [Oct]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [Bug #14388] keyboard under X with 2.6.31


On Fri, 16 Oct 2009, OGAWA Hirofumi wrote:
>
> I.e. the following or something,
>
> static inline int input_available_p(struct tty_struct *tty, int amt)
> {
> int try = 0;
>
> retry:
> if (tty->icanon) {
> if (tty->canon_data)
> return 1;
> } else if (tty->read_cnt >= (amt ? amt : 1))
> return 1;
>
> if (!checked) {
> tty_flush_to_ldisc(tty);
> try = 1;
> goto retry;
> }
>
> return 0;
> }

Yeah, we could do that. Especially if we ever see this in any profiles. I
doubt we do, but..

> Sorry if I'm missing the point. Doesn't this have (possible) race with
> schedule_delayed_work() (i.e. by tty writer)?
>
> cpu0 cpu1
>
> if (del_timer(&dwork->timer)) {
> // cpu0 doesn't set _PENDING
> schedule_delayed_work()

We don't care.

We want to make sure that a writer that wrote the data strictly _before_
the reader is reading will always have the data show up.

But if the writer is exactly concurrent with the reader, it's fine to not
see the data. Because at that point, we will rely not on the tty buffers,
but on the writer doing a tty_wakeup() to notify us that there is new
data.

Linus


\
 
 \ /
  Last update: 2009-10-18 23:28    [W:0.187 / U:0.792 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site