OSDN Git Service

diag: Add timer to make sure wakelock no stuck
authorJie Song <jies@google.com>
Tue, 12 Dec 2017 09:02:08 +0000 (14:32 +0530)
committer0ranko0P <ranko0p@outlook.com>
Wed, 5 Feb 2020 10:54:59 +0000 (18:54 +0800)
Bug: 142000171
cherry-pick from I81666dcc18c584dbcbd9f588f187ae87a377bcb0
Signed-off-by: Jie Song <jies@google.com>
Change-Id: I7bb84dec4d352ef731b2457dc15590a29ed57a90
Signed-off-by: Adam W. Willis <return.of.octobot@gmail.com>
Signed-off-by: UtsavisGreat <utsavbalar1231@gmail.com>
drivers/char/diag/diagchar_core.c

index 47e0dab..6436967 100644 (file)
@@ -146,6 +146,8 @@ module_param(max_clients, uint, 0);
 static struct timer_list drain_timer;
 static int timer_in_progress;
 
+static struct timer_list wake_timer;
+
 /*
  * Diag Mask clear variable
  * Used for clearing masks upon
@@ -225,6 +227,11 @@ static void drain_timer_func(unsigned long data)
        queue_work(driver->diag_wq , &(driver->diag_drain_work));
 }
 
+static void wake_timer_func(unsigned long data)
+{
+       pm_relax(driver->diag_dev);
+}
+
 static void diag_drain_apps_data(struct diag_apps_data_t *data)
 {
        int err = 0;
@@ -3529,6 +3536,8 @@ void diag_ws_on_notify()
         * interrupts.
         */
        pm_stay_awake(driver->diag_dev);
+
+       mod_timer(&wake_timer, jiffies + msecs_to_jiffies(5000));
 }
 
 void diag_ws_on_read(int type, int pkt_len)
@@ -3894,6 +3903,7 @@ static int __init diagchar_init(void)
        driver->hdlc_disabled = 0;
        driver->dci_state = DIAG_DCI_NO_ERROR;
        setup_timer(&drain_timer, drain_timer_func, 1234);
+       setup_timer(&wake_timer, wake_timer_func, 0);
        driver->supports_sockets = 1;
        driver->time_sync_enabled = 0;
        driver->uses_time_api = 0;