Provide a noop can_limit_work for devices that don't support it.
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
diff --git a/cgminer.c b/cgminer.c
index 4b33a43..6443427 100644
--- a/cgminer.c
+++ b/cgminer.c
@@ -5372,7 +5372,7 @@ void *miner_thread(void *userdata)
const long cycle = opt_log_interval / 5 ? : 1;
struct timeval tv_start, tv_end, tv_workstart, tv_lastupdate;
struct timeval diff, sdiff, wdiff = {0, 0};
- uint32_t max_nonce = drv->can_limit_work ? drv->can_limit_work(mythr) : 0xffffffff;
+ uint32_t max_nonce = drv->can_limit_work(mythr);
int64_t hashes_done = 0;
int64_t hashes;
struct work *work;
@@ -5478,7 +5478,7 @@ void *miner_thread(void *userdata)
if (unlikely((long)sdiff.tv_sec < cycle)) {
int mult;
- if (likely(!drv->can_limit_work || max_nonce == 0xffffffff))
+ if (likely(max_nonce == 0xffffffff))
continue;
mult = 1000000 / ((sdiff.tv_usec + 0x400) / 0x400) + 0x10;
@@ -5487,9 +5487,9 @@ void *miner_thread(void *userdata)
max_nonce = 0xffffffff;
else
max_nonce = (max_nonce * mult) / 0x400;
- } else if (unlikely(sdiff.tv_sec > cycle) && drv->can_limit_work)
+ } else if (unlikely(sdiff.tv_sec > cycle))
max_nonce = max_nonce * cycle / sdiff.tv_sec;
- else if (unlikely(sdiff.tv_usec > 100000) && drv->can_limit_work)
+ else if (unlikely(sdiff.tv_usec > 100000))
max_nonce = max_nonce * 0x400 / (((cycle * 1000000) + sdiff.tv_usec) / (cycle * 1000000 / 0x400));
timersub(&tv_end, &tv_lastupdate, &diff);
@@ -6389,6 +6389,11 @@ static bool noop_thread_prepare(struct thr_info __maybe_unused *thr)
return true;
}
+static uint64_t noop_can_limit_work(struct thr_info __maybe_unused *thr)
+{
+ return 0xffffffff;
+}
+
/* Fill missing driver api functions with noops */
void fill_device_api(struct cgpu_info *cgpu)
{
@@ -6404,6 +6409,8 @@ void fill_device_api(struct cgpu_info *cgpu)
drv->get_stats = &noop_get_stats;
if (!drv->thread_prepare)
drv->thread_prepare = &noop_thread_prepare;
+ if (!drv->can_limit_work)
+ drv->can_limit_work = &noop_can_limit_work;
}
void enable_device(struct cgpu_info *cgpu)