Commit 47309e1a184e1f9bb718eb12277d7ac884cba8cb

Con Kolivas 2013-04-08T14:04:38

Revert "The result_wrong measurement for avalon is continually leading to false positives so remove it." This reverts commit 08c0ac290c1196b77388e747ced15d92fce57f18.

diff --git a/driver-avalon.c b/driver-avalon.c
index 9e54e76..6b7da56 100644
--- a/driver-avalon.c
+++ b/driver-avalon.c
@@ -829,6 +829,7 @@ static int64_t avalon_scanhash(struct thr_info *thr)
 	uint32_t nonce;
 	int64_t hash_count;
 	static int first_try = 0;
+	int result_wrong;
 
 	avalon = thr->cgpu;
 	works = avalon->works;
@@ -890,6 +891,7 @@ static int64_t avalon_scanhash(struct thr_info *thr)
 	elapsed.tv_sec = elapsed.tv_usec = 0;
 	gettimeofday(&tv_start, NULL);
 
+	result_wrong = 0;
 	hash_count = 0;
 	while (true) {
 		full = avalon_buffer_full(fd);
@@ -917,6 +919,7 @@ static int64_t avalon_scanhash(struct thr_info *thr)
 
 		if (!avalon_decode_nonce(thr, &ar, &nonce)) {
 			info->no_matching_work++;
+			result_wrong++;
 
 			if (opt_debug) {
 				timersub(&tv_finish, &tv_start, &elapsed);
@@ -936,6 +939,17 @@ static int64_t avalon_scanhash(struct thr_info *thr)
 			       elapsed.tv_sec, elapsed.tv_usec);
 		}
 	}
+	if (result_wrong >= avalon_get_work_count && ret != AVA_GETS_RESTART) {
+		/* This mean 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", avalon->device_id);
+		dev_error(avalon, REASON_DEV_COMMS_ERROR);
+		sleep(1);
+		avalon_init(avalon);
+		return 0;
+	}
 
 	avalon_free_work_array(thr);