Browse Source

Turn work_restart array into a bool in thr_info

Luke Dashjr 13 years ago
parent
commit
d4af2d0535
16 changed files with 49 additions and 61 deletions
  1. 3 9
      cgminer.c
  2. 1 1
      driver-bitforce.c
  3. 12 14
      driver-cpu.c
  4. 1 1
      driver-cpu.h
  5. 7 5
      driver-icarus.c
  6. 1 1
      driver-modminer.c
  7. 3 3
      driver-ztex.c
  8. 3 7
      miner.h
  9. 2 2
      sha256_4way.c
  10. 2 2
      sha256_altivec_4way.c
  11. 4 6
      sha256_cryptopp.c
  12. 2 2
      sha256_generic.c
  13. 2 2
      sha256_sse2_amd64.c
  14. 2 2
      sha256_sse2_i386.c
  15. 2 2
      sha256_sse4_amd64.c
  16. 2 2
      sha256_via.c

+ 3 - 9
cgminer.c

@@ -158,8 +158,6 @@ int gpur_thr_id;
 static int api_thr_id;
 static int api_thr_id;
 static int total_threads;
 static int total_threads;
 
 
-struct work_restart *work_restart = NULL;
-
 static pthread_mutex_t hash_lock;
 static pthread_mutex_t hash_lock;
 static pthread_mutex_t qd_lock;
 static pthread_mutex_t qd_lock;
 static pthread_mutex_t *stgd_lock;
 static pthread_mutex_t *stgd_lock;
@@ -2516,7 +2514,7 @@ static void restart_threads(void)
 	queue_request(NULL, true);
 	queue_request(NULL, true);
 
 
 	for (i = 0; i < mining_threads; i++)
 	for (i = 0; i < mining_threads; i++)
-		work_restart[i].restart = 1;
+		thr_info[i].work_restart = true;
 
 
 	mutex_lock(&restart_lock);
 	mutex_lock(&restart_lock);
 	pthread_cond_broadcast(&restart_cond);
 	pthread_cond_broadcast(&restart_cond);
@@ -4021,7 +4019,7 @@ void *miner_thread(void *userdata)
 	gettimeofday(&tv_lastupdate, NULL);
 	gettimeofday(&tv_lastupdate, NULL);
 
 
 	while (1) {
 	while (1) {
-		work_restart[thr_id].restart = 0;
+		mythr->work_restart = false;
 		if (api->free_work && likely(work->pool))
 		if (api->free_work && likely(work->pool))
 			api->free_work(mythr, work);
 			api->free_work(mythr, work);
 		if (unlikely(!get_work(work, requested, mythr, thr_id))) {
 		if (unlikely(!get_work(work, requested, mythr, thr_id))) {
@@ -4076,7 +4074,7 @@ void *miner_thread(void *userdata)
 
 
 			gettimeofday(&getwork_start, NULL);
 			gettimeofday(&getwork_start, NULL);
 
 
-			if (unlikely(work_restart[thr_id].restart)) {
+			if (unlikely(mythr->work_restart)) {
 
 
 				/* Apart from device_thread 0, we stagger the
 				/* Apart from device_thread 0, we stagger the
 				 * starting of every next thread to try and get
 				 * starting of every next thread to try and get
@@ -5326,10 +5324,6 @@ int main(int argc, char *argv[])
 	#endif // defined(unix)
 	#endif // defined(unix)
 
 
 	total_threads = mining_threads + 7;
 	total_threads = mining_threads + 7;
-	work_restart = calloc(total_threads, sizeof(*work_restart));
-	if (!work_restart)
-		quit(1, "Failed to calloc work_restart");
-
 	thr_info = calloc(total_threads, sizeof(*thr));
 	thr_info = calloc(total_threads, sizeof(*thr));
 	if (!thr_info)
 	if (!thr_info)
 		quit(1, "Failed to calloc thr_info");
 		quit(1, "Failed to calloc thr_info");

+ 1 - 1
driver-bitforce.c

@@ -308,7 +308,7 @@ static uint64_t bitforce_get_result(struct thr_info *thr, struct work *work)
 		return 0;
 		return 0;
 
 
 	while (bitforce->wait_ms < BITFORCE_LONG_TIMEOUT_MS) {
 	while (bitforce->wait_ms < BITFORCE_LONG_TIMEOUT_MS) {
-		if (unlikely(work_restart[thr->id].restart))
+		if (unlikely(thr->work_restart))
 			return 1;
 			return 1;
 		mutex_lock(&bitforce->device_mutex);
 		mutex_lock(&bitforce->device_mutex);
 		BFwrite(fdDev, "ZFX", 3);
 		BFwrite(fdDev, "ZFX", 3);

+ 12 - 14
driver-cpu.c

@@ -81,51 +81,51 @@ extern int dev_from_id(int thr_id);
 
 
 
 
 /* chipset-optimized hash functions */
 /* chipset-optimized hash functions */
-extern bool ScanHash_4WaySSE2(int, const unsigned char *pmidstate,
+extern bool ScanHash_4WaySSE2(struct thr_info*, const unsigned char *pmidstate,
 	unsigned char *pdata, unsigned char *phash1, unsigned char *phash,
 	unsigned char *pdata, unsigned char *phash1, unsigned char *phash,
 	const unsigned char *ptarget,
 	const unsigned char *ptarget,
 	uint32_t max_nonce, uint32_t *last_nonce, uint32_t nonce);
 	uint32_t max_nonce, uint32_t *last_nonce, uint32_t nonce);
 
 
-extern bool ScanHash_altivec_4way(int thr_id, const unsigned char *pmidstate,
+extern bool ScanHash_altivec_4way(struct thr_info*, const unsigned char *pmidstate,
 	unsigned char *pdata,
 	unsigned char *pdata,
 	unsigned char *phash1, unsigned char *phash,
 	unsigned char *phash1, unsigned char *phash,
 	const unsigned char *ptarget,
 	const unsigned char *ptarget,
 	uint32_t max_nonce, uint32_t *last_nonce, uint32_t nonce);
 	uint32_t max_nonce, uint32_t *last_nonce, uint32_t nonce);
 
 
-extern bool scanhash_via(int, const unsigned char *pmidstate,
+extern bool scanhash_via(struct thr_info*, const unsigned char *pmidstate,
 	unsigned char *pdata,
 	unsigned char *pdata,
 	unsigned char *phash1, unsigned char *phash,
 	unsigned char *phash1, unsigned char *phash,
 	const unsigned char *target,
 	const unsigned char *target,
 	uint32_t max_nonce, uint32_t *last_nonce, uint32_t n);
 	uint32_t max_nonce, uint32_t *last_nonce, uint32_t n);
 
 
-extern bool scanhash_c(int, const unsigned char *midstate, unsigned char *data,
+extern bool scanhash_c(struct thr_info*, const unsigned char *midstate, unsigned char *data,
 	      unsigned char *hash1, unsigned char *hash,
 	      unsigned char *hash1, unsigned char *hash,
 	      const unsigned char *target,
 	      const unsigned char *target,
 	      uint32_t max_nonce, uint32_t *last_nonce, uint32_t n);
 	      uint32_t max_nonce, uint32_t *last_nonce, uint32_t n);
 
 
-extern bool scanhash_cryptopp(int, const unsigned char *midstate,unsigned char *data,
+extern bool scanhash_cryptopp(struct thr_info*, const unsigned char *midstate,unsigned char *data,
 	      unsigned char *hash1, unsigned char *hash,
 	      unsigned char *hash1, unsigned char *hash,
 	      const unsigned char *target,
 	      const unsigned char *target,
 	      uint32_t max_nonce, uint32_t *last_nonce, uint32_t n);
 	      uint32_t max_nonce, uint32_t *last_nonce, uint32_t n);
 
 
-extern bool scanhash_asm32(int, const unsigned char *midstate,unsigned char *data,
+extern bool scanhash_asm32(struct thr_info*, const unsigned char *midstate,unsigned char *data,
 	      unsigned char *hash1, unsigned char *hash,
 	      unsigned char *hash1, unsigned char *hash,
 	      const unsigned char *target,
 	      const unsigned char *target,
 	      uint32_t max_nonce, uint32_t *last_nonce, uint32_t nonce);
 	      uint32_t max_nonce, uint32_t *last_nonce, uint32_t nonce);
 
 
-extern bool scanhash_sse2_64(int, const unsigned char *pmidstate, unsigned char *pdata,
+extern bool scanhash_sse2_64(struct thr_info*, const unsigned char *pmidstate, unsigned char *pdata,
 	unsigned char *phash1, unsigned char *phash,
 	unsigned char *phash1, unsigned char *phash,
 	const unsigned char *ptarget,
 	const unsigned char *ptarget,
 	uint32_t max_nonce, uint32_t *last_nonce,
 	uint32_t max_nonce, uint32_t *last_nonce,
 	uint32_t nonce);
 	uint32_t nonce);
 
 
-extern bool scanhash_sse4_64(int, const unsigned char *pmidstate, unsigned char *pdata,
+extern bool scanhash_sse4_64(struct thr_info*, const unsigned char *pmidstate, unsigned char *pdata,
 	unsigned char *phash1, unsigned char *phash,
 	unsigned char *phash1, unsigned char *phash,
 	const unsigned char *ptarget,
 	const unsigned char *ptarget,
 	uint32_t max_nonce, uint32_t *last_nonce,
 	uint32_t max_nonce, uint32_t *last_nonce,
 	uint32_t nonce);
 	uint32_t nonce);
 
 
-extern bool scanhash_sse2_32(int, const unsigned char *pmidstate, unsigned char *pdata,
+extern bool scanhash_sse2_32(struct thr_info*, const unsigned char *pmidstate, unsigned char *pdata,
 	unsigned char *phash1, unsigned char *phash,
 	unsigned char *phash1, unsigned char *phash,
 	const unsigned char *ptarget,
 	const unsigned char *ptarget,
 	uint32_t max_nonce, uint32_t *last_nonce,
 	uint32_t max_nonce, uint32_t *last_nonce,
@@ -224,8 +224,7 @@ double bench_algo_stage3(
 	memset(&work, 0, sizeof(work));
 	memset(&work, 0, sizeof(work));
 	memcpy(&work, &bench_block, min_size);
 	memcpy(&work, &bench_block, min_size);
 
 
-	struct work_restart dummy;
-	work_restart = &dummy;
+	struct thr_info dummy = {0};
 
 
 	struct timeval end;
 	struct timeval end;
 	struct timeval start;
 	struct timeval start;
@@ -236,7 +235,7 @@ double bench_algo_stage3(
 			{
 			{
 				sha256_func func = sha256_funcs[algo];
 				sha256_func func = sha256_funcs[algo];
 				(*func)(
 				(*func)(
-					0,
+					&dummy,
 					work.midstate,
 					work.midstate,
 					work.data,
 					work.data,
 					work.hash1,
 					work.hash1,
@@ -248,7 +247,6 @@ double bench_algo_stage3(
 				);
 				);
 			}
 			}
 	gettimeofday(&end, 0);
 	gettimeofday(&end, 0);
-	work_restart = NULL;
 
 
 	uint64_t usec_end = ((uint64_t)end.tv_sec)*1000*1000 + end.tv_usec;
 	uint64_t usec_end = ((uint64_t)end.tv_sec)*1000*1000 + end.tv_usec;
 	uint64_t usec_start = ((uint64_t)start.tv_sec)*1000*1000 + start.tv_usec;
 	uint64_t usec_start = ((uint64_t)start.tv_sec)*1000*1000 + start.tv_usec;
@@ -795,7 +793,7 @@ CPUSearch:
 	{
 	{
 		sha256_func func = sha256_funcs[opt_algo];
 		sha256_func func = sha256_funcs[opt_algo];
 		rc = (*func)(
 		rc = (*func)(
-			thr_id,
+			thr,
 			work->midstate,
 			work->midstate,
 			work->data,
 			work->data,
 			work->hash1,
 			work->hash1,

+ 1 - 1
driver-cpu.h

@@ -1,7 +1,7 @@
 #ifndef __DEVICE_CPU_H__
 #ifndef __DEVICE_CPU_H__
 #define __DEVICE_CPU_H__
 #define __DEVICE_CPU_H__
 
 
-#include "miner.h" /* for work_restart, TODO: re-factor dependency */
+#include "miner.h"
 
 
 #include "config.h"
 #include "config.h"
 #include <stdbool.h>
 #include <stdbool.h>

+ 7 - 5
driver-icarus.c

@@ -198,7 +198,7 @@ static void rev(unsigned char *s, size_t l)
 #define icarus_open2(devpath, purge)  serial_open(devpath, 115200, ICARUS_READ_FAULT_DECISECONDS, purge)
 #define icarus_open2(devpath, purge)  serial_open(devpath, 115200, ICARUS_READ_FAULT_DECISECONDS, purge)
 #define icarus_open(devpath)  icarus_open2(devpath, false)
 #define icarus_open(devpath)  icarus_open2(devpath, false)
 
 
-static int icarus_gets(unsigned char *buf, int fd, struct timeval *tv_finish, int thr_id, int read_count)
+static int icarus_gets(unsigned char *buf, int fd, struct timeval *tv_finish, struct thr_info *thr, int read_count)
 {
 {
 	ssize_t ret = 0;
 	ssize_t ret = 0;
 	int rc = 0;
 	int rc = 0;
@@ -232,7 +232,7 @@ static int icarus_gets(unsigned char *buf, int fd, struct timeval *tv_finish, in
 			return 1;
 			return 1;
 		}
 		}
 
 
-		if (thr_id >= 0 && work_restart[thr_id].restart) {
+		if (thr->work_restart) {
 			if (opt_debug) {
 			if (opt_debug) {
 				applog(LOG_DEBUG,
 				applog(LOG_DEBUG,
 					"Icarus Read: Work restart at %.2f seconds",
 					"Icarus Read: Work restart at %.2f seconds",
@@ -392,7 +392,10 @@ static bool icarus_detect_one(const char *devpath)
 	gettimeofday(&tv_start, NULL);
 	gettimeofday(&tv_start, NULL);
 
 
 	memset(nonce_bin, 0, sizeof(nonce_bin));
 	memset(nonce_bin, 0, sizeof(nonce_bin));
-	icarus_gets(nonce_bin, fd, &tv_finish, -1, 1);
+	struct thr_info dummy = {
+		.work_restart = false,
+	};
+	icarus_gets(nonce_bin, fd, &tv_finish, &dummy, 1);
 
 
 	icarus_close(fd);
 	icarus_close(fd);
 
 
@@ -474,7 +477,6 @@ static bool icarus_prepare(struct thr_info *thr)
 static uint64_t icarus_scanhash(struct thr_info *thr, struct work *work,
 static uint64_t icarus_scanhash(struct thr_info *thr, struct work *work,
 				__maybe_unused uint64_t max_nonce)
 				__maybe_unused uint64_t max_nonce)
 {
 {
-	const int thr_id = thr->id;
 	struct cgpu_info *icarus;
 	struct cgpu_info *icarus;
 	int fd;
 	int fd;
 	int ret;
 	int ret;
@@ -529,7 +531,7 @@ static uint64_t icarus_scanhash(struct thr_info *thr, struct work *work,
 	/* Icarus will return 4 bytes (ICARUS_READ_SIZE) nonces or nothing */
 	/* Icarus will return 4 bytes (ICARUS_READ_SIZE) nonces or nothing */
 	memset(nonce_bin, 0, sizeof(nonce_bin));
 	memset(nonce_bin, 0, sizeof(nonce_bin));
 	info = icarus_info[icarus->device_id];
 	info = icarus_info[icarus->device_id];
-	ret = icarus_gets(nonce_bin, fd, &tv_finish, thr_id, info->read_count);
+	ret = icarus_gets(nonce_bin, fd, &tv_finish, thr, info->read_count);
 
 
 	work->blk.nonce = 0xffffffff;
 	work->blk.nonce = 0xffffffff;
 	memcpy((char *)&nonce, nonce_bin, sizeof(nonce_bin));
 	memcpy((char *)&nonce, nonce_bin, sizeof(nonce_bin));

+ 1 - 1
driver-modminer.c

@@ -390,7 +390,7 @@ fd_set fds;
 	return true;
 	return true;
 }
 }
 
 
-#define work_restart(thr)  work_restart[thr->id].restart
+#define work_restart(thr)  thr->work_restart
 
 
 static uint64_t
 static uint64_t
 modminer_process_results(struct thr_info*thr)
 modminer_process_results(struct thr_info*thr)

+ 3 - 3
driver-ztex.c

@@ -240,9 +240,9 @@ static uint64_t ztex_scanhash(struct thr_info *thr, struct work *work,
 	overflow = false;
 	overflow = false;
 
 
 	applog(LOG_DEBUG, "%s: entering poll loop", ztex->repr);
 	applog(LOG_DEBUG, "%s: entering poll loop", ztex->repr);
-	while (!(overflow || work_restart[thr->id].restart)) {
+	while (!(overflow || thr->work_restart)) {
 		usleep(250000);
 		usleep(250000);
-		if (work_restart[thr->id].restart) {
+		if (thr->work_restart) {
 			applog(LOG_DEBUG, "%s: New work detected", ztex->repr);
 			applog(LOG_DEBUG, "%s: New work detected", ztex->repr);
 			break;
 			break;
 		}
 		}
@@ -265,7 +265,7 @@ static uint64_t ztex_scanhash(struct thr_info *thr, struct work *work,
 		}
 		}
 		ztex_releaseFpga(ztex);
 		ztex_releaseFpga(ztex);
 
 
-		if (work_restart[thr->id].restart) {
+		if (thr->work_restart) {
 			applog(LOG_DEBUG, "%s: New work detected", ztex->repr);
 			applog(LOG_DEBUG, "%s: New work detected", ztex->repr);
 			break;
 			break;
 		}
 		}

+ 3 - 7
miner.h

@@ -419,6 +419,8 @@ struct thr_info {
 	bool	pause;
 	bool	pause;
 	bool	getwork;
 	bool	getwork;
 	double	rolling;
 	double	rolling;
+
+	bool	work_restart;
 };
 };
 
 
 extern int thr_info_create(struct thr_info *thr, pthread_attr_t *attr, void *(*start) (void *), void *arg);
 extern int thr_info_create(struct thr_info *thr, pthread_attr_t *attr, void *(*start) (void *), void *arg);
@@ -553,7 +555,7 @@ extern json_t *json_rpc_call(CURL *curl, const char *url, const char *userpass,
 extern char *bin2hex(const unsigned char *p, size_t len);
 extern char *bin2hex(const unsigned char *p, size_t len);
 extern bool hex2bin(unsigned char *p, const char *hexstr, size_t len);
 extern bool hex2bin(unsigned char *p, const char *hexstr, size_t len);
 
 
-typedef bool (*sha256_func)(int thr_id, const unsigned char *pmidstate,
+typedef bool (*sha256_func)(struct thr_info*, const unsigned char *pmidstate,
 	unsigned char *pdata,
 	unsigned char *pdata,
 	unsigned char *phash1, unsigned char *phash,
 	unsigned char *phash1, unsigned char *phash,
 	const unsigned char *ptarget,
 	const unsigned char *ptarget,
@@ -565,11 +567,6 @@ extern bool fulltest(const unsigned char *hash, const unsigned char *target);
 
 
 extern int opt_scantime;
 extern int opt_scantime;
 
 
-struct work_restart {
-	volatile unsigned long	restart;
-	char			padding[128 - sizeof(unsigned long)];
-};
-
 extern pthread_mutex_t restart_lock;
 extern pthread_mutex_t restart_lock;
 extern pthread_cond_t restart_cond;
 extern pthread_cond_t restart_cond;
 
 
@@ -609,7 +606,6 @@ extern int num_processors;
 extern int hw_errors;
 extern int hw_errors;
 extern bool use_syslog;
 extern bool use_syslog;
 extern struct thr_info *thr_info;
 extern struct thr_info *thr_info;
-extern struct work_restart *work_restart;
 extern struct cgpu_info gpus[MAX_GPUDEVICES];
 extern struct cgpu_info gpus[MAX_GPUDEVICES];
 extern int gpu_threads;
 extern int gpu_threads;
 extern double total_secs;
 extern double total_secs;

+ 2 - 2
sha256_4way.c

@@ -100,7 +100,7 @@ static const unsigned int pSHA256InitState[8] =
 {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19};
 {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19};
 
 
 
 
-bool ScanHash_4WaySSE2(int thr_id, const unsigned char *pmidstate,
+bool ScanHash_4WaySSE2(struct thr_info*thr, const unsigned char *pmidstate,
 	unsigned char *pdata,
 	unsigned char *pdata,
 	unsigned char *phash1, unsigned char *phash,
 	unsigned char *phash1, unsigned char *phash,
 	const unsigned char *ptarget,
 	const unsigned char *ptarget,
@@ -139,7 +139,7 @@ bool ScanHash_4WaySSE2(int thr_id, const unsigned char *pmidstate,
             }
             }
         }
         }
 
 
-        if ((nonce >= max_nonce) || work_restart[thr_id].restart)
+        if ((nonce >= max_nonce) || thr->work_restart)
         {
         {
             *last_nonce = nonce;
             *last_nonce = nonce;
             return false;
             return false;

+ 2 - 2
sha256_altivec_4way.c

@@ -73,7 +73,7 @@ static const unsigned int pSHA256InitState[8] =
 {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19};
 {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19};
 
 
 
 
-bool ScanHash_altivec_4way(int thr_id, const unsigned char *pmidstate,
+bool ScanHash_altivec_4way(struct thr_info*thr, const unsigned char *pmidstate,
 	unsigned char *pdata,
 	unsigned char *pdata,
 	unsigned char *phash1, unsigned char *phash,
 	unsigned char *phash1, unsigned char *phash,
 	const unsigned char *ptarget,
 	const unsigned char *ptarget,
@@ -111,7 +111,7 @@ bool ScanHash_altivec_4way(int thr_id, const unsigned char *pmidstate,
             }
             }
         }
         }
 
 
-        if ((nonce >= max_nonce) || work_restart[thr_id].restart)
+        if ((nonce >= max_nonce) || thr->work_restart)
         {
         {
             *last_nonce = nonce;
             *last_nonce = nonce;
             return false;
             return false;

+ 4 - 6
sha256_cryptopp.c

@@ -93,7 +93,7 @@ static void runhash(void *state, const void *input, const void *init)
 }
 }
 
 
 /* suspiciously similar to ScanHash* from bitcoin */
 /* suspiciously similar to ScanHash* from bitcoin */
-bool scanhash_cryptopp(int thr_id, const unsigned char *midstate,
+bool scanhash_cryptopp(struct thr_info*thr, const unsigned char *midstate,
 		unsigned char *data,
 		unsigned char *data,
 	        unsigned char *hash1, unsigned char *hash,
 	        unsigned char *hash1, unsigned char *hash,
 		const unsigned char *target,
 		const unsigned char *target,
@@ -105,8 +105,6 @@ bool scanhash_cryptopp(int thr_id, const unsigned char *midstate,
 
 
 	data += 64;
 	data += 64;
 
 
-	work_restart[thr_id].restart = 0;
-
 	while (1) {
 	while (1) {
 		n++;
 		n++;
 		*nonce = n;
 		*nonce = n;
@@ -119,7 +117,7 @@ bool scanhash_cryptopp(int thr_id, const unsigned char *midstate,
 			return true;
 			return true;
 		}
 		}
 
 
-		if ((n >= max_nonce) || work_restart[thr_id].restart) {
+		if ((n >= max_nonce) || thr->work_restart) {
 			*last_nonce = n;
 			*last_nonce = n;
 			return false;
 			return false;
 		}
 		}
@@ -577,7 +575,7 @@ static void runhash32(void *state, const void *input, const void *init)
 }
 }
 
 
 /* suspiciously similar to ScanHash* from bitcoin */
 /* suspiciously similar to ScanHash* from bitcoin */
-bool scanhash_asm32(int thr_id, const unsigned char *midstate,
+bool scanhash_asm32(struct thr_info*thr, const unsigned char *midstate,
 		unsigned char *data,
 		unsigned char *data,
 	        unsigned char *hash1, unsigned char *hash,
 	        unsigned char *hash1, unsigned char *hash,
 		const unsigned char *target,
 		const unsigned char *target,
@@ -601,7 +599,7 @@ bool scanhash_asm32(int thr_id, const unsigned char *midstate,
 			return true;
 			return true;
 		}
 		}
 
 
-		if ((n >= max_nonce) || work_restart[thr_id].restart) {
+		if ((n >= max_nonce) || thr->work_restart) {
 			*last_nonce = n;
 			*last_nonce = n;
 			return false;
 			return false;
 		}
 		}

+ 2 - 2
sha256_generic.c

@@ -239,7 +239,7 @@ const uint32_t sha256_init_state[8] = {
 };
 };
 
 
 /* suspiciously similar to ScanHash* from bitcoin */
 /* suspiciously similar to ScanHash* from bitcoin */
-bool scanhash_c(int thr_id, const unsigned char *midstate, unsigned char *data,
+bool scanhash_c(struct thr_info*thr, const unsigned char *midstate, unsigned char *data,
 	        unsigned char *hash1, unsigned char *hash,
 	        unsigned char *hash1, unsigned char *hash,
 		const unsigned char *target,
 		const unsigned char *target,
 	        uint32_t max_nonce, uint32_t *last_nonce,
 	        uint32_t max_nonce, uint32_t *last_nonce,
@@ -265,7 +265,7 @@ bool scanhash_c(int thr_id, const unsigned char *midstate, unsigned char *data,
 			return true;
 			return true;
 		}
 		}
 
 
-		if ((n >= max_nonce) || work_restart[thr_id].restart) {
+		if ((n >= max_nonce) || thr->work_restart) {
 			*last_nonce = n;
 			*last_nonce = n;
 			return false;
 			return false;
 		}
 		}

+ 2 - 2
sha256_sse2_amd64.c

@@ -48,7 +48,7 @@ const uint32_t sha256_init[8]__attribute__((aligned(0x100))) =
 __m128i g_4sha256_k[64];
 __m128i g_4sha256_k[64];
 __m128i sha256_consts_m128i[64]__attribute__((aligned(0x1000)));
 __m128i sha256_consts_m128i[64]__attribute__((aligned(0x1000)));
 
 
-bool scanhash_sse2_64(int thr_id, const unsigned char *pmidstate,
+bool scanhash_sse2_64(struct thr_info*thr, const unsigned char *pmidstate,
 	unsigned char *pdata,
 	unsigned char *pdata,
 	unsigned char *phash1, unsigned char *phash,
 	unsigned char *phash1, unsigned char *phash,
 	const unsigned char *ptarget,
 	const unsigned char *ptarget,
@@ -119,7 +119,7 @@ bool scanhash_sse2_64(int thr_id, const unsigned char *pmidstate,
 		}
 		}
 	}
 	}
 
 
-        if (unlikely((nonce >= max_nonce) || work_restart[thr_id].restart))
+        if (unlikely((nonce >= max_nonce) || thr->work_restart))
         {
         {
 			*last_nonce = nonce;
 			*last_nonce = nonce;
 			return false;
 			return false;

+ 2 - 2
sha256_sse2_i386.c

@@ -48,7 +48,7 @@ const uint32_t sha256_32init[8]__attribute__((aligned(0x100))) =
 __m128i g_4sha256_k[64];
 __m128i g_4sha256_k[64];
 __m128i sha256_consts_m128i[64]__attribute__((aligned(0x1000)));
 __m128i sha256_consts_m128i[64]__attribute__((aligned(0x1000)));
 
 
-bool scanhash_sse2_32(int thr_id, const unsigned char *pmidstate,
+bool scanhash_sse2_32(struct thr_info*thr, const unsigned char *pmidstate,
 	unsigned char *pdata,
 	unsigned char *pdata,
 	unsigned char *phash1, unsigned char *phash,
 	unsigned char *phash1, unsigned char *phash,
 	const unsigned char *ptarget,
 	const unsigned char *ptarget,
@@ -111,7 +111,7 @@ bool scanhash_sse2_32(int thr_id, const unsigned char *pmidstate,
 	    }
 	    }
 	}
 	}
 
 
-	if (unlikely((nonce >= max_nonce) || work_restart[thr_id].restart)) {
+	if (unlikely((nonce >= max_nonce) || thr->work_restart)) {
 		*last_nonce = nonce;
 		*last_nonce = nonce;
 		return false;
 		return false;
 	}
 	}

+ 2 - 2
sha256_sse4_amd64.c

@@ -47,7 +47,7 @@ static uint32_t g_sha256_hinit[8] =
 
 
 __m128i g_4sha256_k[64];
 __m128i g_4sha256_k[64];
 
 
-bool scanhash_sse4_64(int thr_id, const unsigned char *pmidstate,
+bool scanhash_sse4_64(struct thr_info*thr, const unsigned char *pmidstate,
 	unsigned char *pdata,
 	unsigned char *pdata,
 	unsigned char *phash1, unsigned char *phash,
 	unsigned char *phash1, unsigned char *phash,
 	const unsigned char *ptarget,
 	const unsigned char *ptarget,
@@ -118,7 +118,7 @@ bool scanhash_sse4_64(int thr_id, const unsigned char *pmidstate,
 		}
 		}
 	}
 	}
 
 
-        if (unlikely((nonce >= max_nonce) || work_restart[thr_id].restart))
+        if (unlikely((nonce >= max_nonce) || thr->work_restart))
         {
         {
 			*last_nonce = nonce;
 			*last_nonce = nonce;
 			return false;
 			return false;

+ 2 - 2
sha256_via.c

@@ -19,7 +19,7 @@ static void via_sha256(void *hash, void *buf, unsigned len)
 		     :"memory");
 		     :"memory");
 }
 }
 
 
-bool scanhash_via(int thr_id, const unsigned char *pmidstate,
+bool scanhash_via(struct thr_info*thr, const unsigned char *pmidstate,
 	unsigned char *data_inout,
 	unsigned char *data_inout,
 	unsigned char *phash1, unsigned char *phash,
 	unsigned char *phash1, unsigned char *phash,
 	const unsigned char *target,
 	const unsigned char *target,
@@ -74,7 +74,7 @@ bool scanhash_via(int thr_id, const unsigned char *pmidstate,
 			return true;
 			return true;
 		}
 		}
 
 
-		if ((n >= max_nonce) || work_restart[thr_id].restart) {
+		if ((n >= max_nonce) || thr->work_restart) {
 			*last_nonce = n;
 			*last_nonce = n;
 			return false;
 			return false;
 		}
 		}