[Issue 3798] core.cpuid locks systems with Xeon E5530 CPU

d-bugmail at puremagic.com d-bugmail at puremagic.com
Fri Feb 12 12:26:29 PST 2010


http://d.puremagic.com/issues/show_bug.cgi?id=3798



--- Comment #1 from David Simcha <dsimcha at yahoo.com> 2010-02-12 12:24:55 PST ---
ASsa  temporary workaround, I'm using:

    if (0) { //max_cpuid >=0x0B) {
        // For Intel i7 and later, use function 0x0B to determine
        // cores and hyperthreads.
        getCpuInfo0B();    
    } else {
        if (hyperThreadingBit) maxThreads = (apic>>>16) & 0xFF;
        else maxThreads = maxCores;
    }

The problem appears to be that the termination condition for the following loop
never becomes true:

    do {
        asm {
            mov EAX, 0x0B;
            mov ECX, level;
            cpuid;
            mov a, EAX;
            mov b, EAX;
            mov c, ECX;
            mov d, EDX;        
        }
        if (b!=0) {
           // I'm not sure about this. The docs state that there
           // are 2 hyperthreads per core if HT is factory enabled.
            if (level==0) maxThreads = b & 0xFFFF;
            else if (level==1) maxCores = b & 0xFFFF;

        }
    } while (a!=0 || b!=0);

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list