Lines Matching refs:sk
47 struct sock sk; /* must be first member */ member
92 static void caif_read_lock(struct sock *sk) in caif_read_lock() argument
95 cf_sk = container_of(sk, struct caifsock, sk); in caif_read_lock()
99 static void caif_read_unlock(struct sock *sk) in caif_read_unlock() argument
102 cf_sk = container_of(sk, struct caifsock, sk); in caif_read_unlock()
109 return cf_sk->sk.sk_rcvbuf / 4; in sk_rcvbuf_lowwater()
112 static void caif_flow_ctrl(struct sock *sk, int mode) in caif_flow_ctrl() argument
115 cf_sk = container_of(sk, struct caifsock, sk); in caif_flow_ctrl()
124 static int caif_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) in caif_queue_rcv_skb() argument
128 struct sk_buff_head *list = &sk->sk_receive_queue; in caif_queue_rcv_skb()
129 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); in caif_queue_rcv_skb()
131 if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >= in caif_queue_rcv_skb()
132 (unsigned int)sk->sk_rcvbuf && rx_flow_is_on(cf_sk)) { in caif_queue_rcv_skb()
134 atomic_read(&cf_sk->sk.sk_rmem_alloc), in caif_queue_rcv_skb()
137 caif_flow_ctrl(sk, CAIF_MODEMCMD_FLOW_OFF_REQ); in caif_queue_rcv_skb()
140 err = sk_filter(sk, skb); in caif_queue_rcv_skb()
143 if (!sk_rmem_schedule(sk, skb, skb->truesize) && rx_flow_is_on(cf_sk)) { in caif_queue_rcv_skb()
146 caif_flow_ctrl(sk, CAIF_MODEMCMD_FLOW_OFF_REQ); in caif_queue_rcv_skb()
149 skb_set_owner_r(skb, sk); in caif_queue_rcv_skb()
156 if (!sock_flag(sk, SOCK_DEAD)) in caif_queue_rcv_skb()
160 if (!sock_flag(sk, SOCK_DEAD)) in caif_queue_rcv_skb()
161 sk->sk_data_ready(sk); in caif_queue_rcv_skb()
176 if (unlikely(cf_sk->sk.sk_state != CAIF_CONNECTED)) { in caif_sktrecv_cb()
180 caif_queue_rcv_skb(&cf_sk->sk, skb); in caif_sktrecv_cb()
187 sock_hold(&cf_sk->sk); in cfsk_hold()
193 sock_put(&cf_sk->sk); in cfsk_put()
206 cf_sk->sk.sk_state_change(&cf_sk->sk); in caif_ctrl_cb()
212 cf_sk->sk.sk_state_change(&cf_sk->sk); in caif_ctrl_cb()
219 cf_sk->sk.sk_state = CAIF_CONNECTED; in caif_ctrl_cb()
221 cf_sk->sk.sk_shutdown = 0; in caif_ctrl_cb()
222 cf_sk->sk.sk_state_change(&cf_sk->sk); in caif_ctrl_cb()
227 cf_sk->sk.sk_state = CAIF_DISCONNECTED; in caif_ctrl_cb()
228 cf_sk->sk.sk_state_change(&cf_sk->sk); in caif_ctrl_cb()
233 cf_sk->sk.sk_err = ECONNREFUSED; in caif_ctrl_cb()
234 cf_sk->sk.sk_state = CAIF_DISCONNECTED; in caif_ctrl_cb()
235 cf_sk->sk.sk_shutdown = SHUTDOWN_MASK; in caif_ctrl_cb()
241 cf_sk->sk.sk_state_change(&cf_sk->sk); in caif_ctrl_cb()
246 cf_sk->sk.sk_shutdown = SHUTDOWN_MASK; in caif_ctrl_cb()
247 cf_sk->sk.sk_err = ECONNRESET; in caif_ctrl_cb()
249 cf_sk->sk.sk_error_report(&cf_sk->sk); in caif_ctrl_cb()
257 static void caif_check_flow_release(struct sock *sk) in caif_check_flow_release() argument
259 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); in caif_check_flow_release()
264 if (atomic_read(&sk->sk_rmem_alloc) <= sk_rcvbuf_lowwater(cf_sk)) { in caif_check_flow_release()
266 caif_flow_ctrl(sk, CAIF_MODEMCMD_FLOW_ON_REQ); in caif_check_flow_release()
278 struct sock *sk = sock->sk; in caif_seqpkt_recvmsg() local
287 skb = skb_recv_datagram(sk, flags, 0 , &ret); in caif_seqpkt_recvmsg()
302 skb_free_datagram(sk, skb); in caif_seqpkt_recvmsg()
303 caif_check_flow_release(sk); in caif_seqpkt_recvmsg()
312 static long caif_stream_data_wait(struct sock *sk, long timeo) in caif_stream_data_wait() argument
315 lock_sock(sk); in caif_stream_data_wait()
318 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); in caif_stream_data_wait()
320 if (!skb_queue_empty(&sk->sk_receive_queue) || in caif_stream_data_wait()
321 sk->sk_err || in caif_stream_data_wait()
322 sk->sk_state != CAIF_CONNECTED || in caif_stream_data_wait()
323 sock_flag(sk, SOCK_DEAD) || in caif_stream_data_wait()
324 (sk->sk_shutdown & RCV_SHUTDOWN) || in caif_stream_data_wait()
329 set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags); in caif_stream_data_wait()
330 release_sock(sk); in caif_stream_data_wait()
332 lock_sock(sk); in caif_stream_data_wait()
334 if (sock_flag(sk, SOCK_DEAD)) in caif_stream_data_wait()
337 clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags); in caif_stream_data_wait()
340 finish_wait(sk_sleep(sk), &wait); in caif_stream_data_wait()
341 release_sock(sk); in caif_stream_data_wait()
353 struct sock *sk = sock->sk; in caif_stream_recvmsg() local
368 if (sk->sk_state == CAIF_CONNECTING) in caif_stream_recvmsg()
371 caif_read_lock(sk); in caif_stream_recvmsg()
372 target = sock_rcvlowat(sk, flags&MSG_WAITALL, size); in caif_stream_recvmsg()
373 timeo = sock_rcvtimeo(sk, flags&MSG_DONTWAIT); in caif_stream_recvmsg()
379 lock_sock(sk); in caif_stream_recvmsg()
380 if (sock_flag(sk, SOCK_DEAD)) { in caif_stream_recvmsg()
384 skb = skb_dequeue(&sk->sk_receive_queue); in caif_stream_recvmsg()
385 caif_check_flow_release(sk); in caif_stream_recvmsg()
393 err = sock_error(sk); in caif_stream_recvmsg()
397 if (sk->sk_shutdown & RCV_SHUTDOWN) in caif_stream_recvmsg()
401 if (sk->sk_state != CAIF_CONNECTED) in caif_stream_recvmsg()
403 if (sock_flag(sk, SOCK_DEAD)) in caif_stream_recvmsg()
406 release_sock(sk); in caif_stream_recvmsg()
412 caif_read_unlock(sk); in caif_stream_recvmsg()
414 timeo = caif_stream_data_wait(sk, timeo); in caif_stream_recvmsg()
420 caif_read_lock(sk); in caif_stream_recvmsg()
423 release_sock(sk); in caif_stream_recvmsg()
426 release_sock(sk); in caif_stream_recvmsg()
429 skb_queue_head(&sk->sk_receive_queue, skb); in caif_stream_recvmsg()
443 skb_queue_head(&sk->sk_receive_queue, skb); in caif_stream_recvmsg()
453 skb_queue_head(&sk->sk_receive_queue, skb); in caif_stream_recvmsg()
457 caif_read_unlock(sk); in caif_stream_recvmsg()
470 struct sock *sk = &cf_sk->sk; in caif_wait_for_flow_on() local
475 (!wait_writeable || sock_writeable(&cf_sk->sk))) in caif_wait_for_flow_on()
483 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); in caif_wait_for_flow_on()
485 if (sk->sk_shutdown & SHUTDOWN_MASK) in caif_wait_for_flow_on()
487 *err = -sk->sk_err; in caif_wait_for_flow_on()
488 if (sk->sk_err) in caif_wait_for_flow_on()
491 if (cf_sk->sk.sk_state != CAIF_CONNECTED) in caif_wait_for_flow_on()
495 finish_wait(sk_sleep(sk), &wait); in caif_wait_for_flow_on()
510 cfpkt_set_prio(pkt, cf_sk->sk.sk_priority); in transmit_skb()
524 struct sock *sk = sock->sk; in caif_seqpkt_sendmsg() local
525 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); in caif_seqpkt_sendmsg()
532 ret = sock_error(sk); in caif_seqpkt_sendmsg()
549 timeo = sock_sndtimeo(sk, noblock); in caif_seqpkt_sendmsg()
550 timeo = caif_wait_for_flow_on(container_of(sk, struct caifsock, sk), in caif_seqpkt_sendmsg()
556 if (cf_sk->sk.sk_state != CAIF_CONNECTED || in caif_seqpkt_sendmsg()
557 sock_flag(sk, SOCK_DEAD) || in caif_seqpkt_sendmsg()
558 (sk->sk_shutdown & RCV_SHUTDOWN)) in caif_seqpkt_sendmsg()
563 if (len > cf_sk->maxframe && cf_sk->sk.sk_protocol != CAIFPROTO_RFM) in caif_seqpkt_sendmsg()
569 skb = sock_alloc_send_skb(sk, buffer_size, noblock, &ret); in caif_seqpkt_sendmsg()
599 struct sock *sk = sock->sk; in caif_stream_sendmsg() local
600 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); in caif_stream_sendmsg()
613 timeo = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT); in caif_stream_sendmsg()
616 if (unlikely(sk->sk_shutdown & SEND_SHUTDOWN)) in caif_stream_sendmsg()
627 if (size > ((sk->sk_sndbuf >> 1) - 64)) in caif_stream_sendmsg()
628 size = (sk->sk_sndbuf >> 1) - 64; in caif_stream_sendmsg()
633 skb = sock_alloc_send_skb(sk, in caif_stream_sendmsg()
678 struct sock *sk = sock->sk; in setsockopt() local
679 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); in setsockopt()
682 if (cf_sk->sk.sk_socket->state != SS_UNCONNECTED) in setsockopt()
693 lock_sock(&(cf_sk->sk)); in setsockopt()
695 release_sock(&cf_sk->sk); in setsockopt()
701 if (cf_sk->sk.sk_protocol != CAIFPROTO_UTIL) in setsockopt()
703 lock_sock(&(cf_sk->sk)); in setsockopt()
706 release_sock(&cf_sk->sk); in setsockopt()
710 release_sock(&cf_sk->sk); in setsockopt()
750 struct sock *sk = sock->sk; in caif_connect() local
751 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); in caif_connect()
758 lock_sock(sk); in caif_connect()
767 caif_assert(sk->sk_state == CAIF_DISCONNECTED); in caif_connect()
770 switch (sk->sk_state) { in caif_connect()
786 caif_assert(sk->sk_state == CAIF_CONNECTED || in caif_connect()
787 sk->sk_state == CAIF_DISCONNECTED); in caif_connect()
788 if (sk->sk_shutdown & SHUTDOWN_MASK) { in caif_connect()
790 caif_disconnect_client(sock_net(sk), &cf_sk->layer); in caif_connect()
802 sk->sk_state = CAIF_DISCONNECTED; in caif_connect()
804 sk_stream_kill_queues(&cf_sk->sk); in caif_connect()
815 sk->sk_state = CAIF_CONNECTING; in caif_connect()
819 if (cf_sk->sk.sk_priority > CAIF_PRIO_MAX) in caif_connect()
821 else if (cf_sk->sk.sk_priority < CAIF_PRIO_MIN) in caif_connect()
824 cf_sk->conn_req.priority = cf_sk->sk.sk_priority; in caif_connect()
827 cf_sk->conn_req.ifindex = cf_sk->sk.sk_bound_dev_if; in caif_connect()
831 err = caif_connect_client(sock_net(sk), &cf_sk->conn_req, in caif_connect()
835 cf_sk->sk.sk_socket->state = SS_UNCONNECTED; in caif_connect()
836 cf_sk->sk.sk_state = CAIF_DISCONNECTED; in caif_connect()
842 dev = dev_get_by_index_rcu(sock_net(sk), ifindex); in caif_connect()
862 if (sk->sk_state != CAIF_CONNECTED && (flags & O_NONBLOCK)) in caif_connect()
865 timeo = sock_sndtimeo(sk, flags & O_NONBLOCK); in caif_connect()
867 release_sock(sk); in caif_connect()
869 timeo = wait_event_interruptible_timeout(*sk_sleep(sk), in caif_connect()
870 sk->sk_state != CAIF_CONNECTING, in caif_connect()
872 lock_sock(sk); in caif_connect()
877 if (timeo == 0 && sk->sk_state != CAIF_CONNECTED) in caif_connect()
879 if (sk->sk_state != CAIF_CONNECTED) { in caif_connect()
881 err = sock_error(sk); in caif_connect()
889 release_sock(sk); in caif_connect()
899 struct sock *sk = sock->sk; in caif_release() local
900 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); in caif_release()
902 if (!sk) in caif_release()
912 spin_lock_bh(&sk->sk_receive_queue.lock); in caif_release()
913 sock_set_flag(sk, SOCK_DEAD); in caif_release()
914 spin_unlock_bh(&sk->sk_receive_queue.lock); in caif_release()
915 sock->sk = NULL; in caif_release()
920 lock_sock(&(cf_sk->sk)); in caif_release()
921 sk->sk_state = CAIF_DISCONNECTED; in caif_release()
922 sk->sk_shutdown = SHUTDOWN_MASK; in caif_release()
924 caif_disconnect_client(sock_net(sk), &cf_sk->layer); in caif_release()
925 cf_sk->sk.sk_socket->state = SS_DISCONNECTING; in caif_release()
926 wake_up_interruptible_poll(sk_sleep(sk), POLLERR|POLLHUP); in caif_release()
928 sock_orphan(sk); in caif_release()
929 sk_stream_kill_queues(&cf_sk->sk); in caif_release()
930 release_sock(sk); in caif_release()
931 sock_put(sk); in caif_release()
939 struct sock *sk = sock->sk; in caif_poll() local
941 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); in caif_poll()
943 sock_poll_wait(file, sk_sleep(sk), wait); in caif_poll()
947 if (sk->sk_err) in caif_poll()
949 if (sk->sk_shutdown == SHUTDOWN_MASK) in caif_poll()
951 if (sk->sk_shutdown & RCV_SHUTDOWN) in caif_poll()
955 if (!skb_queue_empty(&sk->sk_receive_queue) || in caif_poll()
956 (sk->sk_shutdown & RCV_SHUTDOWN)) in caif_poll()
963 if (sock_writeable(sk) && tx_flow_is_on(cf_sk)) in caif_poll()
1012 static void caif_sock_destructor(struct sock *sk) in caif_sock_destructor() argument
1014 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); in caif_sock_destructor()
1015 caif_assert(!atomic_read(&sk->sk_wmem_alloc)); in caif_sock_destructor()
1016 caif_assert(sk_unhashed(sk)); in caif_sock_destructor()
1017 caif_assert(!sk->sk_socket); in caif_sock_destructor()
1018 if (!sock_flag(sk, SOCK_DEAD)) { in caif_sock_destructor()
1019 pr_debug("Attempt to release alive CAIF socket: %p\n", sk); in caif_sock_destructor()
1022 sk_stream_kill_queues(&cf_sk->sk); in caif_sock_destructor()
1029 struct sock *sk = NULL; in caif_create() local
1058 sk = sk_alloc(net, PF_CAIF, GFP_KERNEL, &prot); in caif_create()
1059 if (!sk) in caif_create()
1062 cf_sk = container_of(sk, struct caifsock, sk); in caif_create()
1065 sk->sk_protocol = (unsigned char) protocol; in caif_create()
1070 sk->sk_priority = TC_PRIO_CONTROL; in caif_create()
1073 sk->sk_priority = TC_PRIO_INTERACTIVE_BULK; in caif_create()
1076 sk->sk_priority = TC_PRIO_BESTEFFORT; in caif_create()
1083 lock_sock(&(cf_sk->sk)); in caif_create()
1086 sock_init_data(sock, sk); in caif_create()
1087 sk->sk_destruct = caif_sock_destructor; in caif_create()
1091 cf_sk->sk.sk_socket->state = SS_UNCONNECTED; in caif_create()
1092 cf_sk->sk.sk_state = CAIF_DISCONNECTED; in caif_create()
1100 release_sock(&cf_sk->sk); in caif_create()