lkml.org 
[lkml]   [2014]   [Sep]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 21/26] tty: Convert tty_struct bitfield to bools
    Date
    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.

    Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
    ---
    include/linux/tty.h | 5 ++++-
    1 file changed, 4 insertions(+), 1 deletion(-)

    diff --git a/include/linux/tty.h b/include/linux/tty.h
    index 1c3316a..7cf61cb 100644
    --- a/include/linux/tty.h
    +++ b/include/linux/tty.h
    @@ -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;
    + bool stopped;
    + bool hw_stopped;
    + bool flow_stopped;
    + bool packet;
    unsigned char ctrl_status; /* ctrl_lock */
    unsigned int receive_room; /* Bytes free for queue */
    int flow_change;
    --
    2.1.0


    \
     
     \ /
      Last update: 2014-09-03 00:41    [W:4.179 / U:0.884 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site