diff --git a/source/lib/sysdep/arch/x86_x64/apic.cpp b/source/lib/sysdep/arch/x86_x64/apic.cpp index b05e0c33b7..7989db316b 100644 --- a/source/lib/sysdep/arch/x86_x64/apic.cpp +++ b/source/lib/sysdep/arch/x86_x64/apic.cpp @@ -52,7 +52,9 @@ static Status GetAndValidateApicIds() const size_t numUnique = end-sortedApicIds; // all IDs are zero - system lacks an xAPIC. - if(numUnique == 1 && sortedApicIds[0] == 0) + // (NB: we exclude single-processor systems in this test - + // having one zero-valued ID is legitimate) + if(numUnique == 1 && sortedApicIds[0] == 0 && numIds != 1) { debug_printf(L"APIC: all zero\n"); return ERR::CPU_FEATURE_MISSING; // NOWARN diff --git a/source/lib/sysdep/os/win/wvm.cpp b/source/lib/sysdep/os/win/wvm.cpp index 9c5bcb2ed9..a6de15900b 100644 --- a/source/lib/sysdep/os/win/wvm.cpp +++ b/source/lib/sysdep/os/win/wvm.cpp @@ -287,6 +287,7 @@ CACHE_ALIGNED(struct AddressRangeDescriptor) // POD base = (intptr_t)AllocateLargeOrSmallPages(0, totalSize, MEM_RESERVE); if(!base) { + debug_printf(L"AllocateLargeOrSmallPages of %lld failed\n", (u64)totalSize); DEBUG_DISPLAY_ERROR(ErrorString()); return ERR::NO_MEM; // NOWARN (error string is more helpful) } @@ -344,7 +345,7 @@ CACHE_ALIGNED(struct AddressRangeDescriptor) // POD static const wchar_t* ErrorString() { #if ARCH_IA32 - return L"Out of address space (64-bit OS is required)"; + return L"Out of address space (64-bit OS may help)"; #elif OS_WIN // because early AMD64 lacked CMPXCHG16B, the Windows lock-free slist // must squeeze the address, ABA tag and list length (a questionable