|
@@ -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) {
|