[Issue 3798] core.cpuid locks systems with Xeon E5530 CPU
https://issues.dlang.org/show_bug.cgi?id=3798 Andrei Alexandrescu changed: What|Removed |Added Version|2.040 |D2 --
[Issue 3798] core.cpuid locks systems with Xeon E5530 CPU
http://d.puremagic.com/issues/show_bug.cgi?id=3798 Don changed: What|Removed |Added Status|NEW |RESOLVED Resolution||FIXED --- Comment #5 from Don 2010-03-10 20:49:23 PST --- Fixed DMD2.041. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3798] core.cpuid locks systems with Xeon E5530 CPU
http://d.puremagic.com/issues/show_bug.cgi?id=3798 --- Comment #4 from Don 2010-02-13 12:49:21 PST --- (In reply to comment #3) > > Please add ++level; as the last line of that loop, so that it ends as: > > ++level; > > } while (a!=0 || b!=0); > > > > Does that fix it? I don't have access to a Core i7, so I'm flying blind > > based > > on the Intel manuals. > > Yep, that fixes it. Please fold into druntime for the next release. Excellent! Druntime svn 245. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3798] core.cpuid locks systems with Xeon E5530 CPU
http://d.puremagic.com/issues/show_bug.cgi?id=3798 --- Comment #3 from David Simcha 2010-02-13 07:54:38 PST --- > Please add ++level; as the last line of that loop, so that it ends as: > ++level; > } while (a!=0 || b!=0); > > Does that fix it? I don't have access to a Core i7, so I'm flying blind based > on the Intel manuals. Yep, that fixes it. Please fold into druntime for the next release. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3798] core.cpuid locks systems with Xeon E5530 CPU
http://d.puremagic.com/issues/show_bug.cgi?id=3798 Don changed: What|Removed |Added CC||clugd...@yahoo.com.au --- Comment #2 from Don 2010-02-12 20:35:48 PST --- (In reply to comment #1) > 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 & 0x; > else if (level==1) maxCores = b & 0x; > > } > } while (a!=0 || b!=0); Please add ++level; as the last line of that loop, so that it ends as: ++level; } while (a!=0 || b!=0); Does that fix it? I don't have access to a Core i7, so I'm flying blind based on the Intel manuals. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3798] core.cpuid locks systems with Xeon E5530 CPU
http://d.puremagic.com/issues/show_bug.cgi?id=3798 --- Comment #1 from David Simcha 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 & 0x; else if (level==1) maxCores = b & 0x; } } while (a!=0 || b!=0); -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---