02 Mar, 2011

1 commit


23 Jan, 2011

1 commit

  • Fix locking in read and write code of n_hdlc line discipline.

    2.6.36 replaced lock_kernel() with tty_lock(). The tty mutex is not
    dropped automatically when the thread sleeps like the BKL. This results
    in a blocked read or write holding the tty mutex and stalling operations
    by other devices that use the tty mutex.

    A review of n_hdlc read and write code shows:
    1. neither BKL or tty mutex are required for correct operation
    2. read can block while read data is available if data is posted
    between availability check and call to interruptible_sleep_on()
    3. write does not set process state to TASK_INTERRUPTIBLE
    on each pass through the processing loop which can cause
    unneeded scheduling of the thread

    The unnecessary tty mutex references have been removed.

    Read changed to use same code as n_tty read
    for completing reads and blocking.

    Write corrected to set process state to TASK_INTERRUPTIBLE on each pass
    through processing loop.

    Signed-off-by: Paul Fulghum
    Acked-by: Arnd Bergmann
    Cc: Alan Cox
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Paul Fulghum
     

05 Nov, 2010

1 commit