diff options
author | Paul Fulghum <paulkf@microgate.com> | 2006-06-28 07:26:49 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-28 17:59:05 -0400 |
commit | 33b37a33c242542fac2980b8ccd90977388b7a8d (patch) | |
tree | e3a18605e57e1d1268dd04e9a3e5276f7f0488fe | |
parent | 2c3bb20f46709a0adfa7ea408013edbcab945d5a (diff) |
[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>
-rw-r--r-- | drivers/char/tty_io.c | 16 | ||||
-rw-r--r-- | include/linux/kbd_kern.h | 4 | ||||
-rw-r--r-- | include/linux/tty.h | 1 | ||||
-rw-r--r-- | include/linux/tty_flip.h | 2 |
4 files changed, 6 insertions, 17 deletions
diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c index 1f03ebf165d9..8d19f7281f0b 100644 --- a/drivers/char/tty_io.c +++ b/drivers/char/tty_io.c | |||
@@ -267,7 +267,6 @@ static struct tty_buffer *tty_buffer_alloc(size_t size) | |||
267 | p->used = 0; | 267 | p->used = 0; |
268 | p->size = size; | 268 | p->size = size; |
269 | p->next = NULL; | 269 | p->next = NULL; |
270 | p->active = 0; | ||
271 | p->commit = 0; | 270 | p->commit = 0; |
272 | p->read = 0; | 271 | p->read = 0; |
273 | p->char_buf_ptr = (char *)(p->data); | 272 | p->char_buf_ptr = (char *)(p->data); |
@@ -327,10 +326,9 @@ int tty_buffer_request_room(struct tty_struct *tty, size_t size) | |||
327 | /* OPTIMISATION: We could keep a per tty "zero" sized buffer to | 326 | /* OPTIMISATION: We could keep a per tty "zero" sized buffer to |
328 | remove this conditional if its worth it. This would be invisible | 327 | remove this conditional if its worth it. This would be invisible |
329 | to the callers */ | 328 | to the callers */ |
330 | if ((b = tty->buf.tail) != NULL) { | 329 | if ((b = tty->buf.tail) != NULL) |
331 | left = b->size - b->used; | 330 | left = b->size - b->used; |
332 | b->active = 1; | 331 | else |
333 | } else | ||
334 | left = 0; | 332 | left = 0; |
335 | 333 | ||
336 | if (left < size) { | 334 | if (left < size) { |
@@ -338,12 +336,10 @@ int tty_buffer_request_room(struct tty_struct *tty, size_t size) | |||
338 | if ((n = tty_buffer_find(tty, size)) != NULL) { | 336 | if ((n = tty_buffer_find(tty, size)) != NULL) { |
339 | if (b != NULL) { | 337 | if (b != NULL) { |
340 | b->next = n; | 338 | b->next = n; |
341 | b->active = 0; | ||
342 | b->commit = b->used; | 339 | b->commit = b->used; |
343 | } else | 340 | } else |
344 | tty->buf.head = n; | 341 | tty->buf.head = n; |
345 | tty->buf.tail = n; | 342 | tty->buf.tail = n; |
346 | n->active = 1; | ||
347 | } else | 343 | } else |
348 | size = left; | 344 | size = left; |
349 | } | 345 | } |
@@ -404,10 +400,8 @@ void tty_schedule_flip(struct tty_struct *tty) | |||
404 | { | 400 | { |
405 | unsigned long flags; | 401 | unsigned long flags; |
406 | spin_lock_irqsave(&tty->buf.lock, flags); | 402 | spin_lock_irqsave(&tty->buf.lock, flags); |
407 | if (tty->buf.tail != NULL) { | 403 | if (tty->buf.tail != NULL) |
408 | tty->buf.tail->active = 0; | ||
409 | tty->buf.tail->commit = tty->buf.tail->used; | 404 | tty->buf.tail->commit = tty->buf.tail->used; |
410 | } | ||
411 | spin_unlock_irqrestore(&tty->buf.lock, flags); | 405 | spin_unlock_irqrestore(&tty->buf.lock, flags); |
412 | schedule_delayed_work(&tty->buf.work, 1); | 406 | schedule_delayed_work(&tty->buf.work, 1); |
413 | } | 407 | } |
@@ -2902,10 +2896,8 @@ void tty_flip_buffer_push(struct tty_struct *tty) | |||
2902 | { | 2896 | { |
2903 | unsigned long flags; | 2897 | unsigned long flags; |
2904 | spin_lock_irqsave(&tty->buf.lock, flags); | 2898 | spin_lock_irqsave(&tty->buf.lock, flags); |
2905 | if (tty->buf.tail != NULL) { | 2899 | if (tty->buf.tail != NULL) |
2906 | tty->buf.tail->active = 0; | ||
2907 | tty->buf.tail->commit = tty->buf.tail->used; | 2900 | tty->buf.tail->commit = tty->buf.tail->used; |
2908 | } | ||
2909 | spin_unlock_irqrestore(&tty->buf.lock, flags); | 2901 | spin_unlock_irqrestore(&tty->buf.lock, flags); |
2910 | 2902 | ||
2911 | if (tty->low_latency) | 2903 | if (tty->low_latency) |
diff --git a/include/linux/kbd_kern.h b/include/linux/kbd_kern.h index 4eb851ece080..efe0ee4cc80b 100644 --- a/include/linux/kbd_kern.h +++ b/include/linux/kbd_kern.h | |||
@@ -155,10 +155,8 @@ static inline void con_schedule_flip(struct tty_struct *t) | |||
155 | { | 155 | { |
156 | unsigned long flags; | 156 | unsigned long flags; |
157 | spin_lock_irqsave(&t->buf.lock, flags); | 157 | spin_lock_irqsave(&t->buf.lock, flags); |
158 | if (t->buf.tail != NULL) { | 158 | if (t->buf.tail != NULL) |
159 | t->buf.tail->active = 0; | ||
160 | t->buf.tail->commit = t->buf.tail->used; | 159 | t->buf.tail->commit = t->buf.tail->used; |
161 | } | ||
162 | spin_unlock_irqrestore(&t->buf.lock, flags); | 160 | spin_unlock_irqrestore(&t->buf.lock, flags); |
163 | schedule_work(&t->buf.work); | 161 | schedule_work(&t->buf.work); |
164 | } | 162 | } |
diff --git a/include/linux/tty.h b/include/linux/tty.h index 341cc4552c00..b3b807e4b050 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
@@ -57,7 +57,6 @@ struct tty_buffer { | |||
57 | unsigned char *flag_buf_ptr; | 57 | unsigned char *flag_buf_ptr; |
58 | int used; | 58 | int used; |
59 | int size; | 59 | int size; |
60 | int active; | ||
61 | int commit; | 60 | int commit; |
62 | int read; | 61 | int read; |
63 | /* Data points here */ | 62 | /* Data points here */ |
diff --git a/include/linux/tty_flip.h b/include/linux/tty_flip.h index 31548303ee37..eb677cf56106 100644 --- a/include/linux/tty_flip.h +++ b/include/linux/tty_flip.h | |||
@@ -12,7 +12,7 @@ static inline int tty_insert_flip_char(struct tty_struct *tty, | |||
12 | unsigned char ch, char flag) | 12 | unsigned char ch, char flag) |
13 | { | 13 | { |
14 | struct tty_buffer *tb = tty->buf.tail; | 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 | tb->flag_buf_ptr[tb->used] = flag; | 16 | tb->flag_buf_ptr[tb->used] = flag; |
17 | tb->char_buf_ptr[tb->used++] = ch; | 17 | tb->char_buf_ptr[tb->used++] = ch; |
18 | return 1; | 18 | return 1; |