Loading drivers/soc/qcom/qmi_interface.c +9 −13 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ #include <linux/string.h> #include <net/sock.h> #include <linux/workqueue.h> #include <linux/rcupdate.h> #include <linux/soc/qcom/qmi.h> static struct socket *qmi_sock_create(struct qmi_handle *qmi, Loading Loading @@ -574,15 +575,11 @@ static void qmi_data_ready(struct sock *sk) * This will be NULL if we receive data while being in * qmi_handle_release() */ read_lock_bh(&sk->sk_callback_lock); qmi = sk->sk_user_data; if (!qmi) { read_unlock_bh(&sk->sk_callback_lock); return; } rcu_read_lock(); qmi = rcu_dereference_sk_user_data(sk); if (qmi) queue_work(qmi->wq, &qmi->work); read_unlock_bh(&sk->sk_callback_lock); rcu_read_unlock(); } static struct socket *qmi_sock_create(struct qmi_handle *qmi, Loading @@ -602,7 +599,7 @@ static struct socket *qmi_sock_create(struct qmi_handle *qmi, return ERR_PTR(ret); } sock->sk->sk_user_data = qmi; rcu_assign_sk_user_data(sock->sk, qmi); sock->sk->sk_data_ready = qmi_data_ready; sock->sk->sk_error_report = qmi_data_ready; sock->sk->sk_sndtimeo = HZ * 10; Loading Loading @@ -708,9 +705,8 @@ void qmi_handle_release(struct qmi_handle *qmi) mutex_lock(&qmi->sock_lock); sock = qmi->sock; write_lock_bh(&sock->sk->sk_callback_lock); sock->sk->sk_user_data = NULL; write_unlock_bh(&sock->sk->sk_callback_lock); rcu_assign_sk_user_data(sock->sk, NULL); synchronize_rcu(); sock_release(sock); qmi->sock = NULL; mutex_unlock(&qmi->sock_lock); Loading Loading
drivers/soc/qcom/qmi_interface.c +9 −13 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ #include <linux/string.h> #include <net/sock.h> #include <linux/workqueue.h> #include <linux/rcupdate.h> #include <linux/soc/qcom/qmi.h> static struct socket *qmi_sock_create(struct qmi_handle *qmi, Loading Loading @@ -574,15 +575,11 @@ static void qmi_data_ready(struct sock *sk) * This will be NULL if we receive data while being in * qmi_handle_release() */ read_lock_bh(&sk->sk_callback_lock); qmi = sk->sk_user_data; if (!qmi) { read_unlock_bh(&sk->sk_callback_lock); return; } rcu_read_lock(); qmi = rcu_dereference_sk_user_data(sk); if (qmi) queue_work(qmi->wq, &qmi->work); read_unlock_bh(&sk->sk_callback_lock); rcu_read_unlock(); } static struct socket *qmi_sock_create(struct qmi_handle *qmi, Loading @@ -602,7 +599,7 @@ static struct socket *qmi_sock_create(struct qmi_handle *qmi, return ERR_PTR(ret); } sock->sk->sk_user_data = qmi; rcu_assign_sk_user_data(sock->sk, qmi); sock->sk->sk_data_ready = qmi_data_ready; sock->sk->sk_error_report = qmi_data_ready; sock->sk->sk_sndtimeo = HZ * 10; Loading Loading @@ -708,9 +705,8 @@ void qmi_handle_release(struct qmi_handle *qmi) mutex_lock(&qmi->sock_lock); sock = qmi->sock; write_lock_bh(&sock->sk->sk_callback_lock); sock->sk->sk_user_data = NULL; write_unlock_bh(&sock->sk->sk_callback_lock); rcu_assign_sk_user_data(sock->sk, NULL); synchronize_rcu(); sock_release(sock); qmi->sock = NULL; mutex_unlock(&qmi->sock_lock); Loading