|
|
|
@ -929,17 +929,22 @@ static int64_t avalon_scanhash(struct thr_info *thr)
@@ -929,17 +929,22 @@ static int64_t avalon_scanhash(struct thr_info *thr)
|
|
|
|
|
elapsed.tv_sec, elapsed.tv_usec); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (unlikely(result_wrong >= avalon_get_work_count || |
|
|
|
|
(hash_count == 0 && ret != AVA_GETS_RESTART))) { |
|
|
|
|
/* This means FPGA controller gave all wrong results, so
|
|
|
|
|
* try to reset the Avalon */ |
|
|
|
|
do_avalon_close(thr); |
|
|
|
|
applog(LOG_ERR, |
|
|
|
|
"AVA%i: FPGA controller mess up, %d wrong results", avalon->device_id, result_wrong); |
|
|
|
|
dev_error(avalon, REASON_DEV_COMMS_ERROR); |
|
|
|
|
sleep(1); |
|
|
|
|
avalon_init(avalon); |
|
|
|
|
return 0; |
|
|
|
|
if (hash_count) { |
|
|
|
|
if (avalon->results < AVALON_ARRAY_SIZE) |
|
|
|
|
avalon->results++; |
|
|
|
|
} else if (unlikely((result_wrong >= avalon_get_work_count ) || |
|
|
|
|
(ret != AVA_GETS_RESTART && --avalon->results < 0))) { |
|
|
|
|
/* Look for all invalid results, or consecutive failure
|
|
|
|
|
* to generate any results suggesting the FPGA |
|
|
|
|
* controller has screwed up. */ |
|
|
|
|
do_avalon_close(thr); |
|
|
|
|
applog(LOG_ERR, |
|
|
|
|
"AVA%i: FPGA controller messed up, %d wrong results", |
|
|
|
|
avalon->device_id, result_wrong); |
|
|
|
|
dev_error(avalon, REASON_DEV_COMMS_ERROR); |
|
|
|
|
sleep(1); |
|
|
|
|
avalon_init(avalon); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
avalon_rotate_array(avalon); |
|
|
|
|