Lines Matching full:ipc
159 static void qrtr_port_put(struct qrtr_sock *ipc);
430 struct qrtr_sock *ipc; in qrtr_endpoint_post() local
504 ipc = qrtr_port_lookup(cb->dst_port); in qrtr_endpoint_post()
505 if (!ipc) in qrtr_endpoint_post()
508 if (sock_queue_rcv_skb(&ipc->sk, skb)) { in qrtr_endpoint_post()
509 qrtr_port_put(ipc); in qrtr_endpoint_post()
513 qrtr_port_put(ipc); in qrtr_endpoint_post()
633 struct qrtr_sock *ipc; in qrtr_port_lookup() local
639 ipc = xa_load(&qrtr_ports, port); in qrtr_port_lookup()
640 if (ipc) in qrtr_port_lookup()
641 sock_hold(&ipc->sk); in qrtr_port_lookup()
644 return ipc; in qrtr_port_lookup()
648 static void qrtr_port_put(struct qrtr_sock *ipc) in qrtr_port_put() argument
650 sock_put(&ipc->sk); in qrtr_port_put()
654 static void qrtr_port_remove(struct qrtr_sock *ipc) in qrtr_port_remove() argument
658 int port = ipc->us.sq_port; in qrtr_port_remove()
668 pkt->client.node = cpu_to_le32(ipc->us.sq_node); in qrtr_port_remove()
669 pkt->client.port = cpu_to_le32(ipc->us.sq_port); in qrtr_port_remove()
671 skb_set_owner_w(skb, &ipc->sk); in qrtr_port_remove()
672 qrtr_bcast_enqueue(NULL, skb, QRTR_TYPE_DEL_CLIENT, &ipc->us, in qrtr_port_remove()
679 __sock_put(&ipc->sk); in qrtr_port_remove()
698 static int qrtr_port_assign(struct qrtr_sock *ipc, int *port) in qrtr_port_assign() argument
703 rc = xa_alloc(&qrtr_ports, port, ipc, QRTR_EPH_PORT_RANGE, in qrtr_port_assign()
708 rc = xa_insert(&qrtr_ports, 0, ipc, GFP_KERNEL); in qrtr_port_assign()
710 rc = xa_insert(&qrtr_ports, *port, ipc, GFP_KERNEL); in qrtr_port_assign()
718 sock_hold(&ipc->sk); in qrtr_port_assign()
726 struct qrtr_sock *ipc; in qrtr_reset_ports() local
730 xa_for_each_start(&qrtr_ports, index, ipc, 1) { in qrtr_reset_ports()
731 sock_hold(&ipc->sk); in qrtr_reset_ports()
732 ipc->sk.sk_err = ENETRESET; in qrtr_reset_ports()
733 ipc->sk.sk_error_report(&ipc->sk); in qrtr_reset_ports()
734 sock_put(&ipc->sk); in qrtr_reset_ports()
746 struct qrtr_sock *ipc = qrtr_sk(sock->sk); in __qrtr_bind() local
752 if (!zapped && addr->sq_port == ipc->us.sq_port) in __qrtr_bind()
756 rc = qrtr_port_assign(ipc, &port); in __qrtr_bind()
762 qrtr_port_remove(ipc); in __qrtr_bind()
763 ipc->us.sq_port = port; in __qrtr_bind()
794 struct qrtr_sock *ipc = qrtr_sk(sock->sk); in qrtr_bind() local
801 if (addr->sq_node != ipc->us.sq_node) in qrtr_bind()
816 struct qrtr_sock *ipc; in qrtr_local_enqueue() local
819 ipc = qrtr_port_lookup(to->sq_port); in qrtr_local_enqueue()
820 if (!ipc || &ipc->sk == skb->sk) { /* do not send to self */ in qrtr_local_enqueue()
821 if (ipc) in qrtr_local_enqueue()
822 qrtr_port_put(ipc); in qrtr_local_enqueue()
831 if (sock_queue_rcv_skb(&ipc->sk, skb)) { in qrtr_local_enqueue()
832 qrtr_port_put(ipc); in qrtr_local_enqueue()
837 qrtr_port_put(ipc); in qrtr_local_enqueue()
870 struct qrtr_sock *ipc = qrtr_sk(sock->sk); in qrtr_sendmsg() local
903 addr = &ipc->peer; in qrtr_sendmsg()
917 } else if (addr->sq_node == ipc->us.sq_node) { in qrtr_sendmsg()
944 if (ipc->us.sq_port == QRTR_PORT_CTRL) { in qrtr_sendmsg()
956 rc = enqueue_fn(node, skb, type, &ipc->us, addr); in qrtr_sendmsg()
1056 struct qrtr_sock *ipc = qrtr_sk(sock->sk); in qrtr_connect() local
1074 ipc->peer = *addr; in qrtr_connect()
1086 struct qrtr_sock *ipc = qrtr_sk(sock->sk); in qrtr_getname() local
1097 qaddr = ipc->peer; in qrtr_getname()
1099 qaddr = ipc->us; in qrtr_getname()
1113 struct qrtr_sock *ipc = qrtr_sk(sock->sk); in qrtr_ioctl() local
1143 *sq = ipc->us; in qrtr_ioctl()
1173 struct qrtr_sock *ipc; in qrtr_release() local
1180 ipc = qrtr_sk(sk); in qrtr_release()
1190 qrtr_port_remove(ipc); in qrtr_release()
1229 struct qrtr_sock *ipc; in qrtr_create() local
1244 ipc = qrtr_sk(sk); in qrtr_create()
1245 ipc->us.sq_family = AF_QIPCRTR; in qrtr_create()
1246 ipc->us.sq_node = qrtr_local_nid; in qrtr_create()
1247 ipc->us.sq_port = 0; in qrtr_create()
1286 MODULE_DESCRIPTION("Qualcomm IPC-router driver");