From nobody Mon Jun 8 08:35:57 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 B2E7033987F; Sat, 30 May 2026 20:44:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780173877; cv=none; b=l1wLl9WROjGu7JuxuuwLMSNRkblRB85FWD7flX29xue65YovKcTMsJYwDXEsMy27KX/lKAT49kbBhG411r98KpQ0hk0ySukdX1gr/JppYdctfeZMoSgPCJzKilYm/oQt9oHrcg8uqAapvXQmw91o0sA31eJyz+dL1SjgQ5ZENbM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780173877; c=relaxed/simple; bh=dyYL01LZ5qHWMqyJwyvnUp+ChOrlhbU69c8t9ir9t6c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tBC8kvXwpsZsYSZiBsYH+W/lMoo2wa1fqGUxXGukcfgBCPgumyx32806Ey8Mu230E1RzHBdO6FcW/SuMVodKgDzW+JDbdGPZomnm/LgfV0KBmmgJyI9Hl+CTQ4wS3zXdy1uAgmiO5jBrdrj14EVYYDgf7bBbSckfBrSpD0JIiT8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=U4k/20/O; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="U4k/20/O" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 001671F00898; Sat, 30 May 2026 20:44:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780173876; bh=DghMdL8csfcQu1r/J9oPTH3CmWDSHrp8UzOqw+7OhZQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=U4k/20/OIc4TIQKEc1zXMN5/GdgGJ6DkhfalpAXDmVo6LDiVdWRZMpKggK4w1ErIQ g/KJEYi8yy3ABETMrQvSkr40KJfT/P/vdZC2RUgbmdxh1lDulzqnLsEyysSnQIStbv Ra4n0F+xkB+o2CwfIRWUtbla3mPBseLHO3nR/k8u9aUrjzbe7JszYC51wTLYwFDNA4 RacByrt4QA6B5gF4+cK+Wj3T5IkbR9UPWld3VzSEae4W15/2TFxpa0SpgktooU5bbw kB9EtLBKZjv9T2CJ0+fRUpzje8wGGzV+j7nZMBv13r9phPYMVsGvfb5PgJHCzSyNwI tkaY10PQgZDfA== From: srini@kernel.org To: gregkh@linuxfoundation.org Cc: linux-kernel@vger.kernel.org, Bartosz Golaszewski , stable@vger.kernel.org, Srinivas Kandagatla Subject: [PATCH 1/8] slimbus: qcom-ngd-ctrl: fix OF node refcount Date: Sat, 30 May 2026 21:44:14 +0100 Message-ID: <20260530204421.116824-2-srini@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260530204421.116824-1-srini@kernel.org> References: <20260530204421.116824-1-srini@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Bartosz Golaszewski Platform devices created with platform_device_alloc() call platform_device_release() when the last reference to the device's kobject is dropped. This function calls of_node_put() unconditionally. This works fine for devices created with platform_device_register_full() but users of the split approach (platform_device_alloc() + platform_device_add()) must bump the reference of the of_node they assign manually. Add the missing call to of_node_get(). Cc: stable@vger.kernel.org Fixes: 917809e2280b ("slimbus: ngd: Add qcom SLIMBus NGD driver") Signed-off-by: Bartosz Golaszewski Signed-off-by: Srinivas Kandagatla --- drivers/slimbus/qcom-ngd-ctrl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/slimbus/qcom-ngd-ctrl.c b/drivers/slimbus/qcom-ngd-ctr= l.c index 1ed6be6e85d2..428266949fdd 100644 --- a/drivers/slimbus/qcom-ngd-ctrl.c +++ b/drivers/slimbus/qcom-ngd-ctrl.c @@ -1542,7 +1542,7 @@ static int of_qcom_slim_ngd_register(struct device *p= arent, kfree(ngd); return ret; } - ngd->pdev->dev.of_node =3D node; + ngd->pdev->dev.of_node =3D of_node_get(node); ctrl->ngd =3D ngd; =20 ret =3D platform_device_add(ngd->pdev); --=20 2.53.0 From nobody Mon Jun 8 08:35:57 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 D4AE9355F3A; Sat, 30 May 2026 20:44:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780173879; cv=none; b=PVCTfP2fPgGIuDTPCuBKSJBSVnR6LZaWUsRE3yvu0YE6tgBfW4TZoq4eOzwBkivDlgcDdneWITxYAeOAsT9aSyrt6zCmm42MzHYLu48tx5abDV29xhrZTWRJPEfWOf1GDJ0SW587hPHYID2miH8n7YFVy5ZeG3JXk63JRLRXxLQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780173879; c=relaxed/simple; bh=lMmH0s5NcHHnMjtPYyHAIx3VxaoajI0IWp6g9tHyoao=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qoM8FwX05tX/a9HCFvBz86s5xWN+oadEjm+05Z4Iq5qonxb76MIeAA+IpT7H/uU1smHdixXia/o9by44simErVTKlVf1dMHQwwy4LLYqB8pTF2gntjC9F9Br+xuIKTQwBCZkyHNZjC02KghS7ZCF58jmzDL7/lGhinNgZLX2MJI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mYTrT07O; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="mYTrT07O" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C29091F00893; Sat, 30 May 2026 20:44:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780173878; bh=E60/PJE2WKp8w/h+GMwpXV+vokSE+dnbcL27XuFG6FA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=mYTrT07OqLL/eHGT4iTy/Ja6f5G0M6NVorMlN2GRSwRtTZlm5Yn2wSC7mXmkh6y8b ZymCA9kvl7TN7ef1V0ypjCOCdowkCMnKLh9HCMEIMpLiVwDOM/cyisQ2MeGFoGuZbd 4kOGMakA2lIPnOPiEh5gqmfvu26pEq0K3ZLaQpA4p8WM91z1yFGi3EgVX0dJCvbZ+V PERFgZQQNTjBzswEZkB37+5/01WzOTpSCofn8QBLH/au/iJ5Sjp52DEpdIMbfAERNw x0QeeBNtLZ3XK7wgbLFUThnj8gh9jcL4iq4HNWtQhAxZJ4xbXNimR4K4ku/vNzWZC1 MNZNlPDU39i+g== From: srini@kernel.org To: gregkh@linuxfoundation.org Cc: linux-kernel@vger.kernel.org, Bjorn Andersson , stable@vger.kernel.org, Dmitry Baryshkov , Mukesh Ojha , Srinivas Kandagatla Subject: [PATCH 2/8] slimbus: qcom-ngd-ctrl: Fix up platform_driver registration Date: Sat, 30 May 2026 21:44:15 +0100 Message-ID: <20260530204421.116824-3-srini@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260530204421.116824-1-srini@kernel.org> References: <20260530204421.116824-1-srini@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Bjorn Andersson Device drivers should not invoke platform_driver_register()/unregister() in their probe and remove paths. They should further not rely on platform_driver_unregister() as their only means of "deleting" their child devices. Introduce a helper to unregister the child device and move the platform_driver_register()/unregister() to module_init()/exit(). Fixes: 917809e2280b ("slimbus: ngd: Add qcom SLIMBus NGD driver") Cc: stable@vger.kernel.org Reviewed-by: Dmitry Baryshkov Reviewed-by: Mukesh Ojha Signed-off-by: Bjorn Andersson Signed-off-by: Srinivas Kandagatla --- drivers/slimbus/qcom-ngd-ctrl.c | 36 ++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/drivers/slimbus/qcom-ngd-ctrl.c b/drivers/slimbus/qcom-ngd-ctr= l.c index 428266949fdd..47ba9fb34d25 100644 --- a/drivers/slimbus/qcom-ngd-ctrl.c +++ b/drivers/slimbus/qcom-ngd-ctrl.c @@ -1560,6 +1560,13 @@ static int of_qcom_slim_ngd_register(struct device *= parent, return -ENODEV; } =20 +static void qcom_slim_ngd_unregister(struct qcom_slim_ngd_ctrl *ctrl) +{ + struct qcom_slim_ngd *ngd =3D ctrl->ngd; + + platform_device_del(ngd->pdev); +} + static int qcom_slim_ngd_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; @@ -1662,7 +1669,6 @@ static int qcom_slim_ngd_ctrl_probe(struct platform_d= evice *pdev) goto err_pdr_lookup; } =20 - platform_driver_register(&qcom_slim_ngd_driver); return of_qcom_slim_ngd_register(dev, ctrl); =20 err_pdr_alloc: @@ -1676,7 +1682,9 @@ static int qcom_slim_ngd_ctrl_probe(struct platform_d= evice *pdev) =20 static void qcom_slim_ngd_ctrl_remove(struct platform_device *pdev) { - platform_driver_unregister(&qcom_slim_ngd_driver); + struct qcom_slim_ngd_ctrl *ctrl =3D platform_get_drvdata(pdev); + + qcom_slim_ngd_unregister(ctrl); } =20 static void qcom_slim_ngd_remove(struct platform_device *pdev) @@ -1752,6 +1760,28 @@ static struct platform_driver qcom_slim_ngd_driver = =3D { }, }; =20 -module_platform_driver(qcom_slim_ngd_ctrl_driver); +static int qcom_slim_ngd_init(void) +{ + int ret; + + ret =3D platform_driver_register(&qcom_slim_ngd_driver); + if (ret) + return ret; + + ret =3D platform_driver_register(&qcom_slim_ngd_ctrl_driver); + if (ret) + platform_driver_unregister(&qcom_slim_ngd_driver); + + return ret; +} + +static void qcom_slim_ngd_exit(void) +{ + platform_driver_unregister(&qcom_slim_ngd_ctrl_driver); + platform_driver_unregister(&qcom_slim_ngd_driver); +} + +module_init(qcom_slim_ngd_init); +module_exit(qcom_slim_ngd_exit); MODULE_LICENSE("GPL v2"); MODULE_DESCRIPTION("Qualcomm SLIMBus NGD controller"); --=20 2.53.0 From nobody Mon Jun 8 08:35:57 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 D5E3A348C4C; Sat, 30 May 2026 20:44:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780173881; cv=none; b=i64vTPeknoD9aFT6eSqV0NUU8aMJMkJJ8pIrusUzCY7TntvWuQ208FvhQjpmOWuayh0uu8qA8mhOszzx+J5xswc80izX/y0B5cDa5GP23oYk407lrIoQ47Wb1ZVB+o2SuA5iBOk0E/+mLjNEE5guna7ijj6Dqb9m+iWU0WgV5MI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780173881; c=relaxed/simple; bh=YrQ9TWRiR9ZauWciOcM2foP81ki3GdMKCdh5VVUAAZo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pLd3E13Wm2qFNwKjIZRNYDDsI8nu7UQ0W1JRuy4MWZlUl9wGaCwyImhPQg3LZEjcAf2SUlHqCRQzJbP/aNuGHLKvF7HjgqCo0gFfvJguByqHPJyD+/xJqfL1d1deUEmLTJye5HUSI2roTs0QOX60/3CfSESZPD1NvyPb9q/drV8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OnTdXAqL; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="OnTdXAqL" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 05C891F00898; Sat, 30 May 2026 20:44:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780173880; bh=kHAbwq/SzutZYIR0K/AW/f6Kcdb7/efCvqLgYx1wWtE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=OnTdXAqLhHS4mkMq28Vjdk0T1Jy6KltIta3tv1eGBF8QTXEl58ddY6LXuiwmKYKlJ aAqzaMdOFLFUPH8cYRxbVHLS09IgFqXGbCCA68IB4fUTz4cPq4YJMb+vEu6sJy++Wt X65H8arcsETVvkbG/lYge/ccmbiTOVo4aJA9slpYjSheodmZu+yYQ/ZnhdklKMDek1 U7/MP8UG1ziD9pS1E/ZisyiwT3Aqba7jfku2KG8RK09GI7sb73uP919lc/jSJFB71r 43aoxpjKxUGYzFA60jJvTezBPQ1nT5Fx1ZYP0bVKYWQUsCfbS0gMPg6e8bYAMAqsXT j6eTWgf/418Rw== From: srini@kernel.org To: gregkh@linuxfoundation.org Cc: linux-kernel@vger.kernel.org, Bjorn Andersson , stable@vger.kernel.org, Dmitry Baryshkov , Mukesh Ojha , Srinivas Kandagatla Subject: [PATCH 3/8] slimbus: qcom-ngd-ctrl: Fix probe error path ordering Date: Sat, 30 May 2026 21:44:16 +0100 Message-ID: <20260530204421.116824-4-srini@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260530204421.116824-1-srini@kernel.org> References: <20260530204421.116824-1-srini@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Bjorn Andersson qcom_slim_ngd_ctrl_probe() first registers the SSR callback then allocates the PDR context, as such the error path needs to come in opposite order to allow us to unroll each step. Fixes: 16f14551d0df ("slimbus: qcom-ngd: cleanup in probe error path") Cc: stable@vger.kernel.org Reviewed-by: Dmitry Baryshkov Reviewed-by: Mukesh Ojha Signed-off-by: Bjorn Andersson Signed-off-by: Srinivas Kandagatla --- drivers/slimbus/qcom-ngd-ctrl.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/drivers/slimbus/qcom-ngd-ctrl.c b/drivers/slimbus/qcom-ngd-ctr= l.c index 47ba9fb34d25..6b91a6f11cb6 100644 --- a/drivers/slimbus/qcom-ngd-ctrl.c +++ b/drivers/slimbus/qcom-ngd-ctrl.c @@ -1660,22 +1660,21 @@ static int qcom_slim_ngd_ctrl_probe(struct platform= _device *pdev) if (IS_ERR(ctrl->pdr)) { ret =3D dev_err_probe(dev, PTR_ERR(ctrl->pdr), "Failed to init PDR handle\n"); - goto err_pdr_alloc; + goto err_unregister_ssr; } =20 pds =3D pdr_add_lookup(ctrl->pdr, "avs/audio", "msm/adsp/audio_pd"); if (IS_ERR(pds) && PTR_ERR(pds) !=3D -EALREADY) { ret =3D dev_err_probe(dev, PTR_ERR(pds), "pdr add lookup failed\n"); - goto err_pdr_lookup; + goto err_pdr_release; } =20 return of_qcom_slim_ngd_register(dev, ctrl); =20 -err_pdr_alloc: - qcom_unregister_ssr_notifier(ctrl->notifier, &ctrl->nb); - -err_pdr_lookup: +err_pdr_release: pdr_handle_release(ctrl->pdr); +err_unregister_ssr: + qcom_unregister_ssr_notifier(ctrl->notifier, &ctrl->nb); =20 return ret; } --=20 2.53.0 From nobody Mon Jun 8 08:35:57 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 1B1FE309F1D; Sat, 30 May 2026 20:44:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780173884; cv=none; b=WEqCp0J2eBTb5TL/AtfHXw7po5MqO2/KjMfWoWfRD0APZFTlfVjexb3zsRsxkKN7tt5WvDaIHBCpW8RIkNm52Re47nMf/HFFGDjuWOrQ6xZdbIakPeSFyQAv8yJ7EfIojHgbXEHsuZWQghT1wOhNhwLkYofd8Rrbp5n3Fo2wyUU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780173884; c=relaxed/simple; bh=u6XM7hKaHPXwckuqGRh8vL+dTgQKfFm9qV2kvcLRfao=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tHtJTUQy89fvtrUNHI/doKGyLSkwxms1cgLvTjMtD3Q493RsnXps1wzygyjVavAoyoMfAiHUvbi4WYEDcTp0ScuBO7xTw1xDyVjPS8nUkKhLlM2CUqERXLqLkNvxlHIrlc47EfQB2GQcsZhu5RiWHhukc16yS0fQKS0ViK73WEE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=UVmeCjO7; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="UVmeCjO7" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3D53D1F00893; Sat, 30 May 2026 20:44:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780173882; bh=/T8dhXk621vfkbt+g3mSKbModVEuj5a9J0/GKx5WfUw=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=UVmeCjO7HAbspYfjpWeayl1emoEooOT4VIGKm/QIXCaubxJdXjR+i66QLmryqiY0U U6LrQs/ytfOKbICgl8dRgQDDIdwhK4H7M1GI99Sz83OQ1nPTHrgky16pznKhSbxMTS EO+j23mTCvqSs8M5Ti1Wsdk/XJfsLsYVs2GBhUuq3/9+be60vp0qA+nnu8Amy1EIw6 XHQjic3kSJJKshhzDRrs6QH7HyMPAMMVDyiYmtHh34Kn3AaXSE+YXloAND9Rkkoskw jHWWw/BO2uUpiaKF8A2RbYPk+/H96sczLQJF/mHcfhGZ87v+DGyq0YGuIVCiDP8tYI raGK250qWmExQ== From: srini@kernel.org To: gregkh@linuxfoundation.org Cc: linux-kernel@vger.kernel.org, Bjorn Andersson , stable@vger.kernel.org, Dmitry Baryshkov , Mukesh Ojha , Srinivas Kandagatla Subject: [PATCH 4/8] slimbus: qcom-ngd-ctrl: Correct PDR and SSR cleanup ownership Date: Sat, 30 May 2026 21:44:17 +0100 Message-ID: <20260530204421.116824-5-srini@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260530204421.116824-1-srini@kernel.org> References: <20260530204421.116824-1-srini@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Bjorn Andersson PDR and SSR callbacks are registred from the controller probe function, but currently released from the child device's remove function. The remove() function should only be unwinding what was done in the same device's probe() function. Fixes: 917809e2280b ("slimbus: ngd: Add qcom SLIMBus NGD driver") Cc: stable@vger.kernel.org Reviewed-by: Dmitry Baryshkov Reviewed-by: Mukesh Ojha Signed-off-by: Bjorn Andersson Signed-off-by: Srinivas Kandagatla --- drivers/slimbus/qcom-ngd-ctrl.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/slimbus/qcom-ngd-ctrl.c b/drivers/slimbus/qcom-ngd-ctr= l.c index 6b91a6f11cb6..e9238927cd2a 100644 --- a/drivers/slimbus/qcom-ngd-ctrl.c +++ b/drivers/slimbus/qcom-ngd-ctrl.c @@ -1683,6 +1683,9 @@ static void qcom_slim_ngd_ctrl_remove(struct platform= _device *pdev) { struct qcom_slim_ngd_ctrl *ctrl =3D platform_get_drvdata(pdev); =20 + pdr_handle_release(ctrl->pdr); + qcom_unregister_ssr_notifier(ctrl->notifier, &ctrl->nb); + qcom_slim_ngd_unregister(ctrl); } =20 @@ -1691,8 +1694,6 @@ static void qcom_slim_ngd_remove(struct platform_devi= ce *pdev) struct qcom_slim_ngd_ctrl *ctrl =3D platform_get_drvdata(pdev); =20 pm_runtime_disable(&pdev->dev); - pdr_handle_release(ctrl->pdr); - qcom_unregister_ssr_notifier(ctrl->notifier, &ctrl->nb); qcom_slim_ngd_enable(ctrl, false); qcom_slim_ngd_exit_dma(ctrl); qcom_slim_ngd_qmi_svc_event_deinit(&ctrl->qmi); --=20 2.53.0 From nobody Mon Jun 8 08:35:57 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 250BE3546F0; Sat, 30 May 2026 20:44:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780173886; cv=none; b=hbi0ZatSdeN1IHjBzmzjL8tAyIm2lnCMfwSTYrj9Y7t5/W3f9IKfYvAJF+kh/b3DHJhFQnOq/n5z0HW/uurn+AghbwV6g72yhN6Xjp4Uc/LRGQKQq/ERGUrCBBHmHwEwZlSUWpJtblcPvQuCvs8qZn/bbjk7hXOhpiCKzXJOpUQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780173886; c=relaxed/simple; bh=HeFbqQgn9MENJ2COL+sEObrvodzXL35tmDhZxs+Br3o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ra5bt6h50NVlb3ocDS54eDOb7p1Opl43CshOf9gnqtPUtVpZBMsoZFuVn1Loqt8GvATlXhEY0ktJf3B3asXdSL7sm6ZUACbC7vVFMMHdLLEauYaGX8J6et09T5po6taBnNY5ZkVZpVzYUh1ArrAhFtqKFGkorrqFaD1CGs4mHQs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lbqhy7hx; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="lbqhy7hx" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 692531F00898; Sat, 30 May 2026 20:44:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780173884; bh=pfG4aR4N+cscsT0IjT+fguUjn5UveR9VveKN69xwkKo=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=lbqhy7hxfyQ6HfgiJnB/gGNqnERNBsFnROplJ4bNMGtuLsho8ldWK8JqU6kRoDZE9 7Xv2YvDRnNxstl5/qen/8SWNqlFNH7lQRm7IwLtTQ+d27pH8bXneOZnxBGTLHvvCZj 2QZe341Qe3X3OdLaRypjK2SSuHD1EjgeQhSR7zF3KI5V/8Ug9Bp8KVhKi2RVqfoNyO mjarSCu4HSBa7SKORDDUnN7WuM+hC2Dy3Ww3YJqxurePv9ldcf4n0CBSGgEv1BDJ3Z EfkPxp2RjyqKpn//Qqe3Xe12/69P+AUbe5c8yPk9eumrJgGbkPW6V7fY7pzRUIwBil Hjh/eAVNJazIg== From: srini@kernel.org To: gregkh@linuxfoundation.org Cc: linux-kernel@vger.kernel.org, Bjorn Andersson , stable@vger.kernel.org, Mukesh Ojha , Srinivas Kandagatla Subject: [PATCH 5/8] slimbus: qcom-ngd-ctrl: Register callbacks after creating the ngd Date: Sat, 30 May 2026 21:44:18 +0100 Message-ID: <20260530204421.116824-6-srini@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260530204421.116824-1-srini@kernel.org> References: <20260530204421.116824-1-srini@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Bjorn Andersson When the remoteproc starts in parallel with the NGD driver being probed, or the remoteproc is already up when the PDR lookup is being registered, or in the theoretical event that we get an interrupt from the hardware, these callbacks will operate on uninitialized data. This result in issues to boot the affected boards. One such example can be seen in the following fault, where qcom_slim_ngd_ssr_pdr_notify() schedules work on the NULL ngd_up_work. [ 21.858578] ------------[ cut here ]------------ [ 21.858745] WARNING: kernel/workqueue.c:2338 at __queue_work+0x5e0/0x790= , CPU#2: kworker/2:2/116 ... [ 21.859251] Call trace: [ 21.859255] __queue_work+0x5e0/0x790 (P) [ 21.859265] queue_work_on+0x6c/0xf0 [ 21.859273] qcom_slim_ngd_ssr_pdr_notify+0x110/0x150 [slim_qcom_ngd_ctr= l] [ 21.859304] qcom_slim_ngd_ssr_notify+0x24/0x40 [slim_qcom_ngd_ctrl] [ 21.859318] notifier_call_chain+0xa4/0x230 [ 21.859329] srcu_notifier_call_chain+0x64/0xb8 [ 21.859338] ssr_notify_start+0x40/0x78 [qcom_common] [ 21.859355] rproc_start+0x130/0x230 [ 21.859367] rproc_boot+0x3d4/0x518 ... Move the enablement of interrupts, and the registration of SSR and PDR until after the NGD device has been registered. This could be further refined by moving initialization to the control driver probe and by removing the platform driver model from the picture. Fixes: 917809e2280b ("slimbus: ngd: Add qcom SLIMBus NGD driver") Cc: stable@vger.kernel.org Reviewed-by: Mukesh Ojha Signed-off-by: Bjorn Andersson Signed-off-by: Srinivas Kandagatla --- drivers/slimbus/qcom-ngd-ctrl.c | 45 +++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/drivers/slimbus/qcom-ngd-ctrl.c b/drivers/slimbus/qcom-ngd-ctr= l.c index e9238927cd2a..c1f26b7de519 100644 --- a/drivers/slimbus/qcom-ngd-ctrl.c +++ b/drivers/slimbus/qcom-ngd-ctrl.c @@ -1609,6 +1609,7 @@ static int qcom_slim_ngd_ctrl_probe(struct platform_d= evice *pdev) { struct device *dev =3D &pdev->dev; struct qcom_slim_ngd_ctrl *ctrl; + int irq; int ret; struct pdr_service *pds; =20 @@ -1622,20 +1623,16 @@ static int qcom_slim_ngd_ctrl_probe(struct platform= _device *pdev) if (IS_ERR(ctrl->base)) return PTR_ERR(ctrl->base); =20 - ret =3D platform_get_irq(pdev, 0); - if (ret < 0) - return ret; + irq =3D platform_get_irq(pdev, 0); + if (irq < 0) + return irq; =20 - ret =3D devm_request_irq(dev, ret, qcom_slim_ngd_interrupt, - IRQF_TRIGGER_HIGH, "slim-ngd", ctrl); + ret =3D devm_request_irq(dev, irq, qcom_slim_ngd_interrupt, + IRQF_TRIGGER_HIGH | IRQF_NO_AUTOEN, + "slim-ngd", ctrl); if (ret) return dev_err_probe(&pdev->dev, ret, "request IRQ failed\n"); =20 - ctrl->nb.notifier_call =3D qcom_slim_ngd_ssr_notify; - ctrl->notifier =3D qcom_register_ssr_notifier("lpass", &ctrl->nb); - if (IS_ERR(ctrl->notifier)) - return PTR_ERR(ctrl->notifier); - ctrl->dev =3D dev; ctrl->framer.rootfreq =3D SLIM_ROOT_FREQ >> 3; ctrl->framer.superfreq =3D @@ -1657,24 +1654,34 @@ static int qcom_slim_ngd_ctrl_probe(struct platform= _device *pdev) init_completion(&ctrl->qmi_up); =20 ctrl->pdr =3D pdr_handle_alloc(slim_pd_status, ctrl); - if (IS_ERR(ctrl->pdr)) { - ret =3D dev_err_probe(dev, PTR_ERR(ctrl->pdr), - "Failed to init PDR handle\n"); - goto err_unregister_ssr; - } + if (IS_ERR(ctrl->pdr)) + return dev_err_probe(dev, PTR_ERR(ctrl->pdr), "Failed to init PDR handle= \n"); + + ret =3D of_qcom_slim_ngd_register(dev, ctrl); + if (ret) + goto err_pdr_release; =20 pds =3D pdr_add_lookup(ctrl->pdr, "avs/audio", "msm/adsp/audio_pd"); if (IS_ERR(pds) && PTR_ERR(pds) !=3D -EALREADY) { ret =3D dev_err_probe(dev, PTR_ERR(pds), "pdr add lookup failed\n"); - goto err_pdr_release; + goto err_unregister_ngd; + } + + ctrl->nb.notifier_call =3D qcom_slim_ngd_ssr_notify; + ctrl->notifier =3D qcom_register_ssr_notifier("lpass", &ctrl->nb); + if (IS_ERR(ctrl->notifier)) { + ret =3D PTR_ERR(ctrl->notifier); + goto err_unregister_ngd; } =20 - return of_qcom_slim_ngd_register(dev, ctrl); + enable_irq(irq); =20 + return 0; + +err_unregister_ngd: + qcom_slim_ngd_unregister(ctrl); err_pdr_release: pdr_handle_release(ctrl->pdr); -err_unregister_ssr: - qcom_unregister_ssr_notifier(ctrl->notifier, &ctrl->nb); =20 return ret; } --=20 2.53.0 From nobody Mon Jun 8 08:35:57 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 7145435674A; Sat, 30 May 2026 20:44:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780173888; cv=none; b=e2XQfa6P0eM2/ns+U790vktSYSMq47UnrN60EuHXOLoL26Deiw4IPwrhJ7/OH/zzFhmfOp684gOfUa2hYFogz72u47RTAwDdI4cx0qza9r7ROj0Hgu6sjVft/jonhWAVUmT2nQP8NkoW25WwpKA+WFmWbOU75tECTusHi+cK96c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780173888; c=relaxed/simple; bh=CUeXb+EQRqJn3qz0QdlxAhotRGuFTT/UWhN1tYXp5/0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VGb9u4KjettdgZR0WPYc/kKk/z34wlXxr2zlIc7obD8mvJ3um2O4+aEnnMYeaaxydDVqFFvC3Ps7bR0nBX0B84b4lX3796M8YGgrCwZdSs8guxp8yz4SgLWzD1qQSBlmKl0Ro0wUb3Ywbb9u4j2JV5GYzXnt2Jfxw9YTvKap8tE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QlzGyG6Y; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QlzGyG6Y" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6435C1F00893; Sat, 30 May 2026 20:44:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780173887; bh=xWqtb6BXrhQFlyO2H679UTBEH1X6Z0Um9/yXr+AHT9o=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=QlzGyG6YjWKajhfotP2XcsSftfa8/5uOfn51vOSeTPa3JMS7a/QrB7yUPK9eF3lv6 mrlQbZRaBzrln8gnEf5IgQC8ppY6p3/x9fb0RYdRJTcm8/helrBeSLr5eVYyZvsk5S zmB9ewE10LyAJvbEaKlEMJR75vZWyyfShYNB9DXfCIvn30UV5hyhEGG6hP8ULe6bN7 CUFBLLxFPWgagjVMQvgCq8pzxk9pgcLhcbYyI7X5nLO8lNv8JkeqG+bFO4RNduc0pN hLwb2hiGKnLv4nAq3EO4+XxIoo0t9Wnzmuvgs2j0ayhQOWZAvWqleeP5c6upodvt/t xJA743tvVm0Dw== From: srini@kernel.org To: gregkh@linuxfoundation.org Cc: linux-kernel@vger.kernel.org, Bjorn Andersson , stable@vger.kernel.org, Dmitry Baryshkov , Mukesh Ojha , Srinivas Kandagatla Subject: [PATCH 6/8] slimbus: qcom-ngd-ctrl: Initialize controller resources in controller Date: Sat, 30 May 2026 21:44:19 +0100 Message-ID: <20260530204421.116824-7-srini@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260530204421.116824-1-srini@kernel.org> References: <20260530204421.116824-1-srini@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Bjorn Andersson The work structs and work queue are controller resources, create and destroy them in the controller context. Creating them as part of the child device's probe path seems to be okay now that the controller's probe has been updated, but if for some reason the child does not probe successfully a SSR or PDR notification will schedule_work() on an uninitialized "ngd_up_work". Move the initialization of these controller resources to the controller probe function to avoid any issues, and to clarify the ownership. Fixes: 917809e2280b ("slimbus: ngd: Add qcom SLIMBus NGD driver") Cc: stable@vger.kernel.org Reviewed-by: Dmitry Baryshkov Reviewed-by: Mukesh Ojha Signed-off-by: Bjorn Andersson Signed-off-by: Srinivas Kandagatla --- drivers/slimbus/qcom-ngd-ctrl.c | 38 ++++++++++++++------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/drivers/slimbus/qcom-ngd-ctrl.c b/drivers/slimbus/qcom-ngd-ctr= l.c index c1f26b7de519..540a62999655 100644 --- a/drivers/slimbus/qcom-ngd-ctrl.c +++ b/drivers/slimbus/qcom-ngd-ctrl.c @@ -1582,25 +1582,8 @@ static int qcom_slim_ngd_probe(struct platform_devic= e *pdev) pm_runtime_enable(dev); pm_runtime_get_noresume(dev); ret =3D qcom_slim_ngd_qmi_svc_event_init(ctrl); - if (ret) { + if (ret) dev_err(&pdev->dev, "QMI service registration failed:%d", ret); - return ret; - } - - INIT_WORK(&ctrl->m_work, qcom_slim_ngd_master_worker); - INIT_WORK(&ctrl->ngd_up_work, qcom_slim_ngd_up_worker); - ctrl->mwq =3D create_singlethread_workqueue("ngd_master"); - if (!ctrl->mwq) { - dev_err(&pdev->dev, "Failed to start master worker\n"); - ret =3D -ENOMEM; - goto wq_err; - } - - return 0; -wq_err: - qcom_slim_ngd_qmi_svc_event_deinit(&ctrl->qmi); - if (ctrl->mwq) - destroy_workqueue(ctrl->mwq); =20 return ret; } @@ -1653,9 +1636,18 @@ static int qcom_slim_ngd_ctrl_probe(struct platform_= device *pdev) init_completion(&ctrl->qmi.qmi_comp); init_completion(&ctrl->qmi_up); =20 + INIT_WORK(&ctrl->m_work, qcom_slim_ngd_master_worker); + INIT_WORK(&ctrl->ngd_up_work, qcom_slim_ngd_up_worker); + + ctrl->mwq =3D create_singlethread_workqueue("ngd_master"); + if (!ctrl->mwq) + return dev_err_probe(dev, -ENOMEM, "Failed to start master worker\n"); + ctrl->pdr =3D pdr_handle_alloc(slim_pd_status, ctrl); - if (IS_ERR(ctrl->pdr)) - return dev_err_probe(dev, PTR_ERR(ctrl->pdr), "Failed to init PDR handle= \n"); + if (IS_ERR(ctrl->pdr)) { + ret =3D dev_err_probe(dev, PTR_ERR(ctrl->pdr), "Failed to init PDR handl= e\n"); + goto err_destroy_mwq; + } =20 ret =3D of_qcom_slim_ngd_register(dev, ctrl); if (ret) @@ -1682,6 +1674,8 @@ static int qcom_slim_ngd_ctrl_probe(struct platform_d= evice *pdev) qcom_slim_ngd_unregister(ctrl); err_pdr_release: pdr_handle_release(ctrl->pdr); +err_destroy_mwq: + destroy_workqueue(ctrl->mwq); =20 return ret; } @@ -1694,6 +1688,8 @@ static void qcom_slim_ngd_ctrl_remove(struct platform= _device *pdev) qcom_unregister_ssr_notifier(ctrl->notifier, &ctrl->nb); =20 qcom_slim_ngd_unregister(ctrl); + + destroy_workqueue(ctrl->mwq); } =20 static void qcom_slim_ngd_remove(struct platform_device *pdev) @@ -1704,8 +1700,6 @@ static void qcom_slim_ngd_remove(struct platform_devi= ce *pdev) qcom_slim_ngd_enable(ctrl, false); qcom_slim_ngd_exit_dma(ctrl); qcom_slim_ngd_qmi_svc_event_deinit(&ctrl->qmi); - if (ctrl->mwq) - destroy_workqueue(ctrl->mwq); =20 kfree(ctrl->ngd); ctrl->ngd =3D NULL; --=20 2.53.0 From nobody Mon Jun 8 08:35:57 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 3C95F35CB6E; Sat, 30 May 2026 20:44:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780173890; cv=none; b=bXBCeUt65S01Wt8niMc9sWv3rmkerW32C4JVfrkq7JVd0O1pUzgU9EDruifUA6dvszyPEDQNqjxSYCehwKCgfTUWtEe6XCuVbZIT8deN2cZCCAcF5FLXl9+/XvfJbNl4AN1GW7onjLYWRr5/y/M3K+THRT1HZTc5VpwuZvLhyjs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780173890; c=relaxed/simple; bh=Fldar6aVFdZpwE0xREOfBeZJH5lmLPF7z/wAgyoC4d0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GPiFxmhj3cBbu4olp3+J+JQ7rCkMwEzhq6lREzmTkr7sAToU+g/An8v48PaKmbIKN2iZ+gNiuQnprxpz/EliDM9NNLS2XUSUl+w7KKB9FCoOFlhHT0DlBoeytWYjoEmfl1LILE6ny21Ca+UTlVe7WcyU7XhMabUcE8ytOg8MURQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=VEvd9gxn; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="VEvd9gxn" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8FC551F00898; Sat, 30 May 2026 20:44:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780173888; bh=vwFDcMX4HVrRIm6mxIs+rA1Z26u1mTV76c73txfblnQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=VEvd9gxnwNayqFTnUbDBO3Wm02LAJoFB4WFq3643r4Y3HeoBSQA0TKbYRyB0BIePD ONFrDj5JfrsW7a7+xc2AAf1wsgb5PrIVesJRIVURNVtL+PEohj516ojbNRixYCSRoj e1yaYKPGRvK8wM/dWrB3wRB0P6kBk9MqfUrbS8qHORwAiDOpjv9RsoS6qfNajZ2FD0 n2RnsPgSVi1SMxi8ZaOEzY1Y4RkYtvDg+ujg/iaZ4E0kAVNsMAefbVDmD13zLi/jLb +9lbv7kcfssS4GXXReQtIx/uwg4ZKlGLZyGbud9F8ct6yol6O56+2q+2VWEZNPmG6P ekYQsbS4+Oteg== From: srini@kernel.org To: gregkh@linuxfoundation.org Cc: linux-kernel@vger.kernel.org, Bjorn Andersson , stable@vger.kernel.org, Srinivas Kandagatla Subject: [PATCH 7/8] slimbus: qcom-ngd-ctrl: Balance pm_runtime enablement for NGD Date: Sat, 30 May 2026 21:44:20 +0100 Message-ID: <20260530204421.116824-8-srini@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260530204421.116824-1-srini@kernel.org> References: <20260530204421.116824-1-srini@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Bjorn Andersson The pm_runtime_enable() and pm_runtime_use_autosuspend() calls are supposed to be balanced on exit, add these calls. Fixes: 917809e2280b ("slimbus: ngd: Add qcom SLIMBus NGD driver") Cc: stable@vger.kernel.org Signed-off-by: Bjorn Andersson Signed-off-by: Srinivas Kandagatla --- drivers/slimbus/qcom-ngd-ctrl.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/slimbus/qcom-ngd-ctrl.c b/drivers/slimbus/qcom-ngd-ctr= l.c index 540a62999655..8b207efeadbc 100644 --- a/drivers/slimbus/qcom-ngd-ctrl.c +++ b/drivers/slimbus/qcom-ngd-ctrl.c @@ -1582,8 +1582,11 @@ static int qcom_slim_ngd_probe(struct platform_devic= e *pdev) pm_runtime_enable(dev); pm_runtime_get_noresume(dev); ret =3D qcom_slim_ngd_qmi_svc_event_init(ctrl); - if (ret) + if (ret) { dev_err(&pdev->dev, "QMI service registration failed:%d", ret); + pm_runtime_dont_use_autosuspend(dev); + pm_runtime_disable(dev); + } =20 return ret; } @@ -1696,6 +1699,7 @@ static void qcom_slim_ngd_remove(struct platform_devi= ce *pdev) { struct qcom_slim_ngd_ctrl *ctrl =3D platform_get_drvdata(pdev); =20 + pm_runtime_dont_use_autosuspend(&pdev->dev); pm_runtime_disable(&pdev->dev); qcom_slim_ngd_enable(ctrl, false); qcom_slim_ngd_exit_dma(ctrl); --=20 2.53.0 From nobody Mon Jun 8 08:35:57 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 EAA4835E1D5; Sat, 30 May 2026 20:44:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780173892; cv=none; b=Z6tFMEGVmmQdfnNwnJ7XPoHPkyMxSGjSIqj85i7oP2hiuylRl5iH9uMKRCKJP/pkj8VYOiIbPPsGvXZDQ9HcBh0CVvVE81am86jgnvaZKIzT0teSyTEfW0m2WaBF3yY/AH7uRprDSN5jld2N703TG8TTr7kPcZJPFH6h54mH0k0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780173892; c=relaxed/simple; bh=RQQTMSUlYVmsWV0GNSDmJ5Wt1VDx0vayUCwEBpR/iFQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=keZ9PgrZWEvgcUZwAG03pgzoFJqX1lrKw8V45aUFI6/AXqMvfxC6Spvd2ydYUbDQ1LiBHVOHf5rxudtA6/MKUjUc/BMkkU+RhPo5nMGms2qfnuoPm9rjOaSpEKsQjXccwKRHYzJz3Y7AsRpAt+UHSiNaGTsS/rlD7nfYxBTI4zM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Mm9itYYQ; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Mm9itYYQ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5EB901F00893; Sat, 30 May 2026 20:44:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780173890; bh=sdnNQtoXvYOfEgsqTMi8GxFAxnCBOiGAg8PbKzq08Is=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Mm9itYYQnrRSPDMQKlC/wBQ4OEOLXGJ43w9PAyKoGqYaV1pPSHlzwNKOISrlnWEfT 5GsUXUrUFuXlgyiiFlshUbP4NCctZ7O00O5NZj/qNrPdUMmKOE1nSiZNNhBXS2LhRe o4Y8gaRycL84EZuPA/u2ZoJ874uzxL/WFieHbLas6CaHwH9Ga15nW8/uMUWblhc43T H07k6LXfftgvGrY/WbrjCxAC/04Hg+5Hw3lK+kjCavQNHXln43bZq+uf/Ad7bbJf/Y wYD3X6s37HYqeNGth+qCC+2w3E+vZ8zoYkLPPTFSHjUbLgGij+9Y0uFEfqbZo4UMYt 6dlgQ0PSxwZ0Q== From: srini@kernel.org To: gregkh@linuxfoundation.org Cc: linux-kernel@vger.kernel.org, Bjorn Andersson , stable@vger.kernel.org, Srinivas Kandagatla Subject: [PATCH 8/8] slimbus: qcom-ngd-ctrl: Avoid ABBA on tx_lock/ctrl->lock Date: Sat, 30 May 2026 21:44:21 +0100 Message-ID: <20260530204421.116824-9-srini@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260530204421.116824-1-srini@kernel.org> References: <20260530204421.116824-1-srini@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Bjorn Andersson During the SSR/PDR down notification the tx_lock is taken with the intent to provide synchronization with active DMA transfers. But during this period qcom_slim_ngd_down() is invoked, which ends up in slim_report_absent(), which takes the slim_controller lock. In multiple other codepaths these two locks are taken in the opposite order (i.e. slim_controller then tx_lock). The result is a lockdep splat, and a possible deadlock: rprocctl/449 is trying to acquire lock: ffff00009793e620 (&ctrl->lock){+.+.}-{4:4}, at: slim_report_absent (drive= rs/slimbus/core.c:322) slimbus but task is already holding lock: ffff00009793fb50 (&ctrl->tx_lock){+.+.}-{4:4}, at: qcom_slim_ngd_ssr_pdr_= notify (drivers/slimbus/qcom-ngd-ctrl.c:1475) slim_qcom_ngd_ctrl which lock already depends on the new lock. Possible unsafe locking scenario: CPU0 CPU1 ---- ---- lock(&ctrl->tx_lock); lock(&ctrl->lock); lock(&ctrl->tx_lock); lock(&ctrl->lock); The assumption is that the comment refers to the desire to not call qcom_slim_ngd_exit_dma() while we have an ongoing DMA TX transaction. But any such transaction is initiated and completed within a single qcom_slim_ngd_xfer_msg(). Prior to calling qcom_slim_ngd_exit_dma() the slim_controller is torn down, all child devices are notified that the slimbus is gone and the child devices are removed. Stop taking the tx_lock in qcom_slim_ngd_ssr_pdr_notify() to avoid the deadlock. Fixes: a899d324863a ("slimbus: qcom-ngd-ctrl: add Sub System Restart suppor= t") Cc: stable@vger.kernel.org Signed-off-by: Bjorn Andersson Signed-off-by: Srinivas Kandagatla --- drivers/slimbus/qcom-ngd-ctrl.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/slimbus/qcom-ngd-ctrl.c b/drivers/slimbus/qcom-ngd-ctr= l.c index 8b207efeadbc..3071e46d03be 100644 --- a/drivers/slimbus/qcom-ngd-ctrl.c +++ b/drivers/slimbus/qcom-ngd-ctrl.c @@ -1471,15 +1471,12 @@ static int qcom_slim_ngd_ssr_pdr_notify(struct qcom= _slim_ngd_ctrl *ctrl, switch (action) { case QCOM_SSR_BEFORE_SHUTDOWN: case SERVREG_SERVICE_STATE_DOWN: - /* Make sure the last dma xfer is finished */ - mutex_lock(&ctrl->tx_lock); if (ctrl->state !=3D QCOM_SLIM_NGD_CTRL_DOWN) { pm_runtime_get_noresume(ctrl->ctrl.dev); ctrl->state =3D QCOM_SLIM_NGD_CTRL_DOWN; qcom_slim_ngd_down(ctrl); qcom_slim_ngd_exit_dma(ctrl); } - mutex_unlock(&ctrl->tx_lock); break; case QCOM_SSR_AFTER_POWERUP: case SERVREG_SERVICE_STATE_UP: --=20 2.53.0