diff options
author | Jean Delvare <jdelvare@suse.de> | 2012-10-18 09:54:45 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-10-25 05:43:00 -0400 |
commit | 7e06b7a3333f5c7a0cec12aff20d39c5c87c0795 (patch) | |
tree | ec7a4dfacd5f658ee198be7187518481ef52a474 /drivers/edac | |
parent | 24bef66e74d647aebd34e0bef7693512b7912029 (diff) |
i7300_edac: Fix error flag testing
* Right-shift the values in GET_FBD_FAT_IDX and GET_FBD_NF_IDX, so
that the callers get the result they expect.
* Fix definition of FERR_FAT_FBD_ERR_MASK.
* Call GET_FBD_NF_IDX, not GET_FBD_FAT_IDX, when operating on
register FERR_NF_FBD. We were lucky they have the same definition.
This fixes kernel bug #44131:
https://bugzilla.kernel.org/show_bug.cgi?id=44131
Signed-off-by: Jean Delvare <jdelvare@suse.de>
Cc: Mauro Carvalho Chehab <mchehab@redhat.com>
Cc: Doug Thompson <dougthompson@xmission.com>
Cc: stable@vger.kernel.org
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/edac')
-rw-r--r-- | drivers/edac/i7300_edac.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/edac/i7300_edac.c b/drivers/edac/i7300_edac.c index a09d0667f72a..9d669cd43618 100644 --- a/drivers/edac/i7300_edac.c +++ b/drivers/edac/i7300_edac.c | |||
@@ -197,8 +197,8 @@ static const char *ferr_fat_fbd_name[] = { | |||
197 | [0] = "Memory Write error on non-redundant retry or " | 197 | [0] = "Memory Write error on non-redundant retry or " |
198 | "FBD configuration Write error on retry", | 198 | "FBD configuration Write error on retry", |
199 | }; | 199 | }; |
200 | #define GET_FBD_FAT_IDX(fbderr) (fbderr & (3 << 28)) | 200 | #define GET_FBD_FAT_IDX(fbderr) (((fbderr) >> 28) & 3) |
201 | #define FERR_FAT_FBD_ERR_MASK ((1 << 0) | (1 << 1) | (1 << 2) | (1 << 3)) | 201 | #define FERR_FAT_FBD_ERR_MASK ((1 << 0) | (1 << 1) | (1 << 2) | (1 << 22)) |
202 | 202 | ||
203 | #define FERR_NF_FBD 0xa0 | 203 | #define FERR_NF_FBD 0xa0 |
204 | static const char *ferr_nf_fbd_name[] = { | 204 | static const char *ferr_nf_fbd_name[] = { |
@@ -225,7 +225,7 @@ static const char *ferr_nf_fbd_name[] = { | |||
225 | [1] = "Aliased Uncorrectable Non-Mirrored Demand Data ECC", | 225 | [1] = "Aliased Uncorrectable Non-Mirrored Demand Data ECC", |
226 | [0] = "Uncorrectable Data ECC on Replay", | 226 | [0] = "Uncorrectable Data ECC on Replay", |
227 | }; | 227 | }; |
228 | #define GET_FBD_NF_IDX(fbderr) (fbderr & (3 << 28)) | 228 | #define GET_FBD_NF_IDX(fbderr) (((fbderr) >> 28) & 3) |
229 | #define FERR_NF_FBD_ERR_MASK ((1 << 24) | (1 << 23) | (1 << 22) | (1 << 21) |\ | 229 | #define FERR_NF_FBD_ERR_MASK ((1 << 24) | (1 << 23) | (1 << 22) | (1 << 21) |\ |
230 | (1 << 18) | (1 << 17) | (1 << 16) | (1 << 15) |\ | 230 | (1 << 18) | (1 << 17) | (1 << 16) | (1 << 15) |\ |
231 | (1 << 14) | (1 << 13) | (1 << 11) | (1 << 10) |\ | 231 | (1 << 14) | (1 << 13) | (1 << 11) | (1 << 10) |\ |
@@ -464,7 +464,7 @@ static void i7300_process_fbd_error(struct mem_ctl_info *mci) | |||
464 | errnum = find_first_bit(&errors, | 464 | errnum = find_first_bit(&errors, |
465 | ARRAY_SIZE(ferr_nf_fbd_name)); | 465 | ARRAY_SIZE(ferr_nf_fbd_name)); |
466 | specific = GET_ERR_FROM_TABLE(ferr_nf_fbd_name, errnum); | 466 | specific = GET_ERR_FROM_TABLE(ferr_nf_fbd_name, errnum); |
467 | branch = (GET_FBD_FAT_IDX(error_reg) == 2) ? 1 : 0; | 467 | branch = (GET_FBD_NF_IDX(error_reg) == 2) ? 1 : 0; |
468 | 468 | ||
469 | pci_read_config_dword(pvt->pci_dev_16_1_fsb_addr_map, | 469 | pci_read_config_dword(pvt->pci_dev_16_1_fsb_addr_map, |
470 | REDMEMA, &syndrome); | 470 | REDMEMA, &syndrome); |