Daniel Lehman : ntdll/tests: Handle 32 cores.

Alexandre Julliard julliard at winehq.org
Thu Aug 6 16:33:43 CDT 2020


Module: wine
Branch: master
Commit: 93fa2e0ab82a9506fb71bf0f536fa521f58ea88c
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=93fa2e0ab82a9506fb71bf0f536fa521f58ea88c

Author: Daniel Lehman <dlehman25 at gmail.com>
Date:   Wed Aug  5 22:09:46 2020 -0700

ntdll/tests: Handle 32 cores.

Signed-off-by: Daniel Lehman <dlehman25 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntdll/tests/info.c | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/dlls/ntdll/tests/info.c b/dlls/ntdll/tests/info.c
index a127c87781..057b855914 100644
--- a/dlls/ntdll/tests/info.c
+++ b/dlls/ntdll/tests/info.c
@@ -51,6 +51,12 @@ static BOOL is_wow64;
 */
 static DWORD one_before_last_pid = 0;
 
+static inline DWORD_PTR get_affinity_mask(DWORD num_cpus)
+{
+    if (num_cpus >= sizeof(DWORD_PTR) * 8) return ~(DWORD_PTR)0;
+    return ((DWORD_PTR)1 << num_cpus) - 1;
+}
+
 #define NTDLL_GET_PROC(func) do {                     \
     p ## func = (void*)GetProcAddress(hntdll, #func); \
     if(!p ## func) { \
@@ -2251,8 +2257,8 @@ static void test_affinity(void)
     status = pNtQueryInformationProcess( GetCurrentProcess(), ProcessBasicInformation, &pbi, sizeof(pbi), NULL );
     ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status);
     proc_affinity = pbi.AffinityMask;
-    ok( proc_affinity == (1 << si.dwNumberOfProcessors) - 1, "Unexpected process affinity\n" );
-    proc_affinity = 1 << si.dwNumberOfProcessors;
+    ok( proc_affinity == get_affinity_mask( si.dwNumberOfProcessors ), "Unexpected process affinity\n" );
+    proc_affinity = (DWORD_PTR)1 << si.dwNumberOfProcessors;
     status = pNtSetInformationProcess( GetCurrentProcess(), ProcessAffinityMask, &proc_affinity, sizeof(proc_affinity) );
     ok( status == STATUS_INVALID_PARAMETER,
         "Expected STATUS_INVALID_PARAMETER, got %08x\n", status);
@@ -2264,8 +2270,8 @@ static void test_affinity(void)
 
     status = pNtQueryInformationThread( GetCurrentThread(), ThreadBasicInformation, &tbi, sizeof(tbi), NULL );
     ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status);
-    ok( tbi.AffinityMask == (1 << si.dwNumberOfProcessors) - 1, "Unexpected thread affinity\n" );
-    thread_affinity = 1 << si.dwNumberOfProcessors;
+    ok( tbi.AffinityMask == get_affinity_mask( si.dwNumberOfProcessors ), "Unexpected thread affinity\n" );
+    thread_affinity = (DWORD_PTR)1 << si.dwNumberOfProcessors;
     status = pNtSetInformationThread( GetCurrentThread(), ThreadAffinityMask, &thread_affinity, sizeof(thread_affinity) );
     ok( status == STATUS_INVALID_PARAMETER,
         "Expected STATUS_INVALID_PARAMETER, got %08x\n", status);
@@ -2319,7 +2325,7 @@ static void test_affinity(void)
     {
         status = pNtQueryInformationThread( GetCurrentThread(), ThreadBasicInformation, &tbi, sizeof(tbi), NULL );
         ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status);
-        ok( tbi.AffinityMask == (1 << si.dwNumberOfProcessors) - 1, "unexpected affinity %#lx\n", tbi.AffinityMask );
+        ok( tbi.AffinityMask == get_affinity_mask( si.dwNumberOfProcessors ), "unexpected affinity %#lx\n", tbi.AffinityMask );
     }
     else
         skip("Cannot test thread affinity mask for 'all processors' flag\n");
@@ -2341,13 +2347,13 @@ static void test_affinity(void)
     ok( status == STATUS_INVALID_PARAMETER,
         "Expected STATUS_INVALID_PARAMETER, got %08x\n", status);
 
-    proc_affinity = (1 << si.dwNumberOfProcessors) - 1;
+    proc_affinity = get_affinity_mask( si.dwNumberOfProcessors );
     status = pNtSetInformationProcess( GetCurrentProcess(), ProcessAffinityMask, &proc_affinity, sizeof(proc_affinity) );
     ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status);
     /* Resetting the process affinity also resets the thread affinity */
     status = pNtQueryInformationThread( GetCurrentThread(), ThreadBasicInformation, &tbi, sizeof(tbi), NULL );
     ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status);
-    ok( tbi.AffinityMask == (1 << si.dwNumberOfProcessors) - 1,
+    ok( tbi.AffinityMask == get_affinity_mask( si.dwNumberOfProcessors ),
         "Unexpected thread affinity\n" );
 }
 
@@ -2445,13 +2451,13 @@ static void test_NtGetCurrentProcessorNumber(void)
     ok(status == STATUS_SUCCESS, "got 0x%x (expected STATUS_SUCCESS)\n", status);
 
     /* allow the test to run on all processors */
-    new_mask = (1 << si.dwNumberOfProcessors) - 1;
+    new_mask = get_affinity_mask( si.dwNumberOfProcessors );
     status = pNtSetInformationProcess(GetCurrentProcess(), ProcessAffinityMask, &new_mask, sizeof(new_mask));
     ok(status == STATUS_SUCCESS, "got 0x%x (expected STATUS_SUCCESS)\n", status);
 
     for (i = 0; i < si.dwNumberOfProcessors; i++)
     {
-        new_mask = 1 << i;
+        new_mask = (DWORD_PTR)1 << i;
         status = pNtSetInformationThread(GetCurrentThread(), ThreadAffinityMask, &new_mask, sizeof(new_mask));
         ok(status == STATUS_SUCCESS, "%d: got 0x%x (expected STATUS_SUCCESS)\n", i, status);
 




More information about the wine-cvs mailing list