Lines Matching refs:sk

34 static void nfc_sock_link(struct nfc_sock_list *l, struct sock *sk)  in nfc_sock_link()  argument
37 sk_add_node(sk, &l->head); in nfc_sock_link()
41 static void nfc_sock_unlink(struct nfc_sock_list *l, struct sock *sk) in nfc_sock_unlink() argument
44 sk_del_node_init(sk); in nfc_sock_unlink()
48 static void rawsock_write_queue_purge(struct sock *sk) in rawsock_write_queue_purge() argument
50 pr_debug("sk=%p\n", sk); in rawsock_write_queue_purge()
52 spin_lock_bh(&sk->sk_write_queue.lock); in rawsock_write_queue_purge()
53 __skb_queue_purge(&sk->sk_write_queue); in rawsock_write_queue_purge()
54 nfc_rawsock(sk)->tx_work_scheduled = false; in rawsock_write_queue_purge()
55 spin_unlock_bh(&sk->sk_write_queue.lock); in rawsock_write_queue_purge()
58 static void rawsock_report_error(struct sock *sk, int err) in rawsock_report_error() argument
60 pr_debug("sk=%p err=%d\n", sk, err); in rawsock_report_error()
62 sk->sk_shutdown = SHUTDOWN_MASK; in rawsock_report_error()
63 sk->sk_err = -err; in rawsock_report_error()
64 sk->sk_error_report(sk); in rawsock_report_error()
66 rawsock_write_queue_purge(sk); in rawsock_report_error()
71 struct sock *sk = sock->sk; in rawsock_release() local
73 pr_debug("sock=%p sk=%p\n", sock, sk); in rawsock_release()
75 if (!sk) in rawsock_release()
79 nfc_sock_unlink(&raw_sk_list, sk); in rawsock_release()
81 sock_orphan(sk); in rawsock_release()
82 sock_put(sk); in rawsock_release()
90 struct sock *sk = sock->sk; in rawsock_connect() local
95 pr_debug("sock=%p sk=%p flags=%d\n", sock, sk, flags); in rawsock_connect()
104 lock_sock(sk); in rawsock_connect()
127 nfc_rawsock(sk)->dev = dev; in rawsock_connect()
128 nfc_rawsock(sk)->target_idx = addr->target_idx; in rawsock_connect()
130 sk->sk_state = TCP_ESTABLISHED; in rawsock_connect()
131 sk->sk_state_change(sk); in rawsock_connect()
133 release_sock(sk); in rawsock_connect()
139 release_sock(sk); in rawsock_connect()
153 struct sock *sk = (struct sock *) context; in rawsock_data_exchange_complete() local
157 pr_debug("sk=%p err=%d\n", sk, err); in rawsock_data_exchange_complete()
166 err = sock_queue_rcv_skb(sk, skb); in rawsock_data_exchange_complete()
170 spin_lock_bh(&sk->sk_write_queue.lock); in rawsock_data_exchange_complete()
171 if (!skb_queue_empty(&sk->sk_write_queue)) in rawsock_data_exchange_complete()
172 schedule_work(&nfc_rawsock(sk)->tx_work); in rawsock_data_exchange_complete()
174 nfc_rawsock(sk)->tx_work_scheduled = false; in rawsock_data_exchange_complete()
175 spin_unlock_bh(&sk->sk_write_queue.lock); in rawsock_data_exchange_complete()
177 sock_put(sk); in rawsock_data_exchange_complete()
184 rawsock_report_error(sk, err); in rawsock_data_exchange_complete()
185 sock_put(sk); in rawsock_data_exchange_complete()
190 struct sock *sk = to_rawsock_sk(work); in rawsock_tx_work() local
191 struct nfc_dev *dev = nfc_rawsock(sk)->dev; in rawsock_tx_work()
192 u32 target_idx = nfc_rawsock(sk)->target_idx; in rawsock_tx_work()
196 pr_debug("sk=%p target_idx=%u\n", sk, target_idx); in rawsock_tx_work()
198 if (sk->sk_shutdown & SEND_SHUTDOWN) { in rawsock_tx_work()
199 rawsock_write_queue_purge(sk); in rawsock_tx_work()
203 skb = skb_dequeue(&sk->sk_write_queue); in rawsock_tx_work()
205 sock_hold(sk); in rawsock_tx_work()
207 rawsock_data_exchange_complete, sk); in rawsock_tx_work()
209 rawsock_report_error(sk, rc); in rawsock_tx_work()
210 sock_put(sk); in rawsock_tx_work()
216 struct sock *sk = sock->sk; in rawsock_sendmsg() local
217 struct nfc_dev *dev = nfc_rawsock(sk)->dev; in rawsock_sendmsg()
221 pr_debug("sock=%p sk=%p len=%zu\n", sock, sk, len); in rawsock_sendmsg()
229 skb = nfc_alloc_send_skb(dev, sk, msg->msg_flags, len, &rc); in rawsock_sendmsg()
239 spin_lock_bh(&sk->sk_write_queue.lock); in rawsock_sendmsg()
240 __skb_queue_tail(&sk->sk_write_queue, skb); in rawsock_sendmsg()
241 if (!nfc_rawsock(sk)->tx_work_scheduled) { in rawsock_sendmsg()
242 schedule_work(&nfc_rawsock(sk)->tx_work); in rawsock_sendmsg()
243 nfc_rawsock(sk)->tx_work_scheduled = true; in rawsock_sendmsg()
245 spin_unlock_bh(&sk->sk_write_queue.lock); in rawsock_sendmsg()
254 struct sock *sk = sock->sk; in rawsock_recvmsg() local
259 pr_debug("sock=%p sk=%p len=%zu flags=%d\n", sock, sk, len, flags); in rawsock_recvmsg()
261 skb = skb_recv_datagram(sk, flags, noblock, &rc); in rawsock_recvmsg()
273 skb_free_datagram(sk, skb); in rawsock_recvmsg()
318 static void rawsock_destruct(struct sock *sk) in rawsock_destruct() argument
320 pr_debug("sk=%p\n", sk); in rawsock_destruct()
322 if (sk->sk_state == TCP_ESTABLISHED) { in rawsock_destruct()
323 nfc_deactivate_target(nfc_rawsock(sk)->dev, in rawsock_destruct()
324 nfc_rawsock(sk)->target_idx, in rawsock_destruct()
326 nfc_put_device(nfc_rawsock(sk)->dev); in rawsock_destruct()
329 skb_queue_purge(&sk->sk_receive_queue); in rawsock_destruct()
331 if (!sock_flag(sk, SOCK_DEAD)) { in rawsock_destruct()
332 pr_err("Freeing alive NFC raw socket %p\n", sk); in rawsock_destruct()
340 struct sock *sk; in rawsock_create() local
352 sk = sk_alloc(net, PF_NFC, GFP_ATOMIC, nfc_proto->proto, kern); in rawsock_create()
353 if (!sk) in rawsock_create()
356 sock_init_data(sock, sk); in rawsock_create()
357 sk->sk_protocol = nfc_proto->id; in rawsock_create()
358 sk->sk_destruct = rawsock_destruct; in rawsock_create()
361 nfc_sock_link(&raw_sk_list, sk); in rawsock_create()
363 INIT_WORK(&nfc_rawsock(sk)->tx_work, rawsock_tx_work); in rawsock_create()
364 nfc_rawsock(sk)->tx_work_scheduled = false; in rawsock_create()
374 struct sock *sk; in nfc_send_to_raw_sock() local
379 sk_for_each(sk, &raw_sk_list.head) { in nfc_send_to_raw_sock()
397 if (sock_queue_rcv_skb(sk, nskb)) in nfc_send_to_raw_sock()