From 8149754623d9b2b3eea15f5c9db3b1004ffb6923 Mon Sep 17 00:00:00 2001 From: Sasha Levin Date: Sun, 30 Jul 2023 21:25:05 -0400 Subject: [PATCH] Fixes for 5.4 Signed-off-by: Sasha Levin --- ...soc-fsl_spdif-silence-output-on-stop.patch | 38 +++++ ..._ns87415-mark-ns87560_tf_read-static.patch | 42 ++++++ ...ce-code-comment-in-include-uapi-linu.patch | 50 +++++++ ...ing-reconfig_mutex-unlock-in-raid_ct.patch | 57 ++++++++ ...reno-fix-snapshot-bindless_data-size.patch | 38 +++++ ...-drop-enum-dpu_core_perf_data_bus_id.patch | 51 +++++++ ...rr_or_null-vs-null-check-in-a5xx_sub.patch | 41 ++++++ ...ake-check-for-invalid-flags-stricter.patch | 55 ++++++++ ...er-fix-wrong-stat-of-cpu_buffer-read.patch | 130 ++++++++++++++++++ queue-5.4/series | 10 ++ ...ning-in-trace_buffered_event_disable.patch | 119 ++++++++++++++++ 11 files changed, 631 insertions(+) create mode 100644 queue-5.4/asoc-fsl_spdif-silence-output-on-stop.patch create mode 100644 queue-5.4/ata-pata_ns87415-mark-ns87560_tf_read-static.patch create mode 100644 queue-5.4/block-fix-a-source-code-comment-in-include-uapi-linu.patch create mode 100644 queue-5.4/dm-raid-fix-missing-reconfig_mutex-unlock-in-raid_ct.patch create mode 100644 queue-5.4/drm-msm-adreno-fix-snapshot-bindless_data-size.patch create mode 100644 queue-5.4/drm-msm-dpu-drop-enum-dpu_core_perf_data_bus_id.patch create mode 100644 queue-5.4/drm-msm-fix-is_err_or_null-vs-null-check-in-a5xx_sub.patch create mode 100644 queue-5.4/rdma-mlx4-make-check-for-invalid-flags-stricter.patch create mode 100644 queue-5.4/ring-buffer-fix-wrong-stat-of-cpu_buffer-read.patch create mode 100644 queue-5.4/tracing-fix-warning-in-trace_buffered_event_disable.patch diff --git a/queue-5.4/asoc-fsl_spdif-silence-output-on-stop.patch b/queue-5.4/asoc-fsl_spdif-silence-output-on-stop.patch new file mode 100644 index 00000000000..5e4b0dbc208 --- /dev/null +++ b/queue-5.4/asoc-fsl_spdif-silence-output-on-stop.patch @@ -0,0 +1,38 @@ +From d52fbe7cb92eeb860b8a5f5aa6ba077969b3fa1a Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 19 Jul 2023 18:47:29 +0200 +Subject: ASoC: fsl_spdif: Silence output on stop + +From: Matus Gajdos + +[ Upstream commit 0e4c2b6b0c4a4b4014d9424c27e5e79d185229c5 ] + +Clear TX registers on stop to prevent the SPDIF interface from sending +last written word over and over again. + +Fixes: a2388a498ad2 ("ASoC: fsl: Add S/PDIF CPU DAI driver") +Signed-off-by: Matus Gajdos +Reviewed-by: Fabio Estevam +Link: https://lore.kernel.org/r/20230719164729.19969-1-matuszpd@gmail.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + sound/soc/fsl/fsl_spdif.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/sound/soc/fsl/fsl_spdif.c b/sound/soc/fsl/fsl_spdif.c +index 7858a5499ac5d..4fd4ba9972afd 100644 +--- a/sound/soc/fsl/fsl_spdif.c ++++ b/sound/soc/fsl/fsl_spdif.c +@@ -615,6 +615,8 @@ static int fsl_spdif_trigger(struct snd_pcm_substream *substream, + case SNDRV_PCM_TRIGGER_PAUSE_PUSH: + regmap_update_bits(regmap, REG_SPDIF_SCR, dmaen, 0); + regmap_update_bits(regmap, REG_SPDIF_SIE, intr, 0); ++ regmap_write(regmap, REG_SPDIF_STL, 0x0); ++ regmap_write(regmap, REG_SPDIF_STR, 0x0); + break; + default: + return -EINVAL; +-- +2.40.1 + diff --git a/queue-5.4/ata-pata_ns87415-mark-ns87560_tf_read-static.patch b/queue-5.4/ata-pata_ns87415-mark-ns87560_tf_read-static.patch new file mode 100644 index 00000000000..ad48f8fb1a9 --- /dev/null +++ b/queue-5.4/ata-pata_ns87415-mark-ns87560_tf_read-static.patch @@ -0,0 +1,42 @@ +From e0aa708be39e7b92953551abe5e30bddc8c5e35c Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 26 Jul 2023 22:33:22 +0200 +Subject: ata: pata_ns87415: mark ns87560_tf_read static + +From: Arnd Bergmann + +[ Upstream commit 3fc2febb0f8ffae354820c1772ec008733237cfa ] + +The global function triggers a warning because of the missing prototype + +drivers/ata/pata_ns87415.c:263:6: warning: no previous prototype for 'ns87560_tf_read' [-Wmissing-prototypes] + 263 | void ns87560_tf_read(struct ata_port *ap, struct ata_taskfile *tf) + +There are no other references to this, so just make it static. + +Fixes: c4b5b7b6c4423 ("pata_ns87415: Initial cut at 87415/87560 IDE support") +Reviewed-by: Sergey Shtylyov +Reviewed-by: Serge Semin +Signed-off-by: Arnd Bergmann +Signed-off-by: Damien Le Moal +Signed-off-by: Sasha Levin +--- + drivers/ata/pata_ns87415.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/ata/pata_ns87415.c b/drivers/ata/pata_ns87415.c +index 4b2ba813dcaba..491853b9f0856 100644 +--- a/drivers/ata/pata_ns87415.c ++++ b/drivers/ata/pata_ns87415.c +@@ -261,7 +261,7 @@ static u8 ns87560_check_status(struct ata_port *ap) + * LOCKING: + * Inherited from caller. + */ +-void ns87560_tf_read(struct ata_port *ap, struct ata_taskfile *tf) ++static void ns87560_tf_read(struct ata_port *ap, struct ata_taskfile *tf) + { + struct ata_ioports *ioaddr = &ap->ioaddr; + +-- +2.40.1 + diff --git a/queue-5.4/block-fix-a-source-code-comment-in-include-uapi-linu.patch b/queue-5.4/block-fix-a-source-code-comment-in-include-uapi-linu.patch new file mode 100644 index 00000000000..23bf26631b6 --- /dev/null +++ b/queue-5.4/block-fix-a-source-code-comment-in-include-uapi-linu.patch @@ -0,0 +1,50 @@ +From 2b8ed1613b987bcb0c2e98f6dd5e5d36ae1e7052 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 6 Jul 2023 13:14:12 -0700 +Subject: block: Fix a source code comment in include/uapi/linux/blkzoned.h + +From: Bart Van Assche + +[ Upstream commit e0933b526fbfd937c4a8f4e35fcdd49f0e22d411 ] + +Fix the symbolic names for zone conditions in the blkzoned.h header +file. + +Cc: Hannes Reinecke +Cc: Damien Le Moal +Fixes: 6a0cb1bc106f ("block: Implement support for zoned block devices") +Signed-off-by: Bart Van Assche +Reviewed-by: Damien Le Moal +Link: https://lore.kernel.org/r/20230706201422.3987341-1-bvanassche@acm.org +Signed-off-by: Jens Axboe +Signed-off-by: Sasha Levin +--- + include/uapi/linux/blkzoned.h | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/include/uapi/linux/blkzoned.h b/include/uapi/linux/blkzoned.h +index 498eec813494c..94649130e3d74 100644 +--- a/include/uapi/linux/blkzoned.h ++++ b/include/uapi/linux/blkzoned.h +@@ -51,13 +51,13 @@ enum blk_zone_type { + * + * The Zone Condition state machine in the ZBC/ZAC standards maps the above + * deinitions as: +- * - ZC1: Empty | BLK_ZONE_EMPTY ++ * - ZC1: Empty | BLK_ZONE_COND_EMPTY + * - ZC2: Implicit Open | BLK_ZONE_COND_IMP_OPEN + * - ZC3: Explicit Open | BLK_ZONE_COND_EXP_OPEN +- * - ZC4: Closed | BLK_ZONE_CLOSED +- * - ZC5: Full | BLK_ZONE_FULL +- * - ZC6: Read Only | BLK_ZONE_READONLY +- * - ZC7: Offline | BLK_ZONE_OFFLINE ++ * - ZC4: Closed | BLK_ZONE_COND_CLOSED ++ * - ZC5: Full | BLK_ZONE_COND_FULL ++ * - ZC6: Read Only | BLK_ZONE_COND_READONLY ++ * - ZC7: Offline | BLK_ZONE_COND_OFFLINE + * + * Conditions 0x5 to 0xC are reserved by the current ZBC/ZAC spec and should + * be considered invalid. +-- +2.40.1 + diff --git a/queue-5.4/dm-raid-fix-missing-reconfig_mutex-unlock-in-raid_ct.patch b/queue-5.4/dm-raid-fix-missing-reconfig_mutex-unlock-in-raid_ct.patch new file mode 100644 index 00000000000..90bd8d6ad48 --- /dev/null +++ b/queue-5.4/dm-raid-fix-missing-reconfig_mutex-unlock-in-raid_ct.patch @@ -0,0 +1,57 @@ +From 0b46adce3762efaa4e4c8ec66f9984cb7c827b4e Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 8 Jul 2023 17:21:51 +0800 +Subject: dm raid: fix missing reconfig_mutex unlock in raid_ctr() error paths + +From: Yu Kuai + +[ Upstream commit bae3028799dc4f1109acc4df37c8ff06f2d8f1a0 ] + +In the error paths 'bad_stripe_cache' and 'bad_check_reshape', +'reconfig_mutex' is still held after raid_ctr() returns. + +Fixes: 9dbd1aa3a81c ("dm raid: add reshaping support to the target") +Signed-off-by: Yu Kuai +Signed-off-by: Mike Snitzer +Signed-off-by: Sasha Levin +--- + drivers/md/dm-raid.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c +index 882e83d51ef43..9f05ae2b90191 100644 +--- a/drivers/md/dm-raid.c ++++ b/drivers/md/dm-raid.c +@@ -3284,15 +3284,19 @@ static int raid_ctr(struct dm_target *ti, unsigned int argc, char **argv) + /* Try to adjust the raid4/5/6 stripe cache size to the stripe size */ + if (rs_is_raid456(rs)) { + r = rs_set_raid456_stripe_cache(rs); +- if (r) ++ if (r) { ++ mddev_unlock(&rs->md); + goto bad_stripe_cache; ++ } + } + + /* Now do an early reshape check */ + if (test_bit(RT_FLAG_RESHAPE_RS, &rs->runtime_flags)) { + r = rs_check_reshape(rs); +- if (r) ++ if (r) { ++ mddev_unlock(&rs->md); + goto bad_check_reshape; ++ } + + /* Restore new, ctr requested layout to perform check */ + rs_config_restore(rs, &rs_layout); +@@ -3301,6 +3305,7 @@ static int raid_ctr(struct dm_target *ti, unsigned int argc, char **argv) + r = rs->md.pers->check_reshape(&rs->md); + if (r) { + ti->error = "Reshape check failed"; ++ mddev_unlock(&rs->md); + goto bad_check_reshape; + } + } +-- +2.40.1 + diff --git a/queue-5.4/drm-msm-adreno-fix-snapshot-bindless_data-size.patch b/queue-5.4/drm-msm-adreno-fix-snapshot-bindless_data-size.patch new file mode 100644 index 00000000000..cce8a232a1a --- /dev/null +++ b/queue-5.4/drm-msm-adreno-fix-snapshot-bindless_data-size.patch @@ -0,0 +1,38 @@ +From b6da5423bd749d0a7ac09359aee7f610042ceef4 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 11 Jul 2023 10:54:07 -0700 +Subject: drm/msm/adreno: Fix snapshot BINDLESS_DATA size + +From: Rob Clark + +[ Upstream commit bd846ceee9c478d0397428f02696602ba5eb264a ] + +The incorrect size was causing "CP | AHB bus error" when snapshotting +the GPU state on a6xx gen4 (a660 family). + +Closes: https://gitlab.freedesktop.org/drm/msm/-/issues/26 +Signed-off-by: Rob Clark +Reviewed-by: Akhil P Oommen +Fixes: 1707add81551 ("drm/msm/a6xx: Add a6xx gpu state") +Patchwork: https://patchwork.freedesktop.org/patch/546763/ +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/msm/adreno/a6xx_gpu_state.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu_state.h b/drivers/gpu/drm/msm/adreno/a6xx_gpu_state.h +index 68cccfa2870a3..9c8eb1ae4acfc 100644 +--- a/drivers/gpu/drm/msm/adreno/a6xx_gpu_state.h ++++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu_state.h +@@ -200,7 +200,7 @@ static const struct a6xx_shader_block { + SHADER(A6XX_SP_LB_3_DATA, 0x800), + SHADER(A6XX_SP_LB_4_DATA, 0x800), + SHADER(A6XX_SP_LB_5_DATA, 0x200), +- SHADER(A6XX_SP_CB_BINDLESS_DATA, 0x2000), ++ SHADER(A6XX_SP_CB_BINDLESS_DATA, 0x800), + SHADER(A6XX_SP_CB_LEGACY_DATA, 0x280), + SHADER(A6XX_SP_UAV_DATA, 0x80), + SHADER(A6XX_SP_INST_TAG, 0x80), +-- +2.40.1 + diff --git a/queue-5.4/drm-msm-dpu-drop-enum-dpu_core_perf_data_bus_id.patch b/queue-5.4/drm-msm-dpu-drop-enum-dpu_core_perf_data_bus_id.patch new file mode 100644 index 00000000000..eecee087e1e --- /dev/null +++ b/queue-5.4/drm-msm-dpu-drop-enum-dpu_core_perf_data_bus_id.patch @@ -0,0 +1,51 @@ +From f63f77a8bf2ca3db86449c621270622bc9210970 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 7 Jul 2023 22:39:32 +0300 +Subject: drm/msm/dpu: drop enum dpu_core_perf_data_bus_id + +From: Dmitry Baryshkov + +[ Upstream commit e8383f5cf1b3573ce140a80bfbfd809278ab16d6 ] + +Drop the leftover of bus-client -> interconnect conversion, the enum +dpu_core_perf_data_bus_id. + +Fixes: cb88482e2570 ("drm/msm/dpu: clean up references of DPU custom bus scaling") +Reviewed-by: Konrad Dybcio +Reviewed-by: Abhinav Kumar +Signed-off-by: Dmitry Baryshkov +Patchwork: https://patchwork.freedesktop.org/patch/546048/ +Link: https://lore.kernel.org/r/20230707193942.3806526-2-dmitry.baryshkov@linaro.org +Signed-off-by: Abhinav Kumar +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.h | 13 ------------- + 1 file changed, 13 deletions(-) + +diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.h +index cf4b9b5964c6c..cd6c3518ba021 100644 +--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.h ++++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.h +@@ -14,19 +14,6 @@ + + #define DPU_PERF_DEFAULT_MAX_CORE_CLK_RATE 412500000 + +-/** +- * enum dpu_core_perf_data_bus_id - data bus identifier +- * @DPU_CORE_PERF_DATA_BUS_ID_MNOC: DPU/MNOC data bus +- * @DPU_CORE_PERF_DATA_BUS_ID_LLCC: MNOC/LLCC data bus +- * @DPU_CORE_PERF_DATA_BUS_ID_EBI: LLCC/EBI data bus +- */ +-enum dpu_core_perf_data_bus_id { +- DPU_CORE_PERF_DATA_BUS_ID_MNOC, +- DPU_CORE_PERF_DATA_BUS_ID_LLCC, +- DPU_CORE_PERF_DATA_BUS_ID_EBI, +- DPU_CORE_PERF_DATA_BUS_ID_MAX, +-}; +- + /** + * struct dpu_core_perf_params - definition of performance parameters + * @max_per_pipe_ib: maximum instantaneous bandwidth request +-- +2.40.1 + diff --git a/queue-5.4/drm-msm-fix-is_err_or_null-vs-null-check-in-a5xx_sub.patch b/queue-5.4/drm-msm-fix-is_err_or_null-vs-null-check-in-a5xx_sub.patch new file mode 100644 index 00000000000..bb3f107f855 --- /dev/null +++ b/queue-5.4/drm-msm-fix-is_err_or_null-vs-null-check-in-a5xx_sub.patch @@ -0,0 +1,41 @@ +From 662138d9e30376b9ff5fc61f516928c77a88f3ea Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 17 Jul 2023 09:47:38 +0800 +Subject: drm/msm: Fix IS_ERR_OR_NULL() vs NULL check in a5xx_submit_in_rb() + +From: Gaosheng Cui + +[ Upstream commit 6e8a996563ecbe68e49c49abd4aaeef69f11f2dc ] + +The msm_gem_get_vaddr() returns an ERR_PTR() on failure, and a null +is catastrophic here, so we should use IS_ERR_OR_NULL() to check +the return value. + +Fixes: 6a8bd08d0465 ("drm/msm: add sudo flag to submit ioctl") +Signed-off-by: Gaosheng Cui +Reviewed-by: Dmitry Baryshkov +Reviewed-by: Abhinav Kumar +Reviewed-by: Akhil P Oommen +Patchwork: https://patchwork.freedesktop.org/patch/547712/ +Signed-off-by: Rob Clark +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c +index 593b8d83179c9..65c2c5361e5fc 100644 +--- a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c ++++ b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c +@@ -71,7 +71,7 @@ static void a5xx_submit_in_rb(struct msm_gpu *gpu, struct msm_gem_submit *submit + * since we've already mapped it once in + * submit_reloc() + */ +- if (WARN_ON(!ptr)) ++ if (WARN_ON(IS_ERR_OR_NULL(ptr))) + return; + + for (i = 0; i < dwords; i++) { +-- +2.40.1 + diff --git a/queue-5.4/rdma-mlx4-make-check-for-invalid-flags-stricter.patch b/queue-5.4/rdma-mlx4-make-check-for-invalid-flags-stricter.patch new file mode 100644 index 00000000000..6d132084092 --- /dev/null +++ b/queue-5.4/rdma-mlx4-make-check-for-invalid-flags-stricter.patch @@ -0,0 +1,55 @@ +From 099558c38135fb26e95cadbcd1f602c9818ea30c Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 29 Jun 2023 09:07:37 +0300 +Subject: RDMA/mlx4: Make check for invalid flags stricter + +From: Dan Carpenter + +[ Upstream commit d64b1ee12a168030fbb3e0aebf7bce49e9a07589 ] + +This code is trying to ensure that only the flags specified in the list +are allowed. The problem is that ucmd->rx_hash_fields_mask is a u64 and +the flags are an enum which is treated as a u32 in this context. That +means the test doesn't check whether the highest 32 bits are zero. + +Fixes: 4d02ebd9bbbd ("IB/mlx4: Fix RSS hash fields restrictions") +Signed-off-by: Dan Carpenter +Link: https://lore.kernel.org/r/233ed975-982d-422a-b498-410f71d8a101@moroto.mountain +Signed-off-by: Leon Romanovsky +Signed-off-by: Sasha Levin +--- + drivers/infiniband/hw/mlx4/qp.c | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c +index 02caf9a439cf1..395d8a99b12e4 100644 +--- a/drivers/infiniband/hw/mlx4/qp.c ++++ b/drivers/infiniband/hw/mlx4/qp.c +@@ -556,15 +556,15 @@ static int set_qp_rss(struct mlx4_ib_dev *dev, struct mlx4_ib_rss *rss_ctx, + return (-EOPNOTSUPP); + } + +- if (ucmd->rx_hash_fields_mask & ~(MLX4_IB_RX_HASH_SRC_IPV4 | +- MLX4_IB_RX_HASH_DST_IPV4 | +- MLX4_IB_RX_HASH_SRC_IPV6 | +- MLX4_IB_RX_HASH_DST_IPV6 | +- MLX4_IB_RX_HASH_SRC_PORT_TCP | +- MLX4_IB_RX_HASH_DST_PORT_TCP | +- MLX4_IB_RX_HASH_SRC_PORT_UDP | +- MLX4_IB_RX_HASH_DST_PORT_UDP | +- MLX4_IB_RX_HASH_INNER)) { ++ if (ucmd->rx_hash_fields_mask & ~(u64)(MLX4_IB_RX_HASH_SRC_IPV4 | ++ MLX4_IB_RX_HASH_DST_IPV4 | ++ MLX4_IB_RX_HASH_SRC_IPV6 | ++ MLX4_IB_RX_HASH_DST_IPV6 | ++ MLX4_IB_RX_HASH_SRC_PORT_TCP | ++ MLX4_IB_RX_HASH_DST_PORT_TCP | ++ MLX4_IB_RX_HASH_SRC_PORT_UDP | ++ MLX4_IB_RX_HASH_DST_PORT_UDP | ++ MLX4_IB_RX_HASH_INNER)) { + pr_debug("RX Hash fields_mask has unsupported mask (0x%llx)\n", + ucmd->rx_hash_fields_mask); + return (-EOPNOTSUPP); +-- +2.40.1 + diff --git a/queue-5.4/ring-buffer-fix-wrong-stat-of-cpu_buffer-read.patch b/queue-5.4/ring-buffer-fix-wrong-stat-of-cpu_buffer-read.patch new file mode 100644 index 00000000000..b50d5ac6caa --- /dev/null +++ b/queue-5.4/ring-buffer-fix-wrong-stat-of-cpu_buffer-read.patch @@ -0,0 +1,130 @@ +From f405630a7f0d80304dbf43eaaec1a4fdc84a0a7a Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 24 Jul 2023 13:40:40 +0800 +Subject: ring-buffer: Fix wrong stat of cpu_buffer->read + +From: Zheng Yejian + +[ Upstream commit 2d093282b0d4357373497f65db6a05eb0c28b7c8 ] + +When pages are removed in rb_remove_pages(), 'cpu_buffer->read' is set +to 0 in order to make sure any read iterators reset themselves. However, +this will mess 'entries' stating, see following steps: + + # cd /sys/kernel/tracing/ + # 1. Enlarge ring buffer prepare for later reducing: + # echo 20 > per_cpu/cpu0/buffer_size_kb + # 2. Write a log into ring buffer of cpu0: + # taskset -c 0 echo "hello1" > trace_marker + # 3. Read the log: + # cat per_cpu/cpu0/trace_pipe + <...>-332 [000] ..... 62.406844: tracing_mark_write: hello1 + # 4. Stop reading and see the stats, now 0 entries, and 1 event readed: + # cat per_cpu/cpu0/stats + entries: 0 + [...] + read events: 1 + # 5. Reduce the ring buffer + # echo 7 > per_cpu/cpu0/buffer_size_kb + # 6. Now entries became unexpected 1 because actually no entries!!! + # cat per_cpu/cpu0/stats + entries: 1 + [...] + read events: 0 + +To fix it, introduce 'page_removed' field to count total removed pages +since last reset, then use it to let read iterators reset themselves +instead of changing the 'read' pointer. + +Link: https://lore.kernel.org/linux-trace-kernel/20230724054040.3489499-1-zhengyejian1@huawei.com + +Cc: +Cc: +Fixes: 83f40318dab0 ("ring-buffer: Make removal of ring buffer pages atomic") +Signed-off-by: Zheng Yejian +Signed-off-by: Steven Rostedt (Google) +Signed-off-by: Sasha Levin +--- + kernel/trace/ring_buffer.c | 22 ++++++++++++---------- + 1 file changed, 12 insertions(+), 10 deletions(-) + +diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c +index afd7f3a51485e..445475c229b3a 100644 +--- a/kernel/trace/ring_buffer.c ++++ b/kernel/trace/ring_buffer.c +@@ -485,6 +485,8 @@ struct ring_buffer_per_cpu { + unsigned long read_bytes; + u64 write_stamp; + u64 read_stamp; ++ /* pages removed since last reset */ ++ unsigned long pages_removed; + /* ring buffer pages to update, > 0 to add, < 0 to remove */ + long nr_pages_to_update; + struct list_head new_pages; /* new pages to add */ +@@ -520,6 +522,7 @@ struct ring_buffer_iter { + struct buffer_page *head_page; + struct buffer_page *cache_reader_page; + unsigned long cache_read; ++ unsigned long cache_pages_removed; + u64 read_stamp; + }; + +@@ -1581,6 +1584,8 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned long nr_pages) + to_remove = rb_list_head(to_remove)->next; + head_bit |= (unsigned long)to_remove & RB_PAGE_HEAD; + } ++ /* Read iterators need to reset themselves when some pages removed */ ++ cpu_buffer->pages_removed += nr_removed; + + next_page = rb_list_head(to_remove)->next; + +@@ -1602,12 +1607,6 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned long nr_pages) + cpu_buffer->head_page = list_entry(next_page, + struct buffer_page, list); + +- /* +- * change read pointer to make sure any read iterators reset +- * themselves +- */ +- cpu_buffer->read = 0; +- + /* pages are removed, resume tracing and then free the pages */ + atomic_dec(&cpu_buffer->record_disabled); + raw_spin_unlock_irq(&cpu_buffer->reader_lock); +@@ -3659,6 +3658,7 @@ static void rb_iter_reset(struct ring_buffer_iter *iter) + + iter->cache_reader_page = iter->head_page; + iter->cache_read = cpu_buffer->read; ++ iter->cache_pages_removed = cpu_buffer->pages_removed; + + if (iter->head) + iter->read_stamp = cpu_buffer->read_stamp; +@@ -4101,12 +4101,13 @@ rb_iter_peek(struct ring_buffer_iter *iter, u64 *ts) + buffer = cpu_buffer->buffer; + + /* +- * Check if someone performed a consuming read to +- * the buffer. A consuming read invalidates the iterator +- * and we need to reset the iterator in this case. ++ * Check if someone performed a consuming read to the buffer ++ * or removed some pages from the buffer. In these cases, ++ * iterator was invalidated and we need to reset it. + */ + if (unlikely(iter->cache_read != cpu_buffer->read || +- iter->cache_reader_page != cpu_buffer->reader_page)) ++ iter->cache_reader_page != cpu_buffer->reader_page || ++ iter->cache_pages_removed != cpu_buffer->pages_removed)) + rb_iter_reset(iter); + + again: +@@ -4538,6 +4539,7 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer) + cpu_buffer->last_overrun = 0; + + rb_head_page_activate(cpu_buffer); ++ cpu_buffer->pages_removed = 0; + } + + /** +-- +2.40.1 + diff --git a/queue-5.4/series b/queue-5.4/series index 62c15a57da3..0b74f84c93b 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -42,3 +42,13 @@ net-sched-mqprio-refactor-nlattr-parsing-to-a-separa.patch net-sched-mqprio-add-extack-to-mqprio_parse_nlattr.patch net-sched-mqprio-add-length-check-for-tca_mqprio_-ma.patch benet-fix-return-value-check-in-be_lancer_xmit_worka.patch +rdma-mlx4-make-check-for-invalid-flags-stricter.patch +drm-msm-dpu-drop-enum-dpu_core_perf_data_bus_id.patch +drm-msm-adreno-fix-snapshot-bindless_data-size.patch +drm-msm-fix-is_err_or_null-vs-null-check-in-a5xx_sub.patch +asoc-fsl_spdif-silence-output-on-stop.patch +block-fix-a-source-code-comment-in-include-uapi-linu.patch +dm-raid-fix-missing-reconfig_mutex-unlock-in-raid_ct.patch +ata-pata_ns87415-mark-ns87560_tf_read-static.patch +ring-buffer-fix-wrong-stat-of-cpu_buffer-read.patch +tracing-fix-warning-in-trace_buffered_event_disable.patch diff --git a/queue-5.4/tracing-fix-warning-in-trace_buffered_event_disable.patch b/queue-5.4/tracing-fix-warning-in-trace_buffered_event_disable.patch new file mode 100644 index 00000000000..e88e18cdbdb --- /dev/null +++ b/queue-5.4/tracing-fix-warning-in-trace_buffered_event_disable.patch @@ -0,0 +1,119 @@ +From 72f4b1130d013620e192e877673eab87372b1ce0 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 26 Jul 2023 17:58:04 +0800 +Subject: tracing: Fix warning in trace_buffered_event_disable() + +From: Zheng Yejian + +[ Upstream commit dea499781a1150d285c62b26659f62fb00824fce ] + +Warning happened in trace_buffered_event_disable() at + WARN_ON_ONCE(!trace_buffered_event_ref) + + Call Trace: + ? __warn+0xa5/0x1b0 + ? trace_buffered_event_disable+0x189/0x1b0 + __ftrace_event_enable_disable+0x19e/0x3e0 + free_probe_data+0x3b/0xa0 + unregister_ftrace_function_probe_func+0x6b8/0x800 + event_enable_func+0x2f0/0x3d0 + ftrace_process_regex.isra.0+0x12d/0x1b0 + ftrace_filter_write+0xe6/0x140 + vfs_write+0x1c9/0x6f0 + [...] + +The cause of the warning is in __ftrace_event_enable_disable(), +trace_buffered_event_enable() was called once while +trace_buffered_event_disable() was called twice. +Reproduction script show as below, for analysis, see the comments: + ``` + #!/bin/bash + + cd /sys/kernel/tracing/ + + # 1. Register a 'disable_event' command, then: + # 1) SOFT_DISABLED_BIT was set; + # 2) trace_buffered_event_enable() was called first time; + echo 'cmdline_proc_show:disable_event:initcall:initcall_finish' > \ + set_ftrace_filter + + # 2. Enable the event registered, then: + # 1) SOFT_DISABLED_BIT was cleared; + # 2) trace_buffered_event_disable() was called first time; + echo 1 > events/initcall/initcall_finish/enable + + # 3. Try to call into cmdline_proc_show(), then SOFT_DISABLED_BIT was + # set again!!! + cat /proc/cmdline + + # 4. Unregister the 'disable_event' command, then: + # 1) SOFT_DISABLED_BIT was cleared again; + # 2) trace_buffered_event_disable() was called second time!!! + echo '!cmdline_proc_show:disable_event:initcall:initcall_finish' > \ + set_ftrace_filter + ``` + +To fix it, IIUC, we can change to call trace_buffered_event_enable() at +fist time soft-mode enabled, and call trace_buffered_event_disable() at +last time soft-mode disabled. + +Link: https://lore.kernel.org/linux-trace-kernel/20230726095804.920457-1-zhengyejian1@huawei.com + +Cc: +Fixes: 0fc1b09ff1ff ("tracing: Use temp buffer when filtering events") +Signed-off-by: Zheng Yejian +Signed-off-by: Steven Rostedt (Google) +Signed-off-by: Sasha Levin +--- + kernel/trace/trace_events.c | 14 ++++---------- + 1 file changed, 4 insertions(+), 10 deletions(-) + +diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c +index a0675ecc8142e..0c21da12b650c 100644 +--- a/kernel/trace/trace_events.c ++++ b/kernel/trace/trace_events.c +@@ -365,7 +365,6 @@ static int __ftrace_event_enable_disable(struct trace_event_file *file, + { + struct trace_event_call *call = file->event_call; + struct trace_array *tr = file->tr; +- unsigned long file_flags = file->flags; + int ret = 0; + int disable; + +@@ -389,6 +388,8 @@ static int __ftrace_event_enable_disable(struct trace_event_file *file, + break; + disable = file->flags & EVENT_FILE_FL_SOFT_DISABLED; + clear_bit(EVENT_FILE_FL_SOFT_MODE_BIT, &file->flags); ++ /* Disable use of trace_buffered_event */ ++ trace_buffered_event_disable(); + } else + disable = !(file->flags & EVENT_FILE_FL_SOFT_MODE); + +@@ -427,6 +428,8 @@ static int __ftrace_event_enable_disable(struct trace_event_file *file, + if (atomic_inc_return(&file->sm_ref) > 1) + break; + set_bit(EVENT_FILE_FL_SOFT_MODE_BIT, &file->flags); ++ /* Enable use of trace_buffered_event */ ++ trace_buffered_event_enable(); + } + + if (!(file->flags & EVENT_FILE_FL_ENABLED)) { +@@ -466,15 +469,6 @@ static int __ftrace_event_enable_disable(struct trace_event_file *file, + break; + } + +- /* Enable or disable use of trace_buffered_event */ +- if ((file_flags & EVENT_FILE_FL_SOFT_DISABLED) != +- (file->flags & EVENT_FILE_FL_SOFT_DISABLED)) { +- if (file->flags & EVENT_FILE_FL_SOFT_DISABLED) +- trace_buffered_event_enable(); +- else +- trace_buffered_event_disable(); +- } +- + return ret; + } + +-- +2.40.1 + -- 2.47.3