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

Commit 04dbf0cc authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "qrtr: ns: create kthread worker to process ns work"

parents 4de15df2 13a0a618
Loading
Loading
Loading
Loading
+16 −10
Original line number Diff line number Diff line
@@ -29,8 +29,9 @@ static struct {
	struct socket *sock;
	struct sockaddr_qrtr bcast_sq;
	struct list_head lookups;
	struct workqueue_struct *workqueue;
	struct work_struct work;
	struct kthread_worker kworker;
	struct kthread_work work;
	struct task_struct *task;
	int local_node;
} qrtr_ns;

@@ -628,7 +629,7 @@ static void ns_log_msg(const struct qrtr_ctrl_pkt *pkt,
			le32_to_cpu(pkt->server.instance));
}

static void qrtr_ns_worker(struct work_struct *work)
static void qrtr_ns_worker(struct kthread_work *work)
{
	const struct qrtr_ctrl_pkt *pkt;
	size_t recv_buf_size = 4096;
@@ -724,7 +725,7 @@ static void qrtr_ns_worker(struct work_struct *work)

static void qrtr_ns_data_ready(struct sock *sk)
{
	queue_work(qrtr_ns.workqueue, &qrtr_ns.work);
	kthread_queue_work(&qrtr_ns.kworker, &qrtr_ns.work);
}

void qrtr_ns_init(void)
@@ -734,7 +735,8 @@ void qrtr_ns_init(void)
	int ret;

	INIT_LIST_HEAD(&qrtr_ns.lookups);
	INIT_WORK(&qrtr_ns.work, qrtr_ns_worker);
	kthread_init_worker(&qrtr_ns.kworker);
	kthread_init_work(&qrtr_ns.work, qrtr_ns_worker);

	ns_ilc = ipc_log_context_create(NS_LOG_PAGE_CNT, "qrtr_ns", 0);

@@ -749,9 +751,13 @@ void qrtr_ns_init(void)
		goto err_sock;
	}

	qrtr_ns.workqueue = alloc_workqueue("qrtr_ns_handler", WQ_UNBOUND, 1);
	if (!qrtr_ns.workqueue)
	qrtr_ns.task = kthread_run(kthread_worker_fn, &qrtr_ns.kworker,
				   "qrtr_ns");
	if (IS_ERR(qrtr_ns.task)) {
		pr_err("failed to spawn worker thread %ld\n",
		       PTR_ERR(qrtr_ns.task));
		goto err_sock;
	}

	qrtr_ns.sock->sk->sk_data_ready = qrtr_ns_data_ready;

@@ -777,7 +783,7 @@ void qrtr_ns_init(void)
	return;

err_wq:
	destroy_workqueue(qrtr_ns.workqueue);
	kthread_stop(qrtr_ns.task);
err_sock:
	sock_release(qrtr_ns.sock);
}
@@ -785,8 +791,8 @@ EXPORT_SYMBOL_GPL(qrtr_ns_init);

void qrtr_ns_remove(void)
{
	cancel_work_sync(&qrtr_ns.work);
	destroy_workqueue(qrtr_ns.workqueue);
	kthread_flush_worker(&qrtr_ns.kworker);
	kthread_stop(qrtr_ns.task);
	sock_release(qrtr_ns.sock);
}
EXPORT_SYMBOL_GPL(qrtr_ns_remove);