]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.6-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 5 Mar 2025 13:03:20 +0000 (14:03 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 5 Mar 2025 13:03:20 +0000 (14:03 +0100)
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

queue-6.6/amdgpu-pm-legacy-fix-suspend-resume-issues.patch [new file with mode: 0644]
queue-6.6/revert-rtla-timerlat_hist-set-osnoise_workload-for-kernel-threads.patch [new file with mode: 0644]
queue-6.6/revert-rtla-timerlat_top-set-osnoise_workload-for-kernel-threads.patch [new file with mode: 0644]
queue-6.6/rtla-timerlat_hist-set-osnoise_workload-for-kernel-threads.patch [new file with mode: 0644]
queue-6.6/rtla-timerlat_top-set-osnoise_workload-for-kernel-threads.patch [new file with mode: 0644]
queue-6.6/series

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 (file)
index 0000000..8ad3a32
--- /dev/null
@@ -0,0 +1,192 @@
+From 91dcc66b34beb72dde8412421bdc1b4cd40e4fb8 Mon Sep 17 00:00:00 2001
+From: "chr[]" <chris@rudorff.com>
+Date: Wed, 12 Feb 2025 16:51:38 +0100
+Subject: amdgpu/pm/legacy: fix suspend/resume issues
+
+From: chr[] <chris@rudorff.com>
+
+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 <lijo.lazar@amd.com>
+Tested-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name> # on Oland PRO
+Signed-off-by: chr[] <chris@rudorff.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+(cherry picked from commit ee3dc9e204d271c9c7a8d4d38a0bce4745d33e71)
+Cc: stable@vger.kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 (file)
index 0000000..a06c35a
--- /dev/null
@@ -0,0 +1,45 @@
+From stable+bounces-119946-greg=kroah.com@vger.kernel.org Fri Feb 28 14:58:02 2025
+From: Tomas Glozar <tglozar@redhat.com>
+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 <rostedt@goodmis.org>, Luis Goncalves <lgoncalv@redhat.com>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Guillaume Morin <guillaume@morinfr.org>, Wang Yugui <wangyugui@e16-tech.com>, Jan Kundrat <jan.kundrat@cesnet.cz>, Tomas Glozar <tglozar@redhat.com>
+Message-ID: <20250228135708.604410-3-tglozar@redhat.com>
+
+From: Tomas Glozar <tglozar@redhat.com>
+
+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 <tglozar@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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(&params->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 (file)
index 0000000..0b2cdac
--- /dev/null
@@ -0,0 +1,45 @@
+From stable+bounces-119945-greg=kroah.com@vger.kernel.org Fri Feb 28 14:57:55 2025
+From: Tomas Glozar <tglozar@redhat.com>
+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 <rostedt@goodmis.org>, Luis Goncalves <lgoncalv@redhat.com>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Guillaume Morin <guillaume@morinfr.org>, Wang Yugui <wangyugui@e16-tech.com>, Jan Kundrat <jan.kundrat@cesnet.cz>, Tomas Glozar <tglozar@redhat.com>
+Message-ID: <20250228135708.604410-2-tglozar@redhat.com>
+
+From: Tomas Glozar <tglozar@redhat.com>
+
+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 <tglozar@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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(&params->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 (file)
index 0000000..289c0c5
--- /dev/null
@@ -0,0 +1,78 @@
+From stable+bounces-119947-greg=kroah.com@vger.kernel.org Fri Feb 28 14:58:08 2025
+From: Tomas Glozar <tglozar@redhat.com>
+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 <rostedt@goodmis.org>, Luis Goncalves <lgoncalv@redhat.com>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Guillaume Morin <guillaume@morinfr.org>, Wang Yugui <wangyugui@e16-tech.com>, Jan Kundrat <jan.kundrat@cesnet.cz>, Tomas Glozar <tglozar@redhat.com>
+Message-ID: <20250228135708.604410-4-tglozar@redhat.com>
+
+From: Tomas Glozar <tglozar@redhat.com>
+
+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 <jkacur@redhat.com>
+Cc: Luis Goncalves <lgoncalv@redhat.com>
+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 <tglozar@redhat.com>
+Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
+[ params->kernel_workload does not exist in 6.6, use
+!params->user_hist ]
+Signed-off-by: Tomas Glozar <tglozar@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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(&params->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 (file)
index 0000000..e278532
--- /dev/null
@@ -0,0 +1,70 @@
+From stable+bounces-119948-greg=kroah.com@vger.kernel.org Fri Feb 28 14:58:10 2025
+From: Tomas Glozar <tglozar@redhat.com>
+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 <rostedt@goodmis.org>, Luis Goncalves <lgoncalv@redhat.com>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Guillaume Morin <guillaume@morinfr.org>, Wang Yugui <wangyugui@e16-tech.com>, Jan Kundrat <jan.kundrat@cesnet.cz>, Tomas Glozar <tglozar@redhat.com>
+Message-ID: <20250228135708.604410-5-tglozar@redhat.com>
+
+From: Tomas Glozar <tglozar@redhat.com>
+
+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 <jkacur@redhat.com>
+Cc: Luis Goncalves <lgoncalv@redhat.com>
+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 <tglozar@redhat.com>
+Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
+[ params->kernel_workload does not exist in 6.6, use
+!params->user_top ]
+Signed-off-by: Tomas Glozar <tglozar@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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(&params->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;
index 0b6ac43872eabc8e681decf3398a50d8ed53a50f..6058e3bcf2fb56f6e42372c125f8ea596eb52dfa 100644 (file)
@@ -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