Skip to content

Commit 8075535

Browse files
committed
hw-mgmt: thermal: Fix recovery flow for special attention FAN
Fix FAN recovery flow not completing properly In some cases, when the FAN recovery flow started, the FAN PWM was immediately reset to its default value. Because of this, the recovery process failed to complete. The issue occurred when a FAN fault was triggered while the FAN PWM was being adjusted downward in step increments. Bug 4661922 Signed-off-by: Oleksandr Shamray <[email protected]>
1 parent 34c0003 commit 8075535

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

usr/usr/bin/hw_management_thermal_control.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3173,14 +3173,22 @@ def _is_attention_fan_insertion_fail(self):
31733173
# ---------------------------------------------------------------------
31743174
def _attention_fan_insertion_recovery(self):
31753175
pwm = self.read_pwm(100)
3176+
if pwm <= self.fan_steady_state_pwm:
3177+
self.log.info("Recovery is not needed. Fan speed {}% is already <= steady state pwm: {}%".format(pwm, self.fan_steady_state_pwm), repeat=1)
3178+
return
3179+
31763180
self.log.notice("Attention fan not started after insertion: Setting pwm to {}% from {}%".format(self.fan_steady_state_pwm, pwm), repeat=1)
3181+
if self.pwm_worker_timer and self.pwm_worker_timer.is_running():
3182+
self.pwm_worker_timer.stop()
31773183
self._update_chassis_fan_speed(self.fan_steady_state_pwm, force=True)
31783184
self.log.info("Waiting {}s for newly inserted fan to stabilize".format(self.fan_steady_state_delay))
31793185
timeout = current_milli_time() + 1000 * self.fan_steady_state_delay
31803186
while timeout > current_milli_time():
31813187
self.exit.wait(1)
31823188
self.log.info("Resuming normal operation: Setting pwm back to {}%".format(pwm))
31833189
self._update_chassis_fan_speed(pwm, force=True)
3190+
if self.pwm_worker_timer:
3191+
self.pwm_worker_timer.start()
31843192

31853193
# ----------------------------------------------------------------------
31863194
def _update_psu_fan_speed(self, pwm):
@@ -3249,8 +3257,8 @@ def _set_pwm(self, pwm, reason="", force_reason=False):
32493257
self.log.notice("PWM target changed from {} to PWM {} {}".format(self.pwm_target, pwm, reason))
32503258
self._update_psu_fan_speed(pwm)
32513259
self.pwm_target = pwm
3252-
if self.pwm_worker_timer:
3253-
self.pwm_worker_timer.start(True)
3260+
if self.pwm_worker_timer and not self.pwm_worker_timer.is_running():
3261+
self.pwm_worker_timer.start()
32543262
else:
32553263
self.pwm = pwm
32563264
self._update_chassis_fan_speed(self.pwm)

usr/usr/bin/hw_management_thermal_control_2_5.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3547,14 +3547,22 @@ def _is_attention_fan_insertion_fail(self):
35473547
# ---------------------------------------------------------------------
35483548
def _attention_fan_insertion_recovery(self):
35493549
pwm = self.read_pwm(100)
3550+
if pwm <= self.fan_steady_state_pwm:
3551+
self.log.info("Recovery is not needed. Fan speed {}% is already <= steady state pwm: {}%".format(pwm, self.fan_steady_state_pwm), repeat=1)
3552+
return
3553+
35503554
self.log.notice("Attention fan not started after insertion: Setting pwm to {}% from {}%".format(self.fan_steady_state_pwm, pwm), repeat=1)
3555+
if self.pwm_worker_timer and self.pwm_worker_timer.is_running():
3556+
self.pwm_worker_timer.stop()
35513557
self._update_chassis_fan_speed(self.fan_steady_state_pwm, force=True)
35523558
self.log.info("Waiting {}s for newly inserted fan to stabilize".format(self.fan_steady_state_delay))
35533559
timeout = current_milli_time() + 1000 * self.fan_steady_state_delay
35543560
while timeout > current_milli_time():
35553561
self.exit.wait(1)
35563562
self.log.info("Resuming normal operation: Setting pwm back to {}%".format(pwm))
35573563
self._update_chassis_fan_speed(pwm, force=True)
3564+
if self.pwm_worker_timer:
3565+
self.pwm_worker_timer.start()
35583566

35593567
# ----------------------------------------------------------------------
35603568
def _update_psu_fan_speed(self, pwm):
@@ -3652,8 +3660,8 @@ def _set_pwm(self, pwm, reason="", force_reason=False):
36523660
self.log.notice("PWM target changed from {} to PWM {} {}".format(self.pwm_target, pwm, reason))
36533661
self._update_psu_fan_speed(pwm)
36543662
self.pwm_target = pwm
3655-
if self.pwm_worker_timer:
3656-
self.pwm_worker_timer.start(True)
3663+
if self.pwm_worker_timer and not self.pwm_worker_timer.is_running():
3664+
self.pwm_worker_timer.start()
36573665
else:
36583666
self.pwm = pwm
36593667
self._update_chassis_fan_speed(self.pwm)

0 commit comments

Comments
 (0)