Merge branch 'master' into kncminer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
diff --git a/driver-klondike.c b/driver-klondike.c
index dcdd671..0d6d157 100644
--- a/driver-klondike.c
+++ b/driver-klondike.c
@@ -695,17 +695,32 @@ static bool klondike_init(struct cgpu_info *klncgpu)
// boundaries are checked by device, with valid values returned
if (opt_klondike_options != NULL) {
- int hashclock;
+ int hashclock, fantarget;
double temp1, temp2;
- sscanf(opt_klondike_options, "%d:%lf:%lf:%"SCNu8,
+ sscanf(opt_klondike_options, "%d:%lf:%lf:%d",
&hashclock,
&temp1, &temp2,
- &kline.cfg.fantarget);
+ &fantarget);
SET_HASHCLOCK(kline.cfg.hashclock, hashclock);
kline.cfg.temptarget = cvtCToKln(temp1);
kline.cfg.tempcritical = cvtCToKln(temp2);
- kline.cfg.fantarget = (int)255*kline.cfg.fantarget/100;
+ if (fantarget < 0) {
+ applog(LOG_WARNING,
+ "%s%i: %s options invalid fantarget < 0 using 0",
+ klncgpu->drv->name,
+ klncgpu->device_id,
+ klncgpu->drv->dname);
+ fantarget = 0;
+ } else if (fantarget > 100) {
+ applog(LOG_WARNING,
+ "%s%i: %s options invalid fantarget > 100 using 100",
+ klncgpu->drv->name,
+ klncgpu->device_id,
+ klncgpu->drv->dname);
+ fantarget = 100;
+ }
+ kline.cfg.fantarget = (int)(255 * fantarget / 100);
size = sizeof(kline.cfg) - 2;
}
diff --git a/usbutils.c b/usbutils.c
index 17c1d74..4c21e36 100644
--- a/usbutils.c
+++ b/usbutils.c
@@ -2495,14 +2495,14 @@ int _usb_read(struct cgpu_info *cgpu, int intinfo, int epinfo, char *buf, size_t
cgtimer_t now, already_done;
double sleep_estimate;
double write_time = (double)(usbdev->last_write_siz) /
- (double)(usbdev->cps);
+ (double)(usbdev->cps) * 1000;
cgtimer_time(&now);
cgtimer_sub(&now, &usbdev->cgt_last_write, &already_done);
sleep_estimate = write_time - cgtimer_to_ms(&already_done);
if (sleep_estimate > 0.0) {
- cgsleep_ms_r(&usbdev->cgt_last_write, write_time * 1000.0);
+ cgsleep_ms_r(&usbdev->cgt_last_write, write_time);
cgpu->usbinfo.read_delay_count++;
cgpu->usbinfo.total_read_delay += sleep_estimate;
}
@@ -2596,14 +2596,14 @@ int _usb_read(struct cgpu_info *cgpu, int intinfo, int epinfo, char *buf, size_t
cgtimer_t now, already_done;
double sleep_estimate;
double write_time = (double)(usbdev->last_write_siz) /
- (double)(usbdev->cps);
+ (double)(usbdev->cps) * 1000;
cgtimer_time(&now);
cgtimer_sub(&now, &usbdev->cgt_last_write, &already_done);
sleep_estimate = write_time - cgtimer_to_ms(&already_done);
if (sleep_estimate > 0.0) {
- cgsleep_ms_r(&usbdev->cgt_last_write, write_time * 1000.0);
+ cgsleep_ms_r(&usbdev->cgt_last_write, write_time);
cgpu->usbinfo.read_delay_count++;
cgpu->usbinfo.total_read_delay += sleep_estimate;
}
@@ -2743,14 +2743,14 @@ int _usb_write(struct cgpu_info *cgpu, int intinfo, int epinfo, char *buf, size_
cgtimer_t now, already_done;
double sleep_estimate;
double write_time = (double)(usbdev->last_write_siz) /
- (double)(usbdev->cps);
+ (double)(usbdev->cps) * 1000;
cgtimer_time(&now);
cgtimer_sub(&now, &usbdev->cgt_last_write, &already_done);
sleep_estimate = write_time - cgtimer_to_ms(&already_done);
if (sleep_estimate > 0.0) {
- cgsleep_ms_r(&usbdev->cgt_last_write, write_time * 1000.0);
+ cgsleep_ms_r(&usbdev->cgt_last_write, write_time);
cgpu->usbinfo.write_delay_count++;
cgpu->usbinfo.total_write_delay += sleep_estimate;
}
@@ -2882,14 +2882,14 @@ int __usb_transfer(struct cgpu_info *cgpu, uint8_t request_type, uint8_t bReques
cgtimer_t now, already_done;
double sleep_estimate;
double write_time = (double)(usbdev->last_write_siz) /
- (double)(usbdev->cps);
+ (double)(usbdev->cps) * 1000;
cgtimer_time(&now);
cgtimer_sub(&now, &usbdev->cgt_last_write, &already_done);
sleep_estimate = write_time - cgtimer_to_ms(&already_done);
if (sleep_estimate > 0.0) {
- cgsleep_ms_r(&usbdev->cgt_last_write, write_time * 1000.0);
+ cgsleep_ms_r(&usbdev->cgt_last_write, write_time);
cgpu->usbinfo.write_delay_count++;
cgpu->usbinfo.total_write_delay += sleep_estimate;
}
@@ -2964,14 +2964,14 @@ int _usb_transfer_read(struct cgpu_info *cgpu, uint8_t request_type, uint8_t bRe
cgtimer_t now, already_done;
double sleep_estimate;
double write_time = (double)(usbdev->last_write_siz) /
- (double)(usbdev->cps);
+ (double)(usbdev->cps) * 1000;
cgtimer_time(&now);
cgtimer_sub(&now, &usbdev->cgt_last_write, &already_done);
sleep_estimate = write_time - cgtimer_to_ms(&already_done);
if (sleep_estimate > 0.0) {
- cgsleep_ms_r(&usbdev->cgt_last_write, write_time * 1000.0);
+ cgsleep_ms_r(&usbdev->cgt_last_write, write_time);
cgpu->usbinfo.read_delay_count++;
cgpu->usbinfo.total_read_delay += sleep_estimate;
}
diff --git a/util.c b/util.c
index 2966198..d3d2897 100644
--- a/util.c
+++ b/util.c
@@ -1079,9 +1079,13 @@ void cgtimer_time(cgtimer_t *ts_start)
static void liSleep(LARGE_INTEGER *li, int timeout)
{
- HANDLE hTimer = CreateWaitableTimer(NULL, TRUE, NULL);
+ HANDLE hTimer;
DWORD ret;
+ if (unlikely(timeout <= 0))
+ return;
+
+ hTimer = CreateWaitableTimer(NULL, TRUE, NULL);
if (unlikely(!hTimer))
quit(1, "Failed to create hTimer in liSleep");
ret = SetWaitableTimer(hTimer, li, 0, NULL, NULL, 0);