Restart_wait is only called with a ms value so incorporate that into the function.
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
diff --git a/cgminer.c b/cgminer.c
index 34612f9..a6ab03f 100644
--- a/cgminer.c
+++ b/cgminer.c
@@ -2490,19 +2490,23 @@ bool queue_request(struct thr_info *thr, bool needed);
* work restart is required. Returns the value of pthread_cond_timedwait
* which is zero if the condition was met or ETIMEDOUT if not.
*/
-int restart_wait(struct timeval *tdiff)
+int restart_wait(unsigned int mstime)
{
- struct timeval now, then;
+ struct timeval now, then, tdiff;
struct timespec abstime;
int rc;
+ tdiff.tv_sec = mstime / 1000;
+ tdiff.tv_usec = mstime * 1000 - (tdiff.tv_sec * 1000000);
gettimeofday(&now, NULL);
- timeradd(&now, tdiff, &then);
+ timeradd(&now, &tdiff, &then);
abstime.tv_sec = then.tv_sec;
abstime.tv_nsec = then.tv_usec * 1000;
+
mutex_lock(&restart_lock);
rc = pthread_cond_timedwait(&restart_cond, &restart_lock, &abstime);
mutex_unlock(&restart_lock);
+
return rc;
}
diff --git a/driver-bitforce.c b/driver-bitforce.c
index 3b1ea3a..17d6261 100644
--- a/driver-bitforce.c
+++ b/driver-bitforce.c
@@ -410,17 +410,10 @@ static void biforce_thread_enable(struct thr_info *thr)
bitforce_init(bitforce);
}
-static void ms_to_timeval(unsigned int mstime, struct timeval *ttime)
-{
- ttime->tv_sec = mstime / 1000;
- ttime->tv_usec = mstime * 1000 - (ttime->tv_sec * 1000000);
-}
-
static uint64_t bitforce_scanhash(struct thr_info *thr, struct work *work, uint64_t __maybe_unused max_nonce)
{
struct cgpu_info *bitforce = thr->cgpu;
unsigned int sleep_time;
- struct timeval tdiff;
uint64_t ret;
bitforce->wait_ms = 0;
@@ -430,8 +423,7 @@ static uint64_t bitforce_scanhash(struct thr_info *thr, struct work *work, uint6
/* Initially wait 2/3 of the average cycle time so we can request more
work before full scan is up */
sleep_time = (2 * bitforce->sleep_ms) / 3;
- ms_to_timeval(sleep_time, &tdiff);
- if (!restart_wait(&tdiff))
+ if (!restart_wait(sleep_time))
return 1;
bitforce->wait_ms += sleep_time;
@@ -439,15 +431,13 @@ static uint64_t bitforce_scanhash(struct thr_info *thr, struct work *work, uint6
/* Now wait athe final 1/3rd; no bitforce should be finished by now */
sleep_time = bitforce->sleep_ms - sleep_time;
- ms_to_timeval(sleep_time, &tdiff);
- if (!restart_wait(&tdiff))
+ if (!restart_wait(sleep_time))
return 1;
bitforce->wait_ms += sleep_time;
} else {
sleep_time = bitforce->sleep_ms;
- ms_to_timeval(sleep_time, &tdiff);
- if (!restart_wait(&tdiff))
+ if (!restart_wait(sleep_time))
return 1;
}
diff --git a/miner.h b/miner.h
index a155e52..c2a0bd5 100644
--- a/miner.h
+++ b/miner.h
@@ -577,7 +577,7 @@ extern pthread_cond_t restart_cond;
extern void thread_reportin(struct thr_info *thr);
extern bool queue_request(struct thr_info *thr, bool needed);
-extern int restart_wait(struct timeval *tdiff);
+extern int restart_wait(unsigned int mstime);
extern void kill_work(void);