From a63f27a695ec2fcfb8364a2b6660b0e0cfb61ca2 Mon Sep 17 00:00:00 2001 From: Arun Kumar Neelakantam Date: Wed, 10 Apr 2019 20:02:54 +0530 Subject: [PATCH] net: qrtr: Add pm_wakeup_event() support In some cases system enters into suspend state before handling incoming packets and cause delay in communication. Add pm_wakup_event() to abort the suspend when a packet is received. CRs-Fixed: 2432846 Change-Id: I5cec4f9273362e8e2c1df1dae159a6bb5e54d16d Signed-off-by: Arun Kumar Neelakantam --- net/qrtr/qrtr.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/net/qrtr/qrtr.c b/net/qrtr/qrtr.c index aa113bd154e2..3eee2503199d 100644 --- a/net/qrtr/qrtr.c +++ b/net/qrtr/qrtr.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -140,6 +141,7 @@ static DEFINE_MUTEX(qrtr_port_lock); * @kworker: worker thread for recv work * @task: task to run the worker thread * @read_data: scheduled work for recv work + * @ws: wakeupsource avoid system suspend */ struct qrtr_node { struct mutex ep_lock; @@ -159,6 +161,8 @@ struct qrtr_node { struct kthread_worker kworker; struct task_struct *task; struct kthread_work read_data; + + struct wakeup_source *ws; }; struct qrtr_tx_flow_waiter { @@ -258,6 +262,7 @@ static void __qrtr_node_release(struct kref *kref) } mutex_unlock(&node->qrtr_tx_lock); + wakeup_source_unregister(node->ws); kthread_flush_worker(&node->kworker); kthread_stop(node->task); @@ -685,6 +690,7 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len) if (cb->type != QRTR_TYPE_DATA || cb->dst_node != qrtr_local_nid) { skb_queue_tail(&node->rx_queue, skb); kthread_queue_work(&node->kworker, &node->read_data); + __pm_wakeup_event(node->ws, 0); } else { ipc = qrtr_port_lookup(cb->dst_port); if (!ipc) @@ -891,6 +897,8 @@ int qrtr_endpoint_register(struct qrtr_endpoint *ep, unsigned int net_id, up_write(&qrtr_epts_lock); ep->node = node; + node->ws = wakeup_source_register("qrtr_ws"); + return 0; } EXPORT_SYMBOL_GPL(qrtr_endpoint_register);