Loading net/ipc_router/ipc_router_core.c +32 −13 Original line number Diff line number Diff line Loading @@ -138,6 +138,7 @@ struct msm_ipc_router_xprt_info { struct msm_ipc_router_xprt *xprt; uint32_t remote_node_id; uint32_t initialized; uint32_t hello_sent; struct list_head pkt_list; struct wakeup_source ws; struct mutex rx_lock_lhb2; Loading Loading @@ -2485,12 +2486,37 @@ static void do_version_negotiation(struct msm_ipc_router_xprt_info *xprt_info, } } static int send_hello_msg(struct msm_ipc_router_xprt_info *xprt_info) { int rc = 0; union rr_control_msg ctl; if (xprt_info->hello_sent) return 0; xprt_info->hello_sent = 1; /* Send a HELLO message */ memset(&ctl, 0, sizeof(ctl)); ctl.hello.cmd = IPC_ROUTER_CTRL_CMD_HELLO; ctl.hello.checksum = IPC_ROUTER_HELLO_MAGIC; ctl.hello.versions = (uint32_t)IPC_ROUTER_VER_BITMASK; ctl.hello.checksum = ipc_router_calc_checksum(&ctl); rc = ipc_router_send_ctl_msg(xprt_info, &ctl, IPC_ROUTER_DUMMY_DEST_NODE); if (rc < 0) { xprt_info->hello_sent = 0; IPC_RTR_ERR("%s: Error sending HELLO message\n", __func__); return rc; } return rc; } static int process_hello_msg(struct msm_ipc_router_xprt_info *xprt_info, union rr_control_msg *msg, struct rr_header_v1 *hdr) { int i, rc = 0; union rr_control_msg ctl; struct msm_ipc_routing_table_entry *rt_entry; if (!hdr) Loading @@ -2505,19 +2531,10 @@ static int process_hello_msg(struct msm_ipc_router_xprt_info *xprt_info, kref_put(&rt_entry->ref, ipc_router_release_rtentry); do_version_negotiation(xprt_info, msg); /* Send a reply HELLO message */ memset(&ctl, 0, sizeof(ctl)); ctl.hello.cmd = IPC_ROUTER_CTRL_CMD_HELLO; ctl.hello.checksum = IPC_ROUTER_HELLO_MAGIC; ctl.hello.versions = (uint32_t)IPC_ROUTER_VER_BITMASK; ctl.hello.checksum = ipc_router_calc_checksum(&ctl); rc = ipc_router_send_ctl_msg(xprt_info, &ctl, IPC_ROUTER_DUMMY_DEST_NODE); if (rc < 0) { IPC_RTR_ERR("%s: Error sending reply HELLO message\n", __func__); rc = send_hello_msg(xprt_info); if (rc < 0) return rc; } xprt_info->initialized = 1; /* Send list of servers from the local node and from nodes Loading Loading @@ -4074,6 +4091,7 @@ static int msm_ipc_router_add_xprt(struct msm_ipc_router_xprt *xprt) xprt_info->xprt = xprt; xprt_info->initialized = 0; xprt_info->hello_sent = 0; xprt_info->remote_node_id = -1; INIT_LIST_HEAD(&xprt_info->pkt_list); mutex_init(&xprt_info->rx_lock_lhb2); Loading Loading @@ -4113,6 +4131,7 @@ static int msm_ipc_router_add_xprt(struct msm_ipc_router_xprt *xprt) up_write(&routing_table_lock_lha3); xprt->priv = xprt_info; send_hello_msg(xprt_info); return 0; } Loading Loading
net/ipc_router/ipc_router_core.c +32 −13 Original line number Diff line number Diff line Loading @@ -138,6 +138,7 @@ struct msm_ipc_router_xprt_info { struct msm_ipc_router_xprt *xprt; uint32_t remote_node_id; uint32_t initialized; uint32_t hello_sent; struct list_head pkt_list; struct wakeup_source ws; struct mutex rx_lock_lhb2; Loading Loading @@ -2485,12 +2486,37 @@ static void do_version_negotiation(struct msm_ipc_router_xprt_info *xprt_info, } } static int send_hello_msg(struct msm_ipc_router_xprt_info *xprt_info) { int rc = 0; union rr_control_msg ctl; if (xprt_info->hello_sent) return 0; xprt_info->hello_sent = 1; /* Send a HELLO message */ memset(&ctl, 0, sizeof(ctl)); ctl.hello.cmd = IPC_ROUTER_CTRL_CMD_HELLO; ctl.hello.checksum = IPC_ROUTER_HELLO_MAGIC; ctl.hello.versions = (uint32_t)IPC_ROUTER_VER_BITMASK; ctl.hello.checksum = ipc_router_calc_checksum(&ctl); rc = ipc_router_send_ctl_msg(xprt_info, &ctl, IPC_ROUTER_DUMMY_DEST_NODE); if (rc < 0) { xprt_info->hello_sent = 0; IPC_RTR_ERR("%s: Error sending HELLO message\n", __func__); return rc; } return rc; } static int process_hello_msg(struct msm_ipc_router_xprt_info *xprt_info, union rr_control_msg *msg, struct rr_header_v1 *hdr) { int i, rc = 0; union rr_control_msg ctl; struct msm_ipc_routing_table_entry *rt_entry; if (!hdr) Loading @@ -2505,19 +2531,10 @@ static int process_hello_msg(struct msm_ipc_router_xprt_info *xprt_info, kref_put(&rt_entry->ref, ipc_router_release_rtentry); do_version_negotiation(xprt_info, msg); /* Send a reply HELLO message */ memset(&ctl, 0, sizeof(ctl)); ctl.hello.cmd = IPC_ROUTER_CTRL_CMD_HELLO; ctl.hello.checksum = IPC_ROUTER_HELLO_MAGIC; ctl.hello.versions = (uint32_t)IPC_ROUTER_VER_BITMASK; ctl.hello.checksum = ipc_router_calc_checksum(&ctl); rc = ipc_router_send_ctl_msg(xprt_info, &ctl, IPC_ROUTER_DUMMY_DEST_NODE); if (rc < 0) { IPC_RTR_ERR("%s: Error sending reply HELLO message\n", __func__); rc = send_hello_msg(xprt_info); if (rc < 0) return rc; } xprt_info->initialized = 1; /* Send list of servers from the local node and from nodes Loading Loading @@ -4074,6 +4091,7 @@ static int msm_ipc_router_add_xprt(struct msm_ipc_router_xprt *xprt) xprt_info->xprt = xprt; xprt_info->initialized = 0; xprt_info->hello_sent = 0; xprt_info->remote_node_id = -1; INIT_LIST_HEAD(&xprt_info->pkt_list); mutex_init(&xprt_info->rx_lock_lhb2); Loading Loading @@ -4113,6 +4131,7 @@ static int msm_ipc_router_add_xprt(struct msm_ipc_router_xprt *xprt) up_write(&routing_table_lock_lha3); xprt->priv = xprt_info; send_hello_msg(xprt_info); return 0; } Loading