VirtualBox

Changeset 64267 in vbox for trunk/src/VBox/Runtime/r0drv/nt


Ignore:
Timestamp:
Oct 13, 2016 5:17:20 PM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
111280
Message:

initterm-r0drv-nt.cpp: Reality update on MaximumProcessorCount.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/r0drv/nt/initterm-r0drv-nt.cpp

    r64234 r64267  
    447447                ProcNum.Reserved = 0;
    448448                ULONG idxCpu = g_pfnrtKeGetProcessorIndexFromNumber(&ProcNum);
    449                 MY_CHECK_BREAK(idxCpu != INVALID_PROCESSOR_INDEX,
    450                                ("IPRT: Fatal: KeGetProcessorIndexFromNumber(%u/%u) failed\n", idxGroup, idxMember));
    451                 MY_CHECK_BREAK(idxCpu < g_cRtMpNtMaxCpus && idxCpu < RTCPUSET_MAX_CPUS,
    452                                ("IPRT: Fatal: idxCpu=%u >= g_cRtMpNtMaxCpu=%u (RTCPUSET_MAX_CPUS=%u)\n",
    453                                 idxCpu, g_cRtMpNtMaxCpus, RTCPUSET_MAX_CPUS));
    454                 MY_CHECK_BREAK(idxCpu == idxCpuExpect, ("IPRT: Fatal: idxCpu=%u != idxCpuExpect=%u\n", idxCpu, idxCpuExpect));
    455 
    456                 ProcNum.Group    = UINT16_MAX;
    457                 ProcNum.Number   = UINT8_MAX;
    458                 ProcNum.Reserved = UINT8_MAX;
    459                 NTSTATUS rcNt = g_pfnrtKeGetProcessorNumberFromIndex(idxCpu, &ProcNum);
    460                 MY_CHECK_BREAK(NT_SUCCESS(rcNt), ("IPRT: Fatal: KeGetProcessorNumberFromIndex(%u,) -> %#x!\n", idxCpu, rcNt));
    461                 MY_CHECK_BREAK(ProcNum.Group == idxGroup && ProcNum.Number == idxMember,
    462                                ("IPRT: Fatal: KeGetProcessorXxxxFromYyyy roundtrip error for %#x! Group: %u vs %u, Number: %u vs %u\n",
    463                                 idxCpu, ProcNum.Group, idxGroup, ProcNum.Number, idxMember));
    464 
    465                 if (pGrpInfo->ActiveProcessorMask & RT_BIT_64(idxMember))
    466                     RTCpuSetAddByIndex(&g_rtMpNtCpuSet, idxCpu);
     449                if (idxCpu != INVALID_PROCESSOR_INDEX)
     450                {
     451                    MY_CHECK_BREAK(idxCpu < g_cRtMpNtMaxCpus && idxCpu < RTCPUSET_MAX_CPUS,
     452                                   ("IPRT: Fatal: idxCpu=%u >= g_cRtMpNtMaxCpu=%u (RTCPUSET_MAX_CPUS=%u)\n",
     453                                    idxCpu, g_cRtMpNtMaxCpus, RTCPUSET_MAX_CPUS));
     454                    MY_CHECK_BREAK(idxCpu == idxCpuExpect, ("IPRT: Fatal: idxCpu=%u != idxCpuExpect=%u\n", idxCpu, idxCpuExpect));
     455
     456                    ProcNum.Group    = UINT16_MAX;
     457                    ProcNum.Number   = UINT8_MAX;
     458                    ProcNum.Reserved = UINT8_MAX;
     459                    NTSTATUS rcNt = g_pfnrtKeGetProcessorNumberFromIndex(idxCpu, &ProcNum);
     460                    MY_CHECK_BREAK(NT_SUCCESS(rcNt), ("IPRT: Fatal: KeGetProcessorNumberFromIndex(%u,) -> %#x!\n", idxCpu, rcNt));
     461                    MY_CHECK_BREAK(ProcNum.Group == idxGroup && ProcNum.Number == idxMember,
     462                                   ("IPRT: Fatal: KeGetProcessorXxxxFromYyyy roundtrip error for %#x! Group: %u vs %u, Number: %u vs %u\n",
     463                                    idxCpu, ProcNum.Group, idxGroup, ProcNum.Number, idxMember));
     464
     465                    if (pGrpInfo->ActiveProcessorMask & RT_BIT_64(idxMember))
     466                        RTCpuSetAddByIndex(&g_rtMpNtCpuSet, idxCpu);
     467                }
     468                else
     469                {
     470                    /* W2K8 server gives me a max of 64 logical CPUs, even if the system only has 12,
     471                       causing failures here.  Not yet sure how this would work with two CPU groups yet... */
     472                    MY_CHECK_BREAK(   idxMember >= pGrpInfo->ActiveProcessorCount
     473                                   && !(pGrpInfo->ActiveProcessorMask & RT_BIT_64(idxMember)),
     474                                   ("IPRT: Fatal: KeGetProcessorIndexFromNumber(%u/%u) failed! cMax=%u cActive=%u\n",
     475                                    idxGroup, idxMember, pGrpInfo->MaximumProcessorCount, pGrpInfo->ActiveProcessorCount));
     476                }
    467477            }
    468478        }
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette