Loading net/ipc_router/ipc_router_core.c +24 −15 Original line number Diff line number Diff line Loading @@ -187,7 +187,9 @@ static void do_read_data(struct work_struct *work); static LIST_HEAD(xprt_info_list); static DECLARE_RWSEM(xprt_info_list_lock_lha5); static DECLARE_COMPLETION(msm_ipc_local_router_up); static DEFINE_MUTEX(ipc_router_init_lock); static bool is_ipc_router_inited; static int msm_ipc_router_init(void); #define IPC_ROUTER_INIT_TIMEOUT (10 * HZ) static uint32_t next_port_id; Loading Loading @@ -2795,9 +2797,10 @@ struct msm_ipc_port *msm_ipc_router_create_port( struct msm_ipc_port *port_ptr; int ret; ret = wait_for_completion_interruptible(&msm_ipc_local_router_up); ret = msm_ipc_router_init(); if (ret < 0) { IPC_RTR_ERR("%s: Error waiting for local router\n", __func__); IPC_RTR_ERR("%s: Error %d initializing IPC Router\n", __func__, ret); return NULL; } Loading Loading @@ -3311,17 +3314,14 @@ void msm_ipc_router_xprt_notify(struct msm_ipc_router_xprt *xprt, struct msm_ipc_router_xprt_info *xprt_info = xprt->priv; struct msm_ipc_router_xprt_work *xprt_work; struct rr_packet *pkt; unsigned long ret; int ret; if (!msm_ipc_router_workqueue) { ret = wait_for_completion_timeout(&msm_ipc_local_router_up, IPC_ROUTER_INIT_TIMEOUT); if (!ret || !msm_ipc_router_workqueue) { IPC_RTR_ERR("%s: IPC Router not initialized\n", __func__); ret = msm_ipc_router_init(); if (ret < 0) { IPC_RTR_ERR("%s: Error %d initializing IPC Router\n", __func__, ret); return; } } switch (event) { case IPC_ROUTER_XPRT_EVENT_OPEN: Loading Loading @@ -3374,11 +3374,17 @@ void msm_ipc_router_xprt_notify(struct msm_ipc_router_xprt *xprt, queue_work(xprt_info->workqueue, &xprt_info->read_data); } static int __init msm_ipc_router_init(void) static int msm_ipc_router_init(void) { int i, ret; struct msm_ipc_routing_table_entry *rt_entry; mutex_lock(&ipc_router_init_lock); if (likely(is_ipc_router_inited)) { mutex_unlock(&ipc_router_init_lock); return 0; } msm_ipc_router_debug_mask |= SMEM_LOG; ipc_rtr_log_ctxt = ipc_log_context_create(IPC_RTR_LOG_PAGES, "ipc_router", 0); Loading Loading @@ -3413,9 +3419,12 @@ static int __init msm_ipc_router_init(void) msm_ipc_router_workqueue = create_singlethread_workqueue("msm_ipc_router"); if (!msm_ipc_router_workqueue) if (!msm_ipc_router_workqueue) { mutex_unlock(&ipc_router_init_lock); return -ENOMEM; complete_all(&msm_ipc_local_router_up); } is_ipc_router_inited = true; mutex_unlock(&ipc_router_init_lock); return ret; } Loading Loading
net/ipc_router/ipc_router_core.c +24 −15 Original line number Diff line number Diff line Loading @@ -187,7 +187,9 @@ static void do_read_data(struct work_struct *work); static LIST_HEAD(xprt_info_list); static DECLARE_RWSEM(xprt_info_list_lock_lha5); static DECLARE_COMPLETION(msm_ipc_local_router_up); static DEFINE_MUTEX(ipc_router_init_lock); static bool is_ipc_router_inited; static int msm_ipc_router_init(void); #define IPC_ROUTER_INIT_TIMEOUT (10 * HZ) static uint32_t next_port_id; Loading Loading @@ -2795,9 +2797,10 @@ struct msm_ipc_port *msm_ipc_router_create_port( struct msm_ipc_port *port_ptr; int ret; ret = wait_for_completion_interruptible(&msm_ipc_local_router_up); ret = msm_ipc_router_init(); if (ret < 0) { IPC_RTR_ERR("%s: Error waiting for local router\n", __func__); IPC_RTR_ERR("%s: Error %d initializing IPC Router\n", __func__, ret); return NULL; } Loading Loading @@ -3311,17 +3314,14 @@ void msm_ipc_router_xprt_notify(struct msm_ipc_router_xprt *xprt, struct msm_ipc_router_xprt_info *xprt_info = xprt->priv; struct msm_ipc_router_xprt_work *xprt_work; struct rr_packet *pkt; unsigned long ret; int ret; if (!msm_ipc_router_workqueue) { ret = wait_for_completion_timeout(&msm_ipc_local_router_up, IPC_ROUTER_INIT_TIMEOUT); if (!ret || !msm_ipc_router_workqueue) { IPC_RTR_ERR("%s: IPC Router not initialized\n", __func__); ret = msm_ipc_router_init(); if (ret < 0) { IPC_RTR_ERR("%s: Error %d initializing IPC Router\n", __func__, ret); return; } } switch (event) { case IPC_ROUTER_XPRT_EVENT_OPEN: Loading Loading @@ -3374,11 +3374,17 @@ void msm_ipc_router_xprt_notify(struct msm_ipc_router_xprt *xprt, queue_work(xprt_info->workqueue, &xprt_info->read_data); } static int __init msm_ipc_router_init(void) static int msm_ipc_router_init(void) { int i, ret; struct msm_ipc_routing_table_entry *rt_entry; mutex_lock(&ipc_router_init_lock); if (likely(is_ipc_router_inited)) { mutex_unlock(&ipc_router_init_lock); return 0; } msm_ipc_router_debug_mask |= SMEM_LOG; ipc_rtr_log_ctxt = ipc_log_context_create(IPC_RTR_LOG_PAGES, "ipc_router", 0); Loading Loading @@ -3413,9 +3419,12 @@ static int __init msm_ipc_router_init(void) msm_ipc_router_workqueue = create_singlethread_workqueue("msm_ipc_router"); if (!msm_ipc_router_workqueue) if (!msm_ipc_router_workqueue) { mutex_unlock(&ipc_router_init_lock); return -ENOMEM; complete_all(&msm_ipc_local_router_up); } is_ipc_router_inited = true; mutex_unlock(&ipc_router_init_lock); return ret; } Loading