[2/3] ntdll: Implement NtQuerySystemInformation/SystemLogicalProcessorInformation (try 6)

Rudolf Mayerhofer rm at eightyfive.net
Sun Oct 10 04:42:22 CDT 2010


On Sunday 10 October 2010 00:26:45 you wrote:
> On 10/09/2010 12:37 PM, Rudolf Mayerhofer wrote:
>  >>> +static SYSTEM_LOGICAL_PROCESSOR_INFORMATION cached_lpi[1024];
>  >> 
>  >> You think there are systems with that many CPUs running Wine?
>  > 
>  > I honestly don't know the array is currently large enough to support
>  > 146 CPU's with 4 unique Caches (L1i,L1d,L2,L3), each in it's own
>  > processorpackage and numa node. This might be a bit of an overkill,
>  > any suggestions how many cpu's are used with wine in the worst case?
> 
> Then you probably want to allocate it from the heap instead of creating a
> static array.
> 

I haven't found out how to do this properly yet and i think that i definitely 
need help on that one (like an example) as my skills in C are not that good 
and all i manage to get when trying to allocate the stuff from the heap is a 
segfault.

For the time being i reduced the arraysize to 896, which should still be large 
enough to support 128 CPUs in SysFS in the worst case.


> >> People already asked you not to do this. From looking at the code it
> >> appears that there is always one node. So get rid of everything except
> >> do{} while() block. It will do exactly what you want with extra if()s.
> > 
> > This assumption is definitely wrong, on non-numa systems there is no node
> > definition in SysFS. Windows on the same system shows one node and MSDN
> > also hints that there should be a dummy node with number 0 and a
> > processormask containing all known processors on the system in that
> > case.
> 
> I'm not talking about the content of the SysFS. I'm talking about what your
> code does. If you remove that "if{} else{}" part and keep
> "do{} while();" part as-is you will get exactly the same result.

I figured that one out, although it took me a while.



More information about the wine-devel mailing list