From 92f4e0500b1a8c138f3fd4539b1a9c76d3185a93 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Wed, 11 Apr 2018 11:59:35 +0200 Subject: [PATCH] Cygwin: wincap: expose more SYSTEM_INFO members and use as appropriate Signed-off-by: Corinna Vinschen --- winsup/cygwin/loadavg.cc | 5 +---- winsup/cygwin/uname.cc | 12 ++++-------- winsup/cygwin/wincap.h | 5 +++++ 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/winsup/cygwin/loadavg.cc b/winsup/cygwin/loadavg.cc index a7e5f61dd..bef80e13a 100644 --- a/winsup/cygwin/loadavg.cc +++ b/winsup/cygwin/loadavg.cc @@ -98,10 +98,7 @@ static bool get_load (double *load) if (ret != ERROR_SUCCESS) return false; - SYSTEM_INFO sysinfo; - GetSystemInfo (&sysinfo); - - double running = fmtvalue1.doubleValue * sysinfo.dwNumberOfProcessors / 100; + double running = fmtvalue1.doubleValue * wincap.cpu_count () / 100; /* Estimate the number of runnable processes using ProcessorQueueLength */ PDH_FMT_COUNTERVALUE fmtvalue2; diff --git a/winsup/cygwin/uname.cc b/winsup/cygwin/uname.cc index 479cc442a..778ca5738 100644 --- a/winsup/cygwin/uname.cc +++ b/winsup/cygwin/uname.cc @@ -19,8 +19,6 @@ extern "C" int cygwin_gethostname (char *__name, size_t __len); extern "C" int uname (struct utsname *name) { - SYSTEM_INFO sysinfo; - __try { char *snp = strstr (cygwin_version.dll_build_date, "SNP"); @@ -34,8 +32,6 @@ uname (struct utsname *name) strncat (name->sysname, "-WOW", sizeof name->sysname - strlen (name->sysname) - 1); - GetSystemInfo (&sysinfo); - /* Computer name */ cygwin_gethostname (name->nodename, sizeof (name->nodename) - 1); @@ -56,16 +52,16 @@ uname (struct utsname *name) name->version[snp - cygwin_version.dll_build_date] = '\0'; /* CPU type */ - switch (sysinfo.wProcessorArchitecture) + switch (wincap.cpu_arch ()) { case PROCESSOR_ARCHITECTURE_INTEL: unsigned int ptype; - if (sysinfo.wProcessorLevel < 3) /* Shouldn't happen. */ + if (wincap.cpu_level () < 3) /* Shouldn't happen. */ ptype = 3; - else if (sysinfo.wProcessorLevel > 9) /* P4 */ + else if (wincap.cpu_level () > 9) /* P4 */ ptype = 6; else - ptype = sysinfo.wProcessorLevel; + ptype = wincap.cpu_level (); __small_sprintf (name->machine, "i%d86", ptype); break; case PROCESSOR_ARCHITECTURE_IA64: diff --git a/winsup/cygwin/wincap.h b/winsup/cygwin/wincap.h index 990a3a400..9dc000056 100644 --- a/winsup/cygwin/wincap.h +++ b/winsup/cygwin/wincap.h @@ -42,6 +42,11 @@ public: void init (); const DWORD cpu_count () const { return system_info.dwNumberOfProcessors; } + const DWORD_PTR cpu_mask () const { return system_info.dwActiveProcessorMask;} + + const WORD cpu_arch () const { return system_info.wProcessorArchitecture; } + const WORD cpu_level () const { return system_info.wProcessorLevel; } + /* The casts to size_t make sure that the returned value has the size of a pointer on any system. This is important when using them for bit mask operations, like in roundup2. */