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

Commit a46c548d authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ASoC: qdsp6: add spin_unlock_irqrestore to avoid kernel hang"

parents 88ee53b0 8b97c84b
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -2190,8 +2190,11 @@ static int32_t q6asm_callback(struct apr_client_data *data, void *priv)
		pr_debug("%s: ASM_STREAM_EVENT payload[0][0x%x] payload[1][0x%x]",
				 __func__, payload[0], payload[1]);
		i = is_adsp_raise_event(data->opcode);
		if (i < 0)
		if (i < 0) {
			spin_unlock_irqrestore(
				&(session[session_id].session_lock), flags);
			return 0;
		}

		/* repack payload for asm_stream_pp_event
		 * package is composed of event type + size + actual payload
@@ -2200,8 +2203,11 @@ static int32_t q6asm_callback(struct apr_client_data *data, void *priv)
		pp_event_package = kzalloc(payload_size
				+ sizeof(struct msm_adsp_event_data),
				GFP_ATOMIC);
		if (!pp_event_package)
		if (!pp_event_package) {
			spin_unlock_irqrestore(
				&(session[session_id].session_lock), flags);
			return -ENOMEM;
		}

		pp_event_package->event_type = i;
		pp_event_package->payload_len = payload_size;
@@ -2210,6 +2216,8 @@ static int32_t q6asm_callback(struct apr_client_data *data, void *priv)
		ac->cb(data->opcode, data->token,
			(void *)pp_event_package, ac->priv);
		kfree(pp_event_package);
		spin_unlock_irqrestore(
			&(session[session_id].session_lock), flags);
		return 0;
	case ASM_SESSION_CMDRSP_ADJUST_SESSION_CLOCK_V2:
		pr_debug("%s: ASM_SESSION_CMDRSP_ADJUST_SESSION_CLOCK_V2 sesion %d status 0x%x msw %u lsw %u\n",