All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 1/2] x86/AMD: Fix cpu_llc_id for AMD Fam17h systems
@ 2016-11-01 16:51 Yazen Ghannam
  2016-11-01 16:51 ` [PATCH v3 2/2] x86/AMD: Group cpu_llc_id assignment by topology feature and family Yazen Ghannam
  2016-11-02 20:13 ` [PATCH v3 1/2] x86/AMD: Fix cpu_llc_id for AMD Fam17h systems Borislav Petkov
  0 siblings, 2 replies; 18+ messages in thread
From: Yazen Ghannam @ 2016-11-01 16:51 UTC (permalink / raw)
  To: linux-kernel; +Cc: x86, bp, Yazen Ghannam, stable

The current Fam17h cpu_llc_id (Last Level Cache ID) derivation has an
underflow bug when extracting the socket_id value. The socket_id value
starts from 0, so subtracting 1 will result in an underflow. This breaks
scheduling topology later on since the cpu_llc_id will be incorrect.

The APICID decoding is fixed, in register, for bits 3 and above, which give
the core complex, node and socket IDs. The LLC is at the core complex level
so we can find a unique cpu_llc_id by right shifting the APICID by 3
because then the least significant bit will be the Core Complex ID.

We can fix the underflow bug and simplify the code by replacing the
current cpu_llc_id derivation with a right shift.

Signed-off-by: Yazen Ghannam <Yazen.Ghannam@amd.com>
Cc: <stable@vger.kernel.org> # v4.4..
Fixes: 3849e91f571d ("x86/AMD: Fix last level cache topology for AMD Fam17h systems")
---
Link:
http://lkml.kernel.org/r/1477669918-56261-1-git-send-email-Yazen.Ghannam@amd.com

v2->v3:
* Fixup commit message based on comments.

 arch/x86/kernel/cpu/amd.c | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
index b81fe2d..1e81a37 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -347,7 +347,6 @@ static void amd_detect_cmp(struct cpuinfo_x86 *c)
 #ifdef CONFIG_SMP
 	unsigned bits;
 	int cpu = smp_processor_id();
-	unsigned int socket_id, core_complex_id;
 
 	bits = c->x86_coreid_bits;
 	/* Low order bits define the core id (index of core in socket) */
@@ -365,10 +364,7 @@ static void amd_detect_cmp(struct cpuinfo_x86 *c)
 	 if (c->x86 != 0x17 || !cpuid_edx(0x80000006))
 		return;
 
-	socket_id	= (c->apicid >> bits) - 1;
-	core_complex_id	= (c->apicid & ((1 << bits) - 1)) >> 3;
-
-	per_cpu(cpu_llc_id, cpu) = (socket_id << 3) | core_complex_id;
+	per_cpu(cpu_llc_id, cpu) = c->apicid >> 3;
 #endif
 }
 
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2016-11-12 21:18 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-11-01 16:51 [PATCH v3 1/2] x86/AMD: Fix cpu_llc_id for AMD Fam17h systems Yazen Ghannam
2016-11-01 16:51 ` [PATCH v3 2/2] x86/AMD: Group cpu_llc_id assignment by topology feature and family Yazen Ghannam
2016-11-02 20:15   ` Borislav Petkov
2016-11-07  7:29     ` Ingo Molnar
2016-11-07  9:22       ` Borislav Petkov
2016-11-02 20:13 ` [PATCH v3 1/2] x86/AMD: Fix cpu_llc_id for AMD Fam17h systems Borislav Petkov
2016-11-07  7:31   ` Ingo Molnar
2016-11-07  9:20     ` Borislav Petkov
2016-11-07 14:07       ` Ingo Molnar
2016-11-07 15:56         ` Borislav Petkov
2016-11-08  6:31           ` Ingo Molnar
2016-11-08  8:35             ` Borislav Petkov
2016-11-08 10:29               ` Ingo Molnar
2016-11-08 11:01                 ` Borislav Petkov
2016-11-08 14:54                   ` Ingo Molnar
2016-11-08 15:30                     ` Borislav Petkov
2016-11-10  8:00                       ` [tip:x86/cpu] x86/cpu/AMD: Clean up cpu_llc_id assignment per topology feature tip-bot for Yazen Ghannam
2016-11-09 16:13               ` [tip:x86/urgent] x86/cpu/AMD: Fix cpu_llc_id for AMD Fam17h systems tip-bot for Yazen Ghannam

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.