<p dir="ltr">On Jun 14, 2016 9:33 AM, "Sebastian Lackner" <<a href="mailto:sebastian@fds-team.de">sebastian@fds-team.de</a>> wrote:<br>
><br>
> On 14.06.2016 09:09, Marcus Meissner wrote:<br>
> > From: Austin English <<a href="mailto:austinenglish@gmail.com">austinenglish@gmail.com</a>><br>
> ><br>
> > <a href="https://bugs.winehq.org/show_bug.cgi?id=18745">https://bugs.winehq.org/show_bug.cgi?id=18745</a><br>
> ><br>
> > Report 2MB minimum page size on x86 32bit and 64bit on Linux.<br>
> ><br>
> > This assumes that all x86 processors and the 64/32bit emulation mode<br>
> > have hugetable support and it is always enabled.<br>
> ><br>
> > Signed-off-by: Marcus Meissner <<a href="mailto:marcus@jet.franken.de">marcus@jet.franken.de</a>><br>
> > Signed-off-by: Austin English <<a href="mailto:austinenglish@gmail.com">austinenglish@gmail.com</a>><br>
><br>
> As pointed out on IRC, the order of the sign-offs is wrong here. Your own signoff<br>
> should always be the last because you have to take responsibility when you send a patch.<br>
><br>
> > ---<br>
> >  dlls/kernel32/cpu.c           | 15 +++++++++++++++<br>
> >  dlls/kernel32/kernel32.spec   |  2 +-<br>
> >  dlls/kernel32/tests/process.c | 16 ++++++++++++++++<br>
> >  3 files changed, 32 insertions(+), 1 deletion(-)<br>
> ><br>
> > diff --git a/dlls/kernel32/cpu.c b/dlls/kernel32/cpu.c<br>
> > index f48fcf0..f8b2c3d 100644<br>
> > --- a/dlls/kernel32/cpu.c<br>
> > +++ b/dlls/kernel32/cpu.c<br>
> > @@ -291,3 +291,18 @@ err:<br>
> >      }<br>
> >      return TRUE;<br>
> >  }<br>
> > +<br>
> > +/***********************************************************************<br>
> > + *           GetLargePageMinimum (KERNEL32.@)<br>
> > + */<br>
> > +SIZE_T WINAPI GetLargePageMinimum(void)<br>
> > +{<br>
> > +#ifdef linux<br>
><br>
> I do not see any need for that #ifdef linux. Its more architecture specific<br>
> than linux specific. Dmitry already mentioned the same concern on the mailing list.<br>
><br>
> > +#if defined(__i386___) || defined(__x86_64__)<br>
> > +    /* Linux x86 hugepages are minimum 2 MB */<br>
> > +    return 2*1024*1024;<br>
> > +#endif<br>
> > +#endif<br>
> > +    FIXME("stub: not implemented on your platform/architecture.\n");<br>
> > +    return 0;<br>
> > +}<br>
> > diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec<br>
> > index ec7155b6e..0fc4dcb 100644<br>
> > --- a/dlls/kernel32/kernel32.spec<br>
> > +++ b/dlls/kernel32/kernel32.spec<br>
> > @@ -696,7 +696,7 @@<br>
> >  @ stdcall GetHandleInformation(long ptr)<br>
> >  @ stub -i386 GetLSCallbackTarget<br>
> >  @ stub -i386 GetLSCallbackTemplate<br>
> > -# @ stub GetLargePageMinimum<br>
> > +@ stdcall GetLargePageMinimum()<br>
> >  @ stdcall GetLargestConsoleWindowSize(long)<br>
> >  @ stdcall GetLastError()<br>
> >  @ stub GetLinguistLangSize<br>
> > diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c<br>
> > index 61dcdc2..e9acfd3 100644<br>
> > --- a/dlls/kernel32/tests/process.c<br>
> > +++ b/dlls/kernel32/tests/process.c<br>
> > @@ -88,6 +88,7 @@ static BOOL   (WINAPI *pProcess32Next)(HANDLE, PROCESSENTRY32*);<br>
> >  static BOOL   (WINAPI *pThread32First)(HANDLE, THREADENTRY32*);<br>
> >  static BOOL   (WINAPI *pThread32Next)(HANDLE, THREADENTRY32*);<br>
> >  static BOOL   (WINAPI *pGetLogicalProcessorInformationEx)(LOGICAL_PROCESSOR_RELATIONSHIP,SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX*,DWORD*);<br>
> > +static SIZE_T (WINAPI *pGetLargePageMinimum)(void);<br>
> ><br>
> >  /* ############################### */<br>
> >  static char     base[MAX_PATH];<br>
> > @@ -252,6 +253,7 @@ static BOOL init(void)<br>
> >      pThread32First = (void *)GetProcAddress(hkernel32, "Thread32First");<br>
> >      pThread32Next = (void *)GetProcAddress(hkernel32, "Thread32Next");<br>
> >      pGetLogicalProcessorInformationEx = (void *)GetProcAddress(hkernel32, "GetLogicalProcessorInformationEx");<br>
> > +    pGetLargePageMinimum = (void *)GetProcAddress(hkernel32, "GetLargePageMinimum");<br>
> ><br>
> >      return TRUE;<br>
> >  }<br>
> > @@ -3138,6 +3140,19 @@ static void test_GetLogicalProcessorInformationEx(void)<br>
> >      HeapFree(GetProcessHeap(), 0, info);<br>
> >  }<br>
> ><br>
> > +static void test_largepages(void)<br>
> > +{<br>
> > +    SIZE_T size;<br>
> > +<br>
> > +    if (!pGetLargePageMinimum) {<br>
> > +        skip("No GetLargePageMinimum support.\n");<br>
> > +        return;<br>
> > +    }<br>
> > +    size = pGetLargePageMinimum();<br>
> > +<br>
> > +    ok((size == 0) || (size == 2*1024*1024) || (size == 4*1024*1024), "GetLargePageMinimum reports %ld size\n", size);<br>
> > +}<br>
> > +<br>
> >  START_TEST(process)<br>
> >  {<br>
> >      HANDLE job;<br>
> > @@ -3210,6 +3225,7 @@ START_TEST(process)<br>
> >      test_GetNumaProcessorNode();<br>
> >      test_session_info();<br>
> >      test_GetLogicalProcessorInformationEx();<br>
> > +    test_largepages();<br>
> ><br>
> >      /* things that can be tested:<br>
> >       *  lookup:         check the way program to be executed is searched</p>
<p dir="ltr">Perhaps ARM should be listed as well. </p>