net: ipc_router: Add write_space callback
Flow control events in IPC Router are posted through a resume_tx message. For clients that prefer a callback approach, add support for write_space callback to notify about the flow control events. The resume_tx message is not posted for such clients. Change-Id: Iae25fd78f190bc7aeb7311ece68b3be407a1f910 Signed-off-by: Atish Kumar Patra <apatra@codeaurora.org>
This commit is contained in:
parent
3da72c23d7
commit
baeaf0b61d
|
@ -1424,6 +1424,8 @@ static void post_resume_tx(struct msm_ipc_router_remote_port *rport_ptr,
|
|||
{
|
||||
struct msm_ipc_resume_tx_port *rtx_port, *tmp_rtx_port;
|
||||
struct msm_ipc_port *local_port;
|
||||
struct sock *sk;
|
||||
void (*write_space)(struct sock *sk) = NULL;
|
||||
|
||||
list_for_each_entry_safe(rtx_port, tmp_rtx_port,
|
||||
&rport_ptr->resume_tx_port_list, list) {
|
||||
|
@ -1434,7 +1436,16 @@ static void post_resume_tx(struct msm_ipc_router_remote_port *rport_ptr,
|
|||
sizeof(*msg), local_port->priv);
|
||||
} else if (local_port) {
|
||||
wake_up(&local_port->port_tx_wait_q);
|
||||
post_pkt_to_port(local_port, pkt, 1);
|
||||
sk = ipc_port_sk(local_port->endpoint);
|
||||
if (sk) {
|
||||
read_lock(&sk->sk_callback_lock);
|
||||
write_space = sk->sk_write_space;
|
||||
read_unlock(&sk->sk_callback_lock);
|
||||
if (write_space)
|
||||
write_space(sk);
|
||||
}
|
||||
if (!write_space)
|
||||
post_pkt_to_port(local_port, pkt, 1);
|
||||
} else {
|
||||
IPC_RTR_ERR("%s: Local Port %d not Found",
|
||||
__func__, rtx_port->port_id);
|
||||
|
|
|
@ -208,6 +208,7 @@ static int msm_ipc_router_create(struct net *net,
|
|||
sock->ops = &msm_ipc_proto_ops;
|
||||
sock_init_data(sock, sk);
|
||||
sk->sk_data_ready = NULL;
|
||||
sk->sk_write_space = NULL;
|
||||
sk->sk_rcvtimeo = DEFAULT_RCV_TIMEO;
|
||||
sk->sk_sndtimeo = DEFAULT_SND_TIMEO;
|
||||
|
||||
|
|
Loading…
Reference in New Issue