mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-22 20:44:19 +00:00
Provide a funcion that looks up queued work by midstate and then removes it from the device hash database.
This commit is contained in:
parent
dd64f73265
commit
572df10207
25
cgminer.c
25
cgminer.c
@ -6139,19 +6139,38 @@ struct work *clone_queued_work_bymidstate(struct cgpu_info *cgpu, char *midstate
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void __work_completed(struct cgpu_info *cgpu, struct work *work)
|
||||
{
|
||||
if (work->queued)
|
||||
cgpu->queued_count--;
|
||||
HASH_DEL(cgpu->queued_work, work);
|
||||
}
|
||||
/* This function should be used by queued device drivers when they're sure
|
||||
* the work struct is no longer in use. */
|
||||
void work_completed(struct cgpu_info *cgpu, struct work *work)
|
||||
{
|
||||
wr_lock(&cgpu->qlock);
|
||||
if (work->queued)
|
||||
cgpu->queued_count--;
|
||||
HASH_DEL(cgpu->queued_work, work);
|
||||
__work_completed(cgpu, work);
|
||||
wr_unlock(&cgpu->qlock);
|
||||
|
||||
free_work(work);
|
||||
}
|
||||
|
||||
/* Combines find_queued_work_bymidstate and work_completed in one function
|
||||
* withOUT destroying the work so the driver must free it. */
|
||||
struct work *take_queued_work_bymidstate(struct cgpu_info *cgpu, char *midstate, size_t midstatelen, char *data, int offset, size_t datalen)
|
||||
{
|
||||
struct work *work;
|
||||
|
||||
rd_lock(&cgpu->qlock);
|
||||
work = __find_work_bymidstate(cgpu->queued_work, midstate, midstatelen, data, offset, datalen);
|
||||
if (work)
|
||||
__work_completed(cgpu, work);
|
||||
rd_unlock(&cgpu->qlock);
|
||||
|
||||
return work;
|
||||
}
|
||||
|
||||
static void flush_queue(struct cgpu_info *cgpu)
|
||||
{
|
||||
struct work *work, *tmp;
|
||||
|
1
miner.h
1
miner.h
@ -1341,6 +1341,7 @@ extern struct work *__find_work_bymidstate(struct work *que, char *midstate, siz
|
||||
extern struct work *find_queued_work_bymidstate(struct cgpu_info *cgpu, char *midstate, size_t midstatelen, char *data, int offset, size_t datalen);
|
||||
extern struct work *clone_queued_work_bymidstate(struct cgpu_info *cgpu, char *midstate, size_t midstatelen, char *data, int offset, size_t datalen);
|
||||
extern void work_completed(struct cgpu_info *cgpu, struct work *work);
|
||||
extern struct work *take_queued_work_bymidstate(struct cgpu_info *cgpu, char *midstate, size_t midstatelen, char *data, int offset, size_t datalen);
|
||||
extern void hash_queued_work(struct thr_info *mythr);
|
||||
extern void _wlog(const char *str);
|
||||
extern void _wlogprint(const char *str);
|
||||
|
Loading…
x
Reference in New Issue
Block a user