[PATCH v2] wineboot: Fill ActiveProcessorAffinity field in USD.

Paul Gofman pgofman at codeweavers.com
Fri Nov 20 07:39:17 CST 2020


Signed-off-by: Paul Gofman <pgofman at codeweavers.com>
---
v2:
    - define ActiveProcessorAffinity as ULONGLONG in USD;
    - use ULONGLONG instead of ULONG_PTR.

 dlls/ntdll/tests/virtual.c   | 7 +++++++
 include/ddk/wdm.h            | 2 +-
 programs/wineboot/wineboot.c | 2 ++
 3 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/dlls/ntdll/tests/virtual.c b/dlls/ntdll/tests/virtual.c
index 9c2cf824018..f2c8343e1a6 100644
--- a/dlls/ntdll/tests/virtual.c
+++ b/dlls/ntdll/tests/virtual.c
@@ -579,6 +579,13 @@ static void test_user_shared_data(void)
     ok(user_shared_data->ActiveProcessorCount == NtCurrentTeb()->Peb->NumberOfProcessors
             || broken(!user_shared_data->ActiveProcessorCount) /* before Win7 */,
             "Got unexpected ActiveProcessorCount %u.\n", user_shared_data->ActiveProcessorCount);
+    if (user_shared_data->ActiveProcessorCount)
+        ok(user_shared_data->ActiveProcessorAffinity
+                == (user_shared_data->ActiveProcessorCount >= 8 * sizeof(ULONGLONG)
+                ? ~(ULONGLONG)0 : ((ULONGLONG)1 << user_shared_data->ActiveProcessorCount) - 1)
+                || broken(!user_shared_data->ActiveProcessorAffinity) /* before Win7 */,
+                "Got unexpected ActiveProcessorAffinity %s.\n",
+                wine_dbgstr_longlong(user_shared_data->ActiveProcessorAffinity));
     ok(user_shared_data->ActiveGroupCount == 1
             || broken(!user_shared_data->ActiveGroupCount) /* before Win7 */,
             "Got unexpected ActiveGroupCount %u.\n", user_shared_data->ActiveGroupCount);
diff --git a/include/ddk/wdm.h b/include/ddk/wdm.h
index 6885de1cf89..aa2551be035 100644
--- a/include/ddk/wdm.h
+++ b/include/ddk/wdm.h
@@ -1320,7 +1320,7 @@ typedef struct _KUSER_SHARED_DATA {
     USHORT UserModeGlobalLogger[16];                       /* 0x380 */
     ULONG ImageFileExecutionOptions;                       /* 0x3a0 */
     ULONG LangGenerationCount;                             /* 0x3a4 */
-    ULONG ActiveProcessorAffinity;                         /* 0x3a8 */
+    ULONGLONG ActiveProcessorAffinity;                     /* 0x3a8 */
     volatile ULONGLONG InterruptTimeBias;                  /* 0x3b0 */
     volatile ULONGLONG QpcBias;                            /* 0x3b8 */
     ULONG ActiveProcessorCount;                            /* 0x3c0 */
diff --git a/programs/wineboot/wineboot.c b/programs/wineboot/wineboot.c
index 05a5ee6aa62..5bf839ec520 100644
--- a/programs/wineboot/wineboot.c
+++ b/programs/wineboot/wineboot.c
@@ -332,6 +332,8 @@ static void create_user_shared_data(void)
         break;
     }
     data->ActiveProcessorCount = NtCurrentTeb()->Peb->NumberOfProcessors;
+    data->ActiveProcessorAffinity = data->ActiveProcessorCount >= 8 * sizeof(ULONGLONG)
+            ? ~(ULONGLONG)0 : ((ULONGLONG)1 << data->ActiveProcessorCount) - 1;
     data->ActiveGroupCount = 1;
 
     initialize_xstate_features( data );
-- 
2.28.0




More information about the wine-devel mailing list