Now builds and applies properly.
+++ /dev/null
-From a8f623be9c15c9820e4a9a8a75156f6c3cabc08e Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Sat, 28 Sep 2024 08:05:58 +0930
-Subject: btrfs: fix a NULL pointer dereference when failed to start a new
- trasacntion
-
-From: Qu Wenruo <wqu@suse.com>
-
-[ Upstream commit c3b47f49e83197e8dffd023ec568403bcdbb774b ]
-
-[BUG]
-Syzbot reported a NULL pointer dereference with the following crash:
-
- FAULT_INJECTION: forcing a failure.
- start_transaction+0x830/0x1670 fs/btrfs/transaction.c:676
- prepare_to_relocate+0x31f/0x4c0 fs/btrfs/relocation.c:3642
- relocate_block_group+0x169/0xd20 fs/btrfs/relocation.c:3678
- ...
- BTRFS info (device loop0): balance: ended with status: -12
- Oops: general protection fault, probably for non-canonical address 0xdffffc00000000cc: 0000 [#1] PREEMPT SMP KASAN NOPTI
- KASAN: null-ptr-deref in range [0x0000000000000660-0x0000000000000667]
- RIP: 0010:btrfs_update_reloc_root+0x362/0xa80 fs/btrfs/relocation.c:926
- Call Trace:
- <TASK>
- commit_fs_roots+0x2ee/0x720 fs/btrfs/transaction.c:1496
- btrfs_commit_transaction+0xfaf/0x3740 fs/btrfs/transaction.c:2430
- del_balance_item fs/btrfs/volumes.c:3678 [inline]
- reset_balance_state+0x25e/0x3c0 fs/btrfs/volumes.c:3742
- btrfs_balance+0xead/0x10c0 fs/btrfs/volumes.c:4574
- btrfs_ioctl_balance+0x493/0x7c0 fs/btrfs/ioctl.c:3673
- vfs_ioctl fs/ioctl.c:51 [inline]
- __do_sys_ioctl fs/ioctl.c:907 [inline]
- __se_sys_ioctl+0xf9/0x170 fs/ioctl.c:893
- do_syscall_x64 arch/x86/entry/common.c:52 [inline]
- do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
- entry_SYSCALL_64_after_hwframe+0x77/0x7f
-
-[CAUSE]
-The allocation failure happens at the start_transaction() inside
-prepare_to_relocate(), and during the error handling we call
-unset_reloc_control(), which makes fs_info->balance_ctl to be NULL.
-
-Then we continue the error path cleanup in btrfs_balance() by calling
-reset_balance_state() which will call del_balance_item() to fully delete
-the balance item in the root tree.
-
-However during the small window between set_reloc_contrl() and
-unset_reloc_control(), we can have a subvolume tree update and created a
-reloc_root for that subvolume.
-
-Then we go into the final btrfs_commit_transaction() of
-del_balance_item(), and into btrfs_update_reloc_root() inside
-commit_fs_roots().
-
-That function checks if fs_info->reloc_ctl is in the merge_reloc_tree
-stage, but since fs_info->reloc_ctl is NULL, it results a NULL pointer
-dereference.
-
-[FIX]
-Just add extra check on fs_info->reloc_ctl inside
-btrfs_update_reloc_root(), before checking
-fs_info->reloc_ctl->merge_reloc_tree.
-
-That DEAD_RELOC_TREE handling is to prevent further modification to the
-reloc tree during merge stage, but since there is no reloc_ctl at all,
-we do not need to bother that.
-
-Reported-by: syzbot+283673dbc38527ef9f3d@syzkaller.appspotmail.com
-Link: https://lore.kernel.org/linux-btrfs/66f6bfa7.050a0220.38ace9.0019.GAE@google.com/
-CC: stable@vger.kernel.org # 4.19+
-Reviewed-by: Josef Bacik <josef@toxicpanda.com>
-Signed-off-by: Qu Wenruo <wqu@suse.com>
-Reviewed-by: David Sterba <dsterba@suse.com>
-Signed-off-by: David Sterba <dsterba@suse.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- fs/btrfs/relocation.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c
-index 93db4486a9433..cdd16583b2ff0 100644
---- a/fs/btrfs/relocation.c
-+++ b/fs/btrfs/relocation.c
-@@ -910,7 +910,7 @@ int btrfs_update_reloc_root(struct btrfs_trans_handle *trans,
- btrfs_grab_root(reloc_root);
-
- /* root->reloc_root will stay until current relocation finished */
-- if (fs_info->reloc_ctl->merge_reloc_tree &&
-+ if (fs_info->reloc_ctl && fs_info->reloc_ctl->merge_reloc_tree &&
- btrfs_root_refs(root_item) == 0) {
- set_bit(BTRFS_ROOT_DEAD_RELOC_TREE, &root->state);
- /*
---
-2.43.0
-
+++ /dev/null
-From b7b7ce6eef0b55fdf657dd7e496e65a49e187dff Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 9 Aug 2024 10:51:29 +0530
-Subject: clk: qcom: clk-rpmh: Fix overflow in BCM vote
-
-From: Mike Tipton <quic_mdtipton@quicinc.com>
-
-[ Upstream commit a4e5af27e6f6a8b0d14bc0d7eb04f4a6c7291586 ]
-
-Valid frequencies may result in BCM votes that exceed the max HW value.
-Set vote ceiling to BCM_TCS_CMD_VOTE_MASK to ensure the votes aren't
-truncated, which can result in lower frequencies than desired.
-
-Fixes: 04053f4d23a4 ("clk: qcom: clk-rpmh: Add IPA clock support")
-Cc: stable@vger.kernel.org
-Signed-off-by: Mike Tipton <quic_mdtipton@quicinc.com>
-Reviewed-by: Taniya Das <quic_tdas@quicinc.com>
-Signed-off-by: Imran Shaik <quic_imrashai@quicinc.com>
-Link: https://lore.kernel.org/r/20240809-clk-rpmh-bcm-vote-fix-v2-1-240c584b7ef9@quicinc.com
-Signed-off-by: Bjorn Andersson <andersson@kernel.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/clk/qcom/clk-rpmh.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/drivers/clk/qcom/clk-rpmh.c b/drivers/clk/qcom/clk-rpmh.c
-index e2c669b08affc..6c7cce8e82f71 100644
---- a/drivers/clk/qcom/clk-rpmh.c
-+++ b/drivers/clk/qcom/clk-rpmh.c
-@@ -270,6 +270,8 @@ static int clk_rpmh_bcm_send_cmd(struct clk_rpmh *c, bool enable)
- cmd_state = 0;
- }
-
-+ cmd_state = min(cmd_state, BCM_TCS_CMD_VOTE_MASK);
-+
- if (c->last_sent_aggr_state != cmd_state) {
- cmd.addr = c->res_addr;
- cmd.data = BCM_TCS_CMD(1, enable, 0, cmd_state);
---
-2.43.0
-
+++ /dev/null
-From 52b3db6cdb0c93e30d1a3a701c771a227a6f71a6 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Thu, 8 Aug 2024 14:13:36 +0800
-Subject: drm: omapdrm: Add missing check for alloc_ordered_workqueue
-
-From: Ma Ke <make24@iscas.ac.cn>
-
-[ Upstream commit e794b7b9b92977365c693760a259f8eef940c536 ]
-
-As it may return NULL pointer and cause NULL pointer dereference. Add check
-for the return value of alloc_ordered_workqueue.
-
-Cc: stable@vger.kernel.org
-Fixes: 2f95bc6d324a ("drm: omapdrm: Perform initialization/cleanup at probe/remove time")
-Signed-off-by: Ma Ke <make24@iscas.ac.cn>
-Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
-Link: https://patchwork.freedesktop.org/patch/msgid/20240808061336.2796729-1-make24@iscas.ac.cn
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/gpu/drm/omapdrm/omap_drv.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
-index 53d5e184ee77c..8c664ef0cf629 100644
---- a/drivers/gpu/drm/omapdrm/omap_drv.c
-+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
-@@ -600,6 +600,10 @@ static int omapdrm_init(struct omap_drm_private *priv, struct device *dev)
- soc = soc_device_match(omapdrm_soc_devices);
- priv->omaprev = soc ? (unsigned int)soc->data : 0;
- priv->wq = alloc_ordered_workqueue("omapdrm", 0);
-+ if (!priv->wq) {
-+ ret = -ENOMEM;
-+ goto err_alloc_workqueue;
-+ }
-
- mutex_init(&priv->list_lock);
- INIT_LIST_HEAD(&priv->obj_list);
-@@ -649,6 +653,7 @@ static int omapdrm_init(struct omap_drm_private *priv, struct device *dev)
- err_gem_deinit:
- omap_gem_deinit(ddev);
- destroy_workqueue(priv->wq);
-+err_alloc_workqueue:
- omap_disconnect_pipelines(ddev);
- omap_crtc_pre_uninit(priv);
- drm_dev_put(ddev);
---
-2.43.0
-
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
- drivers/i2c/busses/i2c-xiic.c | 2 +-
+ drivers/i2c/busses/i2c-xiic.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c
-index 30839ead38361..e3a1fe8bbe25c 100644
--- a/drivers/i2c/busses/i2c-xiic.c
+++ b/drivers/i2c/busses/i2c-xiic.c
-@@ -871,8 +871,8 @@ static int xiic_i2c_probe(struct platform_device *pdev)
+@@ -893,8 +893,8 @@ static int xiic_i2c_probe(struct platfor
return 0;
err_pm_disable:
return ret;
}
---
-2.43.0
-
Stable-dep-of: 0c8d604dea43 ("i2c: xiic: Fix pm_runtime_set_suspended() with runtime pm enabled")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
- drivers/i2c/busses/i2c-xiic.c | 9 ++++-----
+ drivers/i2c/busses/i2c-xiic.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
-diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c
-index 568e97c3896d1..9652e8bea2d0b 100644
--- a/drivers/i2c/busses/i2c-xiic.c
+++ b/drivers/i2c/busses/i2c-xiic.c
-@@ -816,11 +816,10 @@ static int xiic_i2c_probe(struct platform_device *pdev)
- init_waitqueue_head(&i2c->wait);
+@@ -838,11 +838,10 @@ static int xiic_i2c_probe(struct platfor
+ mutex_init(&i2c->lock);
i2c->clk = devm_clk_get(&pdev->dev, NULL);
- if (IS_ERR(i2c->clk)) {
ret = clk_prepare_enable(i2c->clk);
if (ret) {
dev_err(&pdev->dev, "Unable to enable clock.\n");
---
-2.43.0
-
Stable-dep-of: 0c8d604dea43 ("i2c: xiic: Fix pm_runtime_set_suspended() with runtime pm enabled")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
- drivers/i2c/busses/i2c-xiic.c | 20 +++++++-------------
+ drivers/i2c/busses/i2c-xiic.c | 20 +++++++-------------
1 file changed, 7 insertions(+), 13 deletions(-)
-diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c
-index 9652e8bea2d0b..30839ead38361 100644
--- a/drivers/i2c/busses/i2c-xiic.c
+++ b/drivers/i2c/busses/i2c-xiic.c
-@@ -815,16 +815,11 @@ static int xiic_i2c_probe(struct platform_device *pdev)
+@@ -837,16 +837,11 @@ static int xiic_i2c_probe(struct platfor
+
mutex_init(&i2c->lock);
- init_waitqueue_head(&i2c->wait);
- i2c->clk = devm_clk_get(&pdev->dev, NULL);
+ i2c->clk = devm_clk_get_enabled(&pdev->dev, NULL);
i2c->dev = &pdev->dev;
pm_runtime_set_autosuspend_delay(i2c->dev, XIIC_PM_TIMEOUT);
pm_runtime_use_autosuspend(i2c->dev);
-@@ -836,7 +831,7 @@ static int xiic_i2c_probe(struct platform_device *pdev)
+@@ -858,7 +853,7 @@ static int xiic_i2c_probe(struct platfor
if (ret < 0) {
dev_err(&pdev->dev, "Cannot claim IRQ\n");
}
i2c->singlemaster =
-@@ -857,14 +852,14 @@ static int xiic_i2c_probe(struct platform_device *pdev)
+@@ -879,14 +874,14 @@ static int xiic_i2c_probe(struct platfor
ret = xiic_reinit(i2c);
if (ret < 0) {
dev_err(&pdev->dev, "Cannot xiic_reinit\n");
}
if (pdata) {
-@@ -875,10 +870,10 @@ static int xiic_i2c_probe(struct platform_device *pdev)
+@@ -897,10 +892,10 @@ static int xiic_i2c_probe(struct platfor
return 0;
return ret;
}
-@@ -896,7 +891,6 @@ static int xiic_i2c_remove(struct platform_device *pdev)
+@@ -918,7 +913,6 @@ static int xiic_i2c_remove(struct platfo
xiic_deinit(i2c);
pm_runtime_put_sync(i2c->dev);
pm_runtime_disable(&pdev->dev);
pm_runtime_set_suspended(&pdev->dev);
pm_runtime_dont_use_autosuspend(&pdev->dev);
---
-2.43.0
-
+++ /dev/null
-From 93529c612ade28e53bf1b0639f1d519476e164ad Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 9 Sep 2024 15:06:36 +1000
-Subject: nfsd: fix delegation_blocked() to block correctly for at least 30
- seconds
-
-From: NeilBrown <neilb@suse.de>
-
-[ Upstream commit 45bb63ed20e02ae146336412889fe5450316a84f ]
-
-The pair of bloom filtered used by delegation_blocked() was intended to
-block delegations on given filehandles for between 30 and 60 seconds. A
-new filehandle would be recorded in the "new" bit set. That would then
-be switch to the "old" bit set between 0 and 30 seconds later, and it
-would remain as the "old" bit set for 30 seconds.
-
-Unfortunately the code intended to clear the old bit set once it reached
-30 seconds old, preparing it to be the next new bit set, instead cleared
-the *new* bit set before switching it to be the old bit set. This means
-that the "old" bit set is always empty and delegations are blocked
-between 0 and 30 seconds.
-
-This patch updates bd->new before clearing the set with that index,
-instead of afterwards.
-
-Reported-by: Olga Kornievskaia <okorniev@redhat.com>
-Cc: stable@vger.kernel.org
-Fixes: 6282cd565553 ("NFSD: Don't hand out delegations for 30 seconds after recalling them.")
-Signed-off-by: NeilBrown <neilb@suse.de>
-Reviewed-by: Benjamin Coddington <bcodding@redhat.com>
-Reviewed-by: Jeff Layton <jlayton@kernel.org>
-Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- fs/nfsd/nfs4state.c | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
-index 8e84ddccce4bf..18d64a9312a7a 100644
---- a/fs/nfsd/nfs4state.c
-+++ b/fs/nfsd/nfs4state.c
-@@ -1090,7 +1090,8 @@ static void nfs4_free_deleg(struct nfs4_stid *stid)
- * When a delegation is recalled, the filehandle is stored in the "new"
- * filter.
- * Every 30 seconds we swap the filters and clear the "new" one,
-- * unless both are empty of course.
-+ * unless both are empty of course. This results in delegations for a
-+ * given filehandle being blocked for between 30 and 60 seconds.
- *
- * Each filter is 256 bits. We hash the filehandle to 32bit and use the
- * low 3 bytes as hash-table indices.
-@@ -1119,9 +1120,9 @@ static int delegation_blocked(struct knfsd_fh *fh)
- if (ktime_get_seconds() - bd->swap_time > 30) {
- bd->entries -= bd->old_entries;
- bd->old_entries = bd->entries;
-+ bd->new = 1-bd->new;
- memset(bd->set[bd->new], 0,
- sizeof(bd->set[0]));
-- bd->new = 1-bd->new;
- bd->swap_time = ktime_get_seconds();
- }
- spin_unlock(&blocked_delegations_lock);
---
-2.43.0
-
+++ /dev/null
-From 8a4e92f880f9caba6dd521e29c331d1a7d8b72ce Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Sun, 11 Aug 2024 13:11:07 -0400
-Subject: NFSD: Fix NFSv4's PUTPUBFH operation
-
-From: Chuck Lever <chuck.lever@oracle.com>
-
-[ Upstream commit 202f39039a11402dcbcd5fece8d9fa6be83f49ae ]
-
-According to RFC 8881, all minor versions of NFSv4 support PUTPUBFH.
-
-Replace the XDR decoder for PUTPUBFH with a "noop" since we no
-longer want the minorversion check, and PUTPUBFH has no arguments to
-decode. (Ideally nfsd4_decode_noop should really be called
-nfsd4_decode_void).
-
-PUTPUBFH should now behave just like PUTROOTFH.
-
-Reported-by: Cedric Blancher <cedric.blancher@gmail.com>
-Fixes: e1a90ebd8b23 ("NFSD: Combine decode operations for v4 and v4.1")
-Cc: Dan Shelton <dan.f.shelton@gmail.com>
-Cc: Roland Mainz <roland.mainz@nrubsig.org>
-Cc: stable@vger.kernel.org
-Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- fs/nfsd/nfs4xdr.c | 10 +---------
- 1 file changed, 1 insertion(+), 9 deletions(-)
-
-diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
-index 5a68c62864925..d1625a6ff3ce3 100644
---- a/fs/nfsd/nfs4xdr.c
-+++ b/fs/nfsd/nfs4xdr.c
-@@ -1245,14 +1245,6 @@ nfsd4_decode_putfh(struct nfsd4_compoundargs *argp, union nfsd4_op_u *u)
- return nfs_ok;
- }
-
--static __be32
--nfsd4_decode_putpubfh(struct nfsd4_compoundargs *argp, union nfsd4_op_u *p)
--{
-- if (argp->minorversion == 0)
-- return nfs_ok;
-- return nfserr_notsupp;
--}
--
- static __be32
- nfsd4_decode_read(struct nfsd4_compoundargs *argp, union nfsd4_op_u *u)
- {
-@@ -2345,7 +2337,7 @@ static const nfsd4_dec nfsd4_dec_ops[] = {
- [OP_OPEN_CONFIRM] = nfsd4_decode_open_confirm,
- [OP_OPEN_DOWNGRADE] = nfsd4_decode_open_downgrade,
- [OP_PUTFH] = nfsd4_decode_putfh,
-- [OP_PUTPUBFH] = nfsd4_decode_putpubfh,
-+ [OP_PUTPUBFH] = nfsd4_decode_noop,
- [OP_PUTROOTFH] = nfsd4_decode_noop,
- [OP_READ] = nfsd4_decode_read,
- [OP_READDIR] = nfsd4_decode_readdir,
---
-2.43.0
-
+++ /dev/null
-From 0564b67bc1b624c7a4fc3dcd78f3b95a7920d658 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 31 May 2024 12:13:35 -0400
-Subject: PCI: xilinx-nwl: Clean up clock on probe failure/removal
-
-From: Sean Anderson <sean.anderson@linux.dev>
-
-[ Upstream commit cfd67903977b13f63340a4eb5a1cc890994f2c62 ]
-
-Make sure we turn off the clock on probe failure and device removal.
-
-Fixes: de0a01f52966 ("PCI: xilinx-nwl: Enable the clock through CCF")
-Link: https://lore.kernel.org/r/20240531161337.864994-6-sean.anderson@linux.dev
-Signed-off-by: Sean Anderson <sean.anderson@linux.dev>
-Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/pci/controller/pcie-xilinx-nwl.c | 23 +++++++++++++++++++----
- 1 file changed, 19 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/pci/controller/pcie-xilinx-nwl.c b/drivers/pci/controller/pcie-xilinx-nwl.c
-index 5c6653d825fb5..396fa1ffe698c 100644
---- a/drivers/pci/controller/pcie-xilinx-nwl.c
-+++ b/drivers/pci/controller/pcie-xilinx-nwl.c
-@@ -817,6 +817,7 @@ static int nwl_pcie_probe(struct platform_device *pdev)
- return -ENODEV;
-
- pcie = pci_host_bridge_priv(bridge);
-+ platform_set_drvdata(pdev, pcie);
-
- pcie->dev = dev;
- pcie->ecam_value = NWL_ECAM_VALUE_DEFAULT;
-@@ -840,13 +841,13 @@ static int nwl_pcie_probe(struct platform_device *pdev)
- err = nwl_pcie_bridge_init(pcie);
- if (err) {
- dev_err(dev, "HW Initialization failed\n");
-- return err;
-+ goto err_clk;
- }
-
- err = nwl_pcie_init_irq_domain(pcie);
- if (err) {
- dev_err(dev, "Failed creating IRQ Domain\n");
-- return err;
-+ goto err_clk;
- }
-
- bridge->sysdata = pcie;
-@@ -856,11 +857,24 @@ static int nwl_pcie_probe(struct platform_device *pdev)
- err = nwl_pcie_enable_msi(pcie);
- if (err < 0) {
- dev_err(dev, "failed to enable MSI support: %d\n", err);
-- return err;
-+ goto err_clk;
- }
- }
-
-- return pci_host_probe(bridge);
-+ err = pci_host_probe(bridge);
-+ if (!err)
-+ return 0;
-+
-+err_clk:
-+ clk_disable_unprepare(pcie->clk);
-+ return err;
-+}
-+
-+static void nwl_pcie_remove(struct platform_device *pdev)
-+{
-+ struct nwl_pcie *pcie = platform_get_drvdata(pdev);
-+
-+ clk_disable_unprepare(pcie->clk);
- }
-
- static struct platform_driver nwl_pcie_driver = {
-@@ -870,5 +884,6 @@ static struct platform_driver nwl_pcie_driver = {
- .of_match_table = nwl_pcie_of_match,
- },
- .probe = nwl_pcie_probe,
-+ .remove_new = nwl_pcie_remove,
- };
- builtin_platform_driver(nwl_pcie_driver);
---
-2.43.0
-
+++ /dev/null
-From 706cc7dd5bd3352196a8773379fc8d194cbcc565 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 9 Dec 2022 16:09:14 +0100
-Subject: platform: Provide a remove callback that returns no value
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
-
-[ Upstream commit 5c5a7680e67ba6fbbb5f4d79fa41485450c1985c ]
-
-struct platform_driver::remove returning an integer made driver authors
-expect that returning an error code was proper error handling. However
-the driver core ignores the error and continues to remove the device
-because there is nothing the core could do anyhow and reentering the
-remove callback again is only calling for trouble.
-
-So this is an source for errors typically yielding resource leaks in the
-error path.
-
-As there are too many platform drivers to neatly convert them all to
-return void in a single go, do it in several steps after this patch:
-
- a) Convert all drivers to implement .remove_new() returning void instead
- of .remove() returning int;
- b) Change struct platform_driver::remove() to return void and so make
- it identical to .remove_new();
- c) Change all drivers back to .remove() now with the better prototype;
- d) drop struct platform_driver::remove_new().
-
-While this touches all drivers eventually twice, steps a) and c) can be
-done one driver after another and so reduces coordination efforts
-immensely and simplifies review.
-
-Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
-Link: https://lore.kernel.org/r/20221209150914.3557650-1-u.kleine-koenig@pengutronix.de
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Stable-dep-of: cfd67903977b ("PCI: xilinx-nwl: Clean up clock on probe failure/removal")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/base/platform.c | 4 +++-
- include/linux/platform_device.h | 11 +++++++++++
- 2 files changed, 14 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/base/platform.c b/drivers/base/platform.c
-index d0b15cbab0ff0..e07043d85c65c 100644
---- a/drivers/base/platform.c
-+++ b/drivers/base/platform.c
-@@ -1306,7 +1306,9 @@ static int platform_remove(struct device *_dev)
- struct platform_driver *drv = to_platform_driver(_dev->driver);
- struct platform_device *dev = to_platform_device(_dev);
-
-- if (drv->remove) {
-+ if (drv->remove_new) {
-+ drv->remove_new(dev);
-+ } else if (drv->remove) {
- int ret = drv->remove(dev);
-
- if (ret)
-diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h
-index e7a83b0218077..870a918aa251c 100644
---- a/include/linux/platform_device.h
-+++ b/include/linux/platform_device.h
-@@ -203,7 +203,18 @@ extern void platform_device_put(struct platform_device *pdev);
-
- struct platform_driver {
- int (*probe)(struct platform_device *);
-+
-+ /*
-+ * Traditionally the remove callback returned an int which however is
-+ * ignored by the driver core. This led to wrong expectations by driver
-+ * authors who thought returning an error code was a valid error
-+ * handling strategy. To convert to a callback returning void, new
-+ * drivers should implement .remove_new() until the conversion it done
-+ * that eventually makes .remove() return void.
-+ */
- int (*remove)(struct platform_device *);
-+ void (*remove_new)(struct platform_device *);
-+
- void (*shutdown)(struct platform_device *);
- int (*suspend)(struct platform_device *, pm_message_t state);
- int (*resume)(struct platform_device *);
---
-2.43.0
-
+++ /dev/null
-From 5b708029a103cf96a12595f381de535455b2cb71 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Sun, 25 Aug 2024 20:31:03 +0200
-Subject: rtc: at91sam9: fix OF node leak in probe() error path
-
-From: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
-
-[ Upstream commit 73580e2ee6adfb40276bd420da3bb1abae204e10 ]
-
-Driver is leaking an OF node reference obtained from
-of_parse_phandle_with_fixed_args().
-
-Fixes: 43e112bb3dea ("rtc: at91sam9: make use of syscon/regmap to access GPBR registers")
-Cc: stable@vger.kernel.org
-Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
-Link: https://lore.kernel.org/r/20240825183103.102904-1-krzysztof.kozlowski@linaro.org
-Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/rtc/rtc-at91sam9.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/drivers/rtc/rtc-at91sam9.c b/drivers/rtc/rtc-at91sam9.c
-index e39e89867d293..881d750d09005 100644
---- a/drivers/rtc/rtc-at91sam9.c
-+++ b/drivers/rtc/rtc-at91sam9.c
-@@ -368,6 +368,7 @@ static int at91_rtc_probe(struct platform_device *pdev)
- return ret;
-
- rtc->gpbr = syscon_node_to_regmap(args.np);
-+ of_node_put(args.np);
- rtc->gpbr_offset = args.args[0];
- if (IS_ERR(rtc->gpbr)) {
- dev_err(&pdev->dev, "failed to retrieve gpbr regmap, aborting.\n");
---
-2.43.0
-
drivers-media-dvb-frontends-rtl2830-fix-an-out-of-bo.patch
pci-keystone-fix-if-statement-expression-in-ks_pcie_.patch
pci-xilinx-nwl-fix-register-misspelling.patch
-platform-provide-a-remove-callback-that-returns-no-v.patch
-pci-xilinx-nwl-clean-up-clock-on-probe-failure-remov.patch
rdma-iwcm-fix-warning-at_kernel-workqueue.c-check_fl.patch
pinctrl-single-fix-missing-error-code-in-pcs_probe.patch
clk-ti-dra7-atl-fix-leak-of-of_nodes.patch
arm64-cputype-add-neoverse-n3-definitions.patch
arm64-errata-expand-speculative-ssbs-workaround-once.patch
uprobes-fix-kernel-info-leak-via-uprobes-vma.patch
-drm-omapdrm-add-missing-check-for-alloc_ordered_work.patch
drm-rockchip-define-gamma-registers-for-rk3399.patch
drm-rockchip-support-gamma-control-on-rk3399.patch
drm-rockchip-vop-clear-dma-stop-bit-on-rk3066.patch
-nfsd-fix-delegation_blocked-to-block-correctly-for-a.patch
-nfsd-fix-nfsv4-s-putpubfh-operation.patch-2672
clk-imx6ul-fix-enet1-gate-configuration.patch
clk-imx6ul-add-ethernet-refclock-mux-support.patch
clk-imx6ul-retain-early-uart-clocks-during-kernel-in.patch
clk-imx6ul-fix-clock-parent-for-imx6ul_clk_enetx_ref.patch
clk-qcom-dispcc-sm8250-use-clk_set_rate_parent-for-b.patch
-clk-qcom-clk-rpmh-fix-overflow-in-bcm-vote.patch-10977
r8169-fix-spelling-mistake-tx_underun-tx_underrun.patch
r8169-add-tally-counter-fields-added-with-rtl8125.patch
-rtc-at91sam9-fix-of-node-leak-in-probe-error-path.patch-26252
acpi-battery-simplify-battery-hook-locking.patch
acpi-battery-fix-possible-crash-when-unregistering-a.patch
-btrfs-fix-a-null-pointer-dereference-when-failed-to-.patch