Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 13e878c8 authored by Jilai Wang's avatar Jilai Wang
Browse files

msm: npu: Only initialize completion variable if necessary



It is possible that the completion variable will be reinitialized
by mistake in race condition. This change is to only reinitialize
it before sending down to firmware via IPC.

Change-Id: I6e437fd431889a6dce3eac838ee044af9a06348c
Signed-off-by: default avatarJilai Wang <jilaiw@codeaurora.org>
parent 7dcd447f
Loading
Loading
Loading
Loading
+1 −6
Original line number Diff line number Diff line
@@ -1496,6 +1496,7 @@ static int npu_send_network_cmd(struct npu_device *npu_dev,
		network->cmd_ret_status = 0;
		network->cmd_pending = true;
		network->trans_id = atomic_read(&host_ctx->ipc_trans_id);
		reinit_completion(&network->cmd_done);
		NPU_DBG("Send cmd %d network id %llx trans id %d\n",
			((struct ipc_cmd_header_pkt *)cmd_ptr)->cmd_type,
			network->id, network->trans_id);
@@ -1666,8 +1667,6 @@ int32_t npu_host_load_network_v2(struct npu_client *client,
	load_packet->buf_pkt.num_layers = network->num_layers;
	load_packet->num_patch_params = num_patch_params;

	/* NPU_IPC_CMD_LOAD_V2 will go onto IPC_QUEUE_APPS_EXEC */
	reinit_completion(&network->cmd_done);
	ret = npu_send_network_cmd(npu_dev, network, load_packet, false, false);
	if (ret) {
		NPU_ERR("NPU_IPC_CMD_LOAD_V2 sent failed: %d\n", ret);
@@ -1770,8 +1769,6 @@ int32_t npu_host_unload_network(struct npu_client *client,
	unload_packet.header.flags = 0;
	unload_packet.network_hdl = (uint32_t)network->network_hdl;

	/* NPU_IPC_CMD_UNLOAD will go onto IPC_QUEUE_APPS_EXEC */
	reinit_completion(&network->cmd_done);
	ret = npu_send_network_cmd(npu_dev, network, &unload_packet, false,
		false);

@@ -1913,8 +1910,6 @@ int32_t npu_host_exec_network_v2(struct npu_client *client,
	NPU_DBG("Execute_v2 flags %x stats_buf_size %d\n",
		exec_packet->header.flags, exec_ioctl->stats_buf_size);

	/* Send it on the high priority queue */
	reinit_completion(&network->cmd_done);
	ret = npu_send_network_cmd(npu_dev, network, exec_packet, async_ioctl,
		false);