From nobody Mon Sep 28 08:46:38 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B9ECB31D375 for ; Mon, 24 Aug 2026 11:36:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787571364; cv=none; b=X57Q3xZN4KSRd50ruwpzfpOspCsp5gKDV+YJ+gwx14o1Se6rm82Uu4Nv59NU9255xC2XJjzDoI/5k6tDtLu1uuwmY+sxNr12Kl1uCT1u8ufMcNwSAMowy86RRh0+KM/cILMFrNiQCM72ehJc3RL2d8nU6ewXbHBNN2uywZIPzAY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787571364; c=relaxed/simple; bh=Tbm7Jcdw6SCKesPf2hUXQ3fR/zuidGrGn4keKWTT6HE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=L4xhDpIko0nXjlucPZizkX0wYzHIj2UEA5FP6NOg0Ul0Tv/lR/Jf0Dfw64rb2kFmDLgdnJPd43HpHhVZ7cHhH/C3oGmsG0MS1dug5Wx8d3Iwbv6KPRrR4LIFOyFtqdu7/ZL80lV0FABda38QuCLzmihfw51DoA7+jmQHPiXEnwQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=L+qytR0R; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="L+qytR0R" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1787571361; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=XrYMyr29uu8WUOWFFdh9Kxfrbi8KOJEAmh71oMXMNUk=; b=L+qytR0RLsz9PFQuMvbm2tml8EVOVRFGVpXJVOQ4OnaKMasL6k4eCeqmmJve95Q9ScFFxW HxTb515GVm0dhR9vllp1iPvXcLy+uen9DOfDEIayEfoHFDZ1f6li+hyNqDfnVAm/mNElEv HfTq+3n2LDY5RU55TsMA61QnZ+By3AE= Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-55-N60LrwvRN2eDOg2JJqfckQ-1; Mon, 24 Aug 2026 07:35:57 -0400 X-MC-Unique: N60LrwvRN2eDOg2JJqfckQ-1 X-Mimecast-MFC-AGG-ID: N60LrwvRN2eDOg2JJqfckQ_1787571356 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id BA089195F16B; Mon, 24 Aug 2026 11:35:55 +0000 (UTC) Received: from [192.168.1.153] (headnet05.pony-001.prod.iad2.dc.redhat.com [10.2.32.117]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E02E918005B0; Mon, 24 Aug 2026 11:35:52 +0000 (UTC) From: Albert Esteve Date: Mon, 24 Aug 2026 13:35:39 +0200 Subject: [PATCH 1/2] firmware: qcom: scm: Introduce new locking mechanism for SCM driver Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260824-port-scm-patches-v1-1-1dfd69374402@redhat.com> References: <20260824-port-scm-patches-v1-0-1dfd69374402@redhat.com> In-Reply-To: <20260824-port-scm-patches-v1-0-1dfd69374402@redhat.com> To: Bjorn Andersson , Konrad Dybcio Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Albert Esteve , Ninad Naik , Murali Nalajala , Venkatakrishnaiah Pari , Jian Shu , Guru Das Srinagesh X-Developer-Signature: v=1; a=ed25519-sha256; t=1787571348; l=4334; i=aesteve@redhat.com; s=20260303; h=from:subject:message-id; bh=oCcwlSiYdkbBKpMDoescR9pyYDfbnCJRtMENlMwNhjg=; b=LbLIiUJE1sDJib9MUSBGEiPeSQf5bkVPE3ZnXQ5PDwBzxssecpioeJ24DR0k4XPOA8lUPa9+L dQ6RRCH0okuAq9Ti+wVr97UrYNcsFsNpMn6RmeE8ePaVfNtUq8OvoAb X-Developer-Key: i=aesteve@redhat.com; a=ed25519; pk=YSFz6sOHd2L45+Fr8DIvHTi6lSIjhLZ5T+rkxspJt1s= X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 From: Ninad Naik With the existing global mutex lock, there is a possibility that it could resulty into a deadlock when SMCInvoke and smc call go to firmware in the same order and both wait on same WAITQ in firmware. Replace the global mutex with a counting semaphore. Signed-off-by: Murali Nalajala Co-developed-by: Guru Das Srinagesh Signed-off-by: Guru Das Srinagesh Signed-off-by: Venkatakrishnaiah Pari Signed-off-by: Jian Shu Signed-off-by: Ninad Naik Signed-off-by: Albert Esteve --- drivers/firmware/qcom/qcom_scm-legacy.c | 8 ++------ drivers/firmware/qcom/qcom_scm-smc.c | 7 ++----- drivers/firmware/qcom/qcom_scm.c | 4 ++++ drivers/firmware/qcom/qcom_scm.h | 3 +++ 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/drivers/firmware/qcom/qcom_scm-legacy.c b/drivers/firmware/qco= m/qcom_scm-legacy.c index 029e6d117cb8d..6afcbe6f7e5ed 100644 --- a/drivers/firmware/qcom/qcom_scm-legacy.c +++ b/drivers/firmware/qcom/qcom_scm-legacy.c @@ -6,7 +6,6 @@ #include #include #include -#include #include #include #include @@ -15,9 +14,6 @@ =20 #include "qcom_scm.h" =20 -static DEFINE_MUTEX(qcom_scm_lock); - - /** * struct arm_smccc_args * @args: The array of values used in registers in smc instruction @@ -173,11 +169,11 @@ int scm_legacy_call(struct device *dev, const struct = qcom_scm_desc *desc, smc.args[1] =3D (unsigned long)&context_id; smc.args[2] =3D cmd_phys; =20 - mutex_lock(&qcom_scm_lock); + down(&qcom_scm_sem_lock); __scm_legacy_do(&smc, &smc_res); if (smc_res.a0) ret =3D qcom_scm_remap_error(smc_res.a0); - mutex_unlock(&qcom_scm_lock); + up(&qcom_scm_sem_lock); if (ret) goto out; =20 diff --git a/drivers/firmware/qcom/qcom_scm-smc.c b/drivers/firmware/qcom/q= com_scm-smc.c index 127365ab11fc2..1b51e0fb82924 100644 --- a/drivers/firmware/qcom/qcom_scm-smc.c +++ b/drivers/firmware/qcom/qcom_scm-smc.c @@ -6,7 +6,6 @@ #include #include #include -#include #include #include #include @@ -27,8 +26,6 @@ struct arm_smccc_args { #define CREATE_TRACE_POINTS #include "qcom_scm_trace.h" =20 -static DEFINE_MUTEX(qcom_scm_lock); - #define QCOM_SCM_EBUSY_WAIT_MS 30 #define QCOM_SCM_EBUSY_MAX_RETRY 20 =20 @@ -135,11 +132,11 @@ static int __scm_smc_do(struct device *dev, struct ar= m_smccc_args *smc, } =20 do { - mutex_lock(&qcom_scm_lock); + down(&qcom_scm_sem_lock); =20 ret =3D __scm_smc_do_quirk_handle_waitq(dev, smc, res); =20 - mutex_unlock(&qcom_scm_lock); + up(&qcom_scm_sem_lock); =20 if (ret) return ret; diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_= scm.c index 3eaa4c9ccf3cc..7a042273d6d5b 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -78,6 +78,8 @@ struct qcom_scm_mem_map_info { __le64 mem_size; }; =20 +DEFINE_SEMAPHORE(qcom_scm_sem_lock, 1); + /** * struct qcom_scm_qseecom_resp - QSEECOM SCM call response. * @result: Result or status of the SCM call. See &enum qcom_scm_qseeco= m_result. @@ -2893,6 +2895,8 @@ static int qcom_scm_probe(struct platform_device *pde= v) "Failed to request qcom-scm irq\n"); } =20 + sema_init(&qcom_scm_sem_lock, scm->wq_cnt); + /* * Paired with smp_load_acquire() in qcom_scm_is_available(). * diff --git a/drivers/firmware/qcom/qcom_scm.h b/drivers/firmware/qcom/qcom_= scm.h index cf90a565fdfbd..06fdc5e56bea4 100644 --- a/drivers/firmware/qcom/qcom_scm.h +++ b/drivers/firmware/qcom/qcom_scm.h @@ -4,6 +4,8 @@ #ifndef __QCOM_SCM_INT_H #define __QCOM_SCM_INT_H =20 +#include + struct device; struct qcom_tzmem_pool; =20 @@ -15,6 +17,7 @@ enum qcom_scm_convention { }; =20 extern enum qcom_scm_convention qcom_scm_convention; +extern struct semaphore qcom_scm_sem_lock; =20 #define MAX_QCOM_SCM_ARGS 10 #define MAX_QCOM_SCM_RETS 3 --=20 2.55.0 From nobody Mon Sep 28 08:46:38 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5E901408018 for ; Mon, 24 Aug 2026 11:36:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787571365; cv=none; b=o7WjvmdwJgimfZ/kQ7ER/WvyD/WI//HO8W7CxH73pc48s9eac8T++4/biGcZuuhPk8JNSiIxeslos1WdgHxDirRUsAx387RRdZcoLalHbyVCog2lysnyxHudaj44dJ43XLBzBZGDkmwtHYiz4YfAigbqeLjp5OgVdudZcFMji5A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787571365; c=relaxed/simple; bh=QWRr8CxzXvPWaix5hGx8EX/H/lti1q7GsX2u1ipImUc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RgPppin1xxLR+Q6XDpjRwriDwWu8Y9DustLO3ChdYPZiMQk39Yod0ZfmfzKGeZJHr25x+iIhlmTpTTHkbOzC9uyOYaH90uU3lx++6QGWXHVfW+HcZpUdO5ddgoyy9jLTAD3iZ4OlKsMXruPUKcWCe6r3pVZ9Yct9dgC0oUnnWZM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=Y/dGFrIH; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Y/dGFrIH" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1787571363; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Opm83gEnNsatCxFqsloP04tPydftxfYtMg5hJEhh3tc=; b=Y/dGFrIHG6N2qlr4TZ3EvQUD+BSgiUWS6nGUtlWIfa7D8MLgWn9g1odDGKimBzQgxnoKdR TpMivb9A5fuEl69haCHEvWGsvuz/ekxlBfEy3P0BPw6pCDDvsXTgx2kDXqvJ8nirjGTAvX Z2RlF8pB8WiRqnM2cBhuWAaLqAzVzbs= Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-52-XpYJVJ2ANXebGsLU6F0jQg-1; Mon, 24 Aug 2026 07:35:59 -0400 X-MC-Unique: XpYJVJ2ANXebGsLU6F0jQg-1 X-Mimecast-MFC-AGG-ID: XpYJVJ2ANXebGsLU6F0jQg_1787571358 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 1555D1829E0E; Mon, 24 Aug 2026 11:35:58 +0000 (UTC) Received: from [192.168.1.153] (headnet05.pony-001.prod.iad2.dc.redhat.com [10.2.32.117]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 1DBA318005B0; Mon, 24 Aug 2026 11:35:55 +0000 (UTC) From: Albert Esteve Date: Mon, 24 Aug 2026 13:35:40 +0200 Subject: [PATCH 2/2] firmware: qcom: scm: Allow the SMC request to freeze and kill Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260824-port-scm-patches-v1-2-1dfd69374402@redhat.com> References: <20260824-port-scm-patches-v1-0-1dfd69374402@redhat.com> In-Reply-To: <20260824-port-scm-patches-v1-0-1dfd69374402@redhat.com> To: Bjorn Andersson , Konrad Dybcio Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Albert Esteve , Yuvaraj Ranganathan X-Developer-Signature: v=1; a=ed25519-sha256; t=1787571348; l=943; i=aesteve@redhat.com; s=20260303; h=from:subject:message-id; bh=66EbpJ8HufayhBSTL5IIV8WsQZzYH3jvBp6OX1kpJ5I=; b=8U3sTBaQguafzapKb8FNwNPMN5hGOeragNF5q8uWNlo/0QtgalhJNf7c8ckxXQ53+qAbm8wgM kcanlZLacM0BCyw31UqyxbXMenQ/OjI6ZfHPpIah2g4llVRnV7GifwX X-Developer-Key: i=aesteve@redhat.com; a=ed25519; pk=YSFz6sOHd2L45+Fr8DIvHTi6lSIjhLZ5T+rkxspJt1s= X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 From: Yuvaraj Ranganathan SMC requests in waitQ are put into IDLE state which is not allowing the task to freeze/kill, adding FREEZABLE & KILLABLE flag will allow the task to freeze and restore the waitQ state on resume and kill the task on shutdown. Signed-off-by: Yuvaraj Ranganathan Signed-off-by: Albert Esteve --- drivers/firmware/qcom/qcom_scm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_= scm.c index 7a042273d6d5b..e4ebe4c0746bb 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -2664,7 +2664,7 @@ int qcom_scm_wait_for_wq_completion(struct device *de= v, u32 wq_ctx) if (IS_ERR(wq)) return PTR_ERR(wq); =20 - wait_for_completion_state(wq, TASK_IDLE); + wait_for_completion_state(wq, TASK_IDLE | TASK_FREEZABLE | TASK_KILLABLE); =20 return 0; } --=20 2.55.0