On 6/3/24 02:26, Gustavo A. R. Silva wrote:
FWIW undoing: commit 7391ee16950e772076d321792d9fbf030f921345 Author: Peter Hurley peter@hurleysoftware.com Date: Sat Jun 15 09:36:07 2013 -0400
tty: Simplify flip buffer list with 0-sized sentinel
would do the job, IMO.
So, not even _sentinel_ is actually needed? Awesome!
It seems that a clean revert is not possible at this point, as the original patch is more than a decade old. If _sentinel_ is not needed, and based on the original patch, would the following suffice?
diff --git a/drivers/tty/tty_buffer.c b/drivers/tty/tty_buffer.c index 79f0ff94ce00..1b77019cc510 100644 --- a/drivers/tty/tty_buffer.c +++ b/drivers/tty/tty_buffer.c @@ -135,10 +135,7 @@ void tty_buffer_free_all(struct tty_port *port) llist_for_each_entry_safe(p, next, llist, free) kfree(p);
- tty_buffer_reset(&buf->sentinel, 0); - buf->head = &buf->sentinel; - buf->tail = &buf->sentinel; - + buf->tail = NULL; still_used = atomic_xchg(&buf->mem_used, 0); WARN(still_used != freed, "we still have not freed %d bytes!", still_used - freed); @@ -578,9 +575,8 @@ void tty_buffer_init(struct tty_port *port) struct tty_bufhead *buf = &port->buf;
mutex_init(&buf->lock); - tty_buffer_reset(&buf->sentinel, 0); - buf->head = &buf->sentinel; - buf->tail = &buf->sentinel; + buf->head = NULL; + buf->tail = NULL; init_llist_head(&buf->free); atomic_set(&buf->mem_used, 0); atomic_set(&buf->priority, 0); diff --git a/include/linux/tty_buffer.h b/include/linux/tty_buffer.h index 31125e3be3c5..75fb041e43fe 100644 --- a/include/linux/tty_buffer.h +++ b/include/linux/tty_buffer.h @@ -37,7 +37,6 @@ struct tty_bufhead { struct work_struct work; struct mutex lock; atomic_t priority; - struct tty_buffer sentinel; struct llist_head free; /* Free queue head */ atomic_t mem_used; /* In-use buffers excluding free list */ int mem_limit;
Thanks -- Gustavo