dsp: lsm: Initialize lock and condition before apr_register

While allocating lsm client, lock and conditions are initialized
after registering session with APR. There is a possibility of
accessing uninitialized condition from q6lsm_callback when SSR
is triggerred after the port specific apr is registered.

Initialized lock, condition and state before registering session
with APR to avoid invalid access.

CRs-Fixed: 2230065
Change-Id: I48b6eb7670863c45b0539155592ea0b0a3c1bffc
Signed-off-by: pavanc <pavanc@codeaurora.org>
Šī revīzija ir iekļauta:
pavanc
2018-06-06 12:13:17 +05:30
revīziju iesūtīja Gerrit - the friendly Code Review server
vecāks e039f16fa4
revīzija 8a81c4a868

Parādīt failu

@@ -311,6 +311,11 @@ struct lsm_client *q6lsm_client_alloc(lsm_app_cb cb, void *priv)
kfree(client);
return NULL;
}
init_waitqueue_head(&client->cmd_wait);
mutex_init(&client->cmd_lock);
atomic_set(&client->cmd_state, CMD_STATE_CLEARED);
pr_debug("%s: Client Session %d\n", __func__, client->session);
client->apr = apr_register("ADSP", "LSM", q6lsm_callback,
((client->session) << 8 | client->session),
@@ -328,9 +333,6 @@ struct lsm_client *q6lsm_client_alloc(lsm_app_cb cb, void *priv)
goto fail;
}
init_waitqueue_head(&client->cmd_wait);
mutex_init(&client->cmd_lock);
atomic_set(&client->cmd_state, CMD_STATE_CLEARED);
pr_debug("%s: New client allocated\n", __func__);
return client;
fail: