From: Greg Kroah-Hartman Date: Wed, 5 Mar 2025 13:03:20 +0000 (+0100) Subject: 6.6-stable patches X-Git-Tag: v6.6.81~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c2501c8ca9f8fc2689a4c3577e3ba78b0f7f2e2;p=thirdparty%2Fkernel%2Fstable-queue.git 6.6-stable patches added patches: amdgpu-pm-legacy-fix-suspend-resume-issues.patch revert-rtla-timerlat_hist-set-osnoise_workload-for-kernel-threads.patch revert-rtla-timerlat_top-set-osnoise_workload-for-kernel-threads.patch rtla-timerlat_hist-set-osnoise_workload-for-kernel-threads.patch rtla-timerlat_top-set-osnoise_workload-for-kernel-threads.patch --- diff --git a/queue-6.6/amdgpu-pm-legacy-fix-suspend-resume-issues.patch b/queue-6.6/amdgpu-pm-legacy-fix-suspend-resume-issues.patch new file mode 100644 index 0000000000..8ad3a326b4 --- /dev/null +++ b/queue-6.6/amdgpu-pm-legacy-fix-suspend-resume-issues.patch @@ -0,0 +1,192 @@ +From 91dcc66b34beb72dde8412421bdc1b4cd40e4fb8 Mon Sep 17 00:00:00 2001 +From: "chr[]" +Date: Wed, 12 Feb 2025 16:51:38 +0100 +Subject: amdgpu/pm/legacy: fix suspend/resume issues + +From: chr[] + +commit 91dcc66b34beb72dde8412421bdc1b4cd40e4fb8 upstream. + +resume and irq handler happily races in set_power_state() + +* amdgpu_legacy_dpm_compute_clocks() needs lock +* protect irq work handler +* fix dpm_enabled usage + +v2: fix clang build, integrate Lijo's comments (Alex) + +Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/2524 +Fixes: 3712e7a49459 ("drm/amd/pm: unified lock protections in amdgpu_dpm.c") +Reviewed-by: Lijo Lazar +Tested-by: Maciej S. Szmigiero # on Oland PRO +Signed-off-by: chr[] +Signed-off-by: Alex Deucher +(cherry picked from commit ee3dc9e204d271c9c7a8d4d38a0bce4745d33e71) +Cc: stable@vger.kernel.org +Signed-off-by: Greg Kroah-Hartman +--- + drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c | 25 ++++++++++++++++++------ + drivers/gpu/drm/amd/pm/legacy-dpm/legacy_dpm.c | 8 +++++-- + drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c | 26 +++++++++++++++++++------ + 3 files changed, 45 insertions(+), 14 deletions(-) + +--- a/drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c ++++ b/drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c +@@ -3043,6 +3043,7 @@ static int kv_dpm_hw_init(void *handle) + if (!amdgpu_dpm) + return 0; + ++ mutex_lock(&adev->pm.mutex); + kv_dpm_setup_asic(adev); + ret = kv_dpm_enable(adev); + if (ret) +@@ -3050,6 +3051,8 @@ static int kv_dpm_hw_init(void *handle) + else + adev->pm.dpm_enabled = true; + amdgpu_legacy_dpm_compute_clocks(adev); ++ mutex_unlock(&adev->pm.mutex); ++ + return ret; + } + +@@ -3067,32 +3070,42 @@ static int kv_dpm_suspend(void *handle) + { + struct amdgpu_device *adev = (struct amdgpu_device *)handle; + ++ cancel_work_sync(&adev->pm.dpm.thermal.work); ++ + if (adev->pm.dpm_enabled) { ++ mutex_lock(&adev->pm.mutex); ++ adev->pm.dpm_enabled = false; + /* disable dpm */ + kv_dpm_disable(adev); + /* reset the power state */ + adev->pm.dpm.current_ps = adev->pm.dpm.requested_ps = adev->pm.dpm.boot_ps; ++ mutex_unlock(&adev->pm.mutex); + } + return 0; + } + + static int kv_dpm_resume(void *handle) + { +- int ret; ++ int ret = 0; + struct amdgpu_device *adev = (struct amdgpu_device *)handle; + +- if (adev->pm.dpm_enabled) { ++ if (!amdgpu_dpm) ++ return 0; ++ ++ if (!adev->pm.dpm_enabled) { ++ mutex_lock(&adev->pm.mutex); + /* asic init will reset to the boot state */ + kv_dpm_setup_asic(adev); + ret = kv_dpm_enable(adev); +- if (ret) ++ if (ret) { + adev->pm.dpm_enabled = false; +- else ++ } else { + adev->pm.dpm_enabled = true; +- if (adev->pm.dpm_enabled) + amdgpu_legacy_dpm_compute_clocks(adev); ++ } ++ mutex_unlock(&adev->pm.mutex); + } +- return 0; ++ return ret; + } + + static bool kv_dpm_is_idle(void *handle) +--- a/drivers/gpu/drm/amd/pm/legacy-dpm/legacy_dpm.c ++++ b/drivers/gpu/drm/amd/pm/legacy-dpm/legacy_dpm.c +@@ -1018,9 +1018,12 @@ void amdgpu_dpm_thermal_work_handler(str + enum amd_pm_state_type dpm_state = POWER_STATE_TYPE_INTERNAL_THERMAL; + int temp, size = sizeof(temp); + +- if (!adev->pm.dpm_enabled) +- return; ++ mutex_lock(&adev->pm.mutex); + ++ if (!adev->pm.dpm_enabled) { ++ mutex_unlock(&adev->pm.mutex); ++ return; ++ } + if (!pp_funcs->read_sensor(adev->powerplay.pp_handle, + AMDGPU_PP_SENSOR_GPU_TEMP, + (void *)&temp, +@@ -1042,4 +1045,5 @@ void amdgpu_dpm_thermal_work_handler(str + adev->pm.dpm.state = dpm_state; + + amdgpu_legacy_dpm_compute_clocks(adev->powerplay.pp_handle); ++ mutex_unlock(&adev->pm.mutex); + } +--- a/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c ++++ b/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c +@@ -7789,6 +7789,7 @@ static int si_dpm_hw_init(void *handle) + if (!amdgpu_dpm) + return 0; + ++ mutex_lock(&adev->pm.mutex); + si_dpm_setup_asic(adev); + ret = si_dpm_enable(adev); + if (ret) +@@ -7796,6 +7797,7 @@ static int si_dpm_hw_init(void *handle) + else + adev->pm.dpm_enabled = true; + amdgpu_legacy_dpm_compute_clocks(adev); ++ mutex_unlock(&adev->pm.mutex); + return ret; + } + +@@ -7813,32 +7815,44 @@ static int si_dpm_suspend(void *handle) + { + struct amdgpu_device *adev = (struct amdgpu_device *)handle; + ++ cancel_work_sync(&adev->pm.dpm.thermal.work); ++ + if (adev->pm.dpm_enabled) { ++ mutex_lock(&adev->pm.mutex); ++ adev->pm.dpm_enabled = false; + /* disable dpm */ + si_dpm_disable(adev); + /* reset the power state */ + adev->pm.dpm.current_ps = adev->pm.dpm.requested_ps = adev->pm.dpm.boot_ps; ++ mutex_unlock(&adev->pm.mutex); + } ++ + return 0; + } + + static int si_dpm_resume(void *handle) + { +- int ret; ++ int ret = 0; + struct amdgpu_device *adev = (struct amdgpu_device *)handle; + +- if (adev->pm.dpm_enabled) { ++ if (!amdgpu_dpm) ++ return 0; ++ ++ if (!adev->pm.dpm_enabled) { + /* asic init will reset to the boot state */ ++ mutex_lock(&adev->pm.mutex); + si_dpm_setup_asic(adev); + ret = si_dpm_enable(adev); +- if (ret) ++ if (ret) { + adev->pm.dpm_enabled = false; +- else ++ } else { + adev->pm.dpm_enabled = true; +- if (adev->pm.dpm_enabled) + amdgpu_legacy_dpm_compute_clocks(adev); ++ } ++ mutex_unlock(&adev->pm.mutex); + } +- return 0; ++ ++ return ret; + } + + static bool si_dpm_is_idle(void *handle) diff --git a/queue-6.6/revert-rtla-timerlat_hist-set-osnoise_workload-for-kernel-threads.patch b/queue-6.6/revert-rtla-timerlat_hist-set-osnoise_workload-for-kernel-threads.patch new file mode 100644 index 0000000000..a06c35aba1 --- /dev/null +++ b/queue-6.6/revert-rtla-timerlat_hist-set-osnoise_workload-for-kernel-threads.patch @@ -0,0 +1,45 @@ +From stable+bounces-119946-greg=kroah.com@vger.kernel.org Fri Feb 28 14:58:02 2025 +From: Tomas Glozar +Date: Fri, 28 Feb 2025 14:57:06 +0100 +Subject: Revert "rtla/timerlat_hist: Set OSNOISE_WORKLOAD for kernel threads" +To: stable@vger.kernel.org +Cc: Steven Rostedt , Luis Goncalves , Greg Kroah-Hartman , Guillaume Morin , Wang Yugui , Jan Kundrat , Tomas Glozar +Message-ID: <20250228135708.604410-3-tglozar@redhat.com> + +From: Tomas Glozar + +This reverts commit 83b74901bdc9b58739193b8ee6989254391b6ba7. + +The commit breaks rtla build, since params->kernel_workload is not +present on 6.6-stable. + +Signed-off-by: Tomas Glozar +Signed-off-by: Greg Kroah-Hartman +--- + tools/tracing/rtla/src/timerlat_hist.c | 15 ++++++--------- + 1 file changed, 6 insertions(+), 9 deletions(-) + +--- a/tools/tracing/rtla/src/timerlat_hist.c ++++ b/tools/tracing/rtla/src/timerlat_hist.c +@@ -900,15 +900,12 @@ timerlat_hist_apply_config(struct osnois + auto_house_keeping(¶ms->monitored_cpus); + } + +- /* +- * Set workload according to type of thread if the kernel supports it. +- * On kernels without support, user threads will have already failed +- * on missing timerlat_fd, and kernel threads do not need it. +- */ +- retval = osnoise_set_workload(tool->context, params->kernel_workload); +- if (retval < -1) { +- err_msg("Failed to set OSNOISE_WORKLOAD option\n"); +- goto out_err; ++ if (params->user_hist) { ++ retval = osnoise_set_workload(tool->context, 0); ++ if (retval) { ++ err_msg("Failed to set OSNOISE_WORKLOAD option\n"); ++ goto out_err; ++ } + } + + return 0; diff --git a/queue-6.6/revert-rtla-timerlat_top-set-osnoise_workload-for-kernel-threads.patch b/queue-6.6/revert-rtla-timerlat_top-set-osnoise_workload-for-kernel-threads.patch new file mode 100644 index 0000000000..0b2cdac56a --- /dev/null +++ b/queue-6.6/revert-rtla-timerlat_top-set-osnoise_workload-for-kernel-threads.patch @@ -0,0 +1,45 @@ +From stable+bounces-119945-greg=kroah.com@vger.kernel.org Fri Feb 28 14:57:55 2025 +From: Tomas Glozar +Date: Fri, 28 Feb 2025 14:57:05 +0100 +Subject: Revert "rtla/timerlat_top: Set OSNOISE_WORKLOAD for kernel threads" +To: stable@vger.kernel.org +Cc: Steven Rostedt , Luis Goncalves , Greg Kroah-Hartman , Guillaume Morin , Wang Yugui , Jan Kundrat , Tomas Glozar +Message-ID: <20250228135708.604410-2-tglozar@redhat.com> + +From: Tomas Glozar + +This reverts commit 41955b6c268154f81e34f9b61cf8156eec0730c0. + +The commit breaks rtla build, since params->kernel_workload is not +present on 6.6-stable. + +Signed-off-by: Tomas Glozar +Signed-off-by: Greg Kroah-Hartman +--- + tools/tracing/rtla/src/timerlat_top.c | 15 ++++++--------- + 1 file changed, 6 insertions(+), 9 deletions(-) + +--- a/tools/tracing/rtla/src/timerlat_top.c ++++ b/tools/tracing/rtla/src/timerlat_top.c +@@ -679,15 +679,12 @@ timerlat_top_apply_config(struct osnoise + auto_house_keeping(¶ms->monitored_cpus); + } + +- /* +- * Set workload according to type of thread if the kernel supports it. +- * On kernels without support, user threads will have already failed +- * on missing timerlat_fd, and kernel threads do not need it. +- */ +- retval = osnoise_set_workload(top->context, params->kernel_workload); +- if (retval < -1) { +- err_msg("Failed to set OSNOISE_WORKLOAD option\n"); +- goto out_err; ++ if (params->user_top) { ++ retval = osnoise_set_workload(top->context, 0); ++ if (retval) { ++ err_msg("Failed to set OSNOISE_WORKLOAD option\n"); ++ goto out_err; ++ } + } + + return 0; diff --git a/queue-6.6/rtla-timerlat_hist-set-osnoise_workload-for-kernel-threads.patch b/queue-6.6/rtla-timerlat_hist-set-osnoise_workload-for-kernel-threads.patch new file mode 100644 index 0000000000..289c0c5b0d --- /dev/null +++ b/queue-6.6/rtla-timerlat_hist-set-osnoise_workload-for-kernel-threads.patch @@ -0,0 +1,78 @@ +From stable+bounces-119947-greg=kroah.com@vger.kernel.org Fri Feb 28 14:58:08 2025 +From: Tomas Glozar +Date: Fri, 28 Feb 2025 14:57:07 +0100 +Subject: rtla/timerlat_hist: Set OSNOISE_WORKLOAD for kernel threads +To: stable@vger.kernel.org +Cc: Steven Rostedt , Luis Goncalves , Greg Kroah-Hartman , Guillaume Morin , Wang Yugui , Jan Kundrat , Tomas Glozar +Message-ID: <20250228135708.604410-4-tglozar@redhat.com> + +From: Tomas Glozar + +commit d8d866171a414ed88bd0d720864095fd75461134 upstream. + +When using rtla timerlat with userspace threads (-u or -U), rtla +disables the OSNOISE_WORKLOAD option in +/sys/kernel/tracing/osnoise/options. This option is not re-enabled in a +subsequent run with kernel-space threads, leading to rtla collecting no +results if the previous run exited abnormally: + +$ rtla timerlat hist -u +^\Quit (core dumped) +$ rtla timerlat hist -k -d 1s +Index +over: +count: +min: +avg: +max: +ALL: IRQ Thr Usr +count: 0 0 0 +min: - - - +avg: - - - +max: - - - + +The issue persists until OSNOISE_WORKLOAD is set manually by running: +$ echo OSNOISE_WORKLOAD > /sys/kernel/tracing/osnoise/options + +Set OSNOISE_WORKLOAD when running rtla with kernel-space threads if +available to fix the issue. + +Cc: stable@vger.kernel.org +Cc: John Kacur +Cc: Luis Goncalves +Link: https://lore.kernel.org/20250107144823.239782-3-tglozar@redhat.com +Fixes: ed774f7481fa ("rtla/timerlat_hist: Add timerlat user-space support") +Signed-off-by: Tomas Glozar +Signed-off-by: Steven Rostedt (Google) +[ params->kernel_workload does not exist in 6.6, use +!params->user_hist ] +Signed-off-by: Tomas Glozar +Signed-off-by: Greg Kroah-Hartman +--- + tools/tracing/rtla/src/timerlat_hist.c | 15 +++++++++------ + 1 file changed, 9 insertions(+), 6 deletions(-) + +--- a/tools/tracing/rtla/src/timerlat_hist.c ++++ b/tools/tracing/rtla/src/timerlat_hist.c +@@ -900,12 +900,15 @@ timerlat_hist_apply_config(struct osnois + auto_house_keeping(¶ms->monitored_cpus); + } + +- if (params->user_hist) { +- retval = osnoise_set_workload(tool->context, 0); +- if (retval) { +- err_msg("Failed to set OSNOISE_WORKLOAD option\n"); +- goto out_err; +- } ++ /* ++ * Set workload according to type of thread if the kernel supports it. ++ * On kernels without support, user threads will have already failed ++ * on missing timerlat_fd, and kernel threads do not need it. ++ */ ++ retval = osnoise_set_workload(tool->context, !params->user_hist); ++ if (retval < -1) { ++ err_msg("Failed to set OSNOISE_WORKLOAD option\n"); ++ goto out_err; + } + + return 0; diff --git a/queue-6.6/rtla-timerlat_top-set-osnoise_workload-for-kernel-threads.patch b/queue-6.6/rtla-timerlat_top-set-osnoise_workload-for-kernel-threads.patch new file mode 100644 index 0000000000..e27853228e --- /dev/null +++ b/queue-6.6/rtla-timerlat_top-set-osnoise_workload-for-kernel-threads.patch @@ -0,0 +1,70 @@ +From stable+bounces-119948-greg=kroah.com@vger.kernel.org Fri Feb 28 14:58:10 2025 +From: Tomas Glozar +Date: Fri, 28 Feb 2025 14:57:08 +0100 +Subject: rtla/timerlat_top: Set OSNOISE_WORKLOAD for kernel threads +To: stable@vger.kernel.org +Cc: Steven Rostedt , Luis Goncalves , Greg Kroah-Hartman , Guillaume Morin , Wang Yugui , Jan Kundrat , Tomas Glozar +Message-ID: <20250228135708.604410-5-tglozar@redhat.com> + +From: Tomas Glozar + +commit 217f0b1e990e30a1f06f6d531fdb4530f4788d48 upstream. + +When using rtla timerlat with userspace threads (-u or -U), rtla +disables the OSNOISE_WORKLOAD option in +/sys/kernel/tracing/osnoise/options. This option is not re-enabled in a +subsequent run with kernel-space threads, leading to rtla collecting no +results if the previous run exited abnormally: + +$ rtla timerlat top -u +^\Quit (core dumped) +$ rtla timerlat top -k -d 1s + Timer Latency + 0 00:00:01 | IRQ Timer Latency (us) | Thread Timer Latency (us) +CPU COUNT | cur min avg max | cur min avg max + +The issue persists until OSNOISE_WORKLOAD is set manually by running: +$ echo OSNOISE_WORKLOAD > /sys/kernel/tracing/osnoise/options + +Set OSNOISE_WORKLOAD when running rtla with kernel-space threads if +available to fix the issue. + +Cc: stable@vger.kernel.org +Cc: John Kacur +Cc: Luis Goncalves +Link: https://lore.kernel.org/20250107144823.239782-4-tglozar@redhat.com +Fixes: cdca4f4e5e8e ("rtla/timerlat_top: Add timerlat user-space support") +Signed-off-by: Tomas Glozar +Signed-off-by: Steven Rostedt (Google) +[ params->kernel_workload does not exist in 6.6, use +!params->user_top ] +Signed-off-by: Tomas Glozar +Signed-off-by: Greg Kroah-Hartman +--- + tools/tracing/rtla/src/timerlat_top.c | 15 +++++++++------ + 1 file changed, 9 insertions(+), 6 deletions(-) + +--- a/tools/tracing/rtla/src/timerlat_top.c ++++ b/tools/tracing/rtla/src/timerlat_top.c +@@ -679,12 +679,15 @@ timerlat_top_apply_config(struct osnoise + auto_house_keeping(¶ms->monitored_cpus); + } + +- if (params->user_top) { +- retval = osnoise_set_workload(top->context, 0); +- if (retval) { +- err_msg("Failed to set OSNOISE_WORKLOAD option\n"); +- goto out_err; +- } ++ /* ++ * Set workload according to type of thread if the kernel supports it. ++ * On kernels without support, user threads will have already failed ++ * on missing timerlat_fd, and kernel threads do not need it. ++ */ ++ retval = osnoise_set_workload(top->context, !params->user_top); ++ if (retval < -1) { ++ err_msg("Failed to set OSNOISE_WORKLOAD option\n"); ++ goto out_err; + } + + return 0; diff --git a/queue-6.6/series b/queue-6.6/series index 0b6ac43872..6058e3bcf2 100644 --- a/queue-6.6/series +++ b/queue-6.6/series @@ -86,3 +86,8 @@ scsi-ufs-core-bsg-fix-crash-when-arpmb-command-fails.patch rseq-selftests-fix-riscv-rseq_offset_deref_addv-inline-asm.patch riscv-futex-sign-extend-compare-value-in-atomic-cmpxchg.patch riscv-signal-fix-signal-frame-size.patch +revert-rtla-timerlat_top-set-osnoise_workload-for-kernel-threads.patch +revert-rtla-timerlat_hist-set-osnoise_workload-for-kernel-threads.patch +rtla-timerlat_hist-set-osnoise_workload-for-kernel-threads.patch +rtla-timerlat_top-set-osnoise_workload-for-kernel-threads.patch +amdgpu-pm-legacy-fix-suspend-resume-issues.patch