]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.1-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 20 Mar 2023 09:26:25 +0000 (10:26 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 20 Mar 2023 09:26:25 +0000 (10:26 +0100)
added patches:
cifs-generate-signkey-for-the-channel-that-s-reconnecting.patch
drm-ttm-fix-a-null-pointer-dereference.patch
firmware-xilinx-don-t-make-a-sleepable-memory-allocation-from-an-atomic-context.patch
interconnect-exynos-fix-node-leak-in-probe-pm-qos-error-path.patch
interconnect-exynos-fix-registration-race.patch
interconnect-fix-icc_provider_del-error-handling.patch
interconnect-fix-mem-leak-when-freeing-nodes.patch
interconnect-fix-provider-registration-api.patch
interconnect-imx-fix-registration-race.patch
interconnect-qcom-msm8974-fix-registration-race.patch
interconnect-qcom-osm-l3-fix-registration-race.patch
interconnect-qcom-rpm-fix-probe-child-node-error-handling.patch
interconnect-qcom-rpm-fix-registration-race.patch
interconnect-qcom-rpmh-fix-probe-child-node-error-handling.patch
interconnect-qcom-rpmh-fix-registration-race.patch
md-select-block_legacy_autoload.patch
memory-tegra-fix-interconnect-registration-race.patch
memory-tegra124-emc-fix-interconnect-registration-race.patch
memory-tegra20-emc-fix-interconnect-registration-race.patch
memory-tegra30-emc-fix-interconnect-registration-race.patch
s390-ipl-add-missing-intersection-check-to-ipl_report-handling.patch
serial-qcom-geni-fix-console-shutdown-hang.patch

23 files changed:
queue-6.1/cifs-generate-signkey-for-the-channel-that-s-reconnecting.patch [new file with mode: 0644]
queue-6.1/drm-ttm-fix-a-null-pointer-dereference.patch [new file with mode: 0644]
queue-6.1/firmware-xilinx-don-t-make-a-sleepable-memory-allocation-from-an-atomic-context.patch [new file with mode: 0644]
queue-6.1/interconnect-exynos-fix-node-leak-in-probe-pm-qos-error-path.patch [new file with mode: 0644]
queue-6.1/interconnect-exynos-fix-registration-race.patch [new file with mode: 0644]
queue-6.1/interconnect-fix-icc_provider_del-error-handling.patch [new file with mode: 0644]
queue-6.1/interconnect-fix-mem-leak-when-freeing-nodes.patch [new file with mode: 0644]
queue-6.1/interconnect-fix-provider-registration-api.patch [new file with mode: 0644]
queue-6.1/interconnect-imx-fix-registration-race.patch [new file with mode: 0644]
queue-6.1/interconnect-qcom-msm8974-fix-registration-race.patch [new file with mode: 0644]
queue-6.1/interconnect-qcom-osm-l3-fix-registration-race.patch [new file with mode: 0644]
queue-6.1/interconnect-qcom-rpm-fix-probe-child-node-error-handling.patch [new file with mode: 0644]
queue-6.1/interconnect-qcom-rpm-fix-registration-race.patch [new file with mode: 0644]
queue-6.1/interconnect-qcom-rpmh-fix-probe-child-node-error-handling.patch [new file with mode: 0644]
queue-6.1/interconnect-qcom-rpmh-fix-registration-race.patch [new file with mode: 0644]
queue-6.1/md-select-block_legacy_autoload.patch [new file with mode: 0644]
queue-6.1/memory-tegra-fix-interconnect-registration-race.patch [new file with mode: 0644]
queue-6.1/memory-tegra124-emc-fix-interconnect-registration-race.patch [new file with mode: 0644]
queue-6.1/memory-tegra20-emc-fix-interconnect-registration-race.patch [new file with mode: 0644]
queue-6.1/memory-tegra30-emc-fix-interconnect-registration-race.patch [new file with mode: 0644]
queue-6.1/s390-ipl-add-missing-intersection-check-to-ipl_report-handling.patch [new file with mode: 0644]
queue-6.1/serial-qcom-geni-fix-console-shutdown-hang.patch [new file with mode: 0644]
queue-6.1/series

diff --git a/queue-6.1/cifs-generate-signkey-for-the-channel-that-s-reconnecting.patch b/queue-6.1/cifs-generate-signkey-for-the-channel-that-s-reconnecting.patch
new file mode 100644 (file)
index 0000000..c7fec85
--- /dev/null
@@ -0,0 +1,35 @@
+From 05ce0448c3f36febd8db0ee0e9e16557f3ab5ee8 Mon Sep 17 00:00:00 2001
+From: Shyam Prasad N <sprasad@microsoft.com>
+Date: Fri, 10 Mar 2023 15:32:01 +0000
+Subject: cifs: generate signkey for the channel that's reconnecting
+
+From: Shyam Prasad N <sprasad@microsoft.com>
+
+commit 05ce0448c3f36febd8db0ee0e9e16557f3ab5ee8 upstream.
+
+Before my changes to how multichannel reconnects work, the
+primary channel was always used to do a non-binding session
+setup. With my changes, that is not the case anymore.
+Missed this place where channel at index 0 was forcibly
+updated with the signing key.
+
+Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
+Reviewed-by: Paulo Alcantara (SUSE) <pc@manguebit.com>
+Cc: stable@vger.kernel.org
+Signed-off-by: Steve French <stfrench@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ fs/cifs/smb2transport.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/fs/cifs/smb2transport.c
++++ b/fs/cifs/smb2transport.c
+@@ -425,7 +425,7 @@ generate_smb3signingkey(struct cifs_ses
+               /* safe to access primary channel, since it will never go away */
+               spin_lock(&ses->chan_lock);
+-              memcpy(ses->chans[0].signkey, ses->smb3signingkey,
++              memcpy(ses->chans[chan_index].signkey, ses->smb3signingkey,
+                      SMB3_SIGN_KEY_SIZE);
+               spin_unlock(&ses->chan_lock);
diff --git a/queue-6.1/drm-ttm-fix-a-null-pointer-dereference.patch b/queue-6.1/drm-ttm-fix-a-null-pointer-dereference.patch
new file mode 100644 (file)
index 0000000..feb501f
--- /dev/null
@@ -0,0 +1,63 @@
+From 9a9a8fe26751334b7739193a94eba741073b8a55 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= <thomas.hellstrom@linux.intel.com>
+Date: Tue, 7 Mar 2023 15:46:15 +0100
+Subject: drm/ttm: Fix a NULL pointer dereference
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Thomas Hellström <thomas.hellstrom@linux.intel.com>
+
+commit 9a9a8fe26751334b7739193a94eba741073b8a55 upstream.
+
+The LRU mechanism may look up a resource in the process of being removed
+from an object. The locking rules here are a bit unclear but it looks
+currently like res->bo assignment is protected by the LRU lock, whereas
+bo->resource is protected by the object lock, while *clearing* of
+bo->resource is also protected by the LRU lock. This means that if
+we check that bo->resource points to the LRU resource under the LRU
+lock we should be safe.
+So perform that check before deciding to swap out a bo. That avoids
+dereferencing a NULL bo->resource in ttm_bo_swapout().
+
+Fixes: 6a9b02899402 ("drm/ttm: move the LRU into resource handling v4")
+Cc: Christian König <christian.koenig@amd.com>
+Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
+Cc: Christian Koenig <christian.koenig@amd.com>
+Cc: Huang Rui <ray.huang@amd.com>
+Cc: Alex Deucher <alexander.deucher@amd.com>
+Cc: Felix Kuehling <Felix.Kuehling@amd.com>
+Cc: Philip Yang <Philip.Yang@amd.com>
+Cc: Qiang Yu <qiang.yu@amd.com>
+Cc: Matthew Auld <matthew.auld@intel.com>
+Cc: Nirmoy Das <nirmoy.das@intel.com>
+Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
+Cc: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>
+Cc: Anshuman Gupta <anshuman.gupta@intel.com>
+Cc: Arunpravin Paneer Selvam <Arunpravin.PaneerSelvam@amd.com>
+Cc: dri-devel@lists.freedesktop.org
+Cc: <stable@vger.kernel.org> # v5.19+
+Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20230307144621.10748-2-thomas.hellstrom@linux.intel.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/ttm/ttm_device.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/ttm/ttm_device.c b/drivers/gpu/drm/ttm/ttm_device.c
+index e7147e304637..b84f74807ca1 100644
+--- a/drivers/gpu/drm/ttm/ttm_device.c
++++ b/drivers/gpu/drm/ttm/ttm_device.c
+@@ -158,7 +158,7 @@ int ttm_device_swapout(struct ttm_device *bdev, struct ttm_operation_ctx *ctx,
+                       struct ttm_buffer_object *bo = res->bo;
+                       uint32_t num_pages;
+-                      if (!bo)
++                      if (!bo || bo->resource != res)
+                               continue;
+                       num_pages = PFN_UP(bo->base.size);
+-- 
+2.40.0
+
diff --git a/queue-6.1/firmware-xilinx-don-t-make-a-sleepable-memory-allocation-from-an-atomic-context.patch b/queue-6.1/firmware-xilinx-don-t-make-a-sleepable-memory-allocation-from-an-atomic-context.patch
new file mode 100644 (file)
index 0000000..d3a2c42
--- /dev/null
@@ -0,0 +1,89 @@
+From 38ed310c22e7a0fc978b1f8292136a4a4a8b3051 Mon Sep 17 00:00:00 2001
+From: Roman Gushchin <roman.gushchin@linux.dev>
+Date: Wed, 8 Mar 2023 14:26:02 -0800
+Subject: firmware: xilinx: don't make a sleepable memory allocation from an atomic context
+
+From: Roman Gushchin <roman.gushchin@linux.dev>
+
+commit 38ed310c22e7a0fc978b1f8292136a4a4a8b3051 upstream.
+
+The following issue was discovered using lockdep:
+[    6.691371] BUG: sleeping function called from invalid context at include/linux/sched/mm.h:209
+[    6.694602] in_atomic(): 1, irqs_disabled(): 128, non_block: 0, pid: 1, name: swapper/0
+[    6.702431] 2 locks held by swapper/0/1:
+[    6.706300]  #0: ffffff8800f6f188 (&dev->mutex){....}-{3:3}, at: __device_driver_lock+0x4c/0x90
+[    6.714900]  #1: ffffffc009a2abb8 (enable_lock){....}-{2:2}, at: clk_enable_lock+0x4c/0x140
+[    6.723156] irq event stamp: 304030
+[    6.726596] hardirqs last  enabled at (304029): [<ffffffc008d17ee0>] _raw_spin_unlock_irqrestore+0xc0/0xd0
+[    6.736142] hardirqs last disabled at (304030): [<ffffffc00876bc5c>] clk_enable_lock+0xfc/0x140
+[    6.744742] softirqs last  enabled at (303958): [<ffffffc0080904f0>] _stext+0x4f0/0x894
+[    6.752655] softirqs last disabled at (303951): [<ffffffc0080e53b8>] irq_exit+0x238/0x280
+[    6.760744] CPU: 1 PID: 1 Comm: swapper/0 Tainted: G     U            5.15.36 #2
+[    6.768048] Hardware name: xlnx,zynqmp (DT)
+[    6.772179] Call trace:
+[    6.774584]  dump_backtrace+0x0/0x300
+[    6.778197]  show_stack+0x18/0x30
+[    6.781465]  dump_stack_lvl+0xb8/0xec
+[    6.785077]  dump_stack+0x1c/0x38
+[    6.788345]  ___might_sleep+0x1a8/0x2a0
+[    6.792129]  __might_sleep+0x6c/0xd0
+[    6.795655]  kmem_cache_alloc_trace+0x270/0x3d0
+[    6.800127]  do_feature_check_call+0x100/0x220
+[    6.804513]  zynqmp_pm_invoke_fn+0x8c/0xb0
+[    6.808555]  zynqmp_pm_clock_getstate+0x90/0xe0
+[    6.813027]  zynqmp_pll_is_enabled+0x8c/0x120
+[    6.817327]  zynqmp_pll_enable+0x38/0xc0
+[    6.821197]  clk_core_enable+0x144/0x400
+[    6.825067]  clk_core_enable+0xd4/0x400
+[    6.828851]  clk_core_enable+0xd4/0x400
+[    6.832635]  clk_core_enable+0xd4/0x400
+[    6.836419]  clk_core_enable+0xd4/0x400
+[    6.840203]  clk_core_enable+0xd4/0x400
+[    6.843987]  clk_core_enable+0xd4/0x400
+[    6.847771]  clk_core_enable+0xd4/0x400
+[    6.851555]  clk_core_enable_lock+0x24/0x50
+[    6.855683]  clk_enable+0x24/0x40
+[    6.858952]  fclk_probe+0x84/0xf0
+[    6.862220]  platform_probe+0x8c/0x110
+[    6.865918]  really_probe+0x110/0x5f0
+[    6.869530]  __driver_probe_device+0xcc/0x210
+[    6.873830]  driver_probe_device+0x64/0x140
+[    6.877958]  __driver_attach+0x114/0x1f0
+[    6.881828]  bus_for_each_dev+0xe8/0x160
+[    6.885698]  driver_attach+0x34/0x50
+[    6.889224]  bus_add_driver+0x228/0x300
+[    6.893008]  driver_register+0xc0/0x1e0
+[    6.896792]  __platform_driver_register+0x44/0x60
+[    6.901436]  fclk_driver_init+0x1c/0x28
+[    6.905220]  do_one_initcall+0x104/0x590
+[    6.909091]  kernel_init_freeable+0x254/0x2bc
+[    6.913390]  kernel_init+0x24/0x130
+[    6.916831]  ret_from_fork+0x10/0x20
+
+Fix it by passing the GFP_ATOMIC gfp flag for the corresponding
+memory allocation.
+
+Fixes: acfdd18591ea ("firmware: xilinx: Use hash-table for api feature check")
+Cc: stable <stable@kernel.org>
+Signed-off-by: Roman Gushchin <roman.gushchin@linux.dev>
+Cc: Amit Sunil Dhamne <amit.sunil.dhamne@xilinx.com>
+Cc: Michal Simek <michal.simek@xilinx.com>
+Cc: linux-arm-kernel@lists.infradead.org
+Cc: linux-kernel@vger.kernel.org
+Link: https://lore.kernel.org/r/20230308222602.123866-1-roman.gushchin@linux.dev
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/firmware/xilinx/zynqmp.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/firmware/xilinx/zynqmp.c
++++ b/drivers/firmware/xilinx/zynqmp.c
+@@ -206,7 +206,7 @@ static int do_feature_check_call(const u
+       }
+       /* Add new entry if not present */
+-      feature_data = kmalloc(sizeof(*feature_data), GFP_KERNEL);
++      feature_data = kmalloc(sizeof(*feature_data), GFP_ATOMIC);
+       if (!feature_data)
+               return -ENOMEM;
diff --git a/queue-6.1/interconnect-exynos-fix-node-leak-in-probe-pm-qos-error-path.patch b/queue-6.1/interconnect-exynos-fix-node-leak-in-probe-pm-qos-error-path.patch
new file mode 100644 (file)
index 0000000..80a7c15
--- /dev/null
@@ -0,0 +1,46 @@
+From 3aab264875bf3c915ea2517fae1eec213e0b4987 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan+linaro@kernel.org>
+Date: Mon, 6 Mar 2023 08:56:42 +0100
+Subject: interconnect: exynos: fix node leak in probe PM QoS error path
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+commit 3aab264875bf3c915ea2517fae1eec213e0b4987 upstream.
+
+Make sure to add the newly allocated interconnect node to the provider
+before adding the PM QoS request so that the node is freed on errors.
+
+Fixes: 2f95b9d5cf0b ("interconnect: Add generic interconnect driver for Exynos SoCs")
+Cc: stable@vger.kernel.org      # 5.11
+Cc: Sylwester Nawrocki <s.nawrocki@samsung.com>
+Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Link: https://lore.kernel.org/r/20230306075651.2449-15-johan+linaro@kernel.org
+Signed-off-by: Georgi Djakov <djakov@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/interconnect/samsung/exynos.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/interconnect/samsung/exynos.c
++++ b/drivers/interconnect/samsung/exynos.c
+@@ -149,6 +149,9 @@ static int exynos_generic_icc_probe(stru
+                                &priv->bus_clk_ratio))
+               priv->bus_clk_ratio = EXYNOS_ICC_DEFAULT_BUS_CLK_RATIO;
++      icc_node->data = priv;
++      icc_node_add(icc_node, provider);
++
+       /*
+        * Register a PM QoS request for the parent (devfreq) device.
+        */
+@@ -157,9 +160,6 @@ static int exynos_generic_icc_probe(stru
+       if (ret < 0)
+               goto err_node_del;
+-      icc_node->data = priv;
+-      icc_node_add(icc_node, provider);
+-
+       icc_parent_node = exynos_icc_get_parent(bus_dev->of_node);
+       if (IS_ERR(icc_parent_node)) {
+               ret = PTR_ERR(icc_parent_node);
diff --git a/queue-6.1/interconnect-exynos-fix-registration-race.patch b/queue-6.1/interconnect-exynos-fix-registration-race.patch
new file mode 100644 (file)
index 0000000..7710fc6
--- /dev/null
@@ -0,0 +1,86 @@
+From c9e46ca612cfbb0cf890f7ae7389b742e90efe64 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan+linaro@kernel.org>
+Date: Mon, 6 Mar 2023 08:56:43 +0100
+Subject: interconnect: exynos: fix registration race
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+commit c9e46ca612cfbb0cf890f7ae7389b742e90efe64 upstream.
+
+The current interconnect provider registration interface is inherently
+racy as nodes are not added until the after adding the provider. This
+can specifically cause racing DT lookups to trigger a NULL-pointer
+deference when either a NULL pointer or not fully initialised node is
+returned from exynos_generic_icc_xlate().
+
+Switch to using the new API where the provider is not registered until
+after it has been fully initialised.
+
+Fixes: 2f95b9d5cf0b ("interconnect: Add generic interconnect driver for Exynos SoCs")
+Cc: stable@vger.kernel.org      # 5.11
+Cc: Sylwester Nawrocki <s.nawrocki@samsung.com>
+Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Link: https://lore.kernel.org/r/20230306075651.2449-16-johan+linaro@kernel.org
+Signed-off-by: Georgi Djakov <djakov@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/interconnect/samsung/exynos.c |   20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+--- a/drivers/interconnect/samsung/exynos.c
++++ b/drivers/interconnect/samsung/exynos.c
+@@ -98,12 +98,13 @@ static int exynos_generic_icc_remove(str
+       struct exynos_icc_priv *priv = platform_get_drvdata(pdev);
+       struct icc_node *parent_node, *node = priv->node;
++      icc_provider_deregister(&priv->provider);
++
+       parent_node = exynos_icc_get_parent(priv->dev->parent->of_node);
+       if (parent_node && !IS_ERR(parent_node))
+               icc_link_destroy(node, parent_node);
+       icc_nodes_remove(&priv->provider);
+-      icc_provider_del(&priv->provider);
+       return 0;
+ }
+@@ -132,15 +133,11 @@ static int exynos_generic_icc_probe(stru
+       provider->inter_set = true;
+       provider->data = priv;
+-      ret = icc_provider_add(provider);
+-      if (ret < 0)
+-              return ret;
++      icc_provider_init(provider);
+       icc_node = icc_node_create(pdev->id);
+-      if (IS_ERR(icc_node)) {
+-              ret = PTR_ERR(icc_node);
+-              goto err_prov_del;
+-      }
++      if (IS_ERR(icc_node))
++              return PTR_ERR(icc_node);
+       priv->node = icc_node;
+       icc_node->name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%pOFn",
+@@ -171,14 +168,17 @@ static int exynos_generic_icc_probe(stru
+                       goto err_pmqos_del;
+       }
++      ret = icc_provider_register(provider);
++      if (ret < 0)
++              goto err_pmqos_del;
++
+       return 0;
+ err_pmqos_del:
+       dev_pm_qos_remove_request(&priv->qos_req);
+ err_node_del:
+       icc_nodes_remove(provider);
+-err_prov_del:
+-      icc_provider_del(provider);
++
+       return ret;
+ }
diff --git a/queue-6.1/interconnect-fix-icc_provider_del-error-handling.patch b/queue-6.1/interconnect-fix-icc_provider_del-error-handling.patch
new file mode 100644 (file)
index 0000000..8e5695b
--- /dev/null
@@ -0,0 +1,56 @@
+From e0e7089bf9a87bc5e3997422e4e24563424f9018 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan+linaro@kernel.org>
+Date: Mon, 6 Mar 2023 08:56:30 +0100
+Subject: interconnect: fix icc_provider_del() error handling
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+commit e0e7089bf9a87bc5e3997422e4e24563424f9018 upstream.
+
+The interconnect framework currently expects that providers are only
+removed when there are no users and after all nodes have been removed.
+
+There is currently nothing that guarantees this to be the case and the
+framework does not do any reference counting, but refusing to remove the
+provider is never correct as that would leave a dangling pointer to a
+resource that is about to be released in the global provider list (e.g.
+accessible through debugfs).
+
+Replace the current sanity checks with WARN_ON() so that the provider is
+always removed.
+
+Fixes: 11f1ceca7031 ("interconnect: Add generic on-chip interconnect API")
+Cc: stable@vger.kernel.org      # 5.1: 680f8666baf6: interconnect: Make icc_provider_del() return void
+Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Tested-by: Luca Ceresoli <luca.ceresoli@bootlin.com> # i.MX8MP MSC SM2-MB-EP1 Board
+Link: https://lore.kernel.org/r/20230306075651.2449-3-johan+linaro@kernel.org
+Signed-off-by: Georgi Djakov <djakov@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/interconnect/core.c |   14 ++------------
+ 1 file changed, 2 insertions(+), 12 deletions(-)
+
+--- a/drivers/interconnect/core.c
++++ b/drivers/interconnect/core.c
+@@ -1061,18 +1061,8 @@ EXPORT_SYMBOL_GPL(icc_provider_add);
+ void icc_provider_del(struct icc_provider *provider)
+ {
+       mutex_lock(&icc_lock);
+-      if (provider->users) {
+-              pr_warn("interconnect provider still has %d users\n",
+-                      provider->users);
+-              mutex_unlock(&icc_lock);
+-              return;
+-      }
+-
+-      if (!list_empty(&provider->nodes)) {
+-              pr_warn("interconnect provider still has nodes\n");
+-              mutex_unlock(&icc_lock);
+-              return;
+-      }
++      WARN_ON(provider->users);
++      WARN_ON(!list_empty(&provider->nodes));
+       list_del(&provider->provider_list);
+       mutex_unlock(&icc_lock);
diff --git a/queue-6.1/interconnect-fix-mem-leak-when-freeing-nodes.patch b/queue-6.1/interconnect-fix-mem-leak-when-freeing-nodes.patch
new file mode 100644 (file)
index 0000000..82ae96f
--- /dev/null
@@ -0,0 +1,37 @@
+From a5904f415e1af72fa8fe6665aa4f554dc2099a95 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan+linaro@kernel.org>
+Date: Mon, 6 Mar 2023 08:56:29 +0100
+Subject: interconnect: fix mem leak when freeing nodes
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+commit a5904f415e1af72fa8fe6665aa4f554dc2099a95 upstream.
+
+The node link array is allocated when adding links to a node but is not
+deallocated when nodes are destroyed.
+
+Fixes: 11f1ceca7031 ("interconnect: Add generic on-chip interconnect API")
+Cc: stable@vger.kernel.org      # 5.1
+Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Tested-by: Luca Ceresoli <luca.ceresoli@bootlin.com> # i.MX8MP MSC SM2-MB-EP1 Board
+Link: https://lore.kernel.org/r/20230306075651.2449-2-johan+linaro@kernel.org
+Signed-off-by: Georgi Djakov <djakov@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/interconnect/core.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/interconnect/core.c
++++ b/drivers/interconnect/core.c
+@@ -850,6 +850,10 @@ void icc_node_destroy(int id)
+       mutex_unlock(&icc_lock);
++      if (!node)
++              return;
++
++      kfree(node->links);
+       kfree(node);
+ }
+ EXPORT_SYMBOL_GPL(icc_node_destroy);
diff --git a/queue-6.1/interconnect-fix-provider-registration-api.patch b/queue-6.1/interconnect-fix-provider-registration-api.patch
new file mode 100644 (file)
index 0000000..464edef
--- /dev/null
@@ -0,0 +1,149 @@
+From eb59eca0d8ac15f8c1b7f1cd35999455a90292c0 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan+linaro@kernel.org>
+Date: Mon, 6 Mar 2023 08:56:31 +0100
+Subject: interconnect: fix provider registration API
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+commit eb59eca0d8ac15f8c1b7f1cd35999455a90292c0 upstream.
+
+The current interconnect provider interface is inherently racy as
+providers are expected to be added before being fully initialised.
+
+Specifically, nodes are currently not added and the provider data is not
+initialised until after registering the provider which can cause racing
+DT lookups to fail.
+
+Add a new provider API which will be used to fix up the interconnect
+drivers.
+
+The old API is reimplemented using the new interface and will be removed
+once all drivers have been fixed.
+
+Fixes: 11f1ceca7031 ("interconnect: Add generic on-chip interconnect API")
+Fixes: 87e3031b6fbd ("interconnect: Allow endpoints translation via DT")
+Cc: stable@vger.kernel.org      # 5.1
+Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Tested-by: Luca Ceresoli <luca.ceresoli@bootlin.com> # i.MX8MP MSC SM2-MB-EP1 Board
+Link: https://lore.kernel.org/r/20230306075651.2449-4-johan+linaro@kernel.org
+Signed-off-by: Georgi Djakov <djakov@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/interconnect/core.c           |   52 ++++++++++++++++++++++++----------
+ include/linux/interconnect-provider.h |   12 +++++++
+ 2 files changed, 50 insertions(+), 14 deletions(-)
+
+--- a/drivers/interconnect/core.c
++++ b/drivers/interconnect/core.c
+@@ -1029,44 +1029,68 @@ int icc_nodes_remove(struct icc_provider
+ EXPORT_SYMBOL_GPL(icc_nodes_remove);
+ /**
+- * icc_provider_add() - add a new interconnect provider
+- * @provider: the interconnect provider that will be added into topology
++ * icc_provider_init() - initialize a new interconnect provider
++ * @provider: the interconnect provider to initialize
++ *
++ * Must be called before adding nodes to the provider.
++ */
++void icc_provider_init(struct icc_provider *provider)
++{
++      WARN_ON(!provider->set);
++
++      INIT_LIST_HEAD(&provider->nodes);
++}
++EXPORT_SYMBOL_GPL(icc_provider_init);
++
++/**
++ * icc_provider_register() - register a new interconnect provider
++ * @provider: the interconnect provider to register
+  *
+  * Return: 0 on success, or an error code otherwise
+  */
+-int icc_provider_add(struct icc_provider *provider)
++int icc_provider_register(struct icc_provider *provider)
+ {
+-      if (WARN_ON(!provider->set))
+-              return -EINVAL;
+       if (WARN_ON(!provider->xlate && !provider->xlate_extended))
+               return -EINVAL;
+       mutex_lock(&icc_lock);
+-
+-      INIT_LIST_HEAD(&provider->nodes);
+       list_add_tail(&provider->provider_list, &icc_providers);
+-
+       mutex_unlock(&icc_lock);
+-      dev_dbg(provider->dev, "interconnect provider added to topology\n");
++      dev_dbg(provider->dev, "interconnect provider registered\n");
+       return 0;
+ }
+-EXPORT_SYMBOL_GPL(icc_provider_add);
++EXPORT_SYMBOL_GPL(icc_provider_register);
+ /**
+- * icc_provider_del() - delete previously added interconnect provider
+- * @provider: the interconnect provider that will be removed from topology
++ * icc_provider_deregister() - deregister an interconnect provider
++ * @provider: the interconnect provider to deregister
+  */
+-void icc_provider_del(struct icc_provider *provider)
++void icc_provider_deregister(struct icc_provider *provider)
+ {
+       mutex_lock(&icc_lock);
+       WARN_ON(provider->users);
+-      WARN_ON(!list_empty(&provider->nodes));
+       list_del(&provider->provider_list);
+       mutex_unlock(&icc_lock);
+ }
++EXPORT_SYMBOL_GPL(icc_provider_deregister);
++
++int icc_provider_add(struct icc_provider *provider)
++{
++      icc_provider_init(provider);
++
++      return icc_provider_register(provider);
++}
++EXPORT_SYMBOL_GPL(icc_provider_add);
++
++void icc_provider_del(struct icc_provider *provider)
++{
++      WARN_ON(!list_empty(&provider->nodes));
++
++      icc_provider_deregister(provider);
++}
+ EXPORT_SYMBOL_GPL(icc_provider_del);
+ static int of_count_icc_providers(struct device_node *np)
+--- a/include/linux/interconnect-provider.h
++++ b/include/linux/interconnect-provider.h
+@@ -122,6 +122,9 @@ int icc_link_destroy(struct icc_node *sr
+ void icc_node_add(struct icc_node *node, struct icc_provider *provider);
+ void icc_node_del(struct icc_node *node);
+ int icc_nodes_remove(struct icc_provider *provider);
++void icc_provider_init(struct icc_provider *provider);
++int icc_provider_register(struct icc_provider *provider);
++void icc_provider_deregister(struct icc_provider *provider);
+ int icc_provider_add(struct icc_provider *provider);
+ void icc_provider_del(struct icc_provider *provider);
+ struct icc_node_data *of_icc_get_from_provider(struct of_phandle_args *spec);
+@@ -167,6 +170,15 @@ static inline int icc_nodes_remove(struc
+       return -ENOTSUPP;
+ }
++static inline void icc_provider_init(struct icc_provider *provider) { }
++
++static inline int icc_provider_register(struct icc_provider *provider)
++{
++      return -ENOTSUPP;
++}
++
++static inline void icc_provider_deregister(struct icc_provider *provider) { }
++
+ static inline int icc_provider_add(struct icc_provider *provider)
+ {
+       return -ENOTSUPP;
diff --git a/queue-6.1/interconnect-imx-fix-registration-race.patch b/queue-6.1/interconnect-imx-fix-registration-race.patch
new file mode 100644 (file)
index 0000000..3f8869e
--- /dev/null
@@ -0,0 +1,79 @@
+From 9fbd35520f1f7f3cbe1873939a27ad9b009f21f9 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan+linaro@kernel.org>
+Date: Mon, 6 Mar 2023 08:56:32 +0100
+Subject: interconnect: imx: fix registration race
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+commit 9fbd35520f1f7f3cbe1873939a27ad9b009f21f9 upstream.
+
+The current interconnect provider registration interface is inherently
+racy as nodes are not added until the after adding the provider. This
+can specifically cause racing DT lookups to fail.
+
+Switch to using the new API where the provider is not registered until
+after it has been fully initialised.
+
+Fixes: f0d8048525d7 ("interconnect: Add imx core driver")
+Cc: stable@vger.kernel.org      # 5.8
+Cc: Alexandre Bailon <abailon@baylibre.com>
+Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Tested-by: Luca Ceresoli <luca.ceresoli@bootlin.com> # i.MX8MP MSC SM2-MB-EP1 Board
+Link: https://lore.kernel.org/r/20230306075651.2449-5-johan+linaro@kernel.org
+Signed-off-by: Georgi Djakov <djakov@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/interconnect/imx/imx.c |   20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+--- a/drivers/interconnect/imx/imx.c
++++ b/drivers/interconnect/imx/imx.c
+@@ -295,6 +295,9 @@ int imx_icc_register(struct platform_dev
+       provider->xlate = of_icc_xlate_onecell;
+       provider->data = data;
+       provider->dev = dev->parent;
++
++      icc_provider_init(provider);
++
+       platform_set_drvdata(pdev, imx_provider);
+       if (settings) {
+@@ -306,20 +309,18 @@ int imx_icc_register(struct platform_dev
+               }
+       }
+-      ret = icc_provider_add(provider);
+-      if (ret) {
+-              dev_err(dev, "error adding interconnect provider: %d\n", ret);
++      ret = imx_icc_register_nodes(imx_provider, nodes, nodes_count, settings);
++      if (ret)
+               return ret;
+-      }
+-      ret = imx_icc_register_nodes(imx_provider, nodes, nodes_count, settings);
++      ret = icc_provider_register(provider);
+       if (ret)
+-              goto provider_del;
++              goto err_unregister_nodes;
+       return 0;
+-provider_del:
+-      icc_provider_del(provider);
++err_unregister_nodes:
++      imx_icc_unregister_nodes(&imx_provider->provider);
+       return ret;
+ }
+ EXPORT_SYMBOL_GPL(imx_icc_register);
+@@ -328,9 +329,8 @@ void imx_icc_unregister(struct platform_
+ {
+       struct imx_icc_provider *imx_provider = platform_get_drvdata(pdev);
++      icc_provider_deregister(&imx_provider->provider);
+       imx_icc_unregister_nodes(&imx_provider->provider);
+-
+-      icc_provider_del(&imx_provider->provider);
+ }
+ EXPORT_SYMBOL_GPL(imx_icc_unregister);
diff --git a/queue-6.1/interconnect-qcom-msm8974-fix-registration-race.patch b/queue-6.1/interconnect-qcom-msm8974-fix-registration-race.patch
new file mode 100644 (file)
index 0000000..b81e1a2
--- /dev/null
@@ -0,0 +1,92 @@
+From bfe7bcd2b9f5215de2144f097f39971180e7ea54 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan+linaro@kernel.org>
+Date: Mon, 6 Mar 2023 08:56:39 +0100
+Subject: interconnect: qcom: msm8974: fix registration race
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+commit bfe7bcd2b9f5215de2144f097f39971180e7ea54 upstream.
+
+The current interconnect provider registration interface is inherently
+racy as nodes are not added until the after adding the provider. This
+can specifically cause racing DT lookups to fail.
+
+Switch to using the new API where the provider is not registered until
+after it has been fully initialised.
+
+Fixes: 4e60a9568dc6 ("interconnect: qcom: add msm8974 driver")
+Cc: stable@vger.kernel.org      # 5.5
+Reviewed-by: Brian Masney <bmasney@redhat.com>
+Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Link: https://lore.kernel.org/r/20230306075651.2449-12-johan+linaro@kernel.org
+Signed-off-by: Georgi Djakov <djakov@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/interconnect/qcom/msm8974.c |   20 ++++++++------------
+ 1 file changed, 8 insertions(+), 12 deletions(-)
+
+--- a/drivers/interconnect/qcom/msm8974.c
++++ b/drivers/interconnect/qcom/msm8974.c
+@@ -692,7 +692,6 @@ static int msm8974_icc_probe(struct plat
+               return ret;
+       provider = &qp->provider;
+-      INIT_LIST_HEAD(&provider->nodes);
+       provider->dev = dev;
+       provider->set = msm8974_icc_set;
+       provider->aggregate = icc_std_aggregate;
+@@ -700,11 +699,7 @@ static int msm8974_icc_probe(struct plat
+       provider->data = data;
+       provider->get_bw = msm8974_get_bw;
+-      ret = icc_provider_add(provider);
+-      if (ret) {
+-              dev_err(dev, "error adding interconnect provider: %d\n", ret);
+-              goto err_disable_clks;
+-      }
++      icc_provider_init(provider);
+       for (i = 0; i < num_nodes; i++) {
+               size_t j;
+@@ -712,7 +707,7 @@ static int msm8974_icc_probe(struct plat
+               node = icc_node_create(qnodes[i]->id);
+               if (IS_ERR(node)) {
+                       ret = PTR_ERR(node);
+-                      goto err_del_icc;
++                      goto err_remove_nodes;
+               }
+               node->name = qnodes[i]->name;
+@@ -729,15 +724,16 @@ static int msm8974_icc_probe(struct plat
+       }
+       data->num_nodes = num_nodes;
++      ret = icc_provider_register(provider);
++      if (ret)
++              goto err_remove_nodes;
++
+       platform_set_drvdata(pdev, qp);
+       return 0;
+-err_del_icc:
++err_remove_nodes:
+       icc_nodes_remove(provider);
+-      icc_provider_del(provider);
+-
+-err_disable_clks:
+       clk_bulk_disable_unprepare(qp->num_clks, qp->bus_clks);
+       return ret;
+@@ -747,9 +743,9 @@ static int msm8974_icc_remove(struct pla
+ {
+       struct msm8974_icc_provider *qp = platform_get_drvdata(pdev);
++      icc_provider_deregister(&qp->provider);
+       icc_nodes_remove(&qp->provider);
+       clk_bulk_disable_unprepare(qp->num_clks, qp->bus_clks);
+-      icc_provider_del(&qp->provider);
+       return 0;
+ }
diff --git a/queue-6.1/interconnect-qcom-osm-l3-fix-registration-race.patch b/queue-6.1/interconnect-qcom-osm-l3-fix-registration-race.patch
new file mode 100644 (file)
index 0000000..cc90982
--- /dev/null
@@ -0,0 +1,77 @@
+From 174941ed28a3573db075da46d95b4dcf9d4c49c2 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan+linaro@kernel.org>
+Date: Mon, 6 Mar 2023 08:56:33 +0100
+Subject: interconnect: qcom: osm-l3: fix registration race
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+commit 174941ed28a3573db075da46d95b4dcf9d4c49c2 upstream.
+
+The current interconnect provider registration interface is inherently
+racy as nodes are not added until the after adding the provider. This
+can specifically cause racing DT lookups to fail:
+
+       of_icc_xlate_onecell: invalid index 0
+       cpu cpu0: error -EINVAL: error finding src node
+       cpu cpu0: dev_pm_opp_of_find_icc_paths: Unable to get path0: -22
+       qcom-cpufreq-hw: probe of 18591000.cpufreq failed with error -22
+
+Switch to using the new API where the provider is not registered until
+after it has been fully initialised.
+
+Fixes: 5bc9900addaf ("interconnect: qcom: Add OSM L3 interconnect provider support")
+Cc: stable@vger.kernel.org      # 5.7
+Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Link: https://lore.kernel.org/r/20230306075651.2449-6-johan+linaro@kernel.org
+Signed-off-by: Georgi Djakov <djakov@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/interconnect/qcom/osm-l3.c |   14 ++++++--------
+ 1 file changed, 6 insertions(+), 8 deletions(-)
+
+--- a/drivers/interconnect/qcom/osm-l3.c
++++ b/drivers/interconnect/qcom/osm-l3.c
+@@ -216,8 +216,8 @@ static int qcom_osm_l3_remove(struct pla
+ {
+       struct qcom_osm_l3_icc_provider *qp = platform_get_drvdata(pdev);
++      icc_provider_deregister(&qp->provider);
+       icc_nodes_remove(&qp->provider);
+-      icc_provider_del(&qp->provider);
+       return 0;
+ }
+@@ -303,14 +303,9 @@ static int qcom_osm_l3_probe(struct plat
+       provider->set = qcom_osm_l3_set;
+       provider->aggregate = icc_std_aggregate;
+       provider->xlate = of_icc_xlate_onecell;
+-      INIT_LIST_HEAD(&provider->nodes);
+       provider->data = data;
+-      ret = icc_provider_add(provider);
+-      if (ret) {
+-              dev_err(&pdev->dev, "error adding interconnect provider\n");
+-              return ret;
+-      }
++      icc_provider_init(provider);
+       for (i = 0; i < num_nodes; i++) {
+               size_t j;
+@@ -333,12 +328,15 @@ static int qcom_osm_l3_probe(struct plat
+       }
+       data->num_nodes = num_nodes;
++      ret = icc_provider_register(provider);
++      if (ret)
++              goto err;
++
+       platform_set_drvdata(pdev, qp);
+       return 0;
+ err:
+       icc_nodes_remove(provider);
+-      icc_provider_del(provider);
+       return ret;
+ }
diff --git a/queue-6.1/interconnect-qcom-rpm-fix-probe-child-node-error-handling.patch b/queue-6.1/interconnect-qcom-rpm-fix-probe-child-node-error-handling.patch
new file mode 100644 (file)
index 0000000..56a1a3b
--- /dev/null
@@ -0,0 +1,39 @@
+From bc463201f60803fa6bf2741d59441031cd0910e4 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan+linaro@kernel.org>
+Date: Mon, 6 Mar 2023 08:56:34 +0100
+Subject: interconnect: qcom: rpm: fix probe child-node error handling
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+commit bc463201f60803fa6bf2741d59441031cd0910e4 upstream.
+
+Make sure to clean up and release resources properly also in case probe
+fails when populating child devices.
+
+Fixes: e39bf2972c6e ("interconnect: icc-rpm: Support child NoC device probe")
+Cc: stable@vger.kernel.org      # 5.17
+Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Link: https://lore.kernel.org/r/20230306075651.2449-7-johan+linaro@kernel.org
+Signed-off-by: Georgi Djakov <djakov@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/interconnect/qcom/icc-rpm.c |    7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+--- a/drivers/interconnect/qcom/icc-rpm.c
++++ b/drivers/interconnect/qcom/icc-rpm.c
+@@ -544,8 +544,11 @@ regmap_done:
+       platform_set_drvdata(pdev, qp);
+       /* Populate child NoC devices if any */
+-      if (of_get_child_count(dev->of_node) > 0)
+-              return of_platform_populate(dev->of_node, NULL, NULL, dev);
++      if (of_get_child_count(dev->of_node) > 0) {
++              ret = of_platform_populate(dev->of_node, NULL, NULL, dev);
++              if (ret)
++                      goto err;
++      }
+       return 0;
+ err:
diff --git a/queue-6.1/interconnect-qcom-rpm-fix-registration-race.patch b/queue-6.1/interconnect-qcom-rpm-fix-registration-race.patch
new file mode 100644 (file)
index 0000000..8c7eef9
--- /dev/null
@@ -0,0 +1,103 @@
+From 90ae93d8affc1061cd87ca8ddd9a838c7d31a158 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan+linaro@kernel.org>
+Date: Mon, 6 Mar 2023 08:56:36 +0100
+Subject: interconnect: qcom: rpm: fix registration race
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+commit 90ae93d8affc1061cd87ca8ddd9a838c7d31a158 upstream.
+
+The current interconnect provider registration interface is inherently
+racy as nodes are not added until the after adding the provider. This
+can specifically cause racing DT lookups to fail.
+
+Switch to using the new API where the provider is not registered until
+after it has been fully initialised.
+
+Fixes: 62feb14ee8a3 ("interconnect: qcom: Consolidate interconnect RPM support")
+Fixes: 30c8fa3ec61a ("interconnect: qcom: Add MSM8916 interconnect provider driver")
+Cc: stable@vger.kernel.org     # 5.7
+Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
+Reviewed-by: Jun Nie <jun.nie@linaro.org>
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Link: https://lore.kernel.org/r/20230306075651.2449-9-johan+linaro@kernel.org
+Signed-off-by: Georgi Djakov <djakov@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/interconnect/qcom/icc-rpm.c |   24 ++++++++++++------------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
+
+--- a/drivers/interconnect/qcom/icc-rpm.c
++++ b/drivers/interconnect/qcom/icc-rpm.c
+@@ -506,7 +506,6 @@ regmap_done:
+       }
+       provider = &qp->provider;
+-      INIT_LIST_HEAD(&provider->nodes);
+       provider->dev = dev;
+       provider->set = qcom_icc_set;
+       provider->pre_aggregate = qcom_icc_pre_bw_aggregate;
+@@ -514,12 +513,7 @@ regmap_done:
+       provider->xlate_extended = qcom_icc_xlate_extended;
+       provider->data = data;
+-      ret = icc_provider_add(provider);
+-      if (ret) {
+-              dev_err(dev, "error adding interconnect provider: %d\n", ret);
+-              clk_bulk_disable_unprepare(qp->num_clks, qp->bus_clks);
+-              return ret;
+-      }
++      icc_provider_init(provider);
+       for (i = 0; i < num_nodes; i++) {
+               size_t j;
+@@ -527,7 +521,7 @@ regmap_done:
+               node = icc_node_create(qnodes[i]->id);
+               if (IS_ERR(node)) {
+                       ret = PTR_ERR(node);
+-                      goto err;
++                      goto err_remove_nodes;
+               }
+               node->name = qnodes[i]->name;
+@@ -541,20 +535,26 @@ regmap_done:
+       }
+       data->num_nodes = num_nodes;
++      ret = icc_provider_register(provider);
++      if (ret)
++              goto err_remove_nodes;
++
+       platform_set_drvdata(pdev, qp);
+       /* Populate child NoC devices if any */
+       if (of_get_child_count(dev->of_node) > 0) {
+               ret = of_platform_populate(dev->of_node, NULL, NULL, dev);
+               if (ret)
+-                      goto err;
++                      goto err_deregister_provider;
+       }
+       return 0;
+-err:
++
++err_deregister_provider:
++      icc_provider_deregister(provider);
++err_remove_nodes:
+       icc_nodes_remove(provider);
+       clk_bulk_disable_unprepare(qp->num_clks, qp->bus_clks);
+-      icc_provider_del(provider);
+       return ret;
+ }
+@@ -564,9 +564,9 @@ int qnoc_remove(struct platform_device *
+ {
+       struct qcom_icc_provider *qp = platform_get_drvdata(pdev);
++      icc_provider_deregister(&qp->provider);
+       icc_nodes_remove(&qp->provider);
+       clk_bulk_disable_unprepare(qp->num_clks, qp->bus_clks);
+-      icc_provider_del(&qp->provider);
+       return 0;
+ }
diff --git a/queue-6.1/interconnect-qcom-rpmh-fix-probe-child-node-error-handling.patch b/queue-6.1/interconnect-qcom-rpmh-fix-probe-child-node-error-handling.patch
new file mode 100644 (file)
index 0000000..d8fadda
--- /dev/null
@@ -0,0 +1,45 @@
+From 6570d1d46eeade82965ccc4a3ab7d778898ef4bf Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan+linaro@kernel.org>
+Date: Mon, 6 Mar 2023 08:56:37 +0100
+Subject: interconnect: qcom: rpmh: fix probe child-node error handling
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+commit 6570d1d46eeade82965ccc4a3ab7d778898ef4bf upstream.
+
+Make sure to clean up and release resources properly also in case probe
+fails when populating child devices.
+
+Fixes: 57eb14779dfd ("interconnect: qcom: icc-rpmh: Support child NoC device probe")
+Cc: stable@vger.kernel.org      # 6.0
+Cc: Luca Weiss <luca.weiss@fairphone.com>
+Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Link: https://lore.kernel.org/r/20230306075651.2449-10-johan+linaro@kernel.org
+Signed-off-by: Georgi Djakov <djakov@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/interconnect/qcom/icc-rpmh.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/interconnect/qcom/icc-rpmh.c b/drivers/interconnect/qcom/icc-rpmh.c
+index fd17291c61eb..5168bbf3d92f 100644
+--- a/drivers/interconnect/qcom/icc-rpmh.c
++++ b/drivers/interconnect/qcom/icc-rpmh.c
+@@ -235,8 +235,11 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev)
+       platform_set_drvdata(pdev, qp);
+       /* Populate child NoC devices if any */
+-      if (of_get_child_count(dev->of_node) > 0)
+-              return of_platform_populate(dev->of_node, NULL, NULL, dev);
++      if (of_get_child_count(dev->of_node) > 0) {
++              ret = of_platform_populate(dev->of_node, NULL, NULL, dev);
++              if (ret)
++                      goto err;
++      }
+       return 0;
+ err:
+-- 
+2.40.0
+
diff --git a/queue-6.1/interconnect-qcom-rpmh-fix-registration-race.patch b/queue-6.1/interconnect-qcom-rpmh-fix-registration-race.patch
new file mode 100644 (file)
index 0000000..e9926e0
--- /dev/null
@@ -0,0 +1,102 @@
+From 74240a5bebd48d8b843c6d0f1acfaa722a5abeb7 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan+linaro@kernel.org>
+Date: Mon, 6 Mar 2023 08:56:38 +0100
+Subject: interconnect: qcom: rpmh: fix registration race
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+commit 74240a5bebd48d8b843c6d0f1acfaa722a5abeb7 upstream.
+
+The current interconnect provider registration interface is inherently
+racy as nodes are not added until the after adding the provider. This
+can specifically cause racing DT lookups to fail.
+
+Switch to using the new API where the provider is not registered until
+after it has been fully initialised.
+
+Fixes: 976daac4a1c5 ("interconnect: qcom: Consolidate interconnect RPMh support")
+Cc: stable@vger.kernel.org      # 5.7
+Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Link: https://lore.kernel.org/r/20230306075651.2449-11-johan+linaro@kernel.org
+Signed-off-by: Georgi Djakov <djakov@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/interconnect/qcom/icc-rpmh.c |   25 +++++++++++++++----------
+ 1 file changed, 15 insertions(+), 10 deletions(-)
+
+--- a/drivers/interconnect/qcom/icc-rpmh.c
++++ b/drivers/interconnect/qcom/icc-rpmh.c
+@@ -192,9 +192,10 @@ int qcom_icc_rpmh_probe(struct platform_
+       provider->pre_aggregate = qcom_icc_pre_aggregate;
+       provider->aggregate = qcom_icc_aggregate;
+       provider->xlate_extended = qcom_icc_xlate_extended;
+-      INIT_LIST_HEAD(&provider->nodes);
+       provider->data = data;
++      icc_provider_init(provider);
++
+       qp->dev = dev;
+       qp->bcms = desc->bcms;
+       qp->num_bcms = desc->num_bcms;
+@@ -203,10 +204,6 @@ int qcom_icc_rpmh_probe(struct platform_
+       if (IS_ERR(qp->voter))
+               return PTR_ERR(qp->voter);
+-      ret = icc_provider_add(provider);
+-      if (ret)
+-              return ret;
+-
+       for (i = 0; i < qp->num_bcms; i++)
+               qcom_icc_bcm_init(qp->bcms[i], dev);
+@@ -218,7 +215,7 @@ int qcom_icc_rpmh_probe(struct platform_
+               node = icc_node_create(qn->id);
+               if (IS_ERR(node)) {
+                       ret = PTR_ERR(node);
+-                      goto err;
++                      goto err_remove_nodes;
+               }
+               node->name = qn->name;
+@@ -232,19 +229,27 @@ int qcom_icc_rpmh_probe(struct platform_
+       }
+       data->num_nodes = num_nodes;
++
++      ret = icc_provider_register(provider);
++      if (ret)
++              goto err_remove_nodes;
++
+       platform_set_drvdata(pdev, qp);
+       /* Populate child NoC devices if any */
+       if (of_get_child_count(dev->of_node) > 0) {
+               ret = of_platform_populate(dev->of_node, NULL, NULL, dev);
+               if (ret)
+-                      goto err;
++                      goto err_deregister_provider;
+       }
+       return 0;
+-err:
++
++err_deregister_provider:
++      icc_provider_deregister(provider);
++err_remove_nodes:
+       icc_nodes_remove(provider);
+-      icc_provider_del(provider);
++
+       return ret;
+ }
+ EXPORT_SYMBOL_GPL(qcom_icc_rpmh_probe);
+@@ -253,8 +258,8 @@ int qcom_icc_rpmh_remove(struct platform
+ {
+       struct qcom_icc_provider *qp = platform_get_drvdata(pdev);
++      icc_provider_deregister(&qp->provider);
+       icc_nodes_remove(&qp->provider);
+-      icc_provider_del(&qp->provider);
+       return 0;
+ }
diff --git a/queue-6.1/md-select-block_legacy_autoload.patch b/queue-6.1/md-select-block_legacy_autoload.patch
new file mode 100644 (file)
index 0000000..26d8350
--- /dev/null
@@ -0,0 +1,39 @@
+From 6c0f5898836c05c6d850a750ed7940ba29e4e6c5 Mon Sep 17 00:00:00 2001
+From: NeilBrown <neilb@suse.de>
+Date: Mon, 13 Mar 2023 13:29:17 -0700
+Subject: md: select BLOCK_LEGACY_AUTOLOAD
+
+From: NeilBrown <neilb@suse.de>
+
+commit 6c0f5898836c05c6d850a750ed7940ba29e4e6c5 upstream.
+
+When BLOCK_LEGACY_AUTOLOAD is not enable, mdadm is not able to
+activate new arrays unless "CREATE names=yes" appears in
+mdadm.conf
+
+As this is a regression we need to always enable BLOCK_LEGACY_AUTOLOAD
+for when MD is selected - at least until mdadm is updated and the
+updates widely available.
+
+Cc: stable@vger.kernel.org # v5.18+
+Fixes: fbdee71bb5d8 ("block: deprecate autoloading based on dev_t")
+Signed-off-by: NeilBrown <neilb@suse.de>
+Signed-off-by: Song Liu <song@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/md/Kconfig |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/md/Kconfig
++++ b/drivers/md/Kconfig
+@@ -16,6 +16,10 @@ if MD
+ config BLK_DEV_MD
+       tristate "RAID support"
+       select BLOCK_HOLDER_DEPRECATED if SYSFS
++      # BLOCK_LEGACY_AUTOLOAD requirement should be removed
++      # after relevant mdadm enhancements - to make "names=yes"
++      # the default - are widely available.
++      select BLOCK_LEGACY_AUTOLOAD
+       help
+         This driver lets you combine several hard disk partitions into one
+         logical block device. This can be used to simply append one
diff --git a/queue-6.1/memory-tegra-fix-interconnect-registration-race.patch b/queue-6.1/memory-tegra-fix-interconnect-registration-race.patch
new file mode 100644 (file)
index 0000000..a09d3d7
--- /dev/null
@@ -0,0 +1,67 @@
+From 5553055c62683ce339f9ef5fb2a26c8331485d68 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan+linaro@kernel.org>
+Date: Mon, 6 Mar 2023 08:56:45 +0100
+Subject: memory: tegra: fix interconnect registration race
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+commit 5553055c62683ce339f9ef5fb2a26c8331485d68 upstream.
+
+The current interconnect provider registration interface is inherently
+racy as nodes are not added until the after adding the provider. This
+can specifically cause racing DT lookups to fail.
+
+Switch to using the new API where the provider is not registered until
+after it has been fully initialised.
+
+Fixes: 06f079816d4c ("memory: tegra-mc: Add interconnect framework")
+Cc: stable@vger.kernel.org      # 5.11
+Cc: Dmitry Osipenko <digetx@gmail.com>
+Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Link: https://lore.kernel.org/r/20230306075651.2449-18-johan+linaro@kernel.org
+Signed-off-by: Georgi Djakov <djakov@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/memory/tegra/mc.c |   16 +++++++---------
+ 1 file changed, 7 insertions(+), 9 deletions(-)
+
+--- a/drivers/memory/tegra/mc.c
++++ b/drivers/memory/tegra/mc.c
+@@ -769,16 +769,12 @@ static int tegra_mc_interconnect_setup(s
+       mc->provider.aggregate = mc->soc->icc_ops->aggregate;
+       mc->provider.xlate_extended = mc->soc->icc_ops->xlate_extended;
+-      err = icc_provider_add(&mc->provider);
+-      if (err)
+-              return err;
++      icc_provider_init(&mc->provider);
+       /* create Memory Controller node */
+       node = icc_node_create(TEGRA_ICC_MC);
+-      if (IS_ERR(node)) {
+-              err = PTR_ERR(node);
+-              goto del_provider;
+-      }
++      if (IS_ERR(node))
++              return PTR_ERR(node);
+       node->name = "Memory Controller";
+       icc_node_add(node, &mc->provider);
+@@ -805,12 +801,14 @@ static int tegra_mc_interconnect_setup(s
+                       goto remove_nodes;
+       }
++      err = icc_provider_register(&mc->provider);
++      if (err)
++              goto remove_nodes;
++
+       return 0;
+ remove_nodes:
+       icc_nodes_remove(&mc->provider);
+-del_provider:
+-      icc_provider_del(&mc->provider);
+       return err;
+ }
diff --git a/queue-6.1/memory-tegra124-emc-fix-interconnect-registration-race.patch b/queue-6.1/memory-tegra124-emc-fix-interconnect-registration-race.patch
new file mode 100644 (file)
index 0000000..2de34b2
--- /dev/null
@@ -0,0 +1,65 @@
+From abd9f1b49cf25eebeaba193c7707355be3f48dae Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan+linaro@kernel.org>
+Date: Mon, 6 Mar 2023 08:56:46 +0100
+Subject: memory: tegra124-emc: fix interconnect registration race
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+commit abd9f1b49cf25eebeaba193c7707355be3f48dae upstream.
+
+The current interconnect provider registration interface is inherently
+racy as nodes are not added until the after adding the provider. This
+can specifically cause racing DT lookups to fail.
+
+Switch to using the new API where the provider is not registered until
+after it has been fully initialised.
+
+Fixes: 380def2d4cf2 ("memory: tegra124: Support interconnect framework")
+Cc: stable@vger.kernel.org      # 5.12
+Cc: Dmitry Osipenko <digetx@gmail.com>
+Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Link: https://lore.kernel.org/r/20230306075651.2449-19-johan+linaro@kernel.org
+Signed-off-by: Georgi Djakov <djakov@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/memory/tegra/tegra124-emc.c |   12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+--- a/drivers/memory/tegra/tegra124-emc.c
++++ b/drivers/memory/tegra/tegra124-emc.c
+@@ -1351,15 +1351,13 @@ static int tegra_emc_interconnect_init(s
+       emc->provider.aggregate = soc->icc_ops->aggregate;
+       emc->provider.xlate_extended = emc_of_icc_xlate_extended;
+-      err = icc_provider_add(&emc->provider);
+-      if (err)
+-              goto err_msg;
++      icc_provider_init(&emc->provider);
+       /* create External Memory Controller node */
+       node = icc_node_create(TEGRA_ICC_EMC);
+       if (IS_ERR(node)) {
+               err = PTR_ERR(node);
+-              goto del_provider;
++              goto err_msg;
+       }
+       node->name = "External Memory Controller";
+@@ -1380,12 +1378,14 @@ static int tegra_emc_interconnect_init(s
+       node->name = "External Memory (DRAM)";
+       icc_node_add(node, &emc->provider);
++      err = icc_provider_register(&emc->provider);
++      if (err)
++              goto remove_nodes;
++
+       return 0;
+ remove_nodes:
+       icc_nodes_remove(&emc->provider);
+-del_provider:
+-      icc_provider_del(&emc->provider);
+ err_msg:
+       dev_err(emc->dev, "failed to initialize ICC: %d\n", err);
diff --git a/queue-6.1/memory-tegra20-emc-fix-interconnect-registration-race.patch b/queue-6.1/memory-tegra20-emc-fix-interconnect-registration-race.patch
new file mode 100644 (file)
index 0000000..d959d75
--- /dev/null
@@ -0,0 +1,65 @@
+From c5587f61ec050f7e9ebb3e2da29d12af63e833d3 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan+linaro@kernel.org>
+Date: Mon, 6 Mar 2023 08:56:47 +0100
+Subject: memory: tegra20-emc: fix interconnect registration race
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+commit c5587f61ec050f7e9ebb3e2da29d12af63e833d3 upstream.
+
+The current interconnect provider registration interface is inherently
+racy as nodes are not added until the after adding the provider. This
+can specifically cause racing DT lookups to fail.
+
+Switch to using the new API where the provider is not registered until
+after it has been fully initialised.
+
+Fixes: d5ef16ba5fbe ("memory: tegra20: Support interconnect framework")
+Cc: stable@vger.kernel.org      # 5.11
+Cc: Dmitry Osipenko <digetx@gmail.com>
+Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Link: https://lore.kernel.org/r/20230306075651.2449-20-johan+linaro@kernel.org
+Signed-off-by: Georgi Djakov <djakov@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/memory/tegra/tegra20-emc.c |   12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+--- a/drivers/memory/tegra/tegra20-emc.c
++++ b/drivers/memory/tegra/tegra20-emc.c
+@@ -1034,15 +1034,13 @@ static int tegra_emc_interconnect_init(s
+       emc->provider.aggregate = soc->icc_ops->aggregate;
+       emc->provider.xlate_extended = emc_of_icc_xlate_extended;
+-      err = icc_provider_add(&emc->provider);
+-      if (err)
+-              goto err_msg;
++      icc_provider_init(&emc->provider);
+       /* create External Memory Controller node */
+       node = icc_node_create(TEGRA_ICC_EMC);
+       if (IS_ERR(node)) {
+               err = PTR_ERR(node);
+-              goto del_provider;
++              goto err_msg;
+       }
+       node->name = "External Memory Controller";
+@@ -1063,12 +1061,14 @@ static int tegra_emc_interconnect_init(s
+       node->name = "External Memory (DRAM)";
+       icc_node_add(node, &emc->provider);
++      err = icc_provider_register(&emc->provider);
++      if (err)
++              goto remove_nodes;
++
+       return 0;
+ remove_nodes:
+       icc_nodes_remove(&emc->provider);
+-del_provider:
+-      icc_provider_del(&emc->provider);
+ err_msg:
+       dev_err(emc->dev, "failed to initialize ICC: %d\n", err);
diff --git a/queue-6.1/memory-tegra30-emc-fix-interconnect-registration-race.patch b/queue-6.1/memory-tegra30-emc-fix-interconnect-registration-race.patch
new file mode 100644 (file)
index 0000000..d631ba1
--- /dev/null
@@ -0,0 +1,65 @@
+From 9db481c909dd6312ccfbdc7e343b50e41c727483 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan+linaro@kernel.org>
+Date: Mon, 6 Mar 2023 08:56:48 +0100
+Subject: memory: tegra30-emc: fix interconnect registration race
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+commit 9db481c909dd6312ccfbdc7e343b50e41c727483 upstream.
+
+The current interconnect provider registration interface is inherently
+racy as nodes are not added until the after adding the provider. This
+can specifically cause racing DT lookups to fail.
+
+Switch to using the new API where the provider is not registered until
+after it has been fully initialised.
+
+Fixes: d5ef16ba5fbe ("memory: tegra20: Support interconnect framework")
+Cc: stable@vger.kernel.org      # 5.11
+Cc: Dmitry Osipenko <digetx@gmail.com>
+Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Link: https://lore.kernel.org/r/20230306075651.2449-21-johan+linaro@kernel.org
+Signed-off-by: Georgi Djakov <djakov@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/memory/tegra/tegra30-emc.c |   12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+--- a/drivers/memory/tegra/tegra30-emc.c
++++ b/drivers/memory/tegra/tegra30-emc.c
+@@ -1546,15 +1546,13 @@ static int tegra_emc_interconnect_init(s
+       emc->provider.aggregate = soc->icc_ops->aggregate;
+       emc->provider.xlate_extended = emc_of_icc_xlate_extended;
+-      err = icc_provider_add(&emc->provider);
+-      if (err)
+-              goto err_msg;
++      icc_provider_init(&emc->provider);
+       /* create External Memory Controller node */
+       node = icc_node_create(TEGRA_ICC_EMC);
+       if (IS_ERR(node)) {
+               err = PTR_ERR(node);
+-              goto del_provider;
++              goto err_msg;
+       }
+       node->name = "External Memory Controller";
+@@ -1575,12 +1573,14 @@ static int tegra_emc_interconnect_init(s
+       node->name = "External Memory (DRAM)";
+       icc_node_add(node, &emc->provider);
++      err = icc_provider_register(&emc->provider);
++      if (err)
++              goto remove_nodes;
++
+       return 0;
+ remove_nodes:
+       icc_nodes_remove(&emc->provider);
+-del_provider:
+-      icc_provider_del(&emc->provider);
+ err_msg:
+       dev_err(emc->dev, "failed to initialize ICC: %d\n", err);
diff --git a/queue-6.1/s390-ipl-add-missing-intersection-check-to-ipl_report-handling.patch b/queue-6.1/s390-ipl-add-missing-intersection-check-to-ipl_report-handling.patch
new file mode 100644 (file)
index 0000000..dc1dc99
--- /dev/null
@@ -0,0 +1,50 @@
+From a52e5cdbe8016d4e3e6322fd93d71afddb9a5af9 Mon Sep 17 00:00:00 2001
+From: Sven Schnelle <svens@linux.ibm.com>
+Date: Tue, 7 Mar 2023 14:35:23 +0100
+Subject: s390/ipl: add missing intersection check to ipl_report handling
+
+From: Sven Schnelle <svens@linux.ibm.com>
+
+commit a52e5cdbe8016d4e3e6322fd93d71afddb9a5af9 upstream.
+
+The code which handles the ipl report is searching for a free location
+in memory where it could copy the component and certificate entries to.
+It checks for intersection between the sections required for the kernel
+and the component/certificate data area, but fails to check whether
+the data structures linking these data areas together intersect.
+
+This might cause the iplreport copy code to overwrite the iplreport
+itself. Fix this by adding two addtional intersection checks.
+
+Cc: <stable@vger.kernel.org>
+Fixes: 9641b8cc733f ("s390/ipl: read IPL report at early boot")
+Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
+Reviewed-by: Vasily Gorbik <gor@linux.ibm.com>
+Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/s390/boot/ipl_report.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/arch/s390/boot/ipl_report.c
++++ b/arch/s390/boot/ipl_report.c
+@@ -57,11 +57,19 @@ repeat:
+       if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_data.start && initrd_data.size &&
+           intersects(initrd_data.start, initrd_data.size, safe_addr, size))
+               safe_addr = initrd_data.start + initrd_data.size;
++      if (intersects(safe_addr, size, (unsigned long)comps, comps->len)) {
++              safe_addr = (unsigned long)comps + comps->len;
++              goto repeat;
++      }
+       for_each_rb_entry(comp, comps)
+               if (intersects(safe_addr, size, comp->addr, comp->len)) {
+                       safe_addr = comp->addr + comp->len;
+                       goto repeat;
+               }
++      if (intersects(safe_addr, size, (unsigned long)certs, certs->len)) {
++              safe_addr = (unsigned long)certs + certs->len;
++              goto repeat;
++      }
+       for_each_rb_entry(cert, certs)
+               if (intersects(safe_addr, size, cert->addr, cert->len)) {
+                       safe_addr = cert->addr + cert->len;
diff --git a/queue-6.1/serial-qcom-geni-fix-console-shutdown-hang.patch b/queue-6.1/serial-qcom-geni-fix-console-shutdown-hang.patch
new file mode 100644 (file)
index 0000000..77e9d12
--- /dev/null
@@ -0,0 +1,49 @@
+From 9aff74cc4e9eb841dde5fd009ed7ddca5db40e68 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan+linaro@kernel.org>
+Date: Tue, 7 Mar 2023 17:44:02 +0100
+Subject: serial: qcom-geni: fix console shutdown hang
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+commit 9aff74cc4e9eb841dde5fd009ed7ddca5db40e68 upstream.
+
+A recent commit added back the calls top stop tx and rx to shutdown()
+which had previously been removed by commit e83766334f96 ("tty: serial:
+qcom_geni_serial: No need to stop tx/rx on UART shutdown") in order to
+be able to use kgdb after stopping the getty.
+
+Not only did this again break kgdb, but it also broke serial consoles
+more generally by hanging TX when stopping the getty during reboot.
+
+The underlying problem has been there since the driver was first merged
+and fixing it is going to be a bit involved so simply stop calling the
+broken stop functions during shutdown for consoles for now.
+
+Fixes: d8aca2f96813 ("tty: serial: qcom-geni-serial: stop operations in progress at shutdown")
+Cc: stable <stable@kernel.org>
+Cc: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Reviewed-by: Douglas Anderson <dianders@chromium.org>
+Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
+Tested-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
+Reviewed-by: Andrew Halaney <ahalaney@redhat.com>
+Tested-by: Andrew Halaney <ahalaney@redhat.com> # sa8540p-ride
+Link: https://lore.kernel.org/r/20230307164405.14218-2-johan+linaro@kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/tty/serial/qcom_geni_serial.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/tty/serial/qcom_geni_serial.c
++++ b/drivers/tty/serial/qcom_geni_serial.c
+@@ -891,6 +891,10 @@ static int setup_fifos(struct qcom_geni_
+ static void qcom_geni_serial_shutdown(struct uart_port *uport)
+ {
+       disable_irq(uport->irq);
++
++      if (uart_console(uport))
++              return;
++
+       qcom_geni_serial_stop_tx(uport);
+       qcom_geni_serial_stop_rx(uport);
+ }
index 094beb1fb0e9400b1c8c534ba7a41f12ab881bc3..3153dec73df3cddb60637c0ef60bab31c442332a 100644 (file)
@@ -120,3 +120,25 @@ serial-8250_em-fix-uart-port-type.patch
 serial-8250_fsl-fix-handle_irq-locking.patch
 serial-8250-aspeed_vuart-select-regmap-instead-of-depending-on-it.patch
 tty-serial-qcom-geni-serial-stop-operations-in-progress-at-shutdown.patch
+serial-qcom-geni-fix-console-shutdown-hang.patch
+firmware-xilinx-don-t-make-a-sleepable-memory-allocation-from-an-atomic-context.patch
+memory-tegra-fix-interconnect-registration-race.patch
+memory-tegra20-emc-fix-interconnect-registration-race.patch
+memory-tegra124-emc-fix-interconnect-registration-race.patch
+memory-tegra30-emc-fix-interconnect-registration-race.patch
+drm-ttm-fix-a-null-pointer-dereference.patch
+s390-ipl-add-missing-intersection-check-to-ipl_report-handling.patch
+interconnect-fix-icc_provider_del-error-handling.patch
+interconnect-fix-provider-registration-api.patch
+interconnect-imx-fix-registration-race.patch
+interconnect-fix-mem-leak-when-freeing-nodes.patch
+interconnect-qcom-osm-l3-fix-registration-race.patch
+interconnect-qcom-rpm-fix-probe-child-node-error-handling.patch
+interconnect-qcom-rpm-fix-registration-race.patch
+interconnect-qcom-rpmh-fix-probe-child-node-error-handling.patch
+interconnect-qcom-rpmh-fix-registration-race.patch
+interconnect-qcom-msm8974-fix-registration-race.patch
+interconnect-exynos-fix-node-leak-in-probe-pm-qos-error-path.patch
+interconnect-exynos-fix-registration-race.patch
+md-select-block_legacy_autoload.patch
+cifs-generate-signkey-for-the-channel-that-s-reconnecting.patch