Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 778145f1 authored by Atish Kumar Patra's avatar Atish Kumar Patra
Browse files

net: ipc_router: Split IPC Router initialization



IPC Router initializes its core data structures along with its user-space
interface related data structures. Since the clients can interface with IPC
Router from different context, initialize the core data structures
separately from the interface and keep the core initialization sequence
light-weight.

Change-Id: I267cc8d376e7531975603d9308349cf4986a81e9
Signed-off-by: default avatarAtish Kumar Patra <apatra@codeaurora.org>
parent 79ef7b34
Loading
Loading
Loading
Loading
+31 −12
Original line number Diff line number Diff line
@@ -182,7 +182,7 @@ static DEFINE_MUTEX(log_ctx_list_lock_lha0);
static LIST_HEAD(log_ctx_list);
static DEFINE_MUTEX(ipc_router_init_lock);
static bool is_ipc_router_inited;
static int msm_ipc_router_init(void);
static int ipc_router_core_init(void);
#define IPC_ROUTER_INIT_TIMEOUT (10 * HZ)

static uint32_t next_port_id;
@@ -3350,7 +3350,7 @@ struct msm_ipc_port *msm_ipc_router_create_port(
	struct msm_ipc_port *port_ptr;
	int ret;

	ret = msm_ipc_router_init();
	ret = ipc_router_core_init();
	if (ret < 0) {
		IPC_RTR_ERR("%s: Error %d initializing IPC Router\n",
			    __func__, ret);
@@ -3990,7 +3990,7 @@ void msm_ipc_router_xprt_notify(struct msm_ipc_router_xprt *xprt,
	struct rr_packet *pkt;
	int ret;

	ret = msm_ipc_router_init();
	ret = ipc_router_core_init();
	if (ret < 0) {
		IPC_RTR_ERR("%s: Error %d initializing IPC Router\n",
			    __func__, ret);
@@ -4103,9 +4103,17 @@ static struct platform_driver ipc_router_driver = {
	 },
};

static int msm_ipc_router_init(void)
/**
 * ipc_router_core_init() - Initialize all IPC Router core data structures
 *
 * Return: 0 on Success or Standard error code otherwise.
 *
 * This function only initializes all the core data structures to the IPC Router
 * module. The remaining initialization is done inside msm_ipc_router_init().
 */
static int ipc_router_core_init(void)
{
	int i, ret;
	int i;
	struct msm_ipc_routing_table_entry *rt_entry;

	mutex_lock(&ipc_router_init_lock);
@@ -4133,10 +4141,6 @@ static int msm_ipc_router_init(void)
	rt_entry = create_routing_table_entry(IPC_ROUTER_NID_LOCAL, NULL);
	kref_put(&rt_entry->ref, ipc_router_release_rtentry);

	ret = msm_ipc_router_security_init();
	if (ret < 0)
		IPC_RTR_ERR("%s: Security Init failed\n", __func__);

	msm_ipc_router_workqueue =
		create_singlethread_workqueue("msm_ipc_router");
	if (!msm_ipc_router_workqueue) {
@@ -4144,6 +4148,24 @@ static int msm_ipc_router_init(void)
		return -ENOMEM;
	}

	is_ipc_router_inited = true;
	mutex_unlock(&ipc_router_init_lock);

	return 0;
}

static int msm_ipc_router_init(void)
{
	int ret;

	ret = ipc_router_core_init();
	if (ret < 0)
		return ret;

	ret = msm_ipc_router_security_init();
	if (ret < 0)
		IPC_RTR_ERR("%s: Security Init failed\n", __func__);

	ret = platform_driver_register(&ipc_router_driver);
	if (ret)
		IPC_RTR_ERR(
@@ -4153,10 +4175,7 @@ static int msm_ipc_router_init(void)
	if (ret < 0)
		IPC_RTR_ERR("%s: Init sockets failed\n", __func__);

	is_ipc_router_inited = true;

	ipc_router_log_ctx_init();
	mutex_unlock(&ipc_router_init_lock);
	return ret;
}