* fhandler_proc.cc (format_proc_uptime): Don't call GetSystemInfo.
Fetch CPU count from wincap. (format_proc_stat): Ditto. * globals.cc (system_info): Move to wincap. * heap.cc (heap_init): Fetch page size from wincap. * syscalls.cc (getpagesize): Fetch allocation granularity from wincap. (getsystempagesize): Fetch page size from wincap. * wincap.cc (wincap_2003): Default is_server to false. (wincapc::init): Call GetSystemInfo here. Always set is_server value. * wincap.h (class wincapc): Add system_info as private member. (wincapc::cpu_count): New public method. (wincapc::page_size): Ditto. (wincapc::allocation_granularity): Ditto.
This commit is contained in:
		| @@ -1,3 +1,19 @@ | ||||
| 2011-05-10  Corinna Vinschen  <corinna@vinschen.de> | ||||
|  | ||||
| 	* fhandler_proc.cc (format_proc_uptime): Don't call GetSystemInfo. | ||||
| 	Fetch CPU count from wincap. | ||||
| 	(format_proc_stat): Ditto. | ||||
| 	* globals.cc (system_info): Move to wincap. | ||||
| 	* heap.cc (heap_init): Fetch page size from wincap. | ||||
| 	* syscalls.cc (getpagesize): Fetch allocation granularity from wincap. | ||||
| 	(getsystempagesize): Fetch page size from wincap. | ||||
| 	* wincap.cc (wincap_2003): Default is_server to false. | ||||
| 	(wincapc::init): Call GetSystemInfo here.  Always set is_server value. | ||||
| 	* wincap.h (class wincapc): Add system_info as private member. | ||||
| 	(wincapc::cpu_count): New public method. | ||||
| 	(wincapc::page_size): Ditto. | ||||
| 	(wincapc::allocation_granularity): Ditto. | ||||
|  | ||||
| 2011-05-10  Corinna Vinschen  <corinna@vinschen.de> | ||||
|  | ||||
| 	* environ.cc (set_chunksize): Remove. | ||||
|   | ||||
| @@ -480,9 +480,6 @@ format_proc_uptime (void *, char *&destbuf) | ||||
|   PSYSTEM_PERFORMANCE_INFORMATION spi = (PSYSTEM_PERFORMANCE_INFORMATION) | ||||
| 					alloca (sizeof_spi); | ||||
|  | ||||
|   if (!system_info.dwNumberOfProcessors) | ||||
|     GetSystemInfo (&system_info); | ||||
|  | ||||
|   ret = NtQuerySystemInformation (SystemTimeOfDayInformation, &stodi, | ||||
| 				  sizeof stodi, NULL); | ||||
|   if (NT_SUCCESS (ret)) | ||||
| @@ -493,7 +490,7 @@ format_proc_uptime (void *, char *&destbuf) | ||||
|  | ||||
|   if (NT_SUCCESS (NtQuerySystemInformation (SystemPerformanceInformation, | ||||
| 						 spi, sizeof_spi, NULL))) | ||||
|     idle_time = (spi->IdleTime.QuadPart / system_info.dwNumberOfProcessors) | ||||
|     idle_time = (spi->IdleTime.QuadPart / wincap.cpu_count ()) | ||||
| 		/ 100000ULL; | ||||
|  | ||||
|   destbuf = (char *) crealloc_abort (destbuf, 80); | ||||
| @@ -522,19 +519,16 @@ format_proc_stat (void *, char *&destbuf) | ||||
|   char *buf = tp.c_get (); | ||||
|   char *eobuf = buf; | ||||
|  | ||||
|   if (!system_info.dwNumberOfProcessors) | ||||
|     GetSystemInfo (&system_info); | ||||
|  | ||||
|   SYSTEM_PROCESSOR_TIMES spt[system_info.dwNumberOfProcessors]; | ||||
|   SYSTEM_PROCESSOR_TIMES spt[wincap.cpu_count ()]; | ||||
|   ret = NtQuerySystemInformation (SystemProcessorTimes, (PVOID) spt, | ||||
| 				  sizeof spt[0] * system_info.dwNumberOfProcessors, NULL); | ||||
| 				  sizeof spt[0] * wincap.cpu_count (), NULL); | ||||
|   if (!NT_SUCCESS (ret)) | ||||
|     debug_printf ("NtQuerySystemInformation(SystemProcessorTimes), " | ||||
| 		  "status %p", ret); | ||||
|   else | ||||
|     { | ||||
|       unsigned long long user_time = 0ULL, kernel_time = 0ULL, idle_time = 0ULL; | ||||
|       for (unsigned long i = 0; i < system_info.dwNumberOfProcessors; i++) | ||||
|       for (unsigned long i = 0; i < wincap.cpu_count (); i++) | ||||
| 	{ | ||||
| 	  kernel_time += (spt[i].KernelTime.QuadPart - spt[i].IdleTime.QuadPart) | ||||
| 			 * HZ / 10000000ULL; | ||||
| @@ -545,7 +539,7 @@ format_proc_stat (void *, char *&destbuf) | ||||
|       eobuf += __small_sprintf (eobuf, "cpu %U %U %U %U\n", | ||||
| 				user_time, 0ULL, kernel_time, idle_time); | ||||
|       user_time = 0ULL, kernel_time = 0ULL, idle_time = 0ULL; | ||||
|       for (unsigned long i = 0; i < system_info.dwNumberOfProcessors; i++) | ||||
|       for (unsigned long i = 0; i < wincap.cpu_count (); i++) | ||||
| 	{ | ||||
| 	  interrupt_count += spt[i].InterruptCount; | ||||
| 	  kernel_time = (spt[i].KernelTime.QuadPart - spt[i].IdleTime.QuadPart) * HZ / 10000000ULL; | ||||
|   | ||||
| @@ -48,8 +48,6 @@ enum exit_states | ||||
|  | ||||
| exit_states NO_COPY exit_state; | ||||
|  | ||||
| SYSTEM_INFO system_info; | ||||
|  | ||||
| /* Set in init.cc.  Used to check if Cygwin DLL is dynamically loaded. */ | ||||
| int NO_COPY dynamically_loaded; | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| /* heap.cc: Cygwin heap manager. | ||||
|  | ||||
|    Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Red Hat, Inc. | ||||
|    Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, | ||||
|    2006, 2007, 2008, 2009, 2010, 2011 Red Hat, Inc. | ||||
|  | ||||
| This file is part of Cygwin. | ||||
|  | ||||
| @@ -31,7 +32,7 @@ heap_init () | ||||
|   /* If we're the forkee, we must allocate the heap at exactly the same place | ||||
|      as our parent.  If not, we don't care where it ends up.  */ | ||||
|  | ||||
|   page_const = system_info.dwPageSize; | ||||
|   page_const = wincap.page_size (); | ||||
|   if (!cygheap->user_heap.base) | ||||
|     { | ||||
|       cygheap->user_heap.chunk = cygwin_shared->heap_chunk_size (); | ||||
|   | ||||
| @@ -2287,17 +2287,13 @@ getdtablesize () | ||||
| extern "C" int | ||||
| getpagesize () | ||||
| { | ||||
|   if (!system_info.dwAllocationGranularity) | ||||
|     GetSystemInfo (&system_info); | ||||
|   return (size_t) system_info.dwAllocationGranularity; | ||||
|   return (size_t) wincap.allocation_granularity (); | ||||
| } | ||||
|  | ||||
| size_t | ||||
| getsystempagesize () | ||||
| { | ||||
|   if (!system_info.dwPageSize) | ||||
|     GetSystemInfo (&system_info); | ||||
|   return (size_t) system_info.dwPageSize; | ||||
|   return (size_t) wincap.page_size (); | ||||
| } | ||||
|  | ||||
| /* FIXME: not all values are correct... */ | ||||
|   | ||||
| @@ -181,7 +181,7 @@ wincaps wincap_xpsp2 __attribute__((section (".cygwin_dll_common"), shared)) = { | ||||
| wincaps wincap_2003 __attribute__((section (".cygwin_dll_common"), shared)) = { | ||||
|   heapslop:0x4, | ||||
|   max_sys_priv:SE_CREATE_GLOBAL_PRIVILEGE, | ||||
|   is_server:true, | ||||
|   is_server:false, | ||||
|   has_physical_mem_access:false, | ||||
|   has_create_global_privilege:true, | ||||
|   has_ioctl_storage_get_media_types_ex:true, | ||||
| @@ -279,6 +279,7 @@ wincapc::init () | ||||
|   if (caps) | ||||
|     return;		// already initialized | ||||
|  | ||||
|   GetSystemInfo (&system_info); | ||||
|   memset (&version, 0, sizeof version); | ||||
|   version.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX); | ||||
|   if (!GetVersionEx (reinterpret_cast<LPOSVERSIONINFO>(&version))) | ||||
| @@ -347,8 +348,7 @@ wincapc::init () | ||||
| 	break; | ||||
|     } | ||||
|  | ||||
|   if (version.wProductType != VER_NT_WORKSTATION) | ||||
|     ((wincaps *)caps)->is_server = true; | ||||
|   ((wincaps *)caps)->is_server = (version.wProductType != VER_NT_WORKSTATION); | ||||
|   if (NT_SUCCESS (NtQueryInformationProcess (NtCurrentProcess (), | ||||
| 					     ProcessWow64Information, | ||||
| 					     &wow64, sizeof wow64, NULL)) | ||||
|   | ||||
| @@ -46,6 +46,7 @@ struct wincaps | ||||
|  | ||||
| class wincapc | ||||
| { | ||||
|   SYSTEM_INFO      system_info; | ||||
|   OSVERSIONINFOEX  version; | ||||
|   char             osnam[40]; | ||||
|   ULONG            wow64; | ||||
| @@ -54,6 +55,10 @@ class wincapc | ||||
| public: | ||||
|   void init (); | ||||
|  | ||||
|   const DWORD cpu_count () const { return system_info.dwNumberOfProcessors; } | ||||
|   const DWORD page_size () const { return system_info.dwPageSize; } | ||||
|   const DWORD allocation_granularity () const | ||||
| 			      { return system_info.dwAllocationGranularity; } | ||||
|   const char *osname () const { return osnam; } | ||||
|   const bool is_wow64 () const { return wow64; } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user