Print this page
9578 HVM fails assertion in opteron_get_nnodes() with a Opteron 6262 HE CPU on the host system

@@ -26,11 +26,11 @@
  * Copyright (c) 2010, Intel Corporation.
  * All rights reserved.
  */
 /*
  * Copyright 2018 Joyent, Inc.
- * Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
+ * Copyright 2018 Nexenta Systems, Inc.
  * Copyright 2018 OmniOS Community Edition (OmniOSce) Association.
  */
 
 #include <sys/types.h>
 #include <sys/thread.h>

@@ -717,49 +717,35 @@
         cmn_err(CE_WARN, "cpu%d: couldn't %smsr 0x%x, error %d",
             cp->cpu_id, rw, msr, error);
 }
 
 /*
- * Determine the number of nodes in a Hammer / Greyhound / Griffin family
- * system.
+ * Determine the number of nodes in a system.
+ *
+ * This routine uses a PCI config space based mechanism
+ * for retrieving the number of nodes in the system.
+ *
+ * Current processor families that support this mechanism are
+ * 0xf, 0x10, 0x11, and 0x15.
  */
 static uint_t
 opteron_get_nnodes(void)
 {
         static uint_t nnodes = 0;
 
-        if (nnodes == 0) {
-#ifdef  DEBUG
-                uint_t family;
-
                 /*
-                 * This routine uses a PCI config space based mechanism
-                 * for retrieving the number of nodes in the system.
-                 * Device 24, function 0, offset 0x60 as used here is not
-                 * AMD processor architectural, and may not work on processor
-                 * families other than those listed below.
-                 *
-                 * Callers of this routine must ensure that we're running on
-                 * a processor which supports this mechanism.
-                 * The assertion below is meant to catch calls on unsupported
-                 * processors.
-                 */
-                family = cpuid_getfamily(CPU);
-                ASSERT(family == 0xf || family == 0x10 || family == 0x11);
-#endif  /* DEBUG */
-
-                /*
                  * Obtain the number of nodes in the system from
                  * bits [6:4] of the Node ID register on node 0.
                  *
                  * The actual node count is NodeID[6:4] + 1
                  *
                  * The Node ID register is accessed via function 0,
                  * offset 0x60. Node 0 is device 24.
                  */
+        if (nnodes == 0)
                 nnodes = ((pci_getl_func(0, 24, 0, 0x60) & 0x70) >> 4) + 1;
-        }
+
         return (nnodes);
 }
 
 uint_t
 do_erratum_298(struct cpu *cpu)