static void log_modem_sfr(struct modem_data *drv) { u32 size; char *smem_reason, reason[MAX_SSR_REASON_LEN]; smem_reason = smem_get_entry_no_rlock(SMEM_SSR_REASON_MSS0, &size); if (!smem_reason || !size) { pr_err("modem subsystem failure reason: (unknown, smem_get_entry_no_rlock failed).\n"); return; } if (!smem_reason[0]) { pr_err("modem subsystem failure reason: (unknown, empty string found).\n"); return; } strlcpy(reason, smem_reason, min(size, sizeof(reason))); update_crash_reason(drv->subsys, smem_reason, size); pr_err("modem subsystem failure reason: %s.\n", reason); smem_reason[0] = '\0'; wmb(); }
static void log_wcnss_sfr(struct pronto_data *drv) { char *smem_reset_reason; unsigned smem_reset_size; smem_reset_reason = smem_get_entry(SMEM_SSR_REASON_WCNSS0, &smem_reset_size); if (!smem_reset_reason || !smem_reset_size) { pr_err("wcnss subsystem failure reason:\n" "(unknown, smem_get_entry failed)"); } else if (!smem_reset_reason[0]) { pr_err("wcnss subsystem failure reason:\n" "(unknown, init string found)"); } else { pr_err("wcnss subsystem failure reason: %.81s\n", smem_reset_reason); update_crash_reason(drv->subsys, smem_reset_reason, smem_reset_size); memset(smem_reset_reason, 0, smem_reset_size); wmb(); } }