From: Greg Kroah-Hartman Date: Tue, 8 Oct 2024 09:10:47 +0000 (+0200) Subject: fix up the build/merge mess that ended up in the 5.10 queue somehow X-Git-Tag: v6.6.55~39 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=94857d859cbf3064f3fb5eb23b2345dd80cc2aca;p=thirdparty%2Fkernel%2Fstable-queue.git fix up the build/merge mess that ended up in the 5.10 queue somehow Now builds and applies properly. --- diff --git a/queue-5.10/btrfs-fix-a-null-pointer-dereference-when-failed-to-.patch b/queue-5.10/btrfs-fix-a-null-pointer-dereference-when-failed-to-.patch deleted file mode 100644 index 51d88cbe437..00000000000 --- a/queue-5.10/btrfs-fix-a-null-pointer-dereference-when-failed-to-.patch +++ /dev/null @@ -1,95 +0,0 @@ -From a8f623be9c15c9820e4a9a8a75156f6c3cabc08e Mon Sep 17 00:00:00 2001 -From: Sasha Levin -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 - -[ 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: - - 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 -Signed-off-by: Qu Wenruo -Reviewed-by: David Sterba -Signed-off-by: David Sterba -Signed-off-by: Sasha Levin ---- - 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 - diff --git a/queue-5.10/clk-qcom-clk-rpmh-fix-overflow-in-bcm-vote.patch-10977 b/queue-5.10/clk-qcom-clk-rpmh-fix-overflow-in-bcm-vote.patch-10977 deleted file mode 100644 index 3596fcc3d07..00000000000 --- a/queue-5.10/clk-qcom-clk-rpmh-fix-overflow-in-bcm-vote.patch-10977 +++ /dev/null @@ -1,41 +0,0 @@ -From b7b7ce6eef0b55fdf657dd7e496e65a49e187dff Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 9 Aug 2024 10:51:29 +0530 -Subject: clk: qcom: clk-rpmh: Fix overflow in BCM vote - -From: Mike Tipton - -[ 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 -Reviewed-by: Taniya Das -Signed-off-by: Imran Shaik -Link: https://lore.kernel.org/r/20240809-clk-rpmh-bcm-vote-fix-v2-1-240c584b7ef9@quicinc.com -Signed-off-by: Bjorn Andersson -Signed-off-by: Sasha Levin ---- - 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 - diff --git a/queue-5.10/drm-omapdrm-add-missing-check-for-alloc_ordered_work.patch b/queue-5.10/drm-omapdrm-add-missing-check-for-alloc_ordered_work.patch deleted file mode 100644 index 6b86a6c5ec8..00000000000 --- a/queue-5.10/drm-omapdrm-add-missing-check-for-alloc_ordered_work.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 52b3db6cdb0c93e30d1a3a701c771a227a6f71a6 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 8 Aug 2024 14:13:36 +0800 -Subject: drm: omapdrm: Add missing check for alloc_ordered_workqueue - -From: Ma Ke - -[ 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 -Signed-off-by: Tomi Valkeinen -Link: https://patchwork.freedesktop.org/patch/msgid/20240808061336.2796729-1-make24@iscas.ac.cn -Signed-off-by: Sasha Levin ---- - 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 - diff --git a/queue-5.10/i2c-xiic-fix-pm_runtime_set_suspended-with-runtime-p.patch b/queue-5.10/i2c-xiic-fix-pm_runtime_set_suspended-with-runtime-p.patch index 27197b0c2e3..24db184154c 100644 --- a/queue-5.10/i2c-xiic-fix-pm_runtime_set_suspended-with-runtime-p.patch +++ b/queue-5.10/i2c-xiic-fix-pm_runtime_set_suspended-with-runtime-p.patch @@ -17,14 +17,12 @@ Signed-off-by: Jinjie Ruan Signed-off-by: Andi Shyti Signed-off-by: Sasha Levin --- - 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: @@ -34,6 +32,3 @@ index 30839ead38361..e3a1fe8bbe25c 100644 return ret; } --- -2.43.0 - diff --git a/queue-5.10/i2c-xiic-simplify-with-dev_err_probe.patch b/queue-5.10/i2c-xiic-simplify-with-dev_err_probe.patch index bc9e08642bd..bd3c3eff20f 100644 --- a/queue-5.10/i2c-xiic-simplify-with-dev_err_probe.patch +++ b/queue-5.10/i2c-xiic-simplify-with-dev_err_probe.patch @@ -16,15 +16,13 @@ Signed-off-by: Wolfram Sang Stable-dep-of: 0c8d604dea43 ("i2c: xiic: Fix pm_runtime_set_suspended() with runtime pm enabled") Signed-off-by: Sasha Levin --- - 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)) { @@ -39,6 +37,3 @@ index 568e97c3896d1..9652e8bea2d0b 100644 ret = clk_prepare_enable(i2c->clk); if (ret) { dev_err(&pdev->dev, "Unable to enable clock.\n"); --- -2.43.0 - diff --git a/queue-5.10/i2c-xiic-use-devm_clk_get_enabled.patch b/queue-5.10/i2c-xiic-use-devm_clk_get_enabled.patch index 563d5638992..344c89e82be 100644 --- a/queue-5.10/i2c-xiic-use-devm_clk_get_enabled.patch +++ b/queue-5.10/i2c-xiic-use-devm_clk_get_enabled.patch @@ -16,16 +16,14 @@ Signed-off-by: Wolfram Sang Stable-dep-of: 0c8d604dea43 ("i2c: xiic: Fix pm_runtime_set_suspended() with runtime pm enabled") Signed-off-by: Sasha Levin --- - 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); @@ -42,7 +40,7 @@ index 9652e8bea2d0b..30839ead38361 100644 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"); @@ -51,7 +49,7 @@ index 9652e8bea2d0b..30839ead38361 100644 } 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"); @@ -68,7 +66,7 @@ index 9652e8bea2d0b..30839ead38361 100644 } 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; @@ -81,7 +79,7 @@ index 9652e8bea2d0b..30839ead38361 100644 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); @@ -89,6 +87,3 @@ index 9652e8bea2d0b..30839ead38361 100644 pm_runtime_disable(&pdev->dev); pm_runtime_set_suspended(&pdev->dev); pm_runtime_dont_use_autosuspend(&pdev->dev); --- -2.43.0 - diff --git a/queue-5.10/nfsd-fix-delegation_blocked-to-block-correctly-for-a.patch b/queue-5.10/nfsd-fix-delegation_blocked-to-block-correctly-for-a.patch deleted file mode 100644 index ff5526a37d6..00000000000 --- a/queue-5.10/nfsd-fix-delegation_blocked-to-block-correctly-for-a.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 93529c612ade28e53bf1b0639f1d519476e164ad Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 9 Sep 2024 15:06:36 +1000 -Subject: nfsd: fix delegation_blocked() to block correctly for at least 30 - seconds - -From: NeilBrown - -[ 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 -Cc: stable@vger.kernel.org -Fixes: 6282cd565553 ("NFSD: Don't hand out delegations for 30 seconds after recalling them.") -Signed-off-by: NeilBrown -Reviewed-by: Benjamin Coddington -Reviewed-by: Jeff Layton -Signed-off-by: Chuck Lever -Signed-off-by: Sasha Levin ---- - 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 - diff --git a/queue-5.10/nfsd-fix-nfsv4-s-putpubfh-operation.patch-2672 b/queue-5.10/nfsd-fix-nfsv4-s-putpubfh-operation.patch-2672 deleted file mode 100644 index 88d2857b735..00000000000 --- a/queue-5.10/nfsd-fix-nfsv4-s-putpubfh-operation.patch-2672 +++ /dev/null @@ -1,60 +0,0 @@ -From 8a4e92f880f9caba6dd521e29c331d1a7d8b72ce Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 11 Aug 2024 13:11:07 -0400 -Subject: NFSD: Fix NFSv4's PUTPUBFH operation - -From: Chuck Lever - -[ 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 -Fixes: e1a90ebd8b23 ("NFSD: Combine decode operations for v4 and v4.1") -Cc: Dan Shelton -Cc: Roland Mainz -Cc: stable@vger.kernel.org -Signed-off-by: Chuck Lever -Signed-off-by: Sasha Levin ---- - 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 - diff --git a/queue-5.10/pci-xilinx-nwl-clean-up-clock-on-probe-failure-remov.patch b/queue-5.10/pci-xilinx-nwl-clean-up-clock-on-probe-failure-remov.patch deleted file mode 100644 index f784dcf51ab..00000000000 --- a/queue-5.10/pci-xilinx-nwl-clean-up-clock-on-probe-failure-remov.patch +++ /dev/null @@ -1,85 +0,0 @@ -From 0564b67bc1b624c7a4fc3dcd78f3b95a7920d658 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 31 May 2024 12:13:35 -0400 -Subject: PCI: xilinx-nwl: Clean up clock on probe failure/removal - -From: Sean Anderson - -[ 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 -Signed-off-by: Bjorn Helgaas -Signed-off-by: Sasha Levin ---- - 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 - diff --git a/queue-5.10/platform-provide-a-remove-callback-that-returns-no-v.patch b/queue-5.10/platform-provide-a-remove-callback-that-returns-no-v.patch deleted file mode 100644 index 5b46f87e87a..00000000000 --- a/queue-5.10/platform-provide-a-remove-callback-that-returns-no-v.patch +++ /dev/null @@ -1,86 +0,0 @@ -From 706cc7dd5bd3352196a8773379fc8d194cbcc565 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -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 - -[ 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 -Link: https://lore.kernel.org/r/20221209150914.3557650-1-u.kleine-koenig@pengutronix.de -Signed-off-by: Greg Kroah-Hartman -Stable-dep-of: cfd67903977b ("PCI: xilinx-nwl: Clean up clock on probe failure/removal") -Signed-off-by: Sasha Levin ---- - 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 - diff --git a/queue-5.10/rtc-at91sam9-fix-of-node-leak-in-probe-error-path.patch-26252 b/queue-5.10/rtc-at91sam9-fix-of-node-leak-in-probe-error-path.patch-26252 deleted file mode 100644 index 77b598219e8..00000000000 --- a/queue-5.10/rtc-at91sam9-fix-of-node-leak-in-probe-error-path.patch-26252 +++ /dev/null @@ -1,37 +0,0 @@ -From 5b708029a103cf96a12595f381de535455b2cb71 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 25 Aug 2024 20:31:03 +0200 -Subject: rtc: at91sam9: fix OF node leak in probe() error path - -From: Krzysztof Kozlowski - -[ 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 -Link: https://lore.kernel.org/r/20240825183103.102904-1-krzysztof.kozlowski@linaro.org -Signed-off-by: Alexandre Belloni -Signed-off-by: Sasha Levin ---- - 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 - diff --git a/queue-5.10/series b/queue-5.10/series index 9dc5501f31f..f99d1450069 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -164,8 +164,6 @@ drivers-media-dvb-frontends-rtl2832-fix-an-out-of-bo.patch 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 @@ -430,21 +428,15 @@ arm64-add-cortex-715-cpu-part-definition.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