| From 680dcbde3b2bbdced58b3c5db3182144977b4d79 Mon Sep 17 00:00:00 2001 |
| From: Borislav Petkov <borislav.petkov@amd.com> |
| Date: Mon, 6 Dec 2010 16:20:25 +0100 |
| Subject: [PATCH] amd64_edac: Fix interleaving check |
| |
| commit e726f3c368e7c1919a7166ec09c5705759f1a69d upstream. |
| |
| When matching error address to the range contained by one memory node, |
| we're in valid range when node interleaving |
| |
| 1. is disabled, or |
| 2. enabled and when the address bits we interleave on match the |
| interleave selector on this node (see the "Node Interleaving" section in |
| the BKDG for an enlightening example). |
| |
| Thus, when we early-exit, we need to reverse the compound logic |
| statement properly. |
| |
| Signed-off-by: Borislav Petkov <borislav.petkov@amd.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c |
| index c20a6c9..0e03506 100644 |
| --- a/drivers/edac/amd64_edac.c |
| +++ b/drivers/edac/amd64_edac.c |
| @@ -1567,7 +1567,7 @@ static int f10_match_to_this_node(struct amd64_pvt *pvt, int dram_range, |
| debugf1(" HoleOffset=0x%x HoleValid=0x%x IntlvSel=0x%x\n", |
| hole_off, hole_valid, intlv_sel); |
| |
| - if (intlv_en || |
| + if (intlv_en && |
| (intlv_sel != ((sys_addr >> 12) & intlv_en))) |
| return -EINVAL; |
| |
| -- |
| 1.7.4.4 |
| |