static DWORD WINAPI EmulateGetCurrentProcessorNumber(VOID) { const ApicId apicId = GetApicId(); const DWORD processor = (DWORD)ProcessorFromApicId(apicId); ASSERT(processor < os_cpu_MaxProcessors); return processor; }
static ProximityDomains ExtractProximityDomainsFromSRAT(const SRAT* srat) { ProximityDomains proximityDomains; for(const AffinityHeader* header = srat->affinities; header < (const AffinityHeader*)(uintptr_t(srat)+srat->header.size); header = (const AffinityHeader*)(uintptr_t(header) + header->length)) { const AffinityAPIC* affinityAPIC = DynamicCastFromHeader<AffinityAPIC>(header); if(affinityAPIC) { const size_t processor = ProcessorFromApicId(affinityAPIC->apicId); const u32 proximityDomainNumber = affinityAPIC->ProximityDomainNumber(); ProximityDomain& proximityDomain = proximityDomains[proximityDomainNumber]; proximityDomain.processorMask |= Bit<uintptr_t>(processor); } } return proximityDomains; }