tty: Replace smp_rmb/smp_wmb with smp_load_acquire/smp_store_release
PATCH 1/2 tty: Replace smp_rmb/smp_wmb with smp_load_acquire/smp_store_release
Clarify flip buffer producer/consumer operation; the use of smp_load_acquire() and smp_store_release() more clearly indicates which memory access requires a barrier.
Signed-off-by Peter Hurley <[email protected]>
--- drivers/tty/tty_buffer.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)
drivers/tty/tty_buffer.c +4 -6
@@ -291,12 +291,11 @@ static int __tty_buffer_request_room(struct tty_port *port, size_t size, n->flags = flags; buf->tail = n; b->commit = b->used; -/* paired w/ barrier in flush_to_ldisc(); ensures the +/* paired w/ acquire in flush_to_ldisc(); ensures the * latest commit value can be read before the head is * advanced to the next buffer */ -smp_wmb (); - b->next = n; +smp_store_release (&b->next, n); }else if (change) size =0 ;else
@@ -488,12 +487,11 @@ static void flush_to_ldisc(struct work_struct *work)if (atomic_read (&buf->priority))break ; - next = head->next; -/* paired w/ barrier in __tty_buffer_request_room(); +/* paired w/ release in __tty_buffer_request_room(); * ensures commit value read is not stale if the head * is advancing to the next buffer */ -smp_rmb (); + next =smp_load_acquire (&head->next); count = head->commit - head->read;if (!count) {if (next ==NULL ) {
Signature · 1 line
2.4.5
PATCH 2/2 tty: buffers: Move hidden buffer index advance into outer loop
The advance of the 'read' buffer index belongs in the outer flip buffer consume loop, with the other buffer index arithmetic.
No functional change.
Signed-off-by Peter Hurley <[email protected]>
--- drivers/tty/tty_buffer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/tty/tty_buffer.c +1 -1
@@ -444,7 +444,6 @@ receive_buf(struct tty_struct *tty, struct tty_buffer *head, int count)if (count) disc->ops->receive_buf (tty, p, f, count); } - head->read += count;return count; }
@@ -506,6 +505,7 @@ static void flush_to_ldisc(struct work_struct *work) count =receive_buf (tty, head, count);if (!count)break ; + head->read += count; }mutex_unlock (&buf->lock);
Signature · 1 line
2.4.5