Browse Source

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

nfactor-troky
ckolivas 13 years ago
parent
commit
d4c513030f
  1. 14
      adl.c
  2. 2
      adl.h

14
adl.c

@ -639,6 +639,8 @@ static inline int __gpu_fanspeed(struct gpu_adl *ga) @@ -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) @@ -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) @@ -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) @@ -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) @@ -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 */

2
adl.h

@ -19,12 +19,10 @@ bool gpu_stats(int gpu, float *temp, int *engineclock, int *memclock, float *vdd @@ -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

Loading…
Cancel
Save