Browse Source

MMQ allow partial work replies and count them

Kano 13 years ago
parent
commit
38ff2a7df9
2 changed files with 13 additions and 2 deletions
  1. 12 2
      driver-modminer.c
  2. 1 0
      miner.h

+ 12 - 2
driver-modminer.c

@@ -873,7 +873,7 @@ static uint64_t modminer_process_results(struct thr_info *thr)
 	char cmd[2];
 	uint32_t nonce;
 	uint32_t curr_hw_errors;
-	int err, amount;
+	int err, amount, amount2;
 	int timeoutloop;
 	double timeout;
 	int temploop;
@@ -908,6 +908,16 @@ static uint64_t modminer_process_results(struct thr_info *thr)
 		}
 
 		err = usb_read(modminer, (char *)(&nonce), 4, &amount, C_GETWORKSTATUS);
+		while (err == LIBUSB_SUCCESS && amount < 4) {
+			size_t remain = 4 - amount;
+			char *pos = ((char *)(&nonce)) + amount;
+
+			state->success_more++;
+
+			err = usb_read(modminer, pos, remain, &amount2, C_GETWORKSTATUS);
+
+			amount += amount2;
+		}
 		mutex_unlock(modminer->modminer_mutex);
 
 		if (err < 0 || amount < 4) {
@@ -917,7 +927,7 @@ static uint64_t modminer_process_results(struct thr_info *thr)
 				goto tryagain;
 
 			applog(LOG_ERR, "%s%u: Error reading (get nonce) (%d:%d)",
-				modminer->api->name, modminer->device_id, amount, err);
+				modminer->api->name, modminer->device_id, amount+amount2, err);
 		}
 
 		if (memcmp(&nonce, "\xff\xff\xff\xff", 4)) {

+ 1 - 0
miner.h

@@ -1033,6 +1033,7 @@ struct modminer_fpga_state {
 	uint32_t shares_last_hw;
 	uint32_t hw_errors;
 	uint32_t shares_to_good;
+	uint32_t success_more;
 	struct timeval last_changed;
 	struct timeval last_nonce;
 	struct timeval first_work;