diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-12-21 15:51:55 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-12-21 15:51:55 +0100 |
| commit | 715ce5dbe987c103eeebbda470325866dc614b16 (patch) | |
| tree | 51c1006e0e8992081a0b6abe21918cc3897a9c16 /src | |
| parent | 7d0f8078807c9a0d5f4416566da343de419015bf (diff) | |
| download | box64-715ce5dbe987c103eeebbda470325866dc614b16.tar.gz box64-715ce5dbe987c103eeebbda470325866dc614b16.zip | |
Introduce new BOX64_MAXCPU to cap the number of cpu core exposed, and created profile for wine, wine64 and GridAutosport using it
Diffstat (limited to 'src')
| -rw-r--r-- | src/include/debug.h | 1 | ||||
| -rw-r--r-- | src/main.c | 14 | ||||
| -rw-r--r-- | src/tools/my_cpuid.c | 4 | ||||
| -rw-r--r-- | src/tools/rcfile.c | 1 | ||||
| -rw-r--r-- | src/wrapped/wrappedlibc.c | 13 |
5 files changed, 28 insertions, 5 deletions
diff --git a/src/include/debug.h b/src/include/debug.h index 948b29e4..4ce68cb9 100644 --- a/src/include/debug.h +++ b/src/include/debug.h @@ -10,6 +10,7 @@ extern int box64_dynarec; extern uintptr_t box64_pagesize; extern uintptr_t box64_load_addr; extern int box64_dynarec_test; +extern int box64_maxcpu; #ifdef DYNAREC extern int box64_dynarec_dump; extern int box64_dynarec_trace; diff --git a/src/main.c b/src/main.c index db33d9a2..bb8181dd 100644 --- a/src/main.c +++ b/src/main.c @@ -49,6 +49,7 @@ int box64_nosandbox = 0; int box64_inprocessgpu = 0; int box64_malloc_hack = 0; int box64_dynarec_test = 0; +int box64_maxcpu = 0; #ifdef DYNAREC int box64_dynarec = 1; int box64_dynarec_dump = 0; @@ -971,6 +972,19 @@ void LoadLogEnv() if(box64_showbt) printf_log(LOG_INFO, "Show a Backtrace when a Segfault signal is caught\n"); } + p = getenv("BOX64_MAXCPU"); + if(p) { + int maxcpu = 0; + if(sscanf(p, "%d", &maxcpu)==1) + box64_maxcpu = maxcpu; + if(box64_maxcpu<0) + box64_maxcpu = 0; + if(box64_maxcpu) { + printf_log(LOG_NONE, "Will not expose more than %d cpu cores\n", box64_maxcpu); + } else { + printf_log(LOG_NONE, "Will not limit the number of cpu cores exposed\n"); + } + } box64_pagesize = sysconf(_SC_PAGESIZE); if(!box64_pagesize) box64_pagesize = 4096; diff --git a/src/tools/my_cpuid.c b/src/tools/my_cpuid.c index 258fb990..5352d0cf 100644 --- a/src/tools/my_cpuid.c +++ b/src/tools/my_cpuid.c @@ -83,8 +83,8 @@ int getNCpu() { if(!nCPU) grabNCpu(); - if(box64_wine && nCPU>64) - return 64; + if(box64_maxcpu && nCPU>box64_maxcpu) + return box64_maxcpu; return nCPU; } diff --git a/src/tools/rcfile.c b/src/tools/rcfile.c index b08622f8..39fba1df 100644 --- a/src/tools/rcfile.c +++ b/src/tools/rcfile.c @@ -109,6 +109,7 @@ ENTRYBOOL(BOX64_EXIT, want_exit) \ ENTRYBOOL(BOX64_LIBCEF, box64_libcef) \ ENTRYBOOL(BOX64_SDL2_JGUID, box64_sdl2_jguid) \ ENTRYINT(BOX64_MALLOC_HACK, box64_malloc_hack, 0, 2, 2) \ +ENTRYINTPOS(BOX64_MAXCPU, box64_maxcpu) \ ENTRYSTRING_(BOX64_ENV, new_env) \ #ifdef HAVE_TRACE diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c index 1dcf17d6..cb329c33 100644 --- a/src/wrapped/wrappedlibc.c +++ b/src/wrapped/wrappedlibc.c @@ -1723,6 +1723,15 @@ EXPORT int32_t my_open64(x64emu_t* emu, void* pathname, int32_t flags, uint32_t lseek(tmp, 0, SEEK_SET); return tmp; } + if(box64_maxcpu && (!strcmp(pathname, "/sys/devices/system/cpu/present") || !strcmp(pathname, "/sys/devices/system/cpu/online")) && (getNCpu()>=box64_maxcpu)) { + // special case for cpu present (to limit to 64 cores) + int tmp = shm_open(TMP_CPUPRESENT, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return open64(pathname, mode); // error fallback + shm_unlink(TMP_CPUPRESENT); // remove the shm file, but it will still exist because it's currently in use + CreateCPUPresentFile(tmp); + lseek(tmp, 0, SEEK_SET); + return tmp; + } #endif return open64(pathname, flags, mode); } @@ -1748,7 +1757,7 @@ EXPORT FILE* my_fopen64(x64emu_t* emu, const char* path, const char* mode) lseek(tmp, 0, SEEK_SET); return fdopen(tmp, mode); } - if(box64_wine && (!strcmp(path, "/sys/devices/system/cpu/present") || !strcmp(path, "/sys/devices/system/cpu/online")) && (getNCpu()>=64)) { + if(box64_maxcpu && (!strcmp(path, "/sys/devices/system/cpu/present") || !strcmp(path, "/sys/devices/system/cpu/online")) && (getNCpu()>=box64_maxcpu)) { // special case for cpu present (to limit to 64 cores) int tmp = shm_open(TMP_CPUPRESENT, O_RDWR | O_CREAT, S_IRWXU); if(tmp<0) return fopen64(path, mode); // error fallback @@ -2263,8 +2272,6 @@ EXPORT int32_t my___cxa_thread_atexit_impl(x64emu_t* emu, void* dtor, void* obj, //printf_log(LOG_INFO, "Warning, call to __cxa_thread_atexit_impl(%p, %p, %p) ignored\n", dtor, obj, dso); AddCleanup1Arg(emu, dtor, obj, dso); return 0; - - return 0; } EXPORT int32_t my___register_atfork(x64emu_t *emu, void* prepare, void* parent, void* child, void* handle) |