platform: tegra: dce: retry interrupted rpc wait

currently dce_client_ipc_wait_rpc function waits with
"wait_event_interruptible". And if process is interrupted, it leads
to RPC failure as "dce_ipc_send_message_sync" will try to read RPC msg
when there is no msg to read yet.

This CL make change to restart/retry wait if condition variable is not
signaled by "dce_client_ipc_wakeup"

Bug 200771402

Change-Id: I8f1c7781bab8b6c20b05251cc2862ad2db22cc1f
Signed-off-by: Mahesh Kumar <mahkumar@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2600849
Reviewed-by: svcacv <svcacv@nvidia.com>
Reviewed-by: Santosh Galma <galmar@nvidia.com>
Reviewed-by: Arun Swain <arswain@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
GVS: Gerrit_Virtual_Submit
This commit is contained in:
Mahesh Kumar
2021-09-28 06:04:54 +00:00
committed by Laxman Dewangan
parent e384d775a5
commit b982595c51

View File

@@ -275,9 +275,13 @@ static int dce_client_ipc_wait_rpc(struct tegra_dce *d, u32 int_type)
return -EINVAL;
}
retry_wait:
DCE_COND_WAIT_INTERRUPTIBLE(&cl->recv_wait,
atomic_read(&cl->complete) == 1,
0);
if (atomic_read(&cl->complete) != 1)
goto retry_wait;
atomic_set(&cl->complete, 0);
return 0;