Browse Source

Unconditionally test for many wrong results on avalon and reset to avoid passing a corrupt avalon result to temperature code.

nfactor-troky
Con Kolivas 12 years ago
parent
commit
fdfb77e7c2
  1. 31
      driver-avalon.c

31
driver-avalon.c

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

Loading…
Cancel
Save