Commit fba70ff593e095554b0041dc12de8bfc167b0d11

Con Kolivas 2013-05-26T01:51:20

Simplify debugging and only discard from avalon read buffer if at least one full result has been discarded.

diff --git a/driver-avalon.c b/driver-avalon.c
index 20e0ed7..3031eb3 100644
--- a/driver-avalon.c
+++ b/driver-avalon.c
@@ -650,23 +650,24 @@ static void avalon_parse_results(struct cgpu_info *avalon, struct avalon_info *i
 
 	if (!found) {
 		spare = *offset - AVALON_READ_SIZE;
-		if (spare)
-			applog(LOG_WARNING, "Avalon: Discarding %d bytes from buffer", spare);
+		/* We are buffering and haven't accumulated one more corrupt
+		 * work result. */
+		if (spare < (int)AVALON_READ_SIZE)
+			return;
+		applog(LOG_WARNING, "Avalon: Discarding %d bytes from buffer", spare);
+
+		inc_hw_errors(thr);
+		mutex_lock(&info->lock);
+		info->no_matching_work++;
+		mutex_unlock(&info->lock);
 	} else {
 		spare = AVALON_READ_SIZE + i;
 		if (i)
 			applog(LOG_WARNING, "Avalon: Discarding %d bytes from buffer", i);
 	}
-	if (spare) {
-		*offset -= spare;
-		memmove(buf, buf + spare, *offset);
-	}
 
-	if (!found) {
-		mutex_lock(&info->lock);
-		info->no_matching_work++;
-		mutex_unlock(&info->lock);
-	}
+	*offset -= spare;
+	memmove(buf, buf + spare, *offset);
 }
 
 static void *avalon_get_results(void *userdata)