6875283 Update PCBE implementation for new Intel processors
authorKuriakose Kuruvilla <Kuriakose.Kuruvilla@Sun.COM>
Thu, 04 Feb 2010 16:40:50 -0800
changeset 11625 42bd0703a60f
parent 11624 fb9282a21725
child 11626 5d71fcf410be
6875283 Update PCBE implementation for new Intel processors
usr/src/pkgdefs/SUNWcpcu/prototype_i386
usr/src/uts/intel/core_pcbe/Makefile
usr/src/uts/intel/pcbe/core_pcbe.c
--- a/usr/src/pkgdefs/SUNWcpcu/prototype_i386	Thu Feb 04 12:33:32 2010 -0500
+++ b/usr/src/pkgdefs/SUNWcpcu/prototype_i386	Thu Feb 04 16:40:50 2010 -0800
@@ -19,7 +19,7 @@
 # CDDL HEADER END
 #
 #
-# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
 #
@@ -52,6 +52,11 @@
 s none usr/kernel/pcbe/pcbe.GenuineIntel.6.26=pcbe.GenuineIntel.6.15
 s none usr/kernel/pcbe/pcbe.GenuineIntel.6.28=pcbe.GenuineIntel.6.15
 s none usr/kernel/pcbe/pcbe.GenuineIntel.6.29=pcbe.GenuineIntel.6.15
+s none usr/kernel/pcbe/pcbe.GenuineIntel.6.30=pcbe.GenuineIntel.6.15
+s none usr/kernel/pcbe/pcbe.GenuineIntel.6.31=pcbe.GenuineIntel.6.15
+s none usr/kernel/pcbe/pcbe.GenuineIntel.6.37=pcbe.GenuineIntel.6.15
+s none usr/kernel/pcbe/pcbe.GenuineIntel.6.44=pcbe.GenuineIntel.6.15
+s none usr/kernel/pcbe/pcbe.GenuineIntel.6.46=pcbe.GenuineIntel.6.15
 d none usr/kernel/pcbe/amd64 755 root sys
 f none usr/kernel/pcbe/amd64/pcbe.GenuineIntel.15 755 root sys
 f none usr/kernel/pcbe/amd64/pcbe.AuthenticAMD 755 root sys
@@ -62,6 +67,11 @@
 s none usr/kernel/pcbe/amd64/pcbe.GenuineIntel.6.26=pcbe.GenuineIntel.6.15
 s none usr/kernel/pcbe/amd64/pcbe.GenuineIntel.6.28=pcbe.GenuineIntel.6.15
 s none usr/kernel/pcbe/amd64/pcbe.GenuineIntel.6.29=pcbe.GenuineIntel.6.15
+s none usr/kernel/pcbe/amd64/pcbe.GenuineIntel.6.30=pcbe.GenuineIntel.6.15
+s none usr/kernel/pcbe/amd64/pcbe.GenuineIntel.6.31=pcbe.GenuineIntel.6.15
+s none usr/kernel/pcbe/amd64/pcbe.GenuineIntel.6.37=pcbe.GenuineIntel.6.15
+s none usr/kernel/pcbe/amd64/pcbe.GenuineIntel.6.44=pcbe.GenuineIntel.6.15
+s none usr/kernel/pcbe/amd64/pcbe.GenuineIntel.6.46=pcbe.GenuineIntel.6.15
 d none usr/bin/amd64 755 root bin
 f none usr/bin/amd64/cputrack 555 root bin
 d none usr/lib/amd64 755 root bin
--- a/usr/src/uts/intel/core_pcbe/Makefile	Thu Feb 04 12:33:32 2010 -0500
+++ b/usr/src/uts/intel/core_pcbe/Makefile	Thu Feb 04 16:40:50 2010 -0800
@@ -19,7 +19,7 @@
 # CDDL HEADER END
 #
 #
-# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
 #
@@ -36,7 +36,15 @@
 OBJECTS		= $(CORE_PCBE_OBJS:%=$(OBJS_DIR)/%)
 LINTS		= $(CORE_PCBE_OBJS:%.o=$(LINTS_DIR)/%.ln)
 ROOTMODULE	= $(USR_PCBE_DIR)/$(MODULE)
-SOFTLINKS	= pcbe.GenuineIntel.6.23 pcbe.GenuineIntel.6.26 pcbe.GenuineIntel.6.28 pcbe.GenuineIntel.6.29
+SOFTLINKS	= pcbe.GenuineIntel.6.23 \
+			pcbe.GenuineIntel.6.26 \
+			pcbe.GenuineIntel.6.28 \
+			pcbe.GenuineIntel.6.29 \
+			pcbe.GenuineIntel.6.30 \
+			pcbe.GenuineIntel.6.31 \
+			pcbe.GenuineIntel.6.37 \
+			pcbe.GenuineIntel.6.44 \
+			pcbe.GenuineIntel.6.46
 ROOTSOFTLINKS	= $(SOFTLINKS:%=$(USR_PCBE_DIR)/%)
 
 #
--- a/usr/src/uts/intel/pcbe/core_pcbe.c	Thu Feb 04 12:33:32 2010 -0500
+++ b/usr/src/uts/intel/pcbe/core_pcbe.c	Thu Feb 04 16:40:50 2010 -0800
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -535,7 +535,7 @@
 static uint64_t known_arch_events;
 static uint64_t known_ffc_num;
 
-#define	GENERICEVENTS_FAM6_MOD26					       \
+#define	GENERICEVENTS_FAM6_NHM						       \
 { 0xc4, 0x01, C0|C1|C2|C3, "PAPI_br_cn" },   /* br_inst_retired.conditional */ \
 { 0x1d, 0x01, C0|C1|C2|C3, "PAPI_hw_int" },  /* hw_int.rcx		    */ \
 { 0x17, 0x01, C0|C1|C2|C3, "PAPI_tot_iis" }, /* inst_queue_writes	    */ \
@@ -570,7 +570,7 @@
 { 0x85, 0x01, C0|C1|C2|C3, "PAPI_tlb_im" }   /* itlb_misses.any		    */
 
 
-#define	EVENTS_FAM6_MOD26						\
+#define	EVENTS_FAM6_NHM							\
 									\
 { 0x80, 0x04, C0|C1|C2|C3, "l1i.cycles_stalled" },			\
 { 0x80, 0x01, C0|C1|C2|C3, "l1i.hits" },				\
@@ -1018,9 +1018,9 @@
 
 static const struct events_table_t *events_table = NULL;
 
-const struct events_table_t events_fam6_mod26[] = {
-	GENERICEVENTS_FAM6_MOD26,
-	EVENTS_FAM6_MOD26,
+const struct events_table_t events_fam6_nhm[] = {
+	GENERICEVENTS_FAM6_NHM,
+	EVENTS_FAM6_NHM,
 	{ NT_END, 0, 0, "" }
 };
 
@@ -1131,6 +1131,7 @@
 	uint64_t		j;
 	uint64_t		arch_events_vector_length;
 	size_t			arch_events_string_length;
+	uint_t			model;
 
 	if (cpuid_getvendor(CPU) != X86_VENDOR_Intel)
 		return (-1);
@@ -1317,10 +1318,22 @@
 		}
 
 		/* Non-architectural events list */
-		if (cpuid_getmodel(CPU) == 26) {
-			events_table = events_fam6_mod26;
-		} else if (cpuid_getmodel(CPU) == 28) {
-			events_table = events_fam6_mod28;
+		model = cpuid_getmodel(CPU);
+		switch (model) {
+			/* Nehalem */
+			case 26:
+			case 30:
+			case 31:
+			/* Westmere */
+			case 37:
+			case 44:
+			/* Nehalem-EX */
+			case 46:
+				events_table = events_fam6_nhm;
+				break;
+			case 28:
+				events_table = events_fam6_mod28;
+				break;
 		}
 
 		for (i = 0; i < num_gpc; i++) {