x86, msr: Add support for non-contiguous cpumasks
authorBorislav Petkov <borislav.petkov@amd.com>
Fri, 11 Dec 2009 17:14:40 +0000 (18:14 +0100)
committerH. Peter Anvin <hpa@zytor.com>
Fri, 11 Dec 2009 18:59:21 +0000 (10:59 -0800)
commit505422517d3f126bb939439e9d15dece94e11d2c
treea2d58c0b3cdf2b1c6b66eee6d78a283224ae1ac3
parent5c6baba84e1ac6a79b266b40e17e692aab6604a1
x86, msr: Add support for non-contiguous cpumasks

The current rd/wrmsr_on_cpus helpers assume that the supplied
cpumasks are contiguous. However, there are machines out there
like some K8 multinode Opterons which have a non-contiguous core
enumeration on each node (e.g. cores 0,2 on node 0 instead of 0,1), see
http://www.gossamer-threads.com/lists/linux/kernel/1160268.

This patch fixes out-of-bounds writes (see URL above) by adding per-CPU
msr structs which are used on the respective cores.

Additionally, two helpers, msrs_{alloc,free}, are provided for use by
the callers of the MSR accessors.

Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Mauro Carvalho Chehab <mchehab@redhat.com>
Cc: Aristeu Rozanski <aris@redhat.com>
Cc: Randy Dunlap <randy.dunlap@oracle.com>
Cc: Doug Thompson <dougthompson@xmission.com>
Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
LKML-Reference: <20091211171440.GD31998@aftab>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
arch/x86/include/asm/msr.h
arch/x86/lib/msr.c
drivers/edac/amd64_edac.c