From: Sven Baars <sbaars@codeweavers.com> This was done for Linux in cc01c46f415821ec458845f678287a2419a11a7d. --- dlls/ntdll/tests/info.c | 4 ++++ dlls/ntdll/unix/system.c | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/dlls/ntdll/tests/info.c b/dlls/ntdll/tests/info.c index c56345b867a..f2704978535 100644 --- a/dlls/ntdll/tests/info.c +++ b/dlls/ntdll/tests/info.c @@ -781,6 +781,8 @@ static void test_query_procperf(void) ok (sppi->KernelTime.QuadPart != 0xdeaddead, "KernelTime unchanged\n"); ok (sppi->UserTime.QuadPart != 0xdeaddead, "UserTime unchanged\n"); ok (sppi->IdleTime.QuadPart != 0xdeaddead, "IdleTime unchanged\n"); + ok (sppi->KernelTime.QuadPart > sppi->IdleTime.QuadPart, + "Expected %I64u > %I64u\n", sppi->KernelTime.QuadPart, sppi->IdleTime.QuadPart); /* Try it for all processors */ sppi->KernelTime.QuadPart = 0xdeaddead; @@ -792,6 +794,8 @@ static void test_query_procperf(void) ok (sppi->KernelTime.QuadPart != 0xdeaddead, "KernelTime unchanged\n"); ok (sppi->UserTime.QuadPart != 0xdeaddead, "UserTime unchanged\n"); ok (sppi->IdleTime.QuadPart != 0xdeaddead, "IdleTime unchanged\n"); + ok (sppi->KernelTime.QuadPart > sppi->IdleTime.QuadPart, + "Expected %I64u > %I64u\n", sppi->KernelTime.QuadPart, sppi->IdleTime.QuadPart); /* A too large given buffer size */ sppi = HeapReAlloc(GetProcessHeap(), 0, sppi , NeededLength + 2); diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c index f6fa89c4116..350bcea4f86 100644 --- a/dlls/ntdll/unix/system.c +++ b/dlls/ntdll/unix/system.c @@ -3283,7 +3283,8 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class, for (i = 0; i < cpus; i++) { sppi[i].IdleTime.QuadPart = (ULONGLONG)pinfo[i].cpu_ticks[CPU_STATE_IDLE] * 100000; - sppi[i].KernelTime.QuadPart = (ULONGLONG)pinfo[i].cpu_ticks[CPU_STATE_SYSTEM] * 100000; + sppi[i].KernelTime.QuadPart = (ULONGLONG)pinfo[i].cpu_ticks[CPU_STATE_SYSTEM] * 100000 + + sppi[i].IdleTime.QuadPart; sppi[i].UserTime.QuadPart = (ULONGLONG)pinfo[i].cpu_ticks[CPU_STATE_USER] * 100000; } vm_deallocate (mach_task_self (), (vm_address_t) pinfo, info_count * sizeof(natural_t)); @@ -3344,7 +3345,8 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class, { if (cpus * CPUSTATES * sizeof(long) >= size) break; sppi[cpus].IdleTime.QuadPart = (ULONGLONG)ptimes[cpus*CPUSTATES + CP_IDLE] * 10000000 / clockrate.stathz; - sppi[cpus].KernelTime.QuadPart = (ULONGLONG)ptimes[cpus*CPUSTATES + CP_SYS] * 10000000 / clockrate.stathz; + sppi[cpus].KernelTime.QuadPart = (ULONGLONG)ptimes[cpus*CPUSTATES + CP_SYS] * 10000000 / clockrate.stathz + + sppi[cpus].IdleTime.QuadPart; sppi[cpus].UserTime.QuadPart = (ULONGLONG)ptimes[cpus*CPUSTATES + CP_USER] * 10000000 / clockrate.stathz; } } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9759