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

Commit 4c000fa6 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "net: ipc_router: Add notifier support for AF_MSM_IPC registration"

parents 6024c098 edb40447
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -75,6 +75,11 @@ struct comm_mode_info {
	void *xprt_info;
};

enum ipc_rtr_af_event_type {
	IPCRTR_AF_INIT = 1,
	IPCRTR_AF_DEINIT,
};

/**
 * msm_ipc_port - Definition of IPC Router port
 * @list: List(local/control ports) in which this port is present.
@@ -242,6 +247,26 @@ int msm_ipc_router_register_server(struct msm_ipc_port *server_port,
 */
int msm_ipc_router_unregister_server(struct msm_ipc_port *server_port);

/**
 * register_ipcrtr_af_init_notifier() - Register for ipc router socket
 *				address family initialization callback
 * @nb: Notifier block which will be notified once address family is
 *	initialized.
 *
 * Return: 0 on success, standard error code otherwise.
 */
int register_ipcrtr_af_init_notifier(struct notifier_block *nb);

/**
 * unregister_ipcrtr_af_init_notifier() - Unregister for ipc router socket
 *					address family initialization callback
 * @nb: Notifier block which will be notified once address family is
 *	initialized.
 *
 * Return: 0 on success, standard error code otherwise.
 */
int unregister_ipcrtr_af_init_notifier(struct notifier_block *nb);

#else

struct msm_ipc_port *msm_ipc_router_create_port(
@@ -304,6 +329,16 @@ static inline int msm_ipc_router_unregister_server(
	return -ENODEV;
}

int register_ipcrtr_af_notifier(struct notifier_block *nb)
{
	return -ENODEV;
}

int register_ipcrtr_af_notifier(struct notifier_block *nb)
{
	return -ENODEV;
}

#endif

#endif
+6 −5
Original line number Diff line number Diff line
@@ -4125,10 +4125,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_init_sockets();
	if (ret < 0)
		IPC_RTR_ERR("%s: Init sockets failed\n", __func__);

	ret = msm_ipc_router_security_init();
	if (ret < 0)
		IPC_RTR_ERR("%s: Security Init failed\n", __func__);
@@ -4139,13 +4135,18 @@ static int msm_ipc_router_init(void)
		mutex_unlock(&ipc_router_init_lock);
		return -ENOMEM;
	}
	is_ipc_router_inited = true;

	ret = platform_driver_register(&ipc_router_driver);
	if (ret)
		IPC_RTR_ERR(
		"%s: ipc_router_driver register failed %d\n", __func__, ret);

	ret = msm_ipc_router_init_sockets();
	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;
+53 −1
Original line number Diff line number Diff line
@@ -45,6 +45,8 @@
static int sockets_enabled;
static struct proto msm_ipc_proto;
static const struct proto_ops msm_ipc_proto_ops;
static RAW_NOTIFIER_HEAD(ipcrtr_af_init_chain);
static DEFINE_MUTEX(ipcrtr_af_init_lock);

static struct sk_buff_head *msm_ipc_router_build_msg(unsigned int num_sect,
					  struct iovec const *msg_sect,
@@ -561,6 +563,48 @@ static int msm_ipc_router_close(struct socket *sock)
	return ret;
}

/**
 * register_ipcrtr_af_init_notifier() - Register for ipc router socket
 *				address family initialization callback
 * @nb: Notifier block which will be notified when address family is
 *	initialized.
 *
 * Return: 0 on success, standard error code otherwise.
 */
int register_ipcrtr_af_init_notifier(struct notifier_block *nb)
{
	int ret;

	if (!nb)
		return -EINVAL;
	mutex_lock(&ipcrtr_af_init_lock);
	if (sockets_enabled)
		nb->notifier_call(nb, IPCRTR_AF_INIT, NULL);
	ret = raw_notifier_chain_register(&ipcrtr_af_init_chain, nb);
	mutex_unlock(&ipcrtr_af_init_lock);
	return ret;
}
EXPORT_SYMBOL(register_ipcrtr_af_init_notifier);

/**
 * unregister_ipcrtr_af_init_notifier() - Unregister for ipc router socket
 *				address family initialization callback
 * @nb: Notifier block which will be notified once address family is
 *	initialized.
 *
 * Return: 0 on success, standard error code otherwise.
 */
int unregister_ipcrtr_af_init_notifier(struct notifier_block *nb)
{
	int ret;

	if (!nb)
		return -EINVAL;
	ret = raw_notifier_chain_unregister(&ipcrtr_af_init_chain, nb);
	return ret;
}
EXPORT_SYMBOL(unregister_ipcrtr_af_init_notifier);

static const struct net_proto_family msm_ipc_family_ops = {
	.owner		= THIS_MODULE,
	.family		= AF_MSM_IPC,
@@ -620,7 +664,11 @@ int msm_ipc_router_init_sockets(void)
		goto out_init_sockets;
	}

	mutex_lock(&ipcrtr_af_init_lock);
	sockets_enabled = 1;
	raw_notifier_call_chain(&ipcrtr_af_init_chain,
				IPCRTR_AF_INIT, NULL);
	mutex_unlock(&ipcrtr_af_init_lock);
out_init_sockets:
	return ret;
}
@@ -630,7 +678,11 @@ void msm_ipc_router_exit_sockets(void)
	if (!sockets_enabled)
		return;

	sockets_enabled = 0;
	sock_unregister(msm_ipc_family_ops.family);
	proto_unregister(&msm_ipc_proto);
	mutex_lock(&ipcrtr_af_init_lock);
	sockets_enabled = 0;
	raw_notifier_call_chain(&ipcrtr_af_init_chain,
				IPCRTR_AF_DEINIT, NULL);
	mutex_unlock(&ipcrtr_af_init_lock);
}