|
@@ -19,6 +19,13 @@
|
|
|
|
|
|
#include "cpu.h"
|
|
|
|
|
|
+/*
|
|
|
+ * nodes_per_socket: Stores the number of nodes per socket.
|
|
|
+ * Refer to Fam15h Models 00-0fh BKDG - CPUID Fn8000_001E_ECX
|
|
|
+ * Node Identifiers[10:8]
|
|
|
+ */
|
|
|
+static u32 nodes_per_socket = 1;
|
|
|
+
|
|
|
static inline int rdmsrl_amd_safe(unsigned msr, unsigned long long *p)
|
|
|
{
|
|
|
u32 gprs[8] = { 0 };
|
|
@@ -291,7 +298,7 @@ static int nearby_node(int apicid)
|
|
|
#ifdef CONFIG_X86_HT
|
|
|
static void amd_get_topology(struct cpuinfo_x86 *c)
|
|
|
{
|
|
|
- u32 nodes, cores_per_cu = 1;
|
|
|
+ u32 cores_per_cu = 1;
|
|
|
u8 node_id;
|
|
|
int cpu = smp_processor_id();
|
|
|
|
|
@@ -300,7 +307,7 @@ static void amd_get_topology(struct cpuinfo_x86 *c)
|
|
|
u32 eax, ebx, ecx, edx;
|
|
|
|
|
|
cpuid(0x8000001e, &eax, &ebx, &ecx, &edx);
|
|
|
- nodes = ((ecx >> 8) & 7) + 1;
|
|
|
+ nodes_per_socket = ((ecx >> 8) & 7) + 1;
|
|
|
node_id = ecx & 7;
|
|
|
|
|
|
/* get compute unit information */
|
|
@@ -311,18 +318,18 @@ static void amd_get_topology(struct cpuinfo_x86 *c)
|
|
|
u64 value;
|
|
|
|
|
|
rdmsrl(MSR_FAM10H_NODE_ID, value);
|
|
|
- nodes = ((value >> 3) & 7) + 1;
|
|
|
+ nodes_per_socket = ((value >> 3) & 7) + 1;
|
|
|
node_id = value & 7;
|
|
|
} else
|
|
|
return;
|
|
|
|
|
|
/* fixup multi-node processor information */
|
|
|
- if (nodes > 1) {
|
|
|
+ if (nodes_per_socket > 1) {
|
|
|
u32 cores_per_node;
|
|
|
u32 cus_per_node;
|
|
|
|
|
|
set_cpu_cap(c, X86_FEATURE_AMD_DCM);
|
|
|
- cores_per_node = c->x86_max_cores / nodes;
|
|
|
+ cores_per_node = c->x86_max_cores / nodes_per_socket;
|
|
|
cus_per_node = cores_per_node / cores_per_cu;
|
|
|
|
|
|
/* store NodeID, use llc_shared_map to store sibling info */
|
|
@@ -366,6 +373,12 @@ u16 amd_get_nb_id(int cpu)
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(amd_get_nb_id);
|
|
|
|
|
|
+u32 amd_get_nodes_per_socket(void)
|
|
|
+{
|
|
|
+ return nodes_per_socket;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(amd_get_nodes_per_socket);
|
|
|
+
|
|
|
static void srat_detect_node(struct cpuinfo_x86 *c)
|
|
|
{
|
|
|
#ifdef CONFIG_NUMA
|