From: Sasha Levin Date: Wed, 22 Mar 2023 19:40:33 +0000 (-0400) Subject: Fixes for 6.2 X-Git-Tag: v5.15.105~85 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=716fe74e2f1b762a4d8544971aa4457937ac311b;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 6.2 Signed-off-by: Sasha Levin --- diff --git a/queue-6.2/drm-amd-display-fix-k1-k2-divider-programming-for-ph.patch b/queue-6.2/drm-amd-display-fix-k1-k2-divider-programming-for-ph.patch new file mode 100644 index 00000000000..dcf9ed7752c --- /dev/null +++ b/queue-6.2/drm-amd-display-fix-k1-k2-divider-programming-for-ph.patch @@ -0,0 +1,49 @@ +From e4d5750e5297791fee94bb24b9825115721ba55b Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 30 Jan 2023 13:07:59 -0500 +Subject: drm/amd/display: fix k1 k2 divider programming for phantom streams + +From: Aurabindo Pillai + +[ Upstream commit 3b214bb7185d8284d7d4c53e15127f69a375abf6 ] + +[Why & How] +When k1 and k2 divider programming logic is executed for a phantom +stream, the corresponding master stream should be used for the +calculation. Fix the if condition to use the master stream for checking +signal type instead of the phantom stream. + +Reviewed-by: Alvin Lee +Acked-by: Qingqing Zhuo +Signed-off-by: Aurabindo Pillai +Tested-by: Daniel Wheeler +Signed-off-by: Alex Deucher +Stable-dep-of: 709671ffb15d ("drm/amd/display: Remove OTG DIV register write for Virtual signals.") +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c +index b8767be1e4c55..e119f4f76fdc8 100644 +--- a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c ++++ b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c +@@ -1178,13 +1178,13 @@ unsigned int dcn32_calculate_dccg_k1_k2_values(struct pipe_ctx *pipe_ctx, unsign + if (is_dp_128b_132b_signal(pipe_ctx)) { + *k1_div = PIXEL_RATE_DIV_BY_1; + *k2_div = PIXEL_RATE_DIV_BY_1; +- } else if (dc_is_hdmi_tmds_signal(pipe_ctx->stream->signal) || dc_is_dvi_signal(pipe_ctx->stream->signal)) { ++ } else if (dc_is_hdmi_tmds_signal(stream->signal) || dc_is_dvi_signal(stream->signal)) { + *k1_div = PIXEL_RATE_DIV_BY_1; + if (stream->timing.pixel_encoding == PIXEL_ENCODING_YCBCR420) + *k2_div = PIXEL_RATE_DIV_BY_2; + else + *k2_div = PIXEL_RATE_DIV_BY_4; +- } else if (dc_is_dp_signal(pipe_ctx->stream->signal) || dc_is_virtual_signal(pipe_ctx->stream->signal)) { ++ } else if (dc_is_dp_signal(stream->signal) || dc_is_virtual_signal(stream->signal)) { + if (two_pix_per_container) { + *k1_div = PIXEL_RATE_DIV_BY_1; + *k2_div = PIXEL_RATE_DIV_BY_2; +-- +2.39.2 + diff --git a/queue-6.2/drm-amd-display-remove-otg-div-register-write-for-vi.patch b/queue-6.2/drm-amd-display-remove-otg-div-register-write-for-vi.patch new file mode 100644 index 00000000000..bf58c1f6660 --- /dev/null +++ b/queue-6.2/drm-amd-display-remove-otg-div-register-write-for-vi.patch @@ -0,0 +1,49 @@ +From 8cfa40f465a940e5b199001b572fcf936ce9313e Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 27 Feb 2023 18:55:07 -0500 +Subject: drm/amd/display: Remove OTG DIV register write for Virtual signals. + +From: Saaem Rizvi + +[ Upstream commit 709671ffb15dcd1b4f6afe2a9d8c67c7c4ead4a1 ] + +[WHY] +Hot plugging and then hot unplugging leads to k1 and k2 values to +change, as signal is detected as a virtual signal on hot unplug. Writing +these values to OTG_PIXEL_RATE_DIV register might cause primary display +to blank (known hw bug). + +[HOW] +No longer write k1 and k2 values to register if signal is virtual, we +have safe guards in place in the case that k1 and k2 is unassigned so +that an unknown value is not written to the register either. + +Cc: stable@vger.kernel.org +Cc: Mario Limonciello +Reviewed-by: Samson Tam +Reviewed-by: Alvin Lee +Acked-by: Qingqing Zhuo +Signed-off-by: Saaem Rizvi +Tested-by: Daniel Wheeler +Signed-off-by: Alex Deucher +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c +index e119f4f76fdc8..30d15a94f720d 100644 +--- a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c ++++ b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c +@@ -1184,7 +1184,7 @@ unsigned int dcn32_calculate_dccg_k1_k2_values(struct pipe_ctx *pipe_ctx, unsign + *k2_div = PIXEL_RATE_DIV_BY_2; + else + *k2_div = PIXEL_RATE_DIV_BY_4; +- } else if (dc_is_dp_signal(stream->signal) || dc_is_virtual_signal(stream->signal)) { ++ } else if (dc_is_dp_signal(stream->signal)) { + if (two_pix_per_container) { + *k1_div = PIXEL_RATE_DIV_BY_1; + *k2_div = PIXEL_RATE_DIV_BY_2; +-- +2.39.2 + diff --git a/queue-6.2/interconnect-qcom-osm-l3-fix-icc_onecell_data-alloca.patch b/queue-6.2/interconnect-qcom-osm-l3-fix-icc_onecell_data-alloca.patch new file mode 100644 index 00000000000..8d6f8c19ca1 --- /dev/null +++ b/queue-6.2/interconnect-qcom-osm-l3-fix-icc_onecell_data-alloca.patch @@ -0,0 +1,43 @@ +From e21bb5f068b0eea450dea2166379218b29eec260 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 5 Jan 2023 02:22:19 +0200 +Subject: interconnect: qcom: osm-l3: fix icc_onecell_data allocation + +From: Dmitry Baryshkov + +[ Upstream commit f77ebdda0ee652124061c2ac42399bb6c367e729 ] + +This is a struct with a trailing zero-length array of icc_node pointers +but it's allocated as if it were a single array of icc_nodes instead. + +Fortunately this overallocates memory rather then allocating less memory +than required. + +Fix by replacing devm_kcalloc() with devm_kzalloc() and struct_size() +macro. + +Fixes: 5bc9900addaf ("interconnect: qcom: Add OSM L3 interconnect provider support") +Signed-off-by: Dmitry Baryshkov +Link: https://lore.kernel.org/r/20230105002221.1416479-2-dmitry.baryshkov@linaro.org +Signed-off-by: Georgi Djakov +Signed-off-by: Sasha Levin +--- + drivers/interconnect/qcom/osm-l3.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/interconnect/qcom/osm-l3.c b/drivers/interconnect/qcom/osm-l3.c +index 3a1cbfe3e481f..1bafb54f14329 100644 +--- a/drivers/interconnect/qcom/osm-l3.c ++++ b/drivers/interconnect/qcom/osm-l3.c +@@ -236,7 +236,7 @@ static int qcom_osm_l3_probe(struct platform_device *pdev) + qnodes = desc->nodes; + num_nodes = desc->num_nodes; + +- data = devm_kcalloc(&pdev->dev, num_nodes, sizeof(*node), GFP_KERNEL); ++ data = devm_kzalloc(&pdev->dev, struct_size(data, nodes, num_nodes), GFP_KERNEL); + if (!data) + return -ENOMEM; + +-- +2.39.2 + diff --git a/queue-6.2/interconnect-qcom-qcm2290-fix-master_snoc_bimc_nrt.patch b/queue-6.2/interconnect-qcom-qcm2290-fix-master_snoc_bimc_nrt.patch new file mode 100644 index 00000000000..a18749895e3 --- /dev/null +++ b/queue-6.2/interconnect-qcom-qcm2290-fix-master_snoc_bimc_nrt.patch @@ -0,0 +1,43 @@ +From 75cd1f6d39ded68ccaa31b69cf2084850568d7c8 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 3 Jan 2023 15:21:20 +0100 +Subject: interconnect: qcom: qcm2290: Fix MASTER_SNOC_BIMC_NRT + +From: Konrad Dybcio + +[ Upstream commit 633a12fda6536a1a17bcea29502e777e86a4547e ] + +Due to what seems to be a copy-paste error, the _NRT master was +identical to the _RT master, which should not be the case.. Fix it +using the values available from the downstream kernel [1]. + +[1] https://android.googlesource.com/kernel/msm-extra/devicetree/+/refs/heads/android-msm-bramble-4.19-android11-qpr1/qcom/scuba-bus.dtsi#127 +Fixes: 1a14b1ac3935 ("interconnect: qcom: Add QCM2290 driver support") +Signed-off-by: Konrad Dybcio +Acked-by: Shawn Guo +Link: https://lore.kernel.org/r/20230103142120.15605-1-konrad.dybcio@linaro.org +Signed-off-by: Georgi Djakov +Signed-off-by: Sasha Levin +--- + drivers/interconnect/qcom/qcm2290.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/interconnect/qcom/qcm2290.c b/drivers/interconnect/qcom/qcm2290.c +index 0da612d6398c5..a29cdb4fac03f 100644 +--- a/drivers/interconnect/qcom/qcm2290.c ++++ b/drivers/interconnect/qcom/qcm2290.c +@@ -147,9 +147,9 @@ static struct qcom_icc_node mas_snoc_bimc_nrt = { + .name = "mas_snoc_bimc_nrt", + .buswidth = 16, + .qos.ap_owned = true, +- .qos.qos_port = 2, ++ .qos.qos_port = 3, + .qos.qos_mode = NOC_QOS_MODE_BYPASS, +- .mas_rpm_id = 163, ++ .mas_rpm_id = 164, + .slv_rpm_id = -1, + .num_links = ARRAY_SIZE(mas_snoc_bimc_nrt_links), + .links = mas_snoc_bimc_nrt_links, +-- +2.39.2 + diff --git a/queue-6.2/interconnect-qcom-sm8450-switch-to-qcom_icc_rpmh_-fu.patch b/queue-6.2/interconnect-qcom-sm8450-switch-to-qcom_icc_rpmh_-fu.patch new file mode 100644 index 00000000000..5d09c130e5f --- /dev/null +++ b/queue-6.2/interconnect-qcom-sm8450-switch-to-qcom_icc_rpmh_-fu.patch @@ -0,0 +1,141 @@ +From e9f590288b5dd2ee7c5024443c9f9280bd520cf7 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 5 Jan 2023 02:22:20 +0200 +Subject: interconnect: qcom: sm8450: switch to qcom_icc_rpmh_* function + +From: Dmitry Baryshkov + +[ Upstream commit 87e8fab1917a2b3f6e3dedfd1cdf22a1416e6676 ] + +Change sm8450 interconnect driver to use generic qcom_icc_rpmh_* +functions rather than embedding a copy of thema. This also fixes an +overallocation of memory for icc_onecell_data structure. + +Fixes: fafc114a468e ("interconnect: qcom: Add SM8450 interconnect provider driver") +Signed-off-by: Dmitry Baryshkov +Link: https://lore.kernel.org/r/20230105002221.1416479-3-dmitry.baryshkov@linaro.org +Signed-off-by: Georgi Djakov +Signed-off-by: Sasha Levin +--- + drivers/interconnect/qcom/sm8450.c | 98 +----------------------------- + 1 file changed, 2 insertions(+), 96 deletions(-) + +diff --git a/drivers/interconnect/qcom/sm8450.c b/drivers/interconnect/qcom/sm8450.c +index e3a12e3d6e061..2d7a8e7b85ec2 100644 +--- a/drivers/interconnect/qcom/sm8450.c ++++ b/drivers/interconnect/qcom/sm8450.c +@@ -1844,100 +1844,6 @@ static const struct qcom_icc_desc sm8450_system_noc = { + .num_bcms = ARRAY_SIZE(system_noc_bcms), + }; + +-static int qnoc_probe(struct platform_device *pdev) +-{ +- const struct qcom_icc_desc *desc; +- struct icc_onecell_data *data; +- struct icc_provider *provider; +- struct qcom_icc_node * const *qnodes; +- struct qcom_icc_provider *qp; +- struct icc_node *node; +- size_t num_nodes, i; +- int ret; +- +- desc = device_get_match_data(&pdev->dev); +- if (!desc) +- return -EINVAL; +- +- qnodes = desc->nodes; +- num_nodes = desc->num_nodes; +- +- qp = devm_kzalloc(&pdev->dev, sizeof(*qp), GFP_KERNEL); +- if (!qp) +- return -ENOMEM; +- +- data = devm_kcalloc(&pdev->dev, num_nodes, sizeof(*node), GFP_KERNEL); +- if (!data) +- return -ENOMEM; +- +- provider = &qp->provider; +- provider->dev = &pdev->dev; +- provider->set = qcom_icc_set; +- 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; +- +- qp->dev = &pdev->dev; +- qp->bcms = desc->bcms; +- qp->num_bcms = desc->num_bcms; +- +- qp->voter = of_bcm_voter_get(qp->dev, NULL); +- if (IS_ERR(qp->voter)) +- return PTR_ERR(qp->voter); +- +- ret = icc_provider_add(provider); +- if (ret) { +- dev_err(&pdev->dev, "error adding interconnect provider\n"); +- return ret; +- } +- +- for (i = 0; i < qp->num_bcms; i++) +- qcom_icc_bcm_init(qp->bcms[i], &pdev->dev); +- +- for (i = 0; i < num_nodes; i++) { +- size_t j; +- +- if (!qnodes[i]) +- continue; +- +- node = icc_node_create(qnodes[i]->id); +- if (IS_ERR(node)) { +- ret = PTR_ERR(node); +- goto err; +- } +- +- node->name = qnodes[i]->name; +- node->data = qnodes[i]; +- icc_node_add(node, provider); +- +- for (j = 0; j < qnodes[i]->num_links; j++) +- icc_link_create(node, qnodes[i]->links[j]); +- +- data->nodes[i] = node; +- } +- data->num_nodes = num_nodes; +- +- platform_set_drvdata(pdev, qp); +- +- return 0; +-err: +- icc_nodes_remove(provider); +- icc_provider_del(provider); +- return ret; +-} +- +-static int qnoc_remove(struct platform_device *pdev) +-{ +- struct qcom_icc_provider *qp = platform_get_drvdata(pdev); +- +- icc_nodes_remove(&qp->provider); +- icc_provider_del(&qp->provider); +- +- return 0; +-} +- + static const struct of_device_id qnoc_of_match[] = { + { .compatible = "qcom,sm8450-aggre1-noc", + .data = &sm8450_aggre1_noc}, +@@ -1966,8 +1872,8 @@ static const struct of_device_id qnoc_of_match[] = { + MODULE_DEVICE_TABLE(of, qnoc_of_match); + + static struct platform_driver qnoc_driver = { +- .probe = qnoc_probe, +- .remove = qnoc_remove, ++ .probe = qcom_icc_rpmh_probe, ++ .remove = qcom_icc_rpmh_remove, + .driver = { + .name = "qnoc-sm8450", + .of_match_table = qnoc_of_match, +-- +2.39.2 + diff --git a/queue-6.2/perf-core-fix-perf_output_begin-parameter-is-incorre.patch b/queue-6.2/perf-core-fix-perf_output_begin-parameter-is-incorre.patch new file mode 100644 index 00000000000..a2ebc4e232b --- /dev/null +++ b/queue-6.2/perf-core-fix-perf_output_begin-parameter-is-incorre.patch @@ -0,0 +1,64 @@ +From 868bebf379bfa7e8ec27c31af41e3b752fde9439 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 14 Mar 2023 04:47:35 +0000 +Subject: perf/core: Fix perf_output_begin parameter is incorrectly invoked in + perf_event_bpf_output + +From: Yang Jihong + +[ Upstream commit eb81a2ed4f52be831c9fb879752d89645a312c13 ] + +syzkaller reportes a KASAN issue with stack-out-of-bounds. +The call trace is as follows: + dump_stack+0x9c/0xd3 + print_address_description.constprop.0+0x19/0x170 + __kasan_report.cold+0x6c/0x84 + kasan_report+0x3a/0x50 + __perf_event_header__init_id+0x34/0x290 + perf_event_header__init_id+0x48/0x60 + perf_output_begin+0x4a4/0x560 + perf_event_bpf_output+0x161/0x1e0 + perf_iterate_sb_cpu+0x29e/0x340 + perf_iterate_sb+0x4c/0xc0 + perf_event_bpf_event+0x194/0x2c0 + __bpf_prog_put.constprop.0+0x55/0xf0 + __cls_bpf_delete_prog+0xea/0x120 [cls_bpf] + cls_bpf_delete_prog_work+0x1c/0x30 [cls_bpf] + process_one_work+0x3c2/0x730 + worker_thread+0x93/0x650 + kthread+0x1b8/0x210 + ret_from_fork+0x1f/0x30 + +commit 267fb27352b6 ("perf: Reduce stack usage of perf_output_begin()") +use on-stack struct perf_sample_data of the caller function. + +However, perf_event_bpf_output uses incorrect parameter to convert +small-sized data (struct perf_bpf_event) into large-sized data +(struct perf_sample_data), which causes memory overwriting occurs in +__perf_event_header__init_id. + +Fixes: 267fb27352b6 ("perf: Reduce stack usage of perf_output_begin()") +Signed-off-by: Yang Jihong +Signed-off-by: Peter Zijlstra (Intel) +Link: https://lkml.kernel.org/r/20230314044735.56551-1-yangjihong1@huawei.com +Signed-off-by: Sasha Levin +--- + kernel/events/core.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/kernel/events/core.c b/kernel/events/core.c +index 8ae8a5055e205..002eb9b9faa09 100644 +--- a/kernel/events/core.c ++++ b/kernel/events/core.c +@@ -9163,7 +9163,7 @@ static void perf_event_bpf_output(struct perf_event *event, void *data) + + perf_event_header__init_id(&bpf_event->event_id.header, + &sample, event); +- ret = perf_output_begin(&handle, data, event, ++ ret = perf_output_begin(&handle, &sample, event, + bpf_event->event_id.header.size); + if (ret) + return; +-- +2.39.2 + diff --git a/queue-6.2/perf-fix-perf_event_context-time.patch b/queue-6.2/perf-fix-perf_event_context-time.patch new file mode 100644 index 00000000000..8b4ae5cf196 --- /dev/null +++ b/queue-6.2/perf-fix-perf_event_context-time.patch @@ -0,0 +1,42 @@ +From cbc9344376ccb65ee2dfbc3b97fb83ad28343df5 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 13 Mar 2023 10:16:08 -0700 +Subject: perf: fix perf_event_context->time + +From: Song Liu + +[ Upstream commit baf1b12a67f5b24f395baca03e442ce27cab0c18 ] + +Time readers rely on perf_event_context->[time|timestamp|timeoffset] to get +accurate time_enabled and time_running for an event. The difference between +ctx->timestamp and ctx->time is the among of time when the context is not +enabled. __update_context_time(ctx, false) is used to increase timestamp, +but not time. Therefore, it should only be called in ctx_sched_in() when +EVENT_TIME was not enabled. + +Fixes: 09f5e7dc7ad7 ("perf: Fix perf_event_read_local() time") +Signed-off-by: Song Liu +Signed-off-by: Peter Zijlstra (Intel) +Acked-by: Namhyung Kim +Link: https://lkml.kernel.org/r/20230313171608.298734-1-song@kernel.org +Signed-off-by: Sasha Levin +--- + kernel/events/core.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/kernel/events/core.c b/kernel/events/core.c +index 002eb9b9faa09..fad170b475921 100644 +--- a/kernel/events/core.c ++++ b/kernel/events/core.c +@@ -3872,7 +3872,7 @@ ctx_sched_in(struct perf_event_context *ctx, enum event_type_t event_type) + if (likely(!ctx->nr_events)) + return; + +- if (is_active ^ EVENT_TIME) { ++ if (!(is_active & EVENT_TIME)) { + /* start ctx time */ + __update_context_time(ctx, false); + perf_cgroup_set_timestamp(cpuctx); +-- +2.39.2 + diff --git a/queue-6.2/series b/queue-6.2/series new file mode 100644 index 00000000000..8ca0e5511eb --- /dev/null +++ b/queue-6.2/series @@ -0,0 +1,8 @@ +interconnect-qcom-osm-l3-fix-icc_onecell_data-alloca.patch +interconnect-qcom-sm8450-switch-to-qcom_icc_rpmh_-fu.patch +interconnect-qcom-qcm2290-fix-master_snoc_bimc_nrt.patch +perf-core-fix-perf_output_begin-parameter-is-incorre.patch +perf-fix-perf_event_context-time.patch +tracing-hwlat-replace-sched_setaffinity-with-set_cpu.patch +drm-amd-display-fix-k1-k2-divider-programming-for-ph.patch +drm-amd-display-remove-otg-div-register-write-for-vi.patch diff --git a/queue-6.2/tracing-hwlat-replace-sched_setaffinity-with-set_cpu.patch b/queue-6.2/tracing-hwlat-replace-sched_setaffinity-with-set_cpu.patch new file mode 100644 index 00000000000..ec7b70ea3f6 --- /dev/null +++ b/queue-6.2/tracing-hwlat-replace-sched_setaffinity-with-set_cpu.patch @@ -0,0 +1,70 @@ +From 822ce9265d66ccfef204018b0fdbf2c02db6c9ed Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 16 Mar 2023 16:45:35 +0200 +Subject: tracing/hwlat: Replace sched_setaffinity with set_cpus_allowed_ptr + +From: Costa Shulyupin + +[ Upstream commit 71c7a30442b724717a30d5e7d1662ba4904eb3d4 ] + +There is a problem with the behavior of hwlat in a container, +resulting in incorrect output. A warning message is generated: +"cpumask changed while in round-robin mode, switching to mode none", +and the tracing_cpumask is ignored. This issue arises because +the kernel thread, hwlatd, is not a part of the container, and +the function sched_setaffinity is unable to locate it using its PID. +Additionally, the task_struct of hwlatd is already known. +Ultimately, the function set_cpus_allowed_ptr achieves +the same outcome as sched_setaffinity, but employs task_struct +instead of PID. + +Test case: + + # cd /sys/kernel/tracing + # echo 0 > tracing_on + # echo round-robin > hwlat_detector/mode + # echo hwlat > current_tracer + # unshare --fork --pid bash -c 'echo 1 > tracing_on' + # dmesg -c + +Actual behavior: + +[573502.809060] hwlat_detector: cpumask changed while in round-robin mode, switching to mode none + +Link: https://lore.kernel.org/linux-trace-kernel/20230316144535.1004952-1-costa.shul@redhat.com + +Cc: Masami Hiramatsu +Fixes: 0330f7aa8ee63 ("tracing: Have hwlat trace migrate across tracing_cpumask CPUs") +Signed-off-by: Costa Shulyupin +Acked-by: Daniel Bristot de Oliveira +Signed-off-by: Steven Rostedt (Google) +Signed-off-by: Sasha Levin +--- + kernel/trace/trace_hwlat.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/kernel/trace/trace_hwlat.c b/kernel/trace/trace_hwlat.c +index c4945f8adc119..2f37a6e68aa9f 100644 +--- a/kernel/trace/trace_hwlat.c ++++ b/kernel/trace/trace_hwlat.c +@@ -339,7 +339,7 @@ static void move_to_next_cpu(void) + cpumask_clear(current_mask); + cpumask_set_cpu(next_cpu, current_mask); + +- sched_setaffinity(0, current_mask); ++ set_cpus_allowed_ptr(current, current_mask); + return; + + change_mode: +@@ -446,7 +446,7 @@ static int start_single_kthread(struct trace_array *tr) + + } + +- sched_setaffinity(kthread->pid, current_mask); ++ set_cpus_allowed_ptr(kthread, current_mask); + + kdata->kthread = kthread; + wake_up_process(kthread); +-- +2.39.2 +