Commit 33b37a33c242542fac2980b8ccd90977388b7a8d

Authored by Paul Fulghum
Committed by Linus Torvalds
1 parent 2c3bb20f46

[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>

Showing 4 changed files with 6 additions and 17 deletions Side-by-side Diff

drivers/char/tty_io.c
... ... @@ -267,7 +267,6 @@
267 267 p->used = 0;
268 268 p->size = size;
269 269 p->next = NULL;
270   - p->active = 0;
271 270 p->commit = 0;
272 271 p->read = 0;
273 272 p->char_buf_ptr = (char *)(p->data);
274 273  
... ... @@ -327,10 +326,9 @@
327 326 /* OPTIMISATION: We could keep a per tty "zero" sized buffer to
328 327 remove this conditional if its worth it. This would be invisible
329 328 to the callers */
330   - if ((b = tty->buf.tail) != NULL) {
  329 + if ((b = tty->buf.tail) != NULL)
331 330 left = b->size - b->used;
332   - b->active = 1;
333   - } else
  331 + else
334 332 left = 0;
335 333  
336 334 if (left < size) {
337 335  
... ... @@ -338,12 +336,10 @@
338 336 if ((n = tty_buffer_find(tty, size)) != NULL) {
339 337 if (b != NULL) {
340 338 b->next = n;
341   - b->active = 0;
342 339 b->commit = b->used;
343 340 } else
344 341 tty->buf.head = n;
345 342 tty->buf.tail = n;
346   - n->active = 1;
347 343 } else
348 344 size = left;
349 345 }
350 346  
... ... @@ -404,10 +400,8 @@
404 400 {
405 401 unsigned long flags;
406 402 spin_lock_irqsave(&tty->buf.lock, flags);
407   - if (tty->buf.tail != NULL) {
408   - tty->buf.tail->active = 0;
  403 + if (tty->buf.tail != NULL)
409 404 tty->buf.tail->commit = tty->buf.tail->used;
410   - }
411 405 spin_unlock_irqrestore(&tty->buf.lock, flags);
412 406 schedule_delayed_work(&tty->buf.work, 1);
413 407 }
414 408  
... ... @@ -2902,10 +2896,8 @@
2902 2896 {
2903 2897 unsigned long flags;
2904 2898 spin_lock_irqsave(&tty->buf.lock, flags);
2905   - if (tty->buf.tail != NULL) {
2906   - tty->buf.tail->active = 0;
  2899 + if (tty->buf.tail != NULL)
2907 2900 tty->buf.tail->commit = tty->buf.tail->used;
2908   - }
2909 2901 spin_unlock_irqrestore(&tty->buf.lock, flags);
2910 2902  
2911 2903 if (tty->low_latency)
include/linux/kbd_kern.h
... ... @@ -155,10 +155,8 @@
155 155 {
156 156 unsigned long flags;
157 157 spin_lock_irqsave(&t->buf.lock, flags);
158   - if (t->buf.tail != NULL) {
159   - t->buf.tail->active = 0;
  158 + if (t->buf.tail != NULL)
160 159 t->buf.tail->commit = t->buf.tail->used;
161   - }
162 160 spin_unlock_irqrestore(&t->buf.lock, flags);
163 161 schedule_work(&t->buf.work);
164 162 }
... ... @@ -57,7 +57,6 @@
57 57 unsigned char *flag_buf_ptr;
58 58 int used;
59 59 int size;
60   - int active;
61 60 int commit;
62 61 int read;
63 62 /* Data points here */
include/linux/tty_flip.h
... ... @@ -12,7 +12,7 @@
12 12 unsigned char ch, char flag)
13 13 {
14 14 struct tty_buffer *tb = tty->buf.tail;
15   - if (tb && tb->active && tb->used < tb->size) {
  15 + if (tb && tb->used < tb->size) {
16 16 tb->flag_buf_ptr[tb->used] = flag;
17 17 tb->char_buf_ptr[tb->used++] = ch;
18 18 return 1;