diff options
author | Amandeep Singh <amansing@codeaurora.org> | 2019-06-25 12:04:34 +0530 |
---|---|---|
committer | Amandeep Singh <amansing@codeaurora.org> | 2019-09-03 11:15:09 +0530 |
commit | 3f4b675e60148cb0cf98e034d0a4067a7b7a816e (patch) | |
tree | ce391aae3475917be761055eab6e74c9aaaad7eb | |
parent | 270a493149da6a55c6673a42fbf524b89f2a9db8 (diff) |
msm: qcn: Update completion sequence during tx
Update the completion variable sequence to avoid multiple complete
call on a stale staack completion variable.
Change-Id: I582777431918c359cd10e4e072f33589dc600e62
Signed-off-by: Amandeep Singh <amansing@codeaurora.org>
-rw-r--r-- | drivers/char/qti_sdio_client.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/char/qti_sdio_client.c b/drivers/char/qti_sdio_client.c index 9b13a2f91adb..4904c1be83d0 100644 --- a/drivers/char/qti_sdio_client.c +++ b/drivers/char/qti_sdio_client.c @@ -494,7 +494,7 @@ int qti_client_write(int id, char *buf, size_t count) unsigned int mdata = 0; unsigned int event = 0; struct qti_sdio_bridge *qsb = NULL; - struct completion tx_complete; + DECLARE_COMPLETION_ONSTACK(tx_complete); switch (id) { case QCN_SDIO_CLI_ID_TTY: @@ -575,7 +575,7 @@ int qti_client_write(int id, char *buf, size_t count) wait_event(qsb->wait_q, qsb->tx_ready); if (qsb->mode) { - init_completion(&tx_complete); + reinit_completion(&tx_complete); ret = sdio_al_queue_transfer_async(qsb->channel_handle, SDIO_AL_TX, buffer, padded_len, 0, @@ -586,6 +586,9 @@ int qti_client_write(int id, char *buf, size_t count) qsb->name, ret); return ret; } + + if (qsb->mode) + wait_for_completion(&tx_complete); } else { ret = sdio_al_queue_transfer(qsb->channel_handle, @@ -606,9 +609,6 @@ int qti_client_write(int id, char *buf, size_t count) count); } - if (qsb->mode) - wait_for_completion(&tx_complete); - return count; } EXPORT_SYMBOL(qti_client_write); |