Permalink
Browse files

Tidy up device error counts

  • Loading branch information...
1 parent 3858e99 commit 9f74e650b3f9279db2d3c5e03c3189352c467b39 @pshep pshep committed Nov 5, 2012
Showing with 61 additions and 52 deletions.
  1. +3 −10 adl.c
  2. +4 −14 cgminer.c
  3. +4 −13 driver-bitforce.c
  4. +3 −9 driver-icarus.c
  5. +2 −6 driver-modminer.c
  6. +42 −0 util.c
  7. +3 −0 util.h
View
13 adl.c
@@ -1070,9 +1070,7 @@ static bool fan_autotune(int gpu, int temp, int fanpercent, int lasttemp, bool *
applog(LOG_WARNING, "Overheat detected on GPU %d, increasing fan to 100%", gpu);
newpercent = iMax;
- cgpu->device_last_not_well = time(NULL);
- cgpu->device_not_well_reason = REASON_DEV_OVER_HEAT;
- cgpu->dev_over_heat_count++;
+ dev_error(cgpu, REASON_DEV_OVER_HEAT);
} else if (temp > ga->targettemp && fanpercent < top && tdiff >= 0) {
applog(LOG_DEBUG, "Temperature over target, increasing fanspeed");
if (temp > ga->targettemp + opt_hysteresis)
@@ -1176,17 +1174,12 @@ void gpu_autotune(int gpu, enum dev_enable *denable)
applog(LOG_WARNING, "Hit thermal cutoff limit on GPU %d, disabling!", gpu);
*denable = DEV_RECOVER;
newengine = ga->minspeed;
-
- cgpu->device_last_not_well = time(NULL);
- cgpu->device_not_well_reason = REASON_DEV_THERMAL_CUTOFF;
- cgpu->dev_thermal_cutoff_count++;
+ dev_error(cgpu, REASON_DEV_THERMAL_CUTOFF);
} else if (temp > ga->overtemp && engine > ga->minspeed) {
applog(LOG_WARNING, "Overheat detected, decreasing GPU %d clock speed", gpu);
newengine = ga->minspeed;
- cgpu->device_last_not_well = time(NULL);
- cgpu->device_not_well_reason = REASON_DEV_OVER_HEAT;
- cgpu->dev_over_heat_count++;
+ dev_error(cgpu, REASON_DEV_OVER_HEAT);
} else if (temp > ga->targettemp + opt_hysteresis && engine > ga->minspeed && fan_optimal) {
applog(LOG_DEBUG, "Temperature %d degrees over target, decreasing clock speed", opt_hysteresis);
newengine = engine - ga->lpOdParameters.sEngineClock.iStep;
View
@@ -5069,10 +5069,7 @@ void *miner_thread(void *userdata)
gettimeofday(&getwork_start, NULL);
if (api->thread_init && !api->thread_init(mythr)) {
- cgpu->device_last_not_well = time(NULL);
- cgpu->device_not_well_reason = REASON_THREAD_FAIL_INIT;
- cgpu->thread_fail_init_count++;
-
+ dev_error(cgpu, REASON_THREAD_FAIL_INIT);
goto out;
}
@@ -5143,11 +5140,7 @@ void *miner_thread(void *userdata)
if (unlikely(hashes == -1)) {
applog(LOG_ERR, "%s %d failure, disabling!", api->name, cgpu->device_id);
cgpu->deven = DEV_DISABLED;
-
- cgpu->device_last_not_well = time(NULL);
- cgpu->device_not_well_reason = REASON_THREAD_ZERO_HASH;
- cgpu->thread_zero_hash_count++;
-
+ dev_error(cgpu, REASON_THREAD_ZERO_HASH);
mt_disable(mythr, thr_id, api);
}
@@ -5616,8 +5609,7 @@ static void *watchdog_thread(void __maybe_unused *userdata)
applog(LOG_ERR, "%s: Idle for more than 60 seconds, declaring SICK!", dev_str);
gettimeofday(&thr->sick, NULL);
- cgpu->device_last_not_well = time(NULL);
- cgpu->device_not_well_reason = REASON_DEV_SICK_IDLE_60;
+ dev_error(cgpu, REASON_DEV_SICK_IDLE_60);
cgpu->dev_sick_idle_60_count++;
#ifdef HAVE_ADL
if (adl_active && cgpu->has_adl && gpu_activity(gpu) > 50) {
@@ -5634,9 +5626,7 @@ static void *watchdog_thread(void __maybe_unused *userdata)
applog(LOG_ERR, "%s: Not responded for more than 10 minutes, declaring DEAD!", dev_str);
gettimeofday(&thr->sick, NULL);
- cgpu->device_last_not_well = time(NULL);
- cgpu->device_not_well_reason = REASON_DEV_DEAD_IDLE_600;
- cgpu->dev_dead_idle_600_count++;
+ dev_error(cgpu, REASON_DEV_DEAD_IDLE_600);
} else if (now.tv_sec - thr->sick.tv_sec > 60 &&
(cgpu->status == LIFE_SICK || cgpu->status == LIFE_DEAD)) {
/* Attempt to restart a GPU that's sick or dead once every minute */
View
@@ -420,20 +420,15 @@ static bool bitforce_get_temp(struct cgpu_info *bitforce)
if (unlikely(bitforce->cutofftemp > 0 && temp > bitforce->cutofftemp)) {
applog(LOG_WARNING, "BFL%i: Hit thermal cutoff limit, disabling!", bitforce->device_id);
bitforce->deven = DEV_RECOVER;
-
- bitforce->device_last_not_well = time(NULL);
- bitforce->device_not_well_reason = REASON_DEV_THERMAL_CUTOFF;
- bitforce->dev_thermal_cutoff_count++;
+ dev_error(bitforce, REASON_DEV_THERMAL_CUTOFF);
}
}
} else {
/* Use the temperature monitor as a kind of watchdog for when
* our responses are out of sync and flush the buffer to
* hopefully recover */
applog(LOG_WARNING, "BFL%i: Garbled response probably throttling, clearing buffer", bitforce->device_id);
- bitforce->device_last_not_well = time(NULL);
- bitforce->device_not_well_reason = REASON_DEV_THROTTLE;
- bitforce->dev_throttle_count++;
+ dev_error(bitforce, REASON_DEV_THROTTLE);
/* Count throttling episodes as hardware errors */
bitforce->hw_errors++;
bitforce_clear_buffer(bitforce);
@@ -568,9 +563,7 @@ static int64_t bitforce_get_result(struct thr_info *thr, struct work *work)
if (elapsed.tv_sec > BITFORCE_TIMEOUT_S) {
applog(LOG_ERR, "BFL%i: took %dms - longer than %dms", bitforce->device_id,
tv_to_ms(elapsed), BITFORCE_TIMEOUT_MS);
- bitforce->device_last_not_well = time(NULL);
- bitforce->device_not_well_reason = REASON_DEV_OVER_HEAT;
- bitforce->dev_over_heat_count++;
+ dev_error(bitforce, REASON_DEV_OVER_HEAT);
if (!pdevbuf[0]) /* Only return if we got nothing after timeout - there still may be results */
return 0;
@@ -673,9 +666,7 @@ static int64_t bitforce_scanhash(struct thr_info *thr, struct work *work, int64_
if (ret == -1) {
ret = 0;
applog(LOG_ERR, "BFL%i: Comms error", bitforce->device_id);
- bitforce->device_last_not_well = time(NULL);
- bitforce->device_not_well_reason = REASON_DEV_COMMS_ERROR;
- bitforce->dev_comms_error_count++;
+ dev_error(bitforce, REASON_DEV_COMMS_ERROR);
bitforce->hw_errors++;
/* empty read buffer */
bitforce_clear_buffer(bitforce);
View
@@ -669,9 +669,7 @@ static int64_t icarus_scanhash(struct thr_info *thr, struct work *work,
if (icarus->device_fd == -1)
if (!icarus_prepare(thr)) {
applog(LOG_ERR, "ICA%i: Comms error", icarus->device_id);
- icarus->device_last_not_well = time(NULL);
- icarus->device_not_well_reason = REASON_DEV_COMMS_ERROR;
- icarus->dev_comms_error_count++;
+ dev_error(icarus, REASON_DEV_COMMS_ERROR);
// fail the device if the reopen attempt fails
return -1;
@@ -691,9 +689,7 @@ static int64_t icarus_scanhash(struct thr_info *thr, struct work *work,
if (ret) {
do_icarus_close(thr);
applog(LOG_ERR, "ICA%i: Comms error", icarus->device_id);
- icarus->device_last_not_well = time(NULL);
- icarus->device_not_well_reason = REASON_DEV_COMMS_ERROR;
- icarus->dev_comms_error_count++;
+ dev_error(icarus, REASON_DEV_COMMS_ERROR);
return 0; /* This should never happen */
}
@@ -713,9 +709,7 @@ static int64_t icarus_scanhash(struct thr_info *thr, struct work *work,
if (ret == ICA_GETS_ERROR) {
do_icarus_close(thr);
applog(LOG_ERR, "ICA%i: Comms error", icarus->device_id);
- icarus->device_last_not_well = time(NULL);
- icarus->device_not_well_reason = REASON_DEV_COMMS_ERROR;
- icarus->dev_comms_error_count++;
+ dev_error(icarus, REASON_DEV_COMMS_ERROR);
return 0;
}
View
@@ -560,17 +560,13 @@ static uint64_t modminer_process_results(struct thr_info *thr)
applog(LOG_WARNING, "%s%u.%u: Hit thermal cutoff limit (%f) at %f, disabling device!", modminer->api->name, modminer->device_id, fpgaid, MODMINER_CUTOFF_TEMP, state->temp);
modminer_delta_clock(thr, true, MODMINER_OVERHEAT_CLOCK, true);
+ dev_error(modminer, REASON_DEV_THERMAL_CUTOFF);
modminer->deven = DEV_RECOVER;
- modminer->device_last_not_well = time(NULL);
- modminer->device_not_well_reason = REASON_DEV_THERMAL_CUTOFF;
- modminer->dev_thermal_cutoff_count++;
} else {
applog(LOG_WARNING, "%s%u.%u Overheat limit (%f) reached %f", modminer->api->name, modminer->device_id, fpgaid, MODMINER_OVERHEAT_TEMP, state->temp);
modminer_delta_clock(thr, true, MODMINER_CLOCK_DOWN, true);
- modminer->device_last_not_well = time(NULL);
- modminer->device_not_well_reason = REASON_DEV_OVER_HEAT;
- modminer->dev_over_heat_count++;
+ dev_error(modminer, REASON_DEV_OVER_HEAT);
}
}
}
View
42 util.c
@@ -1428,3 +1428,45 @@ bool initiate_stratum(struct pool *pool)
return ret;
}
+
+
+void dev_error(struct cgpu_info *dev, enum dev_reason reason)
+{
+ dev->device_last_not_well = time(NULL);
+ dev->device_not_well_reason = reason;
+
+
+ switch (reason)
+ {
+ case REASON_THREAD_FAIL_INIT:
+ dev->thread_fail_init_count++;
+ break;
+ case REASON_THREAD_ZERO_HASH:
+ dev->thread_zero_hash_count++;
+ break;
+ case REASON_THREAD_FAIL_QUEUE:
+ dev->thread_fail_queue_count++;
+ break;
+ case REASON_DEV_SICK_IDLE_60:
+ dev->dev_sick_idle_60_count++;
+ break;
+ case REASON_DEV_DEAD_IDLE_600:
+ dev->dev_dead_idle_600_count++;
+ break;
+ case REASON_DEV_NOSTART:
+ dev->dev_nostart_count++;
+ break;
+ case REASON_DEV_OVER_HEAT:
+ dev->dev_over_heat_count++;
+ break;
+ case REASON_DEV_THERMAL_CUTOFF:
+ dev->dev_thermal_cutoff_count++;
+ break;
+ case REASON_DEV_COMMS_ERROR:
+ dev->dev_comms_error_count++;
+ case REASON_DEV_THROTTLE:
+ dev->dev_throttle_count++;
+ break;
+ }
+
+}
View
3 util.h
@@ -43,11 +43,14 @@
#endif
struct pool;
+enum dev_reason;
+struct cgpu_info;
bool stratum_send(struct pool *pool, char *s, ssize_t len);
char *recv_line(struct pool *pool);
bool parse_method(struct pool *pool, char *s);
bool extract_sockaddr(struct pool *pool, char *url);
bool auth_stratum(struct pool *pool);
bool initiate_stratum(struct pool *pool);
+void dev_error(struct cgpu_info *dev, enum dev_reason reason);
#endif /* __UTIL_H__ */

0 comments on commit 9f74e65

Please sign in to comment.