Browse Source

Merge branch 'master' of git://github.com/ckolivas/cgminer.git

nfactor-troky
Paul Sheppard 13 years ago
parent
commit
6c3d331869
  1. 12
      cgminer.c
  2. 2
      driver-bitforce.c
  3. 26
      driver-cpu.c
  4. 2
      driver-cpu.h
  5. 12
      driver-icarus.c
  6. 2
      driver-modminer.c
  7. 6
      driver-ztex.c
  8. 4
      fpgautils.c
  9. 10
      miner.h
  10. 2
      miner.php
  11. 4
      sha256_4way.c
  12. 4
      sha256_altivec_4way.c
  13. 10
      sha256_cryptopp.c
  14. 4
      sha256_generic.c
  15. 4
      sha256_sse2_amd64.c
  16. 4
      sha256_sse2_i386.c
  17. 4
      sha256_sse4_amd64.c
  18. 4
      sha256_via.c
  19. 15
      util.c

12
cgminer.c

@ -161,8 +161,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;
@ -2529,7 +2527,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);
@ -4034,7 +4032,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))) {
@ -4089,7 +4087,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
@ -5336,10 +5334,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");

2
driver-bitforce.c

@ -349,7 +349,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);

26
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; struct thr_info dummy = {0};
work_restart = &dummy;
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,

2
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>

12
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));

2
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)

6
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;
} }

4
fpgautils.c

@ -211,8 +211,8 @@ serial_open(const char*devpath, unsigned long baud, signed short timeout, bool p
case 0: case 0:
break; break;
case 115200: case 115200:
my_termios.c_cflag &= ~CBAUD; cfsetispeed( &my_termios, B115200 );
my_termios.c_cflag |= B115200; cfsetospeed( &my_termios, B115200 );
break; break;
// TODO: try some higher speeds with the Icarus and BFL to see // TODO: try some higher speeds with the Icarus and BFL to see
// if they support them and if setting them makes any difference // if they support them and if setting them makes any difference

10
miner.h

@ -421,6 +421,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);
@ -558,7 +560,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,
@ -570,11 +572,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;
@ -614,7 +611,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
miner.php

@ -166,7 +166,7 @@ function getcss($cssname, $dom = false)
$css = ''; $css = '';
foreach ($colourtable as $cssdata => $value) foreach ($colourtable as $cssdata => $value)
{ {
$cssobj = split(' ', $cssdata, 2); $cssobj = explode(' ', $cssdata, 2);
if ($cssobj[0] == $cssname) if ($cssobj[0] == $cssname)
{ {
if (isset($colouroverride[$cssdata])) if (isset($colouroverride[$cssdata]))

4
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;

4
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;

10
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;
} }

4
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;
} }

4
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;

4
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;
} }

4
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;

4
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;
} }

15
util.c

@ -692,9 +692,14 @@ void thr_info_cancel(struct thr_info *thr)
* on SMP machines */ * on SMP machines */
void nmsleep(unsigned int msecs) void nmsleep(unsigned int msecs)
{ {
struct timespec twait; struct timespec twait, tleft;
int ret;
twait.tv_sec = msecs / 1000;
twait.tv_nsec = (uint64_t)(msecs * 1000000) - (uint64_t)(twait.tv_sec / 1000000000); tleft.tv_sec = msecs / 1000;
nanosleep(&twait, NULL); tleft.tv_nsec = (uint64_t)(msecs * 1000000) - (uint64_t)(twait.tv_sec / 1000000000);
do {
twait.tv_sec = tleft.tv_sec;
twait.tv_nsec = tleft.tv_nsec;
ret = nanosleep(&twait, &tleft);
} while (ret == -1 && errno == EINTR);
} }

Loading…
Cancel
Save