Index: /trunk/src/VBox/ValidationKit/testmanager/core/testbox.py
===================================================================
--- /trunk/src/VBox/ValidationKit/testmanager/core/testbox.py	(revision 65093)
+++ /trunk/src/VBox/ValidationKit/testmanager/core/testbox.py	(revision 65094)
@@ -512,5 +512,5 @@
         sMarch = TestBoxData.queryCpuMicroarchEx(lCpuRevision, sCpuVendor);
         if sMarch is not None:
-            return '%s m%02X s%02X' \
+            return '%s %02x:%x' \
                  % (sMarch, TestBoxData.getCpuModelEx(lCpuRevision), TestBoxData.getCpuSteppingEx(lCpuRevision));
         return 'fam%02X m%02X s%02X' \
Index: /trunk/src/VBox/ValidationKit/testmanager/core/testresults.py
===================================================================
--- /trunk/src/VBox/ValidationKit/testmanager/core/testresults.py	(revision 65093)
+++ /trunk/src/VBox/ValidationKit/testmanager/core/testresults.py	(revision 65094)
@@ -654,11 +654,10 @@
     kiCpuArches             =  6;
     kiCpuVendors            =  7;
-    kiCpuRevisions          =  8;
-    kiCpuCounts             =  9;
-    kiMemory                = 10;
-    kiMisc                  = 11;
-    kiOses                  = 12;
-    kiPythonVersions        = 13;
-    kiFailReasons           = 14;
+    kiCpuCounts             =  8;
+    kiMemory                =  9;
+    kiMisc                  = 10;
+    kiOses                  = 11;
+    kiPythonVersions        = 12;
+    kiFailReasons           = 13;
 
     kiMisc_NestedPaging     =  0;
@@ -707,11 +706,9 @@
         assert self.aCriteria[self.kiCpuArches] is oCrit;
 
-        oCrit = FilterCriterion('CPU vendors', sVarNm = 'cv', sTable = 'TestBoxesWithStrings', sColumn = 'idStrCpuVendor');
+        oCrit = FilterCriterion('CPU vendor / rev', sVarNm = 'cv', sTable = 'TestBoxesWithStrings', sColumn = 'idStrCpuVendor',
+                                oSub = FilterCriterion('CPU revisions', sVarNm = 'cr',
+                                                       sTable = 'TestBoxesWithStrings', sColumn = 'lCpuRevision'));
         self.aCriteria.append(oCrit);
         assert self.aCriteria[self.kiCpuVendors] is oCrit;
-
-        oCrit = FilterCriterion('CPU revisions', sVarNm = 'cr', sTable = 'TestBoxesWithStrings', sColumn = 'lCpuRevision');
-        self.aCriteria.append(oCrit);
-        assert self.aCriteria[self.kiCpuRevisions] is oCrit;
 
         oCrit = FilterCriterion('CPU counts', sVarNm = 'cc', sTable = 'TestBoxesWithStrings', sColumn = 'cCpus');
@@ -1680,7 +1677,9 @@
         workerDoFetch(None, fIdIsName = True);
 
-        # Testbox CPU vendors.
+        # Testbox CPU revisions.
         oCrit = oFilter.aCriteria[TestResultFilter.kiCpuVendors];
         self._oDb.execute('SELECT TestBoxesWithStrings.idStrCpuVendor,\n'
+                          '       TestBoxesWithStrings.sCpuVendor,\n'
+                          '       TestBoxesWithStrings.lCpuRevision,\n'
                           '       TestBoxesWithStrings.sCpuVendor,\n'
                           '       SUM(TestBoxGenIDs.cTimes)\n'
@@ -1696,28 +1695,15 @@
                           '       LEFT OUTER JOIN TestBoxesWithStrings\n'
                           '                    ON TestBoxesWithStrings.idGenTestBox = TestBoxGenIDs.idGenTestBox\n'
-                          'GROUP BY TestBoxesWithStrings.idStrCpuVendor, TestBoxesWithStrings.sCpuVendor\n'
-                          'ORDER BY TestBoxesWithStrings.sCpuVendor\n' );
-        workerDoFetch(None, fIdIsName = True);
-
-        # Testbox CPU revisions.
-        oCrit = oFilter.aCriteria[TestResultFilter.kiCpuRevisions];
-        self._oDb.execute('SELECT TestBoxesWithStrings.lCpuRevision,\n'
-                          '       TestBoxesWithStrings.sCpuVendor,\n'
-                          '       SUM(TestBoxGenIDs.cTimes)\n'
-                          'FROM   ( SELECT TestSets.idGenTestBox,\n'
-                          '                COUNT(TestSets.idTestSet) AS cTimes\n'
-                          '         FROM   TestSets\n' + oFilter.getTableJoins(iOmit = TestResultFilter.kiCpuRevisions) +
-                          ''.join('                , %s\n' % (sTable,) for sTable in oReportModel.getExtraSubjectTables()) +
-                          '         WHERE  ' + self._getTimePeriodQueryPart(tsNow, sPeriod, '        ') +
-                          oFilter.getWhereConditions(iOmit = TestResultFilter.kiCpuRevisions) +
-                          oReportModel.getExtraSubjectWhereExpr() +
-                          '         GROUP BY TestSets.idGenTestBox'
-                          '       ) AS TestBoxGenIDs\n'
-                          '       LEFT OUTER JOIN TestBoxesWithStrings\n'
-                          '                    ON TestBoxesWithStrings.idGenTestBox = TestBoxGenIDs.idGenTestBox\n'
-                          'GROUP BY TestBoxesWithStrings.lCpuRevision, TestBoxesWithStrings.sCpuVendor\n'
-                          'ORDER BY TestBoxesWithStrings.sCpuVendor DESC, TestBoxesWithStrings.lCpuRevision DESC\n' );
-        workerDoFetch(None, fIdIsName = True);
-        for oCur in oCrit.aoPossible:
+                          'GROUP BY TestBoxesWithStrings.idStrCpuVendor,\n'
+                          '         TestBoxesWithStrings.sCpuVendor,\n'
+                          '         TestBoxesWithStrings.lCpuRevision,\n'
+                          '         TestBoxesWithStrings.sCpuVendor\n'
+                          'ORDER BY TestBoxesWithStrings.sCpuVendor DESC,\n'
+                          '             TestBoxesWithStrings.sCpuVendor = \'GenuineIntel\'\n'
+                          '         AND (TestBoxesWithStrings.lCpuRevision >> 24) = 15,\n' # P4 at the bottom is a start...
+                          '         TestBoxesWithStrings.lCpuRevision DESC\n'
+                          );
+        workerDoFetchNested();
+        for oCur in oCrit.oSub.aoPossible:
             oCur.sDesc = TestBoxData.getPrettyCpuVersionEx(oCur.oValue, oCur.sDesc).replace('_', ' ');
 
