mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-14 00:38:02 +00:00
Use macro expansion to iterate over all device drivers without needing to explicitly code in support in all places. Pass a hotplug bool to the detect() function to prevent opencl trying to hogplug GPUs.
This commit is contained in:
parent
741b74309e
commit
6d7471237d
94
cgminer.c
94
cgminer.c
@ -119,7 +119,7 @@ bool opt_scrypt;
|
||||
#endif
|
||||
#endif
|
||||
bool opt_restart = true;
|
||||
static bool opt_nogpu;
|
||||
bool opt_nogpu;
|
||||
|
||||
struct list_head scan_devices;
|
||||
static bool devices_enabled[MAX_DEVICES];
|
||||
@ -7434,19 +7434,17 @@ static void noop_thread_enable(struct thr_info __maybe_unused *thr)
|
||||
{
|
||||
}
|
||||
|
||||
static void noop_null(void)
|
||||
static void noop_detect(bool __maybe_unused hotplug)
|
||||
{
|
||||
}
|
||||
#define noop_flush_work noop_reinit_device
|
||||
#define noop_queue_full noop_get_stats
|
||||
|
||||
/* Fill missing driver drv functions with noops */
|
||||
void fill_device_drv(struct cgpu_info *cgpu)
|
||||
void fill_device_drv(struct device_drv *drv)
|
||||
{
|
||||
struct device_drv *drv = cgpu->drv;
|
||||
|
||||
if (!drv->drv_detect)
|
||||
drv->drv_detect = &noop_null;
|
||||
drv->drv_detect = &noop_detect;
|
||||
if (!drv->reinit_device)
|
||||
drv->reinit_device = &noop_reinit_device;
|
||||
if (!drv->get_statline_before)
|
||||
@ -7544,8 +7542,6 @@ bool add_cgpu(struct cgpu_info *cgpu)
|
||||
cgpu->last_device_valid_work = time(NULL);
|
||||
mutex_unlock(&stats_lock);
|
||||
|
||||
fill_device_drv(cgpu);
|
||||
|
||||
if (hotplug_mode)
|
||||
devices[total_devices + new_devices++] = cgpu;
|
||||
else
|
||||
@ -7655,29 +7651,11 @@ static void *hotplug_thread(void __maybe_unused *userdata)
|
||||
new_devices = 0;
|
||||
new_threads = 0;
|
||||
|
||||
#ifdef USE_ICARUS
|
||||
icarus_drv.drv_detect();
|
||||
#endif
|
||||
|
||||
#ifdef USE_BFLSC
|
||||
bflsc_drv.drv_detect();
|
||||
#endif
|
||||
|
||||
#ifdef USE_BITFORCE
|
||||
bitforce_drv.drv_detect();
|
||||
#endif
|
||||
|
||||
#ifdef USE_BITFURY
|
||||
bitfury_drv.drv_detect();
|
||||
#endif
|
||||
|
||||
#ifdef USE_MODMINER
|
||||
modminer_drv.drv_detect();
|
||||
#endif
|
||||
|
||||
#ifdef USE_AVALON
|
||||
avalon_drv.drv_detect();
|
||||
#endif
|
||||
/* Use the DRIVER_PARSE_COMMANDS macro to detect all
|
||||
* devices */
|
||||
#define DRIVER_ADD_COMMAND(X) X##_drv.drv_detect(true);
|
||||
DRIVER_PARSE_COMMANDS
|
||||
#undef DRIVER_ADD_COMMAND
|
||||
|
||||
if (new_devices)
|
||||
hotplug_process();
|
||||
@ -7883,48 +7861,20 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_OPENCL
|
||||
if (!opt_nogpu)
|
||||
opencl_drv.drv_detect();
|
||||
/* Use the DRIVER_PARSE_COMMANDS macro to fill all the device_drvs */
|
||||
#define DRIVER_ADD_COMMAND(X) fill_device_drv(&X##_drv);
|
||||
DRIVER_PARSE_COMMANDS
|
||||
#undef DRIVER_ADD_COMMAND
|
||||
|
||||
if (opt_scrypt)
|
||||
opencl_drv.drv_detect(false);
|
||||
else {
|
||||
/* Use the DRIVER_PARSE_COMMANDS macro to detect all devices */
|
||||
#define DRIVER_ADD_COMMAND(X) X##_drv.drv_detect(false);
|
||||
DRIVER_PARSE_COMMANDS
|
||||
#undef DRIVER_ADD_COMMAND
|
||||
}
|
||||
gpu_threads = 0;
|
||||
#endif
|
||||
|
||||
#ifdef USE_ICARUS
|
||||
if (!opt_scrypt)
|
||||
icarus_drv.drv_detect();
|
||||
#endif
|
||||
|
||||
#ifdef USE_BFLSC
|
||||
if (!opt_scrypt)
|
||||
bflsc_drv.drv_detect();
|
||||
#endif
|
||||
|
||||
#ifdef USE_BITFORCE
|
||||
if (!opt_scrypt)
|
||||
bitforce_drv.drv_detect();
|
||||
#endif
|
||||
|
||||
#ifdef USE_BITFURY
|
||||
if (!opt_scrypt)
|
||||
bitfury_drv.drv_detect();
|
||||
#endif
|
||||
|
||||
#ifdef USE_MODMINER
|
||||
if (!opt_scrypt)
|
||||
modminer_drv.drv_detect();
|
||||
#endif
|
||||
|
||||
#ifdef USE_ZTEX
|
||||
if (!opt_scrypt)
|
||||
ztex_drv.drv_detect();
|
||||
#endif
|
||||
|
||||
/* Detect avalon last since it will try to claim the device regardless
|
||||
* as detection is unreliable. */
|
||||
#ifdef USE_AVALON
|
||||
if (!opt_scrypt)
|
||||
avalon_drv.drv_detect();
|
||||
#endif
|
||||
|
||||
if (opt_display_devs) {
|
||||
applog(LOG_ERR, "Devices detected:");
|
||||
|
@ -799,7 +799,7 @@ shin:
|
||||
return false;
|
||||
}
|
||||
|
||||
static void avalon_detect(void)
|
||||
static void avalon_detect(bool __maybe_unused hotplug)
|
||||
{
|
||||
usb_detect(&avalon_drv, avalon_detect_one);
|
||||
}
|
||||
|
@ -893,7 +893,7 @@ shin:
|
||||
return false;
|
||||
}
|
||||
|
||||
static void bflsc_detect(void)
|
||||
static void bflsc_detect(bool __maybe_unused hotplug)
|
||||
{
|
||||
usb_detect(&bflsc_drv, bflsc_detect_one);
|
||||
}
|
||||
|
@ -288,7 +288,7 @@ shin:
|
||||
return false;
|
||||
}
|
||||
|
||||
static void bitforce_detect(void)
|
||||
static void bitforce_detect(bool __maybe_unused hotplug)
|
||||
{
|
||||
usb_detect(&bitforce_drv, bitforce_detect_one);
|
||||
}
|
||||
|
@ -150,7 +150,7 @@ out:
|
||||
return false;
|
||||
}
|
||||
|
||||
static void bitfury_detect(void)
|
||||
static void bitfury_detect(bool __maybe_unused hotplug)
|
||||
{
|
||||
usb_detect(&bitfury_drv, bitfury_detect_one);
|
||||
}
|
||||
|
@ -926,7 +926,7 @@ shin:
|
||||
return false;
|
||||
}
|
||||
|
||||
static void icarus_detect()
|
||||
static void icarus_detect(bool __maybe_unused hotplug)
|
||||
{
|
||||
usb_detect(&icarus_drv, icarus_detect_one);
|
||||
}
|
||||
|
@ -237,7 +237,7 @@ shin:
|
||||
return false;
|
||||
}
|
||||
|
||||
static void modminer_detect()
|
||||
static void modminer_detect(bool __maybe_unused hotplug)
|
||||
{
|
||||
usb_detect(&modminer_drv, modminer_detect_one);
|
||||
}
|
||||
|
@ -581,7 +581,7 @@ char *set_intensity(char *arg)
|
||||
void print_ndevs(int *ndevs)
|
||||
{
|
||||
opt_log_output = true;
|
||||
opencl_drv.drv_detect();
|
||||
opencl_drv.drv_detect(false);
|
||||
clear_adl(*ndevs);
|
||||
applog(LOG_INFO, "%i GPU devices max detected", *ndevs);
|
||||
}
|
||||
@ -1227,10 +1227,12 @@ void *reinit_gpu(__maybe_unused void *userdata)
|
||||
|
||||
|
||||
#ifdef HAVE_OPENCL
|
||||
static void opencl_detect()
|
||||
static void opencl_detect(bool hotplug)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (opt_nogpu || hotplug)
|
||||
return;
|
||||
nDevs = clDevicesNum();
|
||||
if (nDevs < 0) {
|
||||
applog(LOG_ERR, "clDevicesNum returned error, no GPUs usable");
|
||||
|
@ -52,7 +52,7 @@ static void ztex_releaseFpga(struct libztex_device* ztex)
|
||||
}
|
||||
}
|
||||
|
||||
static void ztex_detect(void)
|
||||
static void ztex_detect(bool __maybe_unused hotplug)
|
||||
{
|
||||
int cnt;
|
||||
int i,j;
|
||||
|
3
miner.h
3
miner.h
@ -329,7 +329,7 @@ struct device_drv {
|
||||
char *name;
|
||||
|
||||
// DRV-global functions
|
||||
void (*drv_detect)();
|
||||
void (*drv_detect)(bool);
|
||||
|
||||
// Device-specific functions
|
||||
void (*reinit_device)(struct cgpu_info *);
|
||||
@ -914,6 +914,7 @@ extern bool opt_api_listen;
|
||||
extern bool opt_api_network;
|
||||
extern bool opt_delaynet;
|
||||
extern bool opt_restart;
|
||||
extern bool opt_nogpu;
|
||||
extern char *opt_icarus_options;
|
||||
extern char *opt_icarus_timing;
|
||||
extern bool opt_worktime;
|
||||
|
Loading…
Reference in New Issue
Block a user