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