[PATCH] remove active field from tty buffer structure

Remove 'active' field from tty buffer structure.  This was added in 2.6.16
as part of a patch to make the new tty buffering SMP safe.  This field is
unnecessary with the more intelligently written flush_to_ldisc that adds
receive_room handling.

Removing this field reverts to simpler logic where the tail buffer is
always the 'active' buffer, which should not be freed by flush_to_ldisc.
(active == buffer being filled with new data)

The result is simpler, smaller, and faster tty buffer code.

Signed-off-by: Paul Fulghum <paulkf@microgate.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Paul Fulghum 2006-06-28 04:26:49 -07:00 committed by Linus Torvalds
parent 2c3bb20f46
commit 33b37a33c2
4 changed files with 6 additions and 17 deletions

View file

@ -267,7 +267,6 @@ static struct tty_buffer *tty_buffer_alloc(size_t size)
p->used = 0; p->used = 0;
p->size = size; p->size = size;
p->next = NULL; p->next = NULL;
p->active = 0;
p->commit = 0; p->commit = 0;
p->read = 0; p->read = 0;
p->char_buf_ptr = (char *)(p->data); p->char_buf_ptr = (char *)(p->data);
@ -327,10 +326,9 @@ int tty_buffer_request_room(struct tty_struct *tty, size_t size)
/* OPTIMISATION: We could keep a per tty "zero" sized buffer to /* OPTIMISATION: We could keep a per tty "zero" sized buffer to
remove this conditional if its worth it. This would be invisible remove this conditional if its worth it. This would be invisible
to the callers */ to the callers */
if ((b = tty->buf.tail) != NULL) { if ((b = tty->buf.tail) != NULL)
left = b->size - b->used; left = b->size - b->used;
b->active = 1; else
} else
left = 0; left = 0;
if (left < size) { if (left < size) {
@ -338,12 +336,10 @@ int tty_buffer_request_room(struct tty_struct *tty, size_t size)
if ((n = tty_buffer_find(tty, size)) != NULL) { if ((n = tty_buffer_find(tty, size)) != NULL) {
if (b != NULL) { if (b != NULL) {
b->next = n; b->next = n;
b->active = 0;
b->commit = b->used; b->commit = b->used;
} else } else
tty->buf.head = n; tty->buf.head = n;
tty->buf.tail = n; tty->buf.tail = n;
n->active = 1;
} else } else
size = left; size = left;
} }
@ -404,10 +400,8 @@ void tty_schedule_flip(struct tty_struct *tty)
{ {
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&tty->buf.lock, flags); spin_lock_irqsave(&tty->buf.lock, flags);
if (tty->buf.tail != NULL) { if (tty->buf.tail != NULL)
tty->buf.tail->active = 0;
tty->buf.tail->commit = tty->buf.tail->used; tty->buf.tail->commit = tty->buf.tail->used;
}
spin_unlock_irqrestore(&tty->buf.lock, flags); spin_unlock_irqrestore(&tty->buf.lock, flags);
schedule_delayed_work(&tty->buf.work, 1); schedule_delayed_work(&tty->buf.work, 1);
} }
@ -2902,10 +2896,8 @@ void tty_flip_buffer_push(struct tty_struct *tty)
{ {
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&tty->buf.lock, flags); spin_lock_irqsave(&tty->buf.lock, flags);
if (tty->buf.tail != NULL) { if (tty->buf.tail != NULL)
tty->buf.tail->active = 0;
tty->buf.tail->commit = tty->buf.tail->used; tty->buf.tail->commit = tty->buf.tail->used;
}
spin_unlock_irqrestore(&tty->buf.lock, flags); spin_unlock_irqrestore(&tty->buf.lock, flags);
if (tty->low_latency) if (tty->low_latency)

View file

@ -155,10 +155,8 @@ static inline void con_schedule_flip(struct tty_struct *t)
{ {
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&t->buf.lock, flags); spin_lock_irqsave(&t->buf.lock, flags);
if (t->buf.tail != NULL) { if (t->buf.tail != NULL)
t->buf.tail->active = 0;
t->buf.tail->commit = t->buf.tail->used; t->buf.tail->commit = t->buf.tail->used;
}
spin_unlock_irqrestore(&t->buf.lock, flags); spin_unlock_irqrestore(&t->buf.lock, flags);
schedule_work(&t->buf.work); schedule_work(&t->buf.work);
} }

View file

@ -57,7 +57,6 @@ struct tty_buffer {
unsigned char *flag_buf_ptr; unsigned char *flag_buf_ptr;
int used; int used;
int size; int size;
int active;
int commit; int commit;
int read; int read;
/* Data points here */ /* Data points here */

View file

@ -12,7 +12,7 @@ static inline int tty_insert_flip_char(struct tty_struct *tty,
unsigned char ch, char flag) unsigned char ch, char flag)
{ {
struct tty_buffer *tb = tty->buf.tail; struct tty_buffer *tb = tty->buf.tail;
if (tb && tb->active && tb->used < tb->size) { if (tb && tb->used < tb->size) {
tb->flag_buf_ptr[tb->used] = flag; tb->flag_buf_ptr[tb->used] = flag;
tb->char_buf_ptr[tb->used++] = ch; tb->char_buf_ptr[tb->used++] = ch;
return 1; return 1;