tty: Convert tty_struct bitfield to ints
The stopped, hw_stopped, flow_stopped and packet bits are smp-unsafe and interrupt-unsafe. For example, CPU 0 | CPU 1 | tty->flow_stopped = 1 | tty->hw_stopped = 0 One of these updates will be corrupted, as the bitwise operation on the bitfield is non-atomic. Ensure each flag has a separate memory location, so concurrent updates do not corrupt orthogonal states. Because DEC Alpha EV4 and EV5 cpus (from 1995) perform RMW on smaller-than-machine-word storage, "separate memory location" must be int instead of byte. Signed-off-by: Peter Hurley <peter@hurleysoftware.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
938f7e13b5
commit
d7a855bd6a
|
@ -261,7 +261,10 @@ struct tty_struct {
|
|||
unsigned long flags;
|
||||
int count;
|
||||
struct winsize winsize; /* winsize_mutex */
|
||||
unsigned char stopped:1, hw_stopped:1, flow_stopped:1, packet:1;
|
||||
int stopped;
|
||||
int flow_stopped;
|
||||
int hw_stopped;
|
||||
int packet;
|
||||
unsigned char ctrl_status; /* ctrl_lock */
|
||||
unsigned int receive_room; /* Bytes free for queue */
|
||||
int flow_change;
|
||||
|
|
Loading…
Reference in New Issue