Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 24 May 2017 11:09:07 +0000 (UTC)
From:      Andriy Gapon <avg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r318782 - stable/11/sys/x86/x86
Message-ID:  <201705241109.v4OB97kZ068501@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: avg
Date: Wed May 24 11:09:06 2017
New Revision: 318782
URL: https://svnweb.freebsd.org/changeset/base/318782

Log:
  MFC r316643: use msr 0xc001100c to discover multi-node AMD processors

Modified:
  stable/11/sys/x86/x86/mp_x86.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/x86/x86/mp_x86.c
==============================================================================
--- stable/11/sys/x86/x86/mp_x86.c	Wed May 24 10:09:54 2017	(r318781)
+++ stable/11/sys/x86/x86/mp_x86.c	Wed May 24 11:09:06 2017	(r318782)
@@ -235,7 +235,9 @@ static void
 topo_probe_amd(void)
 {
 	u_int p[4];
+	uint64_t v;
 	int level;
+	int nodes_per_socket;
 	int share_count;
 	int type;
 	int i;
@@ -294,13 +296,18 @@ topo_probe_amd(void)
 				caches[1].present = 1;
 			}
 			if (((p[3] >> 18) & 0x3fff) != 0) {
-
-				/*
-				 * TODO: Account for dual-node processors
-				 * where each node within a package has its own
-				 * L3 cache.
-				 */
-				caches[2].id_shift = pkg_id_shift;
+				nodes_per_socket = 1;
+				if ((amd_feature2 & AMDID2_NODE_ID) != 0) {
+					/*
+					 * Handle multi-node processors that
+					 * have multiple chips, each with its
+					 * own L3 cache, on the same die.
+					 */
+					v = rdmsr(0xc001100c);
+					nodes_per_socket = 1 + ((v >> 3) & 0x7);
+				}
+				caches[2].id_shift =
+				    pkg_id_shift - mask_width(nodes_per_socket);
 				caches[2].present = 1;
 			}
 		}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201705241109.v4OB97kZ068501>