lkml.org 
[lkml]   [2021]   [Aug]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 3/6] Bluetooth: switch to lock_sock in SCO
    Date
    Since sco_sock_timeout is now scheduled using delayed work, it is no
    longer run in SOFTIRQ context. Hence bh_lock_sock is no longer
    necessary in SCO to synchronise between user contexts and SOFTIRQ
    processing.

    As such, calls to bh_lock_sock should be replaced with lock_sock to
    synchronize with other concurrent processes that use lock_sock.

    Signed-off-by: Desmond Cheong Zhi Xi <desmondcheongzx@gmail.com>
    ---
    net/bluetooth/sco.c | 18 +++++++++---------
    1 file changed, 9 insertions(+), 9 deletions(-)

    diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c
    index 558f8874b65e..1246e6bc09fe 100644
    --- a/net/bluetooth/sco.c
    +++ b/net/bluetooth/sco.c
    @@ -93,10 +93,10 @@ static void sco_sock_timeout(struct work_struct *work)

    BT_DBG("sock %p state %d", sk, sk->sk_state);

    - bh_lock_sock(sk);
    + lock_sock(sk);
    sk->sk_err = ETIMEDOUT;
    sk->sk_state_change(sk);
    - bh_unlock_sock(sk);
    + release_sock(sk);

    sco_sock_kill(sk);
    sock_put(sk);
    @@ -199,10 +199,10 @@ static void sco_conn_del(struct hci_conn *hcon, int err)

    if (sk) {
    sock_hold(sk);
    - bh_lock_sock(sk);
    + lock_sock(sk);
    sco_sock_clear_timer(sk);
    sco_chan_del(sk, err);
    - bh_unlock_sock(sk);
    + release_sock(sk);
    sco_sock_kill(sk);
    sock_put(sk);

    @@ -1111,10 +1111,10 @@ static void sco_conn_ready(struct sco_conn *conn)

    if (sk) {
    sco_sock_clear_timer(sk);
    - bh_lock_sock(sk);
    + lock_sock(sk);
    sk->sk_state = BT_CONNECTED;
    sk->sk_state_change(sk);
    - bh_unlock_sock(sk);
    + release_sock(sk);
    } else {
    sco_conn_lock(conn);

    @@ -1129,12 +1129,12 @@ static void sco_conn_ready(struct sco_conn *conn)
    return;
    }

    - bh_lock_sock(parent);
    + lock_sock(parent);

    sk = sco_sock_alloc(sock_net(parent), NULL,
    BTPROTO_SCO, GFP_ATOMIC, 0);
    if (!sk) {
    - bh_unlock_sock(parent);
    + release_sock(parent);
    sco_conn_unlock(conn);
    return;
    }
    @@ -1155,7 +1155,7 @@ static void sco_conn_ready(struct sco_conn *conn)
    /* Wake up parent */
    parent->sk_data_ready(parent);

    - bh_unlock_sock(parent);
    + release_sock(parent);

    sco_conn_unlock(conn);
    }
    --
    2.25.1
    \
     
     \ /
      Last update: 2021-08-04 13:07    [W:4.800 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site