Browse Source

Only get bitforce temperature at a time when we have not requested any other responses to minimise risk of interleaved responses.

nfactor-troky
Con Kolivas 12 years ago
parent
commit
e29d2d92c9
  1. 24
      driver-bitforce.c

24
driver-bitforce.c

@ -338,19 +338,19 @@ void bitforce_init(struct cgpu_info *bitforce)
mutex_unlock(&bitforce->device_mutex); mutex_unlock(&bitforce->device_mutex);
} }
static bool bitforce_get_temp(struct cgpu_info *bitforce) static void bitforce_get_temp(struct cgpu_info *bitforce)
{ {
int fdDev = bitforce->device_fd; int fdDev = bitforce->device_fd;
char pdevbuf[0x100]; char pdevbuf[0x100];
char *s; char *s;
if (!fdDev) if (!fdDev)
return false; return;
/* It is not critical getting temperature so don't get stuck if we /* It is not critical getting temperature so don't get stuck if we
* can't grab the mutex here */ * can't grab the mutex here */
if (mutex_trylock(&bitforce->device_mutex)) if (mutex_trylock(&bitforce->device_mutex))
return false; return;
BFwrite(fdDev, "ZLX", 3); BFwrite(fdDev, "ZLX", 3);
BFgets(pdevbuf, sizeof(pdevbuf), fdDev); BFgets(pdevbuf, sizeof(pdevbuf), fdDev);
@ -359,7 +359,7 @@ static bool bitforce_get_temp(struct cgpu_info *bitforce)
if (unlikely(!pdevbuf[0])) { if (unlikely(!pdevbuf[0])) {
applog(LOG_ERR, "BFL%i: Error: Get temp returned empty string/timed out", bitforce->device_id); applog(LOG_ERR, "BFL%i: Error: Get temp returned empty string/timed out", bitforce->device_id);
bitforce->hw_errors++; bitforce->hw_errors++;
return false; return;
} }
if ((!strncasecmp(pdevbuf, "TEMP", 4)) && (s = strchr(pdevbuf + 4, ':'))) { if ((!strncasecmp(pdevbuf, "TEMP", 4)) && (s = strchr(pdevbuf + 4, ':'))) {
@ -384,10 +384,7 @@ static bool bitforce_get_temp(struct cgpu_info *bitforce)
/* Count throttling episodes as hardware errors */ /* Count throttling episodes as hardware errors */
bitforce->hw_errors++; bitforce->hw_errors++;
bitforce_clear_buffer(bitforce); bitforce_clear_buffer(bitforce);
return false;;
} }
return true;
} }
static bool bitforce_send_work(struct thr_info *thr, struct work *work) static bool bitforce_send_work(struct thr_info *thr, struct work *work)
@ -603,6 +600,11 @@ static int64_t bitforce_scanhash(struct thr_info *thr, struct work *work, int64_
send_ret = bitforce_send_work(thr, work); 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) { if (!bitforce->nonce_range) {
/* Initially wait 2/3 of the average cycle time so we can request more /* Initially wait 2/3 of the average cycle time so we can request more
work before full scan is up */ work before full scan is up */
@ -613,7 +615,7 @@ static int64_t bitforce_scanhash(struct thr_info *thr, struct work *work, int64_
bitforce->wait_ms = sleep_time; bitforce->wait_ms = sleep_time;
queue_request(thr, false); queue_request(thr, false);
/* Now wait athe final 1/3rd; no bitforce should be finished by now */ /* Now wait the final 1/3rd; no bitforce should be finished by now */
sleep_time = bitforce->sleep_ms - sleep_time; sleep_time = bitforce->sleep_ms - sleep_time;
if (!restart_wait(sleep_time)) if (!restart_wait(sleep_time))
return 0; return 0;
@ -645,11 +647,6 @@ static int64_t bitforce_scanhash(struct thr_info *thr, struct work *work, int64_
return ret; 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) static bool bitforce_thread_init(struct thr_info *thr)
{ {
struct cgpu_info *bitforce = thr->cgpu; struct cgpu_info *bitforce = thr->cgpu;
@ -685,7 +682,6 @@ struct device_api bitforce_api = {
.get_api_stats = bitforce_api_stats, .get_api_stats = bitforce_api_stats,
.reinit_device = bitforce_init, .reinit_device = bitforce_init,
.get_statline_before = get_bitforce_statline_before, .get_statline_before = get_bitforce_statline_before,
.get_stats = bitforce_get_stats,
.thread_prepare = bitforce_thread_prepare, .thread_prepare = bitforce_thread_prepare,
.thread_init = bitforce_thread_init, .thread_init = bitforce_thread_init,
.scanhash = bitforce_scanhash, .scanhash = bitforce_scanhash,

Loading…
Cancel
Save