Re: [PATCH v2] bluetooth: Fix nested sleeps

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Peter,

On Fri, Jan 23, 2015, Peter Hurley wrote:
> l2cap/rfcomm/sco_sock_accept() are wait loops which may acquire
> sleeping locks. Since both wait loops and sleeping locks use
> task_struct.state to sleep and wake, the nested sleeping locks
> destroy the wait loop state.
> 
> Use the newly-minted wait_woken() and DEFINE_WAIT_FUNC() for the
> wait loop. DEFINE_WAIT_FUNC() allows an alternate wake function
> to be specified; in this case, the predefined scheduler function,
> woken_wake_function(). This wait construct ensures wakeups will
> not be missed without requiring the wait loop to set the
> task state before condition evaluation. How this works:
> 
>  CPU 0                            |  CPU 1
>                                   |
>                                   | is <condition> set?
>                                   | no
> set <condition>                   |
>                                   |
> wake_up_interruptible             |
>   woken_wake_function             |
>     set WQ_FLAG_WOKEN             |
>     try_to_wake_up                |
>                                   | wait_woken
>                                   |   set TASK_INTERRUPTIBLE
>                                   |   WQ_FLAG_WOKEN? yes
>                                   |   set TASK_RUNNING
>                                   |
>                                   | - loop -
> 				  |
> 				  | is <condition> set?
>                                   | yes - exit wait loop
> 
> Fixes "do not call blocking ops when !TASK_RUNNING" warnings
> in l2cap_sock_accept(), rfcomm_sock_accept() and sco_sock_accept().
> 
> Signed-off-by: Peter Hurley <peter@xxxxxxxxxxxxxxxxxx>
> ---
> 
> v2: minor commit log fixes
>     * s/woken_wait_function/woken_wake_function/
>     * indent 'set TASK_RUNNING' under wait_woken to clarify
>       wait_woken() performs that operation
> 
>  net/bluetooth/l2cap_sock.c  | 9 ++++-----
>  net/bluetooth/rfcomm/sock.c | 9 ++++-----
>  net/bluetooth/sco.c         | 8 +++-----
>  3 files changed, 11 insertions(+), 15 deletions(-)

Applied to bluetooth-next. Thanks!

Johan
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux