[RAMEN9610-12339][9610] wlbt: separate completion for fw_panic
authorPurnendu Kapadia <p.kapadia@samsung.com>
Tue, 19 Feb 2019 17:54:50 +0000 (17:54 +0000)
committerCosmin Tanislav <demonsingur@gmail.com>
Mon, 22 Apr 2024 17:23:18 +0000 (20:23 +0300)
use separate completion for fw_panic than other triggers.

for other triggers complete *ONLY ONCE* when we have written .sbl file and
ignore the second message with tar completion time

SCSC-Bug-Id: ssb-49322
Change-Id: Ia6ec5064bb795858f82a6c358c4a0517fa4b29bb
Signed-off-by: Purnendu Kapadia <p.kapadia@samsung.com>
drivers/misc/samsung/scsc/scsc_wlbtd.c
drivers/misc/samsung/scsc/scsc_wlbtd.h

index 34003a677cad3a057996dfdc6445babccf2aea86..ebf0d2866ff55bd45fd339599eaf82f9718154f0 100755 (executable)
@@ -12,6 +12,7 @@
 
 /* completion to indicate when moredump is done */
 static DECLARE_COMPLETION(event_done);
+static DECLARE_COMPLETION(fw_panic_done);
 
 static DEFINE_MUTEX(build_type_lock);
 static char *build_type;
@@ -47,10 +48,10 @@ static int msg_from_wlbtd_cb(struct sk_buff *skb, struct genl_info *info)
 static int msg_from_wlbtd_sable_cb(struct sk_buff *skb, struct genl_info *info)
 {
        int status = 0;
+       const char *data = (const char *)nla_data(info->attrs[1]);
 
        if (info->attrs[1])
-               SCSC_TAG_INFO(WLBTD, "%s\n",
-                               (char *)nla_data(info->attrs[1]));
+               SCSC_TAG_INFO(WLBTD, "%s\n", data);
 
        if (info->attrs[2]) {
                status = nla_get_u16(info->attrs[2]);
@@ -67,7 +68,15 @@ static int msg_from_wlbtd_sable_cb(struct sk_buff *skb, struct genl_info *info)
                }
        }
 
-       complete(&event_done);
+       if (strstr(data, "scsc_log_fw_panic") != NULL) {
+               SCSC_TAG_INFO(WLBTD, "completing fw_panic_done\n");
+               complete(&fw_panic_done);
+       }
+
+       if (strstr(data, ".sbl") != NULL) {
+               SCSC_TAG_INFO(WLBTD, "completing event_done\n");
+               complete(&event_done);
+       }
 
        return 0;
 }
@@ -305,7 +314,11 @@ int call_wlbtd_sable(u8 trigger_code, u16 reason_code)
        SCSC_TAG_INFO(WLBTD, "waiting for completion\n");
 
        /* wait for script to finish */
-       completion_jiffies = wait_for_completion_timeout(&event_done,
+       if (trigger_code == SCSC_LOG_FW_PANIC)
+               completion_jiffies = wait_for_completion_timeout(&fw_panic_done,
+                                               max_timeout_jiffies);
+       else
+               completion_jiffies = wait_for_completion_timeout(&event_done,
                                                max_timeout_jiffies);
 
        if (completion_jiffies) {
@@ -313,10 +326,14 @@ int call_wlbtd_sable(u8 trigger_code, u16 reason_code)
                SCSC_TAG_INFO(WLBTD, "sable generated in %dms\n",
                        (int)jiffies_to_msecs(completion_jiffies) ? : 1);
        } else
-               SCSC_TAG_ERR(WLBTD, "wait for completion timed out !\n");
+               SCSC_TAG_ERR(WLBTD, "wait for completion timed out for %s\n",
+                               scsc_get_trigger_str((int)trigger_code));
 
        /* reinit so completion can be re-used */
-       reinit_completion(&event_done);
+       if (trigger_code == SCSC_LOG_FW_PANIC)
+               reinit_completion(&fw_panic_done);
+       else
+               reinit_completion(&event_done);
 
        SCSC_TAG_INFO(WLBTD, "  end:trigger - %s\n",
                scsc_get_trigger_str((int)trigger_code));
@@ -439,6 +456,7 @@ int scsc_wlbtd_init(void)
 
        wake_lock_init(&wlbtd_wakelock, WAKE_LOCK_SUSPEND, "wlbtd_wl");
        init_completion(&event_done);
+       init_completion(&fw_panic_done);
 
        /* register the family so that wlbtd can bind */
        r = genl_register_family(&scsc_nlfamily);
index 746c12d4d0902b2030e80bfc2b7d86f735c64162..12cb8aff7b4529b3137cbeede9ab77e37379de73 100644 (file)
@@ -6,6 +6,7 @@
 #include <net/genetlink.h>
 #include <scsc/scsc_logring.h>
 #include <scsc/scsc_mx.h>
+#include <scsc/scsc_log_collector.h>
 
 /* module parameter value to indicate control of recovery via .memdump.info file */
 #define MEMDUMP_FILE_FOR_RECOVERY 2