mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
esoc: Wait for modem status to go low in crash shutdown
Wait for modem status to go low in crash shutdown. This helps cover the race condition where there is a crash during graceful shutdown and we end up in crash path and send crash notification to clients even before the modem status has gone low. Also set the crash flag in interrupt path to avoid double queueing of ssr work. Change-Id: I680b79c7a1de5e44cb9fcfa0f9d67517c0398f62 Signed-off-by: Rishabh Bhatnagar <rishabhb@codeaurora.org>
This commit is contained in:
parent
aac560a658
commit
1038908526
@ -184,6 +184,7 @@ static void mdm_handle_clink_evt(enum esoc_evt evt,
|
||||
esoc_mdm_log("Modem not up. Ignoring.\n");
|
||||
if (mdm_drv->mode == CRASH || mdm_drv->mode != RUN)
|
||||
return;
|
||||
mdm_drv->mode = CRASH;
|
||||
queue_work(mdm_drv->mdm_queue, &mdm_drv->ssr_work);
|
||||
break;
|
||||
case ESOC_REQ_ENG_ON:
|
||||
@ -205,8 +206,7 @@ static void mdm_ssr_fn(struct work_struct *work)
|
||||
|
||||
mdm_wait_for_status_low(mdm, false);
|
||||
|
||||
esoc_mdm_log("Starting SSR work and setting crash state\n");
|
||||
mdm_drv->mode = CRASH;
|
||||
esoc_mdm_log("Starting SSR work\n");
|
||||
|
||||
/*
|
||||
* If restarting esoc fails, the SSR framework triggers a kernel panic
|
||||
@ -289,12 +289,14 @@ static int mdm_subsys_shutdown(const struct subsys_desc *crashed_subsys,
|
||||
container_of(crashed_subsys, struct esoc_clink, subsys);
|
||||
struct mdm_drv *mdm_drv = esoc_get_drv_data(esoc_clink);
|
||||
const struct esoc_clink_ops * const clink_ops = esoc_clink->clink_ops;
|
||||
struct mdm_ctrl *mdm = get_esoc_clink_data(mdm_drv->esoc_clink);
|
||||
|
||||
esoc_mdm_log("Shutdown request from SSR\n");
|
||||
|
||||
mutex_lock(&mdm_drv->poff_lock);
|
||||
if (mdm_drv->mode == CRASH || mdm_drv->mode == PEER_CRASH) {
|
||||
esoc_mdm_log("Shutdown in crash mode\n");
|
||||
mdm_wait_for_status_low(mdm, false);
|
||||
if (mdm_dbg_stall_cmd(ESOC_PREPARE_DEBUG)) {
|
||||
/* We want to mask debug command.
|
||||
* In this case return success
|
||||
|
Loading…
x
Reference in New Issue
Block a user