From 83675099b9ad29b3233aa5e55f68de3dc3360fe9 Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Wed, 15 Aug 2012 10:37:51 +1000 Subject: [PATCH] Revert "Only get bitforce temperature at a time when we have not requested any other responses to minimise risk of interleaved responses." This reverts commit e29d2d92c9aa730c642c8df55c2a96901dce5450. As P. Shep points out, this breaks re-enabling of a disabled device. --- driver-bitforce.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/driver-bitforce.c b/driver-bitforce.c index adcd6917..bf7c0390 100644 --- a/driver-bitforce.c +++ b/driver-bitforce.c @@ -338,19 +338,19 @@ void bitforce_init(struct cgpu_info *bitforce) mutex_unlock(&bitforce->device_mutex); } -static void bitforce_get_temp(struct cgpu_info *bitforce) +static bool bitforce_get_temp(struct cgpu_info *bitforce) { int fdDev = bitforce->device_fd; char pdevbuf[0x100]; char *s; if (!fdDev) - return; + return false; /* It is not critical getting temperature so don't get stuck if we * can't grab the mutex here */ if (mutex_trylock(&bitforce->device_mutex)) - return; + return false; BFwrite(fdDev, "ZLX", 3); BFgets(pdevbuf, sizeof(pdevbuf), fdDev); @@ -359,7 +359,7 @@ static void bitforce_get_temp(struct cgpu_info *bitforce) if (unlikely(!pdevbuf[0])) { applog(LOG_ERR, "BFL%i: Error: Get temp returned empty string/timed out", bitforce->device_id); bitforce->hw_errors++; - return; + return false; } if ((!strncasecmp(pdevbuf, "TEMP", 4)) && (s = strchr(pdevbuf + 4, ':'))) { @@ -384,7 +384,10 @@ static void bitforce_get_temp(struct cgpu_info *bitforce) /* Count throttling episodes as hardware errors */ bitforce->hw_errors++; bitforce_clear_buffer(bitforce); + return false;; } + + return true; } static bool bitforce_send_work(struct thr_info *thr, struct work *work) @@ -600,11 +603,6 @@ static int64_t bitforce_scanhash(struct thr_info *thr, struct work *work, int64_ send_ret = bitforce_send_work(thr, work); - /* A convenient time to ask for the temperature without risk of - * interleaved responses */ - if (send_ret && !work->blk.nonce) - bitforce_get_temp(bitforce); - if (!bitforce->nonce_range) { /* Initially wait 2/3 of the average cycle time so we can request more work before full scan is up */ @@ -615,7 +613,7 @@ static int64_t bitforce_scanhash(struct thr_info *thr, struct work *work, int64_ bitforce->wait_ms = sleep_time; queue_request(thr, false); - /* Now wait the final 1/3rd; no bitforce should be finished by now */ + /* Now wait athe final 1/3rd; no bitforce should be finished by now */ sleep_time = bitforce->sleep_ms - sleep_time; if (!restart_wait(sleep_time)) return 0; @@ -647,6 +645,11 @@ static int64_t bitforce_scanhash(struct thr_info *thr, struct work *work, int64_ return ret; } +static bool bitforce_get_stats(struct cgpu_info *bitforce) +{ + return bitforce_get_temp(bitforce); +} + static bool bitforce_thread_init(struct thr_info *thr) { struct cgpu_info *bitforce = thr->cgpu; @@ -682,6 +685,7 @@ struct device_api bitforce_api = { .get_api_stats = bitforce_api_stats, .reinit_device = bitforce_init, .get_statline_before = get_bitforce_statline_before, + .get_stats = bitforce_get_stats, .thread_prepare = bitforce_thread_prepare, .thread_init = bitforce_thread_init, .scanhash = bitforce_scanhash,