diff --git a/driver-ztex.c b/driver-ztex.c index de7011f3..41ee3b0c 100644 --- a/driver-ztex.c +++ b/driver-ztex.c @@ -223,6 +223,8 @@ static int64_t ztex_scanhash(struct thr_info *thr, struct work *work, overflow = false; int count = 0; + int validNonces = 0; + double errorCount = 0; applog(LOG_DEBUG, "%s: entering poll loop", ztex->repr); while (!(overflow || thr->work_restart)) { @@ -274,10 +276,13 @@ static int64_t ztex_scanhash(struct thr_info *thr, struct work *work, // do not count errors in the first 500ms after sendHashData (2x250 wait time) if (count > 2) { - ztex->errorCount[ztex->freqM] += 1.0 / ztex->numNonces; thr->cgpu->hw_errors++; + errorCount += (1.0 / ztex->numNonces); } } + else + validNonces++; + for (j=0; j<=ztex->extraSolutions; j++) { nonce = hdata[i].goldenNonce[j]; @@ -313,6 +318,18 @@ static int64_t ztex_scanhash(struct thr_info *thr, struct work *work, } } + // only add the errorCount if we had at least some valid nonces or + // had no valid nonces in the last round + if (ztex->nonceCheckValid > 0 && validNonces == 0) { + applog(LOG_ERR, "%s: resetting %.1f errors", ztex->repr, errorCount); + } + else { + ztex->errorCount[ztex->freqM] += errorCount; + } + + // remember the number of valid nonces for the check in the next round + ztex->nonceCheckValid = validNonces; + ztex->errorRate[ztex->freqM] = ztex->errorCount[ztex->freqM] / ztex->errorWeight[ztex->freqM] * (ztex->errorWeight[ztex->freqM] < 100? ztex->errorWeight[ztex->freqM] * 0.01: 1.0); if (ztex->errorRate[ztex->freqM] > ztex->maxErrorRate[ztex->freqM]) ztex->maxErrorRate[ztex->freqM] = ztex->errorRate[ztex->freqM]; diff --git a/libztex.c b/libztex.c index d33c5c59..b3dfbebe 100644 --- a/libztex.c +++ b/libztex.c @@ -701,6 +701,9 @@ int libztex_prepare_device(struct libusb_device *dev, struct libztex_device** zt newdev->maxErrorRate[cnt] = 0; } + // fake that the last round found something valid + newdev->nonceCheckValid = 1; + newdev->usbbus = libusb_get_bus_number(dev); newdev->usbaddress = libusb_get_device_address(dev); sprintf(newdev->repr, "ZTEX %s-1", newdev->snString); diff --git a/libztex.h b/libztex.h index ffd056ea..c1d09b60 100644 --- a/libztex.h +++ b/libztex.h @@ -73,6 +73,8 @@ struct libztex_device { double errorRate[256]; double maxErrorRate[256]; + int16_t nonceCheckValid; + int16_t numberOfFpgas; int selectedFpga; bool parallelConfigSupport;