From bb143fe926d4444065ea67d552d3e1069e23e7c9 Mon Sep 17 00:00:00 2001
From: Purnendu Kapadia
Date: Tue, 19 Feb 2019 17:54:50 +0000
Subject: [PATCH] [RAMEN9610-12339][9610] wlbt: separate completion for
fw_panic
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
---
drivers/misc/samsung/scsc/scsc_wlbtd.c | 30 ++++++++++++++++++++------
drivers/misc/samsung/scsc/scsc_wlbtd.h | 1 +
2 files changed, 25 insertions(+), 6 deletions(-)
diff --git a/drivers/misc/samsung/scsc/scsc_wlbtd.c b/drivers/misc/samsung/scsc/scsc_wlbtd.c
index 34003a677cad..ebf0d2866ff5 100755
--- a/drivers/misc/samsung/scsc/scsc_wlbtd.c
+++ b/drivers/misc/samsung/scsc/scsc_wlbtd.c
@@ -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);
diff --git a/drivers/misc/samsung/scsc/scsc_wlbtd.h b/drivers/misc/samsung/scsc/scsc_wlbtd.h
index 746c12d4d090..12cb8aff7b45 100644
--- a/drivers/misc/samsung/scsc/scsc_wlbtd.h
+++ b/drivers/misc/samsung/scsc/scsc_wlbtd.h
@@ -6,6 +6,7 @@
#include
#include
#include
+#include
/* module parameter value to indicate control of recovery via .memdump.info file */
#define MEMDUMP_FILE_FOR_RECOVERY 2
--
2.20.1