Opened 5 years ago

Closed 3 years ago

#5412 closed defect (fixed)

HardwareDetection - AMD processor - ACPI SRAT table contains unknown APIC IDs

Reported by: Drain Owned by: Imarok
Priority: Release Blocker Milestone: Alpha 24
Component: Core engine Keywords:
Cc: Patch: Phab:D1789

Description (last modified by historic_bruno)

I am on Windows 7 and when I want to execute 0ad, I get an error message containing the following: (I will also attach the crashlog to this ticket.)

Function call failed: return value was -100010 (Logic error in code)
Location: apic.cpp:121 (IndexFromApicId)

Call stack:

IndexFromApicId (apic.cpp:121)
    apicIds = 0x014DBA64 -> [8] { 0 (0x00), 1 (0x01), 2 (0x02), 3 (0x03), 8 (0x08), 9 (0x09), 10 (0x0A), 11 (0x0B) }
    apicId = 4 (0x04)

ProcessorFromApicId (apic.cpp:131)
    apicId = 4 (0x04)

ExtractProximityDomainsFromSRAT (wnuma.cpp:236)
    srat = 0x00000000
    proximityDomainNumber = 0 (0x00000000)

InitTopology (wnuma.cpp:277)
    proximityDomains = (unsupported map<size_t,ProximityDomain >)

ModuleInit (module_init.cpp:47)
    initState = 0x014D9B0C -> 4294867266 (0xFFFE7942)
    init = 0x013B14E0 -> (InitTopology)

numa_NumNodes (wnuma.cpp:297)

RunHardwareDetection (hwdetect.cpp:313)
    LINE_202_ = 
        m_t0 = 0.963197 (0x3FEED2826A286D36)
        m_description = 0x0145EB84 -> "RunHardwareDetection"

    rq = 
        mContext = 0x0639CA40 -> (JSContext)

    global = 
        { 
                (js::ValueOperations<JS::Rooted<JS::Value> >)
 }
        stack = 0x81818080 -> (unavailable - internal error)

        prev = 0x83838282 -> 
            (js::RootedBase<void *>)
            stack = (unavailable - internal error)

            prev = (unavailable - internal error)

            ptr = (unavailable - internal error)


        ptr = 
            data = 
                asBits = -8680821844409482108 (0x8787868685858484)
                s = { payload = 
                        i32 = 2240119940 (0x85858484)
                        u32 = 2240119940 (0x85858484)
                        boo = 2240119940 (0x85858484)
                        str = 0x85858484 -> (JSString)
                        sym = 0x85858484 (see above)
                        obj = 0x85858484 (see above)
                        cell = 0x85858484 (see above)
                        ptr = 0x85858484 (see above)
                        why = -2054847356
                        word = 2240119940 (0x85858484)
                        uintptr = 2240119940 (0x85858484)
, tag = -2021161338 }
                asDouble = -2.17437e-272 (0x8787868685858484)
                asPtr = 0x85858484 (see above)



    caps3 = 2139061886 (0x7F7F7E7E)
    un = 
        sysname = "Win7"
        nodename = "STEFAN-PC"
        release = "SP 1"
        version = "6.1.7601"
        machine = "x86"

    file = 
        m_Buffer = (shared_ptr<unsigned char>)
        m_BufferSize = 12383 (0x0000305F)

    code = (unsupported basic_string<char,char_traits<char> >)
    tmpVal = 
        { 
                (js::ValueOperations<JS::Rooted<JS::Value> >)
 }
        stack = 0x8D8D8C8C -> (unavailable - internal error)

        prev = 0x8F8F8E8E -> 
            (js::RootedBase<void *>)
            stack = (unavailable - internal error)

            prev = (unavailable - internal error)

            ptr = (unavailable - internal error)


        ptr = 
            data = 
                asBits = -7812739770352562032 (0x9393929291919090)
                s = { payload = 
                        i32 = 2442236048 (0x91919090)
                        u32 = 2442236048 (0x91919090)
                        boo = 2442236048 (0x91919090)
                        str = 0x91919090 -> (JSString)
                        sym = 0x91919090 (see above)
                        obj = 0x91919090 (see above)
                        cell = 0x91919090 (see above)
                        ptr = 0x91919090 (see above)
                        why = -1852731248
                        word = 2442236048 (0x91919090)
                        uintptr = 2442236048 (0x91919090)
, tag = -1819045230 }
                asDouble = -2.27107e-214 (0x9393929291919090)
                asPtr = 0x91919090 (see above)



    caps0 = 2105375868 (0x7D7D7C7C)
    scriptInterface = 
        m_CxPrivate = { pScriptInterface = 0x0028E850 -> 
                m_CxPrivate = { pScriptInterface = 0x0028E850 (see above), pCBData = 0x97979696 }
                m = (unique_ptr<ScriptInterface_impl,default_delete<ScriptInterface_impl> >)
                m_rng = 0x9B9B9A9A -> 
                    lcf = 
                        _x = (unavailable - internal error)



                m_CustomObjectTypes = (unsupported map<basic_string<char,char_traits<char> >,ScriptInterface::CustomType >)
, pCBData = 0x97979696 (see above) }
        m = (unique_ptr<ScriptInterface_impl,default_delete<ScriptInterface_impl> >)
        m_rng = 0x9B9B9A9A (see above)
        m_CustomObjectTypes = (unsupported map<basic_string<char,char_traits<char> >,ScriptInterface::CustomType >)

    settings = 
        { 
                (js::ValueOperations<JS::Rooted<JS::Value> >)
 }
        stack = 0x0639CA74 -> 0x0028E86C -> 
            (js::RootedBase<void *>)
            stack = 0x0639CA74 (see above)
            prev = 0x00000000
            ptr = 0x05461A60

        prev = 0x00000000
        ptr = 
            data = 
                asBits = -515307595168 (0xFFFFFF8805461A60)
                s = { payload = 
                        i32 = 88480352 (0x05461A60)
                        u32 = 88480352 (0x05461A60)
                        boo = 88480352 (0x05461A60)
                        str = 0x05461A60 (see above)
                        sym = 0x05461A60 (see above)
                        obj = 0x05461A60 (see above)
                        cell = 0x05461A60 (see above)
                        ptr = 0x05461A60 (see above)
                        why = 88480352
                        word = 88480352 (0x05461A60)
                        uintptr = 88480352 (0x05461A60)
, tag = -120 }
                asDouble = -1.#QNAN (0xFFFFFF8805461A60)
                asPtr = 0x05461A60 (see above)



    caps2 = 2307491976 (0x89898888)
    caps1 = 2341177994 (0x8B8B8A8A)

InitGraphics (gamesetup.cpp:1004)
    args = (unavailable)
    flags = (unavailable)
    installedMods = (unavailable)
    profilerGPUEnable = (bool)0x65
    setup_vmode = (bool)0x77
    context = [2048] 
        0 (0x00)
        80 (0x50)
        4 (0x04)
        0 (0x00)
        0 (0x00)
        240 (0xF0)
        255 (0xFF)
        118 (0x76)
        240 (0xF0)
        0 (0x00)
        252 (0xFC)
        118 (0x76)
        0 (0x00)
        0 (0x00)
        0 (0x00)
        0 (0x00) ...
    buf = [500] 
        27694
        29934
        61809
        29935
        740
        0
        5788
        0
        4388
        0
        62464
        40 ('(') ...
    context = [2048] 
        0 (0x00)
        80 (0x50)
        4 (0x04)
        0 (0x00)
        0 (0x00)
        240 (0xF0)
        255 (0xFF)
        118 (0x76)
        240 (0xF0)
        0 (0x00)
        252 (0xFC)
        118 (0x76)
        0 (0x00)
        0 (0x00)
        0 (0x00)
        0 (0x00) ...
    context = [2048] 
        0 (0x00)
        80 (0x50)
        4 (0x04)
        0 (0x00)
        0 (0x00)
        240 (0xF0)
        255 (0xFF)
        118 (0x76)
        240 (0xF0)
        0 (0x00)
        252 (0xFC)
        118 (0x76)
        0 (0x00)
        0 (0x00)
        0 (0x00)
        0 (0x00) ...
    rq = 
        mContext = 0x000007A0

    setup_gui = (bool)0x20
    data = 
        { 
                (js::ValueOperations<JS::Rooted<JS::Value> >)
 }
        stack = 0x00000000
        prev = 0x00000000
        ptr = 
            data = 
                asBits = 1996226560 (0x0000000076FC0000)
                s = { payload = 
                        i32 = 1996226560 (0x76FC0000)
                        u32 = 1996226560 (0x76FC0000)
                        boo = 1996226560 (0x76FC0000)
                        str = 0x76FC0000 -> (JSString)
                        sym = 0x76FC0000 (see above)
                        obj = 0x76FC0000 (see above)
                        cell = 0x76FC0000 (see above)
                        ptr = 0x76FC0000 (see above)
                        why = 1996226560
                        word = 1996226560 (0x76FC0000)
                        uintptr = 1996226560 (0x76FC0000)
, tag = 0 }
                asDouble = 9.86267e-315 (0x0000000076FC0000)
                asPtr = 0x76FC0000 (see above)



    scriptInterface = (shared_ptr<ScriptInterface>)
    e = 0x00000001

RunGameOrAtlas (main.cpp:632)
    argc = 1 (0x00000001)
    argv = 0x002B0008 -> 0x002B0028 -> "C:\Users\Stefan\AppData\Local\0 A.D. alpha\binaries\system\pyrogenesis.exe"
    replayFile = 
        path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 47 ('/')

    modsToInstall = (unsupported vector<Path >)
    scriptEngine = 
        (Singleton<ScriptEngine>)
        m_Runtimes = (unsupported list<JSRuntime const * >)

    args = 
        m_Args = (unsupported vector<pair<CStr8,CStr8> >)
        m_Arg0 = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 92 ('\')

        m_ArgsWithoutName = (unsupported vector<CStr8 >)

    res = 2.86287e-010 (0x3DF3AC6964BA1217)
    modPath = 
        path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 60713

    paths = 
        m_root = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 2047

        m_rdata = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 16385

        m_gameData = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_userData = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 13319

        m_config = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 15232

        m_cache = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 19712

        m_logs = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 312


    replay = 
        m_Stream = 0x3DF3AC69 -> (basic_istream<char,char_traits<char> >)

    mod = 
        path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 31792

    zip = 
        path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 0

    mods = (unsupported vector<CStr8 >)
    paths = 
        m_root = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 13409

        m_rdata = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 11

        m_gameData = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 15300

        m_userData = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 56488

        m_config = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 63336

        m_cache = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 63364

        m_logs = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0


    builder = 
        m_VFS = (shared_ptr<IVFS>)
        m_Files = (unsupported vector<Path >)
        m_TempDir = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 52533

        m_NumBaseMods = 6095160 (0x005D0138)

    installedMods = (unsupported vector<CStr8 >)
    installer = 
        m_VFS = (shared_ptr<IVFS>)
        m_ModsDir = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_TempDir = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_CacheDir = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 160

        m_InstalledMods = (unsupported vector<CStr8 >)

    paths = 
        m_root = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 13409

        m_rdata = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 11

        m_gameData = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 15300

        m_userData = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 56488

        m_config = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 63336

        m_cache = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 63364

        m_logs = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0



SDL_main (main.cpp:680)
    argc = 1 (0x00000001)
    argv = 0x002B0008 (see above)

main_utf8 (sdl_windows_main.c:126)
    argc = 1 (0x00000001)
    argv = 0x002B0008 (see above)

wmain (sdl_windows_main.c:151)
    argc = 1 (0x00000001)
    wargv = 0x0062BCA8 -> 0x0062BCB0 -> 67 (0x0043)
    wenvp = 0x0062D510 -> 14800 (0x39D0)
    argv = 0x002B0008 (see above)
    retval = 0 (0x00000000)
    i = 1 (0x00000001)

CallStartupWithinTryBlock (wseh.cpp:364)
    ret = 0 (0x00000000)

RtlInitializeExceptionChain (:0)

RtlInitializeExceptionChain (:0)


errno = 0 (No error reported here)
OS error = 0 (no error code was set)

Attachments (2)

crashlog.txt (14.4 KB ) - added by Drain 5 years ago.
D1789.diff (2.9 KB ) - added by Itms 5 years ago.

Download all attachments as: .zip

Change History (16)

by Drain, 5 years ago

Attachment: crashlog.txt added

comment:1 by Stan, 5 years ago

Hello and thanks for the report. Can you try disabling GLSL and Postprocessing in the game options to see if that fixes it ? Thanks in advance.

comment:2 by Silier, 5 years ago

Hi, I have small questions for you. How many processors does your computer have and if are all allowed to be used by game.

Thank you.

Last edited 5 years ago by Silier (previous) (diff)

in reply to:  1 comment:3 by Drain, 5 years ago

Replying to stanislas69:

Hello and thanks for the report. Can you try disabling GLSL and Postprocessing in the game options to see if that fixes it ? Thanks in advance.

Thank you for your answer. I am not sure how I disable those settings, since I can't access the game options. (the error message pops up directly after executing pryogenesis.exe) I found the file "default.cfg" and the following settings are set:

preferglsl = false postproc = false

So I assume the settings you mentioned are disabled.

in reply to:  2 comment:4 by Drain, 5 years ago

Replying to Angen:

Hi, I have small questions for you. How many processors does your computer have and if are all allowed to be used by game.

Thank you.

My PC has 4 processors and the game is allowed to use all.

comment:5 by Itms, 5 years ago

Hi Drain! Thanks for the report and for taking the time to give us more information :-)

There is an inconsistency between the list of APIC IDs of your processors and the SRAT table: the latter contains an affinity for a processor whose APIC ID is not known.

Could you give us the cpuid output on your system? On Windows, it looks like you can use CPU-Z. Start it, then click on the bottom of the window on Tools > Save Report as .TXT, and please share the report here. Thanks in advance!

in reply to:  5 comment:6 by Drain, 5 years ago

Replying to Itms:

Hi Drain! Thanks for the report and for taking the time to give us more information :-)

There is an inconsistency between the list of APIC IDs of your processors and the SRAT table: the latter contains an affinity for a processor whose APIC ID is not known.

Could you give us the cpuid output on your system? On Windows, it looks like you can use CPU-Z. Start it, then click on the bottom of the window on Tools > Save Report as .TXT, and please share the report here. Thanks in advance!

I used CPU-Z to get the info, but there is too much additional info in the file I'd rather not share. Is this what you are looking for?

Socket 1			ID = 0
	Number of cores		4 (max 4)
	Number of threads	8 (max 8)
	Name			AMD Ryzen 5 1500X
	Codename		Summit Ridge
	Specification		AMD Ryzen 5 1500X Quad-Core Processor          
	Package 		Socket AM4 (1331)
	CPUID			F.1.1
	Extended CPUID		17.1
	Core Stepping		ZP-B1
	Technology		14 nm
	TDP Limit		65.0 Watts
	Core Speed		1546.9 MHz
	Multiplier x Bus Speed	15.5 x 99.8 MHz
	Base frequency (cores)	99.8 MHz
	Base frequency (ext.)	99.8 MHz
	Instructions sets	MMX (+), SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, SSE4A, x86-64, AMD-V, AES, AVX, AVX2, FMA3, SHA
	Microcode Revision	0x8001105
	L1 Data cache		4 x 32 KBytes, 8-way set associative, 64-byte line size
	L1 Instruction cache	4 x 64 KBytes, 4-way set associative, 64-byte line size
	L2 cache		4 x 512 KBytes, 8-way set associative, 64-byte line size
	L3 cache		2 x 8 MBytes, 16-way set associative, 64-byte line size
	Max CPUID level		0000000Dh
	Max CPUID ext. level	8000001Fh
	Cache descriptor	Level 1, D, 32 KB, 2 thread(s)
	Cache descriptor	Level 1, I, 64 KB, 2 thread(s)
	Cache descriptor	Level 2, U, 512 KB, 2 thread(s)
	Cache descriptor	Level 3, U, 8 MB, 4 thread(s)
	FID/VID Control		yes
	# of P-States		3
	P-State			FID 0x88C - VID 0x32 (35.00x - 1.237 V)
	P-State			FID 0x878 - VID 0x40 (30.00x - 1.150 V)
	P-State			FID 0x107C - VID 0x6A (15.50x - 0.887 V)
Version 1, edited 5 years ago by Drain (previous) (next) (diff)

comment:7 by Itms, 5 years ago

Milestone: BacklogWork In Progress
Patch: Phab:D1789
Summary: Crash at the start of the game (Windows 7)HardwareDetection - AMD processor - ACPI SRAT table contains unknown APIC IDs

Hello, and thanks for the extra information! Indeed, it seems like neither 0 A.D. nor cpuid are allowed to use some of your logical processors. Core IDs 2 and 3 don't appear, and they would get the APIC IDs 4 and 5, and 6 and 7, respectively. The SRAT contains affinity information for those IDs (well, at least number 4).

So I believe the sensible thing to do would just be to ignore the affinity information for the processors that 0 A.D. doesn't know about. I have written a short patch for this.

Would you have interest in getting the development version of the game and testing the patch for us? It would be greatly appreciated. The instructions are in BuildInstructions. Once you have the development version built, you can apply the attached patch with TortoiseSVN "Apply patch", and rebuild the game.

Don't hesitate to ask if you have questions :)

by Itms, 5 years ago

Attachment: D1789.diff added

comment:8 by historic_bruno, 5 years ago

Description: modified (diff)

comment:9 by OptimusShepard, 3 years ago

Priority: Should HaveRelease Blocker

The patch is needed to be able to start the game on Threadripper CPUs.

comment:10 by Imarok, 3 years ago

Milestone: Work In ProgressAlpha 24

Correct milestone

in reply to:  9 ; comment:11 by Imarok, 3 years ago

Replying to OptimusShepard:

The patch is needed to be able to start the game on Threadripper CPUs.

Why so you talk about Threadripper CPUs? Afaics this bug happened with a AMD Ryzen 5 1500X, right?

in reply to:  11 ; comment:12 by OptimusShepard, 3 years ago

Replying to Imarok:

Replying to OptimusShepard:

The patch is needed to be able to start the game on Threadripper CPUs.

Why so you talk about Threadripper CPUs? Afaics this bug happened with a AMD Ryzen 5 1500X, right?

https://wildfiregames.com/forum/topic/28367-amd-ryzen-threadripper-user-read-before-posting/

https://wildfiregames.com/forum/topic/28771-problems-with-ryzon-tr-3960x-256gb-ram/

in reply to:  12 comment:13 by Imarok, 3 years ago

Replying to OptimusShepard:

Replying to Imarok:

Replying to OptimusShepard:

The patch is needed to be able to start the game on Threadripper CPUs.

Why so you talk about Threadripper CPUs? Afaics this bug happened with a AMD Ryzen 5 1500X, right?

https://wildfiregames.com/forum/topic/28367-amd-ryzen-threadripper-user-read-before-posting/

https://wildfiregames.com/forum/topic/28771-problems-with-ryzon-tr-3960x-256gb-ram/

Former sounds more like #4360 while latter looks like a new bug.

comment:14 by Imarok, 3 years ago

Owner: set to Imarok
Resolution: fixed
Status: newclosed

In 24326:

Handle unknown APIC IDs in the ACPI SRAT

Patch by: Itms
Fixes: #5412

Differential Revision: https://code.wildfiregames.com/D1789

Note: See TracTickets for help on using tickets.