17 Dec, 2009
2 commits
-
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp:
edac, mce, amd: silence GART TLB errors
edac, mce: correct corenum reporting -
Although reporting of benign GART TLB errors is disabled in
__mcheck_cpu_apply_quirks, those are still being logged, and, as a
result, trip up amd64_edac. Pull up reporting check so that machines
with loaded edac module bail out early and don't spit fragments into
dmesg.Signed-off-by: Borislav Petkov
16 Dec, 2009
3 commits
-
Add support for 6 ranks per channel to the i5100 chipset. I have tested
the patch as far as possible with correctible errors and things appear
good. The DIMM mapping is correct for our board, but boards may differ.Signed-off-by: Nils Carlson
Acked-by: Arthur Jones
Signed-off-by: Doug Thompson
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
Addscrubbing to the i5100 chipset. The i5100 chipset only supports one
scrubbing rate, which is not constant but dependent on memory load. The
rate returned by this driver is an estimate based on some experimentation,
but is substantially closer to the truth than the speed supplied in the
documentation.Also, scrubbing is done once, and then a done-bit is set. This means that
to accomplish continuous scrubbing a re-enabling mechanism must be used.
I have created the simplest possible such mechanism in the form of a
work-queue which will check every five minutes. This interval is quite
arbitrary but should be sufficient for all sizes of system memory.Signed-off-by: Nils Carlson
Signed-off-by: Doug Thompson
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
The i5100 driver uses the word controller instead of channel in a lot of
places, this is simply a cleanup of the patch.Signed-off-by: Nils Carlson
Signed-off-by: Doug Thompson
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
15 Dec, 2009
1 commit
-
Fix core number reporting with NB MCEs.
Signed-off-by: Borislav Petkov
12 Dec, 2009
1 commit
-
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
Cc: Mauro Carvalho Chehab
Cc: Aristeu Rozanski
Cc: Randy Dunlap
Cc: Doug Thompson
Signed-off-by: Borislav Petkov
LKML-Reference:
Signed-off-by: H. Peter Anvin
08 Dec, 2009
21 commits
-
This was long overdue ...
Signed-off-by: Borislav Petkov
-
drivers/edac/amd64_edac.c: In function 'amd64_edac_init':
drivers/edac/amd64_edac.c:2840: warning: 'ret' may be used uninitialized in this functionCc: Doug Thompson
Cc: Mauro Carvalho Chehab
Signed-off-by: Andrew Morton
Signed-off-by: Borislav Petkov -
The routine does the reverse mapping of the error address of a CECC back
to the node id, DRAM controller and chip select of the DIMM which caused
the error. We should lookup the channel using the syndromes _only_ when
the DCTs are ganged so fix that.Also, add an early exit when there's an error while scanning for the
csrow thus decreasing indentation levels for better readability.Finally, fixup comments.
Signed-off-by: Borislav Petkov
-
Instead of using the whole syndrome tables for channel decoding, use a
set of eigenvectors with which the tables can be generated to search for
the syndrome in error. The algorithm operates independently of symbol
size and can be used for both x4 and x8 syndromes.Signed-off-by: Borislav Petkov
-
The .probe_valid_hardware low_ops member checked whether the DCTs are in
DDR3 mode and bailed out if so. Now that all the needed changes for DDR3
support is in place, remove it.Signed-off-by: Borislav Petkov
-
Signed-off-by: Borislav Petkov
-
Instead of using deeply-nested conditionals for dumping the DIMM type in
debug mode, add a strings array of the supported DIMM types.This is useful in cases where an edac driver supports multiple DRAM
types and is only defined in debug builds.Signed-off-by: Borislav Petkov
-
F10h revD start with model number 8.
Signed-off-by: Borislav Petkov
-
Signed-off-by: Borislav Petkov
-
SystemAddress -> sys_addr
Signed-off-by: Borislav Petkov
-
Signed-off-by: Borislav Petkov
-
Add cs mode to cs size mapping tables for DDR2 and DDR3 and F10
and all K8 flavors and remove klugdy table of pseudo values. Add a
low_ops->dbam_to_cs member which is family-specific and replaces
low_ops->dbam_map_to_pages since the pages calculation is a one liner
now.Further cleanups, while at it:
- shorten family name defines
- align amd64_family_types struct membersSigned-off-by: Borislav Petkov
-
Do not read DCLR[01] again since this is done in
amd64_read_mc_registers() earlier. There can be more than two physical
DIMMs present so clamp the channels value to max 2. Also, do not report
DCT data width - it is also done earlier.Signed-off-by: Borislav Petkov
-
Extend f10_debug_display_dimm_sizes to dump the logical DIMMs
configuration on K8 revF too. Remove the ganged arg since we print the
DCT operating mode (ganged vs unganged) earlier.Also, DCT csrow configuration is relevant therefore dump it as
KERN_DEBUG instead of only on debug builds. Remove misleading DIMM
output since there's no reliable way of mapping of chip selects to
actual physical DIMMs.Signed-off-by: Borislav Petkov
-
Clarify bitfields description, add PCI config function/offset names to
registers for easy reference, simplify code layout, remove unneeded
info.Signed-off-by: Borislav Petkov
-
Carve out the register-specific debug statements into a separate
function, clarify meanings of the single bitfields in the register,
remove irrelevant output and macros.There should be no functionality change resulting from this patch.
Signed-off-by: Borislav Petkov
-
Add a pci config read wrapper for signaling pci config space access
errors instead of them being visible only on a debug build. This is
important on amd64_edac since it uses all those pci config register
values to access the DRAM/DIMM configuration of the nodes.In addition, the wrapper makes a _lot_ (look at the diffstat!) of
error handling code superfluous and improves much of the overall code
readability by removing error handling details out of the way.Signed-off-by: Borislav Petkov
-
Unify almost identical code into one function and remove NUMA-specific
usage (specifically cpumask_of_node()) in favor of generic topology
methods.Remove unused defines, while at it.
Signed-off-by: Borislav Petkov
-
cpumask_t -> struct cpumask, and don't put one on the stack. (Note: this
is actually on the stack unless CONFIG_CPUMASK_OFFSTACK=y).Signed-off-by: Rusty Russell
Signed-off-by: Borislav Petkov -
Do not shift the TOP_MEM and TOP_MEM2 values by 23 but rather save the
whole 64-bit value read from the MSR. Although the TOP_MEM/TOP_MEM2 bits
are only a subset of the 64bit register, the values are correct since
the remaining bits are Read-As-Zero and no shifting is needed.Also, cleanup DRAM base/limit debug output.
Signed-off-by: Borislav Petkov
-
Make debug info formulations about the DRAM and DCT configuration of the
machine more human readable.Signed-off-by: Borislav Petkov
04 Dec, 2009
1 commit
-
Merge reason: It's ready for v2.6.33.
Signed-off-by: Ingo Molnar
04 Nov, 2009
2 commits
-
Shift error type bits properly.
Signed-off-by: Borislav Petkov
-
In amd64_edac_init(void) in amd64_edac.c, cache_k8_northbridges() is
called before pci_register_driver. If it fails, should exit with err
directly.Signed-off-by: Li Hong
Acked-by: Doug Thompson
Signed-off-by: Borislav Petkov
29 Oct, 2009
3 commits
-
Allow csrows to properly initialize when the topology only has active
channels on 2 and 3. This new check allows proper detection and
initialization in this topology. Only checking the first mrt that
represented channels 0 and 1 is not sufficient.I also fixed up the related debug information path. I can submit as a 2nd
patch if needed.Signed-off-by: Keith Mannthey
Acked-by: Aristeu Rozanski
Signed-off-by: Doug Thompson
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
When building without CONFIG_PCI the edac_pci_idx variable is unused,
causing a build-time warning. Wrap the variable in #ifdef CONFIG_PCI,
just like the rest of the PCI support.Signed-off-by: Ira W. Snyder
Signed-off-by: Doug Thompson
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
The i5400 EDAC driver has several bugs with chip-select row computation
which most likely lead to bugs in detailed error reporting. Attempts to
contact the authors have gone mostly unanswered so I am presenting my diff
here. I do not subscribe to lkml and would appreciate being kept in the
cc.The most egregious problem was miscalculating the addresses of MTR
registers after register 0 by assuming they are 32bit rather than 16.
This caused the driver to miss half of the memories. Most motherboards
tend to have only 8 dimm slots and not 16, so this may not have been
noticed before.Further, the row calculations multiplied the number of dimms several
times, ultimately ending up with a maximum row of 32. The chipset only
supports 4 dimms in each of 4 channels, so csrow could not be higher than
4 unless you use a row per-rank with dual-rank dimms. I opted to
eliminate this behavior as it is confusing to the user and the error
reporting works by slot and not rank. This gives a much clearer view of
memory by slot and channel in /sys.Signed-off-by: Jeff Roberson
Signed-off-by: Doug Thompson
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
17 Oct, 2009
1 commit
-
This is a proper fix as a follow-up to 66216a7 and 916d11b.
Signed-off-by: Borislav Petkov
12 Oct, 2009
1 commit
-
Add an atomic notifier which ensures proper locking when conveying
MCE info to EDAC for decoding. The actual notifier call overrides a
default, negative priority notifier.Note: make sure we register the default decoder only once since
mcheck_init() runs on each CPU.Signed-off-by: Borislav Petkov
LKML-Reference:
Signed-off-by: Ingo Molnar
09 Oct, 2009
1 commit
-
…git/tip/linux-2.6-tip
* 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
x86, pci: Correct spelling in a comment
x86: Simplify bound checks in the MTRR code
x86: EDAC: carve out AMD MCE decoding logic
initcalls: Add early_initcall() for modules
x86: EDAC: MCE: Fix MCE decoding callback logic
07 Oct, 2009
3 commits
-
When injecting DRAM ECC errors (F3xBC_x8), EccVector[15:0] is a bitmask
of which bits should be error injected when written to and holds the
payload of 16-bit DRAM word when read, respectively.Add /sysfs members to show the DRAM ECC section/word/vector.
Fail wrong injection values entered over /sysfs instead of truncating
them.Signed-off-by: Borislav Petkov
-
On Fam10h and above, F1x[1, 0][7C:40] are DRAM Base/Limit registers
which specify the destination node of a DRAM address. Those address
boundaries are being extracted into ->dram_base[] and ->dram_limit[].
Correct the extraction masks to match the respective address bits.Signed-off-by: Borislav Petkov
-
Different processor families support a different number of chip selects.
Handle this in a family-dependent way with the proper values assigned at
init time (see amd64_set_dct_base_and_mask).Remove _DCSM_COUNT defines since they're used at one place and originate
from public documentation.CC: Keith Mannthey
Signed-off-by: Borislav Petkov