Browse Source

Attempt to re-initialise ADL should a device that previously reported fanspeed stops reporting it.

ckolivas 14 years ago
parent
commit
d4c513030f
2 changed files with 12 additions and 4 deletions
  1. 12 2
      adl.c
  2. 0 2
      adl.h

+ 12 - 2
adl.c

@@ -639,6 +639,8 @@ static inline int __gpu_fanspeed(struct gpu_adl *ga)
 	return ga->lpFanSpeedValue.iFanSpeed;
 }
 
+static void reinit_adl(void);
+
 int gpu_fanspeed(int gpu)
 {
 	struct gpu_adl *ga;
@@ -667,6 +669,8 @@ static int __gpu_fanpercent(struct gpu_adl *ga)
 	return ga->lpFanSpeedValue.iFanSpeed;
 }
 
+
+
 int gpu_fanpercent(int gpu)
 {
 	struct gpu_adl *ga;
@@ -679,6 +683,11 @@ int gpu_fanpercent(int gpu)
 	lock_adl();
 	ret = __gpu_fanpercent(ga);
 	unlock_adl();
+	if (unlikely(ga->has_fanspeed && ret == -1)) {
+		applog(LOG_WARNING, "GPU %d stopped reporting fanspeed", gpu);
+		applog(LOG_WARNING, "Will attempt to re-initialise ADL");
+		reinit_adl();
+	}
 	return ret;
 }
 
@@ -1359,7 +1368,7 @@ void clear_adl(int nDevs)
 	free_adl();
 }
 
-void reinit_adl(void)
+static void reinit_adl(void)
 {
 	bool ret;
 	lock_adl();
@@ -1368,7 +1377,8 @@ void reinit_adl(void)
 	if (!ret) {
 		adl_active = false;
 		applog(LOG_WARNING, "Attempt to re-initialise ADL has failed, disabling");
-	}
+	} else
+		applog(LOG_WARNING, "ADL re-initialisation complete");
 	unlock_adl();
 }
 #endif /* HAVE_ADL */

+ 0 - 2
adl.h

@@ -19,12 +19,10 @@ bool gpu_stats(int gpu, float *temp, int *engineclock, int *memclock, float *vdd
 void change_gpusettings(int gpu);
 void gpu_autotune(int gpu, enum dev_enable *denable);
 void clear_adl(int nDevs);
-void reinit_adl(void);
 #else /* HAVE_ADL */
 #define adl_active (0)
 static inline void init_adl(int nDevs) {}
 static inline void change_gpusettings(int gpu) { }
 static inline void clear_adl(int nDevs) {}
-static inline void reinit_adl(void) {}
 #endif
 #endif