From b424612cce074e5f71fa8b33509fb1f1b52f69a2 Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Sun, 27 Oct 2013 13:35:47 +1100 Subject: [PATCH 1/3] Use a sanity check on timeout on windows. --- util.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/util.c b/util.c index 363c73c4..032a82ca 100644 --- a/util.c +++ b/util.c @@ -1061,9 +1061,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); From a821df6a27b7815de2c24f87e26d909f94d574b7 Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Sun, 27 Oct 2013 13:41:50 +1100 Subject: [PATCH 2/3] Correctly calculate sleep_estimate in usbutils that may have been preventing usecps from working. --- usbutils.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/usbutils.c b/usbutils.c index 17c1d74a..4c21e36f 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; } From 0e4997a7ae91c7ede70e836ac5267e4ff068d2f6 Mon Sep 17 00:00:00 2001 From: Kano Date: Mon, 28 Oct 2013 00:12:43 +1100 Subject: [PATCH 3/3] klondike remove SCNu8 - unsupported on windows --- driver-klondike.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/driver-klondike.c b/driver-klondike.c index dcdd671c..0d6d157f 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; }