Lines Matching refs:vsk

29 static void virtio_transport_cancel_close_work(struct vsock_sock *vsk,
33 virtio_transport_get_ops(struct vsock_sock *vsk) in virtio_transport_get_ops() argument
35 const struct vsock_transport *t = vsock_core_get_transport(vsk); in virtio_transport_get_ops()
62 t_ops = virtio_transport_get_ops(info->vsk); in virtio_transport_can_zcopy()
74 static int virtio_transport_init_zcopy_skb(struct vsock_sock *vsk, in virtio_transport_init_zcopy_skb() argument
88 uarg = msg_zerocopy_realloc(sk_vsock(vsk), in virtio_transport_init_zcopy_skb()
256 struct vsock_sock *vsk; in virtio_transport_alloc_skb() local
272 vsk = info->vsk; in virtio_transport_alloc_skb()
280 WARN_ON_ONCE(!(vsk && (info->msg && payload_len)) && zcopy); in virtio_transport_alloc_skb()
285 if (vsk) in virtio_transport_alloc_skb()
286 skb_set_owner_w(skb, sk_vsock(vsk)); in virtio_transport_alloc_skb()
328 static int virtio_transport_send_pkt_info(struct vsock_sock *vsk, in virtio_transport_send_pkt_info() argument
340 info->type = virtio_transport_get_type(sk_vsock(vsk)); in virtio_transport_send_pkt_info()
342 t_ops = virtio_transport_get_ops(vsk); in virtio_transport_send_pkt_info()
347 src_port = vsk->local_addr.svm_port; in virtio_transport_send_pkt_info()
349 dst_cid = vsk->remote_addr.svm_cid; in virtio_transport_send_pkt_info()
350 dst_port = vsk->remote_addr.svm_port; in virtio_transport_send_pkt_info()
356 vvs = vsk->trans; in virtio_transport_send_pkt_info()
369 if (!sock_flag(sk_vsock(vsk), SOCK_ZEROCOPY)) in virtio_transport_send_pkt_info()
403 if (virtio_transport_init_zcopy_skb(vsk, skb, in virtio_transport_send_pkt_info()
523 static int virtio_transport_send_credit_update(struct vsock_sock *vsk) in virtio_transport_send_credit_update() argument
527 .vsk = vsk, in virtio_transport_send_credit_update()
530 return virtio_transport_send_pkt_info(vsk, &info); in virtio_transport_send_credit_update()
534 virtio_transport_stream_do_peek(struct vsock_sock *vsk, in virtio_transport_stream_do_peek() argument
538 struct virtio_vsock_sock *vvs = vsk->trans; in virtio_transport_stream_do_peek()
581 virtio_transport_stream_do_dequeue(struct vsock_sock *vsk, in virtio_transport_stream_do_dequeue() argument
585 struct virtio_vsock_sock *vvs = vsk->trans; in virtio_transport_stream_do_dequeue()
638 sock_rcvlowat(sk_vsock(vsk), 0, INT_MAX)); in virtio_transport_stream_do_dequeue()
653 virtio_transport_send_credit_update(vsk); in virtio_transport_stream_do_dequeue()
664 virtio_transport_seqpacket_do_peek(struct vsock_sock *vsk, in virtio_transport_seqpacket_do_peek() argument
667 struct virtio_vsock_sock *vvs = vsk->trans; in virtio_transport_seqpacket_do_peek()
721 static int virtio_transport_seqpacket_do_dequeue(struct vsock_sock *vsk, in virtio_transport_seqpacket_do_dequeue() argument
725 struct virtio_vsock_sock *vvs = vsk->trans; in virtio_transport_seqpacket_do_dequeue()
794 virtio_transport_send_credit_update(vsk); in virtio_transport_seqpacket_do_dequeue()
800 virtio_transport_stream_dequeue(struct vsock_sock *vsk, in virtio_transport_stream_dequeue() argument
805 return virtio_transport_stream_do_peek(vsk, msg, len); in virtio_transport_stream_dequeue()
807 return virtio_transport_stream_do_dequeue(vsk, msg, len); in virtio_transport_stream_dequeue()
812 virtio_transport_seqpacket_dequeue(struct vsock_sock *vsk, in virtio_transport_seqpacket_dequeue() argument
817 return virtio_transport_seqpacket_do_peek(vsk, msg); in virtio_transport_seqpacket_dequeue()
819 return virtio_transport_seqpacket_do_dequeue(vsk, msg, flags); in virtio_transport_seqpacket_dequeue()
824 virtio_transport_seqpacket_enqueue(struct vsock_sock *vsk, in virtio_transport_seqpacket_enqueue() argument
828 struct virtio_vsock_sock *vvs = vsk->trans; in virtio_transport_seqpacket_enqueue()
839 return virtio_transport_stream_enqueue(vsk, msg, len); in virtio_transport_seqpacket_enqueue()
844 virtio_transport_dgram_dequeue(struct vsock_sock *vsk, in virtio_transport_dgram_dequeue() argument
852 s64 virtio_transport_stream_has_data(struct vsock_sock *vsk) in virtio_transport_stream_has_data() argument
854 struct virtio_vsock_sock *vvs = vsk->trans; in virtio_transport_stream_has_data()
865 u32 virtio_transport_seqpacket_has_data(struct vsock_sock *vsk) in virtio_transport_seqpacket_has_data() argument
867 struct virtio_vsock_sock *vvs = vsk->trans; in virtio_transport_seqpacket_has_data()
878 static s64 virtio_transport_has_space(struct vsock_sock *vsk) in virtio_transport_has_space() argument
880 struct virtio_vsock_sock *vvs = vsk->trans; in virtio_transport_has_space()
890 s64 virtio_transport_stream_has_space(struct vsock_sock *vsk) in virtio_transport_stream_has_space() argument
892 struct virtio_vsock_sock *vvs = vsk->trans; in virtio_transport_stream_has_space()
896 bytes = virtio_transport_has_space(vsk); in virtio_transport_stream_has_space()
903 int virtio_transport_do_socket_init(struct vsock_sock *vsk, in virtio_transport_do_socket_init() argument
912 vsk->trans = vvs; in virtio_transport_do_socket_init()
913 vvs->vsk = vsk; in virtio_transport_do_socket_init()
920 if (vsk->buffer_size > VIRTIO_VSOCK_MAX_BUF_SIZE) in virtio_transport_do_socket_init()
921 vsk->buffer_size = VIRTIO_VSOCK_MAX_BUF_SIZE; in virtio_transport_do_socket_init()
923 vvs->buf_alloc = vsk->buffer_size; in virtio_transport_do_socket_init()
934 void virtio_transport_notify_buffer_size(struct vsock_sock *vsk, u64 *val) in virtio_transport_notify_buffer_size() argument
936 struct virtio_vsock_sock *vvs = vsk->trans; in virtio_transport_notify_buffer_size()
943 virtio_transport_send_credit_update(vsk); in virtio_transport_notify_buffer_size()
948 virtio_transport_notify_poll_in(struct vsock_sock *vsk, in virtio_transport_notify_poll_in() argument
952 *data_ready_now = vsock_stream_has_data(vsk) >= target; in virtio_transport_notify_poll_in()
959 virtio_transport_notify_poll_out(struct vsock_sock *vsk, in virtio_transport_notify_poll_out() argument
965 free_space = vsock_stream_has_space(vsk); in virtio_transport_notify_poll_out()
975 int virtio_transport_notify_recv_init(struct vsock_sock *vsk, in virtio_transport_notify_recv_init() argument
982 int virtio_transport_notify_recv_pre_block(struct vsock_sock *vsk, in virtio_transport_notify_recv_pre_block() argument
989 int virtio_transport_notify_recv_pre_dequeue(struct vsock_sock *vsk, in virtio_transport_notify_recv_pre_dequeue() argument
996 int virtio_transport_notify_recv_post_dequeue(struct vsock_sock *vsk, in virtio_transport_notify_recv_post_dequeue() argument
1004 int virtio_transport_notify_send_init(struct vsock_sock *vsk, in virtio_transport_notify_send_init() argument
1011 int virtio_transport_notify_send_pre_block(struct vsock_sock *vsk, in virtio_transport_notify_send_pre_block() argument
1018 int virtio_transport_notify_send_pre_enqueue(struct vsock_sock *vsk, in virtio_transport_notify_send_pre_enqueue() argument
1025 int virtio_transport_notify_send_post_enqueue(struct vsock_sock *vsk, in virtio_transport_notify_send_post_enqueue() argument
1032 u64 virtio_transport_stream_rcvhiwat(struct vsock_sock *vsk) in virtio_transport_stream_rcvhiwat() argument
1034 return vsk->buffer_size; in virtio_transport_stream_rcvhiwat()
1038 bool virtio_transport_stream_is_active(struct vsock_sock *vsk) in virtio_transport_stream_is_active() argument
1050 int virtio_transport_dgram_bind(struct vsock_sock *vsk, in virtio_transport_dgram_bind() argument
1063 int virtio_transport_connect(struct vsock_sock *vsk) in virtio_transport_connect() argument
1067 .vsk = vsk, in virtio_transport_connect()
1070 return virtio_transport_send_pkt_info(vsk, &info); in virtio_transport_connect()
1074 int virtio_transport_shutdown(struct vsock_sock *vsk, int mode) in virtio_transport_shutdown() argument
1082 .vsk = vsk, in virtio_transport_shutdown()
1085 return virtio_transport_send_pkt_info(vsk, &info); in virtio_transport_shutdown()
1090 virtio_transport_dgram_enqueue(struct vsock_sock *vsk, in virtio_transport_dgram_enqueue() argument
1100 virtio_transport_stream_enqueue(struct vsock_sock *vsk, in virtio_transport_stream_enqueue() argument
1108 .vsk = vsk, in virtio_transport_stream_enqueue()
1111 return virtio_transport_send_pkt_info(vsk, &info); in virtio_transport_stream_enqueue()
1115 void virtio_transport_destruct(struct vsock_sock *vsk) in virtio_transport_destruct() argument
1117 struct virtio_vsock_sock *vvs = vsk->trans; in virtio_transport_destruct()
1119 virtio_transport_cancel_close_work(vsk, true); in virtio_transport_destruct()
1122 vsk->trans = NULL; in virtio_transport_destruct()
1126 ssize_t virtio_transport_unsent_bytes(struct vsock_sock *vsk) in virtio_transport_unsent_bytes() argument
1128 struct virtio_vsock_sock *vvs = vsk->trans; in virtio_transport_unsent_bytes()
1139 static int virtio_transport_reset(struct vsock_sock *vsk, in virtio_transport_reset() argument
1145 .vsk = vsk, in virtio_transport_reset()
1152 return virtio_transport_send_pkt_info(vsk, &info); in virtio_transport_reset()
1188 static void virtio_transport_remove_sock(struct vsock_sock *vsk) in virtio_transport_remove_sock() argument
1190 struct virtio_vsock_sock *vvs = vsk->trans; in virtio_transport_remove_sock()
1196 vsock_remove_sock(vsk); in virtio_transport_remove_sock()
1199 static void virtio_transport_cancel_close_work(struct vsock_sock *vsk, in virtio_transport_cancel_close_work() argument
1202 struct sock *sk = sk_vsock(vsk); in virtio_transport_cancel_close_work()
1204 if (vsk->close_work_scheduled && in virtio_transport_cancel_close_work()
1205 (!cancel_timeout || cancel_delayed_work(&vsk->close_work))) { in virtio_transport_cancel_close_work()
1206 vsk->close_work_scheduled = false; in virtio_transport_cancel_close_work()
1208 virtio_transport_remove_sock(vsk); in virtio_transport_cancel_close_work()
1215 static void virtio_transport_do_close(struct vsock_sock *vsk, in virtio_transport_do_close() argument
1218 struct sock *sk = sk_vsock(vsk); in virtio_transport_do_close()
1221 vsk->peer_shutdown = SHUTDOWN_MASK; in virtio_transport_do_close()
1222 if (vsock_stream_has_data(vsk) <= 0) in virtio_transport_do_close()
1226 virtio_transport_cancel_close_work(vsk, cancel_timeout); in virtio_transport_do_close()
1231 struct vsock_sock *vsk = in virtio_transport_close_timeout() local
1233 struct sock *sk = sk_vsock(vsk); in virtio_transport_close_timeout()
1239 (void)virtio_transport_reset(vsk, NULL); in virtio_transport_close_timeout()
1241 virtio_transport_do_close(vsk, false); in virtio_transport_close_timeout()
1244 vsk->close_work_scheduled = false; in virtio_transport_close_timeout()
1251 static bool virtio_transport_close(struct vsock_sock *vsk) in virtio_transport_close() argument
1253 struct sock *sk = &vsk->sk; in virtio_transport_close()
1260 if ((vsk->peer_shutdown & SHUTDOWN_MASK) == SHUTDOWN_MASK) { in virtio_transport_close()
1261 (void)virtio_transport_reset(vsk, NULL); in virtio_transport_close()
1266 (void)virtio_transport_shutdown(vsk, SHUTDOWN_MASK); in virtio_transport_close()
1276 INIT_DELAYED_WORK(&vsk->close_work, in virtio_transport_close()
1278 vsk->close_work_scheduled = true; in virtio_transport_close()
1279 schedule_delayed_work(&vsk->close_work, VSOCK_CLOSE_TIMEOUT); in virtio_transport_close()
1283 void virtio_transport_release(struct vsock_sock *vsk) in virtio_transport_release() argument
1285 struct sock *sk = &vsk->sk; in virtio_transport_release()
1289 remove_sock = virtio_transport_close(vsk); in virtio_transport_release()
1293 virtio_transport_remove_sock(vsk); in virtio_transport_release()
1303 struct vsock_sock *vsk = vsock_sk(sk); in virtio_transport_recv_connecting() local
1311 vsock_insert_connected(vsk); in virtio_transport_recv_connecting()
1328 virtio_transport_reset(vsk, skb); in virtio_transport_recv_connecting()
1336 virtio_transport_recv_enqueue(struct vsock_sock *vsk, in virtio_transport_recv_enqueue() argument
1339 struct virtio_vsock_sock *vvs = vsk->trans; in virtio_transport_recv_enqueue()
1398 struct vsock_sock *vsk = vsock_sk(sk); in virtio_transport_recv_connected() local
1403 virtio_transport_recv_enqueue(vsk, skb); in virtio_transport_recv_connected()
1407 virtio_transport_send_credit_update(vsk); in virtio_transport_recv_connected()
1414 vsk->peer_shutdown |= RCV_SHUTDOWN; in virtio_transport_recv_connected()
1416 vsk->peer_shutdown |= SEND_SHUTDOWN; in virtio_transport_recv_connected()
1417 if (vsk->peer_shutdown == SHUTDOWN_MASK) { in virtio_transport_recv_connected()
1418 if (vsock_stream_has_data(vsk) <= 0 && !sock_flag(sk, SOCK_DONE)) { in virtio_transport_recv_connected()
1419 (void)virtio_transport_reset(vsk, NULL); in virtio_transport_recv_connected()
1420 virtio_transport_do_close(vsk, true); in virtio_transport_recv_connected()
1427 vsock_remove_sock(vsk); in virtio_transport_recv_connected()
1433 virtio_transport_do_close(vsk, true); in virtio_transport_recv_connected()
1449 struct vsock_sock *vsk = vsock_sk(sk); in virtio_transport_recv_disconnecting() local
1452 virtio_transport_do_close(vsk, true); in virtio_transport_recv_disconnecting()
1456 virtio_transport_send_response(struct vsock_sock *vsk, in virtio_transport_send_response() argument
1465 .vsk = vsk, in virtio_transport_send_response()
1468 return virtio_transport_send_pkt_info(vsk, &info); in virtio_transport_send_response()
1475 struct vsock_sock *vsk = vsock_sk(sk); in virtio_transport_space_update() local
1476 struct virtio_vsock_sock *vvs = vsk->trans; in virtio_transport_space_update()
1491 space_available = virtio_transport_has_space(vsk); in virtio_transport_space_update()
1502 struct vsock_sock *vsk = vsock_sk(sk); in virtio_transport_recv_listen() local
1543 ret = vsock_assign_transport(vchild, vsk); in virtio_transport_recv_listen()
1581 struct vsock_sock *vsk; in virtio_transport_recv_pkt() local
1627 vsk = vsock_sk(sk); in virtio_transport_recv_pkt()
1635 (sk->sk_state != TCP_LISTEN && vsk->transport != &t->transport)) { in virtio_transport_recv_pkt()
1645 if (vsk->local_addr.svm_cid != VMADDR_CID_ANY) in virtio_transport_recv_pkt()
1646 vsk->local_addr.svm_cid = dst.svm_cid; in virtio_transport_recv_pkt()
1692 int virtio_transport_purge_skbs(void *vsk, struct sk_buff_head *queue) in virtio_transport_purge_skbs() argument
1702 if (vsock_sk(skb->sk) != vsk) in virtio_transport_purge_skbs()
1719 int virtio_transport_read_skb(struct vsock_sock *vsk, skb_read_actor_t recv_actor) in virtio_transport_read_skb() argument
1721 struct virtio_vsock_sock *vvs = vsk->trans; in virtio_transport_read_skb()
1722 struct sock *sk = sk_vsock(vsk); in virtio_transport_read_skb()
1747 virtio_transport_send_credit_update(vsk); in virtio_transport_read_skb()
1753 int virtio_transport_notify_set_rcvlowat(struct vsock_sock *vsk, int val) in virtio_transport_notify_set_rcvlowat() argument
1755 struct virtio_vsock_sock *vvs = vsk->trans; in virtio_transport_notify_set_rcvlowat()
1774 err = virtio_transport_send_credit_update(vsk); in virtio_transport_notify_set_rcvlowat()