From: Greg Kroah-Hartman Date: Sat, 9 Sep 2023 12:56:40 +0000 (+0100) Subject: 6.1-stable patches X-Git-Tag: v6.1.53~85 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=868af09cc54e980649b557788d18020adaf557de;p=thirdparty%2Fkernel%2Fstable-queue.git 6.1-stable patches added patches: backlight-bd6107-compare-against-struct-fb_info.device.patch backlight-gpio_backlight-compare-against-struct-fb_info.device.patch backlight-lv5207lp-compare-against-struct-fb_info.device.patch drm-amd-display-register-edp_backlight_control-for-dcn301.patch i3c-master-svc-fix-probe-failure-when-no-i3c-device-exist.patch io_uring-break-iopolling-on-signal.patch io_uring-break-out-of-iowq-iopoll-on-teardown.patch loongarch-mm-add-p-d_leaf-definitions.patch xarray-do-not-return-sibling-entries-from-xa_load.patch xtensa-pmu-fix-base-address-for-the-newer-hardware.patch --- diff --git a/queue-6.1/backlight-bd6107-compare-against-struct-fb_info.device.patch b/queue-6.1/backlight-bd6107-compare-against-struct-fb_info.device.patch new file mode 100644 index 00000000000..2decbea705b --- /dev/null +++ b/queue-6.1/backlight-bd6107-compare-against-struct-fb_info.device.patch @@ -0,0 +1,48 @@ +From 992bdddaabfba19bdc77c1c7a4977b2aa41ec891 Mon Sep 17 00:00:00 2001 +From: Thomas Zimmermann +Date: Tue, 13 Jun 2023 13:06:36 +0200 +Subject: backlight/bd6107: Compare against struct fb_info.device + +From: Thomas Zimmermann + +commit 992bdddaabfba19bdc77c1c7a4977b2aa41ec891 upstream. + +Struct bd6107_platform_data refers to a platform device within +the Linux device hierarchy. The test in bd6107_backlight_check_fb() +compares it against the fbdev device in struct fb_info.dev, which +is different. Fix the test by comparing to struct fb_info.device. + +Fixes a bug in the backlight driver and prepares fbdev for making +struct fb_info.dev optional. + +v2: + * move renames into separate patch (Javier, Sam, Michael) + +Fixes: 67b43e590415 ("backlight: Add ROHM BD6107 backlight driver") +Signed-off-by: Thomas Zimmermann +Cc: Laurent Pinchart +Cc: Lee Jones +Cc: Daniel Thompson +Cc: Jingoo Han +Cc: dri-devel@lists.freedesktop.org +Cc: # v3.12+ +Reviewed-by: Javier Martinez Canillas +Reviewed-by: Sam Ravnborg +Reviewed-by: Daniel Thompson +Link: https://patchwork.freedesktop.org/patch/msgid/20230613110953.24176-2-tzimmermann@suse.de +Signed-off-by: Greg Kroah-Hartman +--- + drivers/video/backlight/bd6107.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/video/backlight/bd6107.c ++++ b/drivers/video/backlight/bd6107.c +@@ -104,7 +104,7 @@ static int bd6107_backlight_check_fb(str + { + struct bd6107 *bd = bl_get_data(backlight); + +- return bd->pdata->fbdev == NULL || bd->pdata->fbdev == info->dev; ++ return bd->pdata->fbdev == NULL || bd->pdata->fbdev == info->device; + } + + static const struct backlight_ops bd6107_backlight_ops = { diff --git a/queue-6.1/backlight-gpio_backlight-compare-against-struct-fb_info.device.patch b/queue-6.1/backlight-gpio_backlight-compare-against-struct-fb_info.device.patch new file mode 100644 index 00000000000..961070b9445 --- /dev/null +++ b/queue-6.1/backlight-gpio_backlight-compare-against-struct-fb_info.device.patch @@ -0,0 +1,50 @@ +From 7b91d017f77c1bda56f27c2f4bbb70de7c6eca08 Mon Sep 17 00:00:00 2001 +From: Thomas Zimmermann +Date: Tue, 13 Jun 2023 13:06:38 +0200 +Subject: backlight/gpio_backlight: Compare against struct fb_info.device + +From: Thomas Zimmermann + +commit 7b91d017f77c1bda56f27c2f4bbb70de7c6eca08 upstream. + +Struct gpio_backlight_platform_data refers to a platform device within +the Linux device hierarchy. The test in gpio_backlight_check_fb() +compares it against the fbdev device in struct fb_info.dev, which +is different. Fix the test by comparing to struct fb_info.device. + +Fixes a bug in the backlight driver and prepares fbdev for making +struct fb_info.dev optional. + +v2: + * move renames into separate patch (Javier, Sam, Michael) + +Signed-off-by: Thomas Zimmermann +Fixes: 8b770e3c9824 ("backlight: Add GPIO-based backlight driver") +Cc: Laurent Pinchart +Cc: Rich Felker +Cc: John Paul Adrian Glaubitz +Cc: Lee Jones +Cc: Daniel Thompson +Cc: Jingoo Han +Cc: linux-sh@vger.kernel.org +Cc: dri-devel@lists.freedesktop.org +Cc: # v3.12+ +Reviewed-by: Sam Ravnborg +Reviewed-by: Daniel Thompson +Link: https://patchwork.freedesktop.org/patch/msgid/20230613110953.24176-4-tzimmermann@suse.de +Signed-off-by: Greg Kroah-Hartman +--- + drivers/video/backlight/gpio_backlight.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/video/backlight/gpio_backlight.c ++++ b/drivers/video/backlight/gpio_backlight.c +@@ -35,7 +35,7 @@ static int gpio_backlight_check_fb(struc + { + struct gpio_backlight *gbl = bl_get_data(bl); + +- return gbl->fbdev == NULL || gbl->fbdev == info->dev; ++ return gbl->fbdev == NULL || gbl->fbdev == info->device; + } + + static const struct backlight_ops gpio_backlight_ops = { diff --git a/queue-6.1/backlight-lv5207lp-compare-against-struct-fb_info.device.patch b/queue-6.1/backlight-lv5207lp-compare-against-struct-fb_info.device.patch new file mode 100644 index 00000000000..2e5b9e38c82 --- /dev/null +++ b/queue-6.1/backlight-lv5207lp-compare-against-struct-fb_info.device.patch @@ -0,0 +1,52 @@ +From 1ca8819320fd84e7d95b04e7668efc5f9fe9fa5c Mon Sep 17 00:00:00 2001 +From: Thomas Zimmermann +Date: Tue, 13 Jun 2023 13:06:40 +0200 +Subject: backlight/lv5207lp: Compare against struct fb_info.device + +From: Thomas Zimmermann + +commit 1ca8819320fd84e7d95b04e7668efc5f9fe9fa5c upstream. + +Struct lv5207lp_platform_data refers to a platform device within +the Linux device hierarchy. The test in lv5207lp_backlight_check_fb() +compares it against the fbdev device in struct fb_info.dev, which +is different. Fix the test by comparing to struct fb_info.device. + +Fixes a bug in the backlight driver and prepares fbdev for making +struct fb_info.dev optional. + +v2: + * move renames into separate patch (Javier, Sam, Michael) + +Fixes: 82e5c40d88f9 ("backlight: Add Sanyo LV5207LP backlight driver") +Signed-off-by: Thomas Zimmermann +Cc: Laurent Pinchart +Cc: Yoshinori Sato +Cc: Rich Felker +Cc: John Paul Adrian Glaubitz +Cc: Lee Jones +Cc: Daniel Thompson +Cc: Jingoo Han +Cc: linux-sh@vger.kernel.org +Cc: dri-devel@lists.freedesktop.org +Cc: # v3.12+ +Reviewed-by: Javier Martinez Canillas +Reviewed-by: Sam Ravnborg +Reviewed-by: Daniel Thompson +Link: https://patchwork.freedesktop.org/patch/msgid/20230613110953.24176-6-tzimmermann@suse.de +Signed-off-by: Greg Kroah-Hartman +--- + drivers/video/backlight/lv5207lp.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/video/backlight/lv5207lp.c ++++ b/drivers/video/backlight/lv5207lp.c +@@ -67,7 +67,7 @@ static int lv5207lp_backlight_check_fb(s + { + struct lv5207lp *lv = bl_get_data(backlight); + +- return lv->pdata->fbdev == NULL || lv->pdata->fbdev == info->dev; ++ return lv->pdata->fbdev == NULL || lv->pdata->fbdev == info->device; + } + + static const struct backlight_ops lv5207lp_backlight_ops = { diff --git a/queue-6.1/drm-amd-display-register-edp_backlight_control-for-dcn301.patch b/queue-6.1/drm-amd-display-register-edp_backlight_control-for-dcn301.patch new file mode 100644 index 00000000000..10b02545743 --- /dev/null +++ b/queue-6.1/drm-amd-display-register-edp_backlight_control-for-dcn301.patch @@ -0,0 +1,43 @@ +From 1611917f39bee1abfc01501238db8ac19649042d Mon Sep 17 00:00:00 2001 +From: Hamza Mahfooz +Date: Tue, 22 Aug 2023 12:31:09 -0400 +Subject: drm/amd/display: register edp_backlight_control() for DCN301 + +From: Hamza Mahfooz + +commit 1611917f39bee1abfc01501238db8ac19649042d upstream. + +As made mention of in commit 099303e9a9bd ("drm/amd/display: eDP +intermittent black screen during PnP"), we need to turn off the +display's backlight before powering off an eDP display. Not doing so +will result in undefined behaviour according to the eDP spec. So, set +DCN301's edp_backlight_control() function pointer to +dce110_edp_backlight_control(). + +Cc: stable@vger.kernel.org +Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2765 +Fixes: 9c75891feef0 ("drm/amd/display: rework recent update PHY state commit") +Suggested-by: Swapnil Patel +Reviewed-by: Harry Wentland +Signed-off-by: Hamza Mahfooz +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman +--- + drivers/gpu/drm/amd/display/dc/dcn301/dcn301_init.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/gpu/drm/amd/display/dc/dcn301/dcn301_init.c b/drivers/gpu/drm/amd/display/dc/dcn301/dcn301_init.c +index 257df8660b4c..61205cdbe2d5 100644 +--- a/drivers/gpu/drm/amd/display/dc/dcn301/dcn301_init.c ++++ b/drivers/gpu/drm/amd/display/dc/dcn301/dcn301_init.c +@@ -75,6 +75,7 @@ static const struct hw_sequencer_funcs dcn301_funcs = { + .get_hw_state = dcn10_get_hw_state, + .clear_status_bits = dcn10_clear_status_bits, + .wait_for_mpcc_disconnect = dcn10_wait_for_mpcc_disconnect, ++ .edp_backlight_control = dce110_edp_backlight_control, + .edp_power_control = dce110_edp_power_control, + .edp_wait_for_hpd_ready = dce110_edp_wait_for_hpd_ready, + .set_cursor_position = dcn10_set_cursor_position, +-- +2.42.0 + diff --git a/queue-6.1/i3c-master-svc-fix-probe-failure-when-no-i3c-device-exist.patch b/queue-6.1/i3c-master-svc-fix-probe-failure-when-no-i3c-device-exist.patch new file mode 100644 index 00000000000..156f6a3439a --- /dev/null +++ b/queue-6.1/i3c-master-svc-fix-probe-failure-when-no-i3c-device-exist.patch @@ -0,0 +1,66 @@ +From 6e13d6528be2f7e801af63c8153b87293f25d736 Mon Sep 17 00:00:00 2001 +From: Frank Li +Date: Thu, 31 Aug 2023 10:13:24 -0400 +Subject: i3c: master: svc: fix probe failure when no i3c device exist + +From: Frank Li + +commit 6e13d6528be2f7e801af63c8153b87293f25d736 upstream. + +I3C masters are expected to support hot-join. This means at initialization +time we might not yet discover any device and this should not be treated +as a fatal error. + +During the DAA procedure which happens at probe time, if no device has +joined, all CCC will be NACKed (from a bus perspective). This leads to an +early return with an error code which fails the probe of the master. + +Let's avoid this by just telling the core through an I3C_ERROR_M2 +return command code that no device was discovered, which is a valid +situation. This way the master will no longer bail out and fail to probe +for a wrong reason. + +Cc: stable@vger.kernel.org +Fixes: dd3c52846d59 ("i3c: master: svc: Add Silvaco I3C master driver") +Signed-off-by: Frank Li +Acked-by: Miquel Raynal +Link: https://lore.kernel.org/r/20230831141324.2841525-1-Frank.Li@nxp.com +Signed-off-by: Alexandre Belloni +Signed-off-by: Greg Kroah-Hartman +--- + drivers/i3c/master/svc-i3c-master.c | 14 ++++++++++++-- + 1 file changed, 12 insertions(+), 2 deletions(-) + +--- a/drivers/i3c/master/svc-i3c-master.c ++++ b/drivers/i3c/master/svc-i3c-master.c +@@ -782,6 +782,10 @@ static int svc_i3c_master_do_daa_locked( + */ + break; + } else if (SVC_I3C_MSTATUS_NACKED(reg)) { ++ /* No I3C devices attached */ ++ if (dev_nb == 0) ++ break; ++ + /* + * A slave device nacked the address, this is + * allowed only once, DAA will be stopped and +@@ -1251,11 +1255,17 @@ static int svc_i3c_master_send_ccc_cmd(s + { + struct svc_i3c_master *master = to_svc_i3c_master(m); + bool broadcast = cmd->id < 0x80; ++ int ret; + + if (broadcast) +- return svc_i3c_master_send_bdcast_ccc_cmd(master, cmd); ++ ret = svc_i3c_master_send_bdcast_ccc_cmd(master, cmd); + else +- return svc_i3c_master_send_direct_ccc_cmd(master, cmd); ++ ret = svc_i3c_master_send_direct_ccc_cmd(master, cmd); ++ ++ if (ret) ++ cmd->err = I3C_ERROR_M2; ++ ++ return ret; + } + + static int svc_i3c_master_priv_xfers(struct i3c_dev_desc *dev, diff --git a/queue-6.1/io_uring-break-iopolling-on-signal.patch b/queue-6.1/io_uring-break-iopolling-on-signal.patch new file mode 100644 index 00000000000..5024b947649 --- /dev/null +++ b/queue-6.1/io_uring-break-iopolling-on-signal.patch @@ -0,0 +1,35 @@ +From dc314886cb3d0e4ab2858003e8de2917f8a3ccbd Mon Sep 17 00:00:00 2001 +From: Pavel Begunkov +Date: Wed, 9 Aug 2023 16:20:21 +0100 +Subject: io_uring: break iopolling on signal + +From: Pavel Begunkov + +commit dc314886cb3d0e4ab2858003e8de2917f8a3ccbd upstream. + +Don't keep spinning iopoll with a signal set. It'll eventually return +back, e.g. by virtue of need_resched(), but it's not a nice user +experience. + +Cc: stable@vger.kernel.org +Fixes: def596e9557c9 ("io_uring: support for IO polling") +Signed-off-by: Pavel Begunkov +Link: https://lore.kernel.org/r/eeba551e82cad12af30c3220125eb6cb244cc94c.1691594339.git.asml.silence@gmail.com +Signed-off-by: Jens Axboe +Signed-off-by: Greg Kroah-Hartman +--- + io_uring/io_uring.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/io_uring/io_uring.c ++++ b/io_uring/io_uring.c +@@ -1457,6 +1457,9 @@ static int io_iopoll_check(struct io_rin + break; + nr_events += ret; + ret = 0; ++ ++ if (task_sigpending(current)) ++ return -EINTR; + } while (nr_events < min && !need_resched()); + + return ret; diff --git a/queue-6.1/io_uring-break-out-of-iowq-iopoll-on-teardown.patch b/queue-6.1/io_uring-break-out-of-iowq-iopoll-on-teardown.patch new file mode 100644 index 00000000000..3a6d657f750 --- /dev/null +++ b/queue-6.1/io_uring-break-out-of-iowq-iopoll-on-teardown.patch @@ -0,0 +1,66 @@ +From 45500dc4e01c167ee063f3dcc22f51ced5b2b1e9 Mon Sep 17 00:00:00 2001 +From: Pavel Begunkov +Date: Thu, 7 Sep 2023 13:50:07 +0100 +Subject: io_uring: break out of iowq iopoll on teardown + +From: Pavel Begunkov + +commit 45500dc4e01c167ee063f3dcc22f51ced5b2b1e9 upstream. + +io-wq will retry iopoll even when it failed with -EAGAIN. If that +races with task exit, which sets TIF_NOTIFY_SIGNAL for all its workers, +such workers might potentially infinitely spin retrying iopoll again and +again and each time failing on some allocation / waiting / etc. Don't +keep spinning if io-wq is dying. + +Fixes: 561fb04a6a225 ("io_uring: replace workqueue usage with io-wq") +Cc: stable@vger.kernel.org +Signed-off-by: Pavel Begunkov +Signed-off-by: Jens Axboe +Signed-off-by: Greg Kroah-Hartman +--- + io_uring/io-wq.c | 10 ++++++++++ + io_uring/io-wq.h | 1 + + io_uring/io_uring.c | 2 ++ + 3 files changed, 13 insertions(+) + +--- a/io_uring/io-wq.c ++++ b/io_uring/io-wq.c +@@ -181,6 +181,16 @@ static void io_worker_ref_put(struct io_ + complete(&wq->worker_done); + } + ++bool io_wq_worker_stopped(void) ++{ ++ struct io_worker *worker = current->worker_private; ++ ++ if (WARN_ON_ONCE(!io_wq_current_is_worker())) ++ return true; ++ ++ return test_bit(IO_WQ_BIT_EXIT, &worker->wq->state); ++} ++ + static void io_worker_cancel_cb(struct io_worker *worker) + { + struct io_wqe_acct *acct = io_wqe_get_acct(worker); +--- a/io_uring/io-wq.h ++++ b/io_uring/io-wq.h +@@ -52,6 +52,7 @@ void io_wq_hash_work(struct io_wq_work * + + int io_wq_cpu_affinity(struct io_wq *wq, cpumask_var_t mask); + int io_wq_max_workers(struct io_wq *wq, int *new_count); ++bool io_wq_worker_stopped(void); + + static inline bool io_wq_is_hashed(struct io_wq_work *work) + { +--- a/io_uring/io_uring.c ++++ b/io_uring/io_uring.c +@@ -1823,6 +1823,8 @@ fail: + if (!needs_poll) { + if (!(req->ctx->flags & IORING_SETUP_IOPOLL)) + break; ++ if (io_wq_worker_stopped()) ++ break; + cond_resched(); + continue; + } diff --git a/queue-6.1/loongarch-mm-add-p-d_leaf-definitions.patch b/queue-6.1/loongarch-mm-add-p-d_leaf-definitions.patch new file mode 100644 index 00000000000..3bf6b58da8c --- /dev/null +++ b/queue-6.1/loongarch-mm-add-p-d_leaf-definitions.patch @@ -0,0 +1,40 @@ +From 303be4b33562a5b689261ced1616bf16ad49efa7 Mon Sep 17 00:00:00 2001 +From: Hongchen Zhang +Date: Wed, 6 Sep 2023 22:53:09 +0800 +Subject: LoongArch: mm: Add p?d_leaf() definitions + +From: Hongchen Zhang + +commit 303be4b33562a5b689261ced1616bf16ad49efa7 upstream. + +When I do LTP test, LTP test case ksm06 caused panic at + break_ksm_pmd_entry + -> pmd_leaf (Huge page table but False) + -> pte_present (panic) + +The reason is pmd_leaf() is not defined, So like commit 501b81046701 +("mips: mm: add p?d_leaf() definitions") add p?d_leaf() definition for +LoongArch. + +Fixes: 09cfefb7fa70 ("LoongArch: Add memory management") +Cc: stable@vger.kernel.org +Acked-by: David Hildenbrand +Signed-off-by: Hongchen Zhang +Signed-off-by: Huacai Chen +Signed-off-by: Greg Kroah-Hartman +--- + arch/loongarch/include/asm/pgtable.h | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/arch/loongarch/include/asm/pgtable.h ++++ b/arch/loongarch/include/asm/pgtable.h +@@ -560,6 +560,9 @@ static inline long pmd_protnone(pmd_t pm + } + #endif /* CONFIG_NUMA_BALANCING */ + ++#define pmd_leaf(pmd) ((pmd_val(pmd) & _PAGE_HUGE) != 0) ++#define pud_leaf(pud) ((pud_val(pud) & _PAGE_HUGE) != 0) ++ + /* + * We provide our own get_unmapped area to cope with the virtual aliasing + * constraints placed on us by the cache architecture. diff --git a/queue-6.1/series b/queue-6.1/series index 3fadfd37d2b..385e749e97a 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -535,3 +535,13 @@ media-i2c-add-a-camera-sensor-top-level-menu.patch pci-rockchip-use-64-bit-mask-on-msi-64-bit-pci-address.patch ipmi_si-fix-a-memleak-in-try_smi_init.patch arm-omap2-fix-warray-bounds-warning-in-_pwrdm_state_switch.patch +xarray-do-not-return-sibling-entries-from-xa_load.patch +io_uring-break-iopolling-on-signal.patch +io_uring-break-out-of-iowq-iopoll-on-teardown.patch +backlight-gpio_backlight-compare-against-struct-fb_info.device.patch +backlight-bd6107-compare-against-struct-fb_info.device.patch +backlight-lv5207lp-compare-against-struct-fb_info.device.patch +drm-amd-display-register-edp_backlight_control-for-dcn301.patch +xtensa-pmu-fix-base-address-for-the-newer-hardware.patch +loongarch-mm-add-p-d_leaf-definitions.patch +i3c-master-svc-fix-probe-failure-when-no-i3c-device-exist.patch diff --git a/queue-6.1/xarray-do-not-return-sibling-entries-from-xa_load.patch b/queue-6.1/xarray-do-not-return-sibling-entries-from-xa_load.patch new file mode 100644 index 00000000000..e92b55ab03d --- /dev/null +++ b/queue-6.1/xarray-do-not-return-sibling-entries-from-xa_load.patch @@ -0,0 +1,150 @@ +From cbc02854331edc6dc22d8b77b6e22e38ebc7dd51 Mon Sep 17 00:00:00 2001 +From: "Matthew Wilcox (Oracle)" +Date: Wed, 26 Jul 2023 22:58:17 -0400 +Subject: XArray: Do not return sibling entries from xa_load() + +From: Matthew Wilcox (Oracle) + +commit cbc02854331edc6dc22d8b77b6e22e38ebc7dd51 upstream. + +It is possible for xa_load() to observe a sibling entry pointing to +another sibling entry. An example: + +Thread A: Thread B: + xa_store_range(xa, entry, 188, 191, gfp); +xa_load(xa, 191); +entry = xa_entry(xa, node, 63); +[entry is a sibling of 188] + xa_store_range(xa, entry, 184, 191, gfp); +if (xa_is_sibling(entry)) +offset = xa_to_sibling(entry); +entry = xa_entry(xas->xa, node, offset); +[entry is now a sibling of 184] + +It is sufficient to go around this loop until we hit a non-sibling entry. +Sibling entries always point earlier in the node, so we are guaranteed +to terminate this search. + +Signed-off-by: Matthew Wilcox (Oracle) +Fixes: 6b24ca4a1a8d ("mm: Use multi-index entries in the page cache") +Cc: stable@vger.kernel.org +Signed-off-by: Greg Kroah-Hartman +--- + lib/xarray.c | 2 - + tools/testing/radix-tree/multiorder.c | 68 +++++++++++++++++++++++++++++++++- + 2 files changed, 67 insertions(+), 3 deletions(-) + +--- a/lib/xarray.c ++++ b/lib/xarray.c +@@ -204,7 +204,7 @@ static void *xas_descend(struct xa_state + void *entry = xa_entry(xas->xa, node, offset); + + xas->xa_node = node; +- if (xa_is_sibling(entry)) { ++ while (xa_is_sibling(entry)) { + offset = xa_to_sibling(entry); + entry = xa_entry(xas->xa, node, offset); + if (node->shift && xa_is_node(entry)) +--- a/tools/testing/radix-tree/multiorder.c ++++ b/tools/testing/radix-tree/multiorder.c +@@ -159,7 +159,7 @@ void multiorder_tagged_iteration(struct + item_kill_tree(xa); + } + +-bool stop_iteration = false; ++bool stop_iteration; + + static void *creator_func(void *ptr) + { +@@ -201,6 +201,7 @@ static void multiorder_iteration_race(st + pthread_t worker_thread[num_threads]; + int i; + ++ stop_iteration = false; + pthread_create(&worker_thread[0], NULL, &creator_func, xa); + for (i = 1; i < num_threads; i++) + pthread_create(&worker_thread[i], NULL, &iterator_func, xa); +@@ -211,6 +212,61 @@ static void multiorder_iteration_race(st + item_kill_tree(xa); + } + ++static void *load_creator(void *ptr) ++{ ++ /* 'order' is set up to ensure we have sibling entries */ ++ unsigned int order; ++ struct radix_tree_root *tree = ptr; ++ int i; ++ ++ rcu_register_thread(); ++ item_insert_order(tree, 3 << RADIX_TREE_MAP_SHIFT, 0); ++ item_insert_order(tree, 2 << RADIX_TREE_MAP_SHIFT, 0); ++ for (i = 0; i < 10000; i++) { ++ for (order = 1; order < RADIX_TREE_MAP_SHIFT; order++) { ++ unsigned long index = (3 << RADIX_TREE_MAP_SHIFT) - ++ (1 << order); ++ item_insert_order(tree, index, order); ++ item_delete_rcu(tree, index); ++ } ++ } ++ rcu_unregister_thread(); ++ ++ stop_iteration = true; ++ return NULL; ++} ++ ++static void *load_worker(void *ptr) ++{ ++ unsigned long index = (3 << RADIX_TREE_MAP_SHIFT) - 1; ++ ++ rcu_register_thread(); ++ while (!stop_iteration) { ++ struct item *item = xa_load(ptr, index); ++ assert(!xa_is_internal(item)); ++ } ++ rcu_unregister_thread(); ++ ++ return NULL; ++} ++ ++static void load_race(struct xarray *xa) ++{ ++ const int num_threads = sysconf(_SC_NPROCESSORS_ONLN) * 4; ++ pthread_t worker_thread[num_threads]; ++ int i; ++ ++ stop_iteration = false; ++ pthread_create(&worker_thread[0], NULL, &load_creator, xa); ++ for (i = 1; i < num_threads; i++) ++ pthread_create(&worker_thread[i], NULL, &load_worker, xa); ++ ++ for (i = 0; i < num_threads; i++) ++ pthread_join(worker_thread[i], NULL); ++ ++ item_kill_tree(xa); ++} ++ + static DEFINE_XARRAY(array); + + void multiorder_checks(void) +@@ -218,12 +274,20 @@ void multiorder_checks(void) + multiorder_iteration(&array); + multiorder_tagged_iteration(&array); + multiorder_iteration_race(&array); ++ load_race(&array); + + radix_tree_cpu_dead(0); + } + +-int __weak main(void) ++int __weak main(int argc, char **argv) + { ++ int opt; ++ ++ while ((opt = getopt(argc, argv, "ls:v")) != -1) { ++ if (opt == 'v') ++ test_verbose++; ++ } ++ + rcu_register_thread(); + radix_tree_init(); + multiorder_checks(); diff --git a/queue-6.1/xtensa-pmu-fix-base-address-for-the-newer-hardware.patch b/queue-6.1/xtensa-pmu-fix-base-address-for-the-newer-hardware.patch new file mode 100644 index 00000000000..0b31ac007c4 --- /dev/null +++ b/queue-6.1/xtensa-pmu-fix-base-address-for-the-newer-hardware.patch @@ -0,0 +1,69 @@ +From 687eb3c42f4ad81e7c947c50e2d865f692064291 Mon Sep 17 00:00:00 2001 +From: Max Filippov +Date: Mon, 24 Jul 2023 00:58:24 -0700 +Subject: xtensa: PMU: fix base address for the newer hardware + +From: Max Filippov + +commit 687eb3c42f4ad81e7c947c50e2d865f692064291 upstream. + +With introduction of ERI access control in RG.0 base address of the PMU +unit registers has changed. Add support for the new PMU configuration. + +Cc: stable@vger.kernel.org +Signed-off-by: Max Filippov +Signed-off-by: Greg Kroah-Hartman +--- + arch/xtensa/include/asm/core.h | 9 +++++++++ + arch/xtensa/kernel/perf_event.c | 17 +++++++++++++---- + 2 files changed, 22 insertions(+), 4 deletions(-) + +--- a/arch/xtensa/include/asm/core.h ++++ b/arch/xtensa/include/asm/core.h +@@ -44,4 +44,13 @@ + #define XTENSA_STACK_ALIGNMENT 16 + #endif + ++#ifndef XCHAL_HW_MIN_VERSION ++#if defined(XCHAL_HW_MIN_VERSION_MAJOR) && defined(XCHAL_HW_MIN_VERSION_MINOR) ++#define XCHAL_HW_MIN_VERSION (XCHAL_HW_MIN_VERSION_MAJOR * 100 + \ ++ XCHAL_HW_MIN_VERSION_MINOR) ++#else ++#define XCHAL_HW_MIN_VERSION 0 ++#endif ++#endif ++ + #endif +--- a/arch/xtensa/kernel/perf_event.c ++++ b/arch/xtensa/kernel/perf_event.c +@@ -13,17 +13,26 @@ + #include + #include + ++#include + #include + #include + ++#define XTENSA_HWVERSION_RG_2015_0 260000 ++ ++#if XCHAL_HW_MIN_VERSION >= XTENSA_HWVERSION_RG_2015_0 ++#define XTENSA_PMU_ERI_BASE 0x00101000 ++#else ++#define XTENSA_PMU_ERI_BASE 0x00001000 ++#endif ++ + /* Global control/status for all perf counters */ +-#define XTENSA_PMU_PMG 0x1000 ++#define XTENSA_PMU_PMG XTENSA_PMU_ERI_BASE + /* Perf counter values */ +-#define XTENSA_PMU_PM(i) (0x1080 + (i) * 4) ++#define XTENSA_PMU_PM(i) (XTENSA_PMU_ERI_BASE + 0x80 + (i) * 4) + /* Perf counter control registers */ +-#define XTENSA_PMU_PMCTRL(i) (0x1100 + (i) * 4) ++#define XTENSA_PMU_PMCTRL(i) (XTENSA_PMU_ERI_BASE + 0x100 + (i) * 4) + /* Perf counter status registers */ +-#define XTENSA_PMU_PMSTAT(i) (0x1180 + (i) * 4) ++#define XTENSA_PMU_PMSTAT(i) (XTENSA_PMU_ERI_BASE + 0x180 + (i) * 4) + + #define XTENSA_PMU_PMG_PMEN 0x1 +