Commit 33b37a33 authored by Paul Fulghum's avatar Paul Fulghum Committed by Linus Torvalds

[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: default avatarPaul Fulghum <paulkf@microgate.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 2c3bb20f
...@@ -267,7 +267,6 @@ static struct tty_buffer *tty_buffer_alloc(size_t size) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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)
......
...@@ -155,10 +155,8 @@ static inline void con_schedule_flip(struct tty_struct *t) ...@@ -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);
} }
......
...@@ -57,7 +57,6 @@ struct tty_buffer { ...@@ -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 */
......
...@@ -12,7 +12,7 @@ static inline int tty_insert_flip_char(struct tty_struct *tty, ...@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment