Commit 128283a4 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'mce-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp

* 'mce-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp:
  EDAC, MCE: Fix NB error formatting
  EDAC, MCE: Use BIT_64() to eliminate warnings on 32-bit
  EDAC, MCE: Enable MCE decoding on F15h
  EDAC, MCE: Allow F15h bank 6 MCE injection
  EDAC, MCE: Shorten error report formatting
  EDAC, MCE: Overhaul error fields extraction macros
  EDAC, MCE: Add F15h FP MCE decoder
  EDAC, MCE: Add F15 EX MCE decoder
  EDAC, MCE: Add an F15h NB MCE decoder
  EDAC, MCE: No F15h LS MCE decoder
  EDAC, MCE: Add F15h CU MCE decoder
  EDAC, MCE: Add F15h IC MCE decoder
  EDAC, MCE: Add F15h DC MCE decoder
  EDAC, MCE: Select extended error code mask
parents 442d1ba2 6d5db466
...@@ -1950,8 +1950,8 @@ static void amd64_handle_ue(struct mem_ctl_info *mci, ...@@ -1950,8 +1950,8 @@ static void amd64_handle_ue(struct mem_ctl_info *mci,
static inline void __amd64_decode_bus_error(struct mem_ctl_info *mci, static inline void __amd64_decode_bus_error(struct mem_ctl_info *mci,
struct err_regs *info) struct err_regs *info)
{ {
u32 ec = ERROR_CODE(info->nbsl); u16 ec = EC(info->nbsl);
u32 xec = EXT_ERROR_CODE(info->nbsl); u8 xec = XEC(info->nbsl, 0x1f);
int ecc_type = (info->nbsh >> 13) & 0x3; int ecc_type = (info->nbsh >> 13) & 0x3;
/* Bail early out if this was an 'observed' error */ /* Bail early out if this was an 'observed' error */
......
This diff is collapsed.
...@@ -7,8 +7,8 @@ ...@@ -7,8 +7,8 @@
#define BIT_64(n) (U64_C(1) << (n)) #define BIT_64(n) (U64_C(1) << (n))
#define ERROR_CODE(x) ((x) & 0xffff) #define EC(x) ((x) & 0xffff)
#define EXT_ERROR_CODE(x) (((x) >> 16) & 0x1f) #define XEC(x, mask) (((x) >> 16) & mask)
#define LOW_SYNDROME(x) (((x) >> 15) & 0xff) #define LOW_SYNDROME(x) (((x) >> 15) & 0xff)
#define HIGH_SYNDROME(x) (((x) >> 24) & 0xff) #define HIGH_SYNDROME(x) (((x) >> 24) & 0xff)
...@@ -21,15 +21,15 @@ ...@@ -21,15 +21,15 @@
#define TT_MSG(x) tt_msgs[TT(x)] #define TT_MSG(x) tt_msgs[TT(x)]
#define II(x) (((x) >> 2) & 0x3) #define II(x) (((x) >> 2) & 0x3)
#define II_MSG(x) ii_msgs[II(x)] #define II_MSG(x) ii_msgs[II(x)]
#define LL(x) (((x) >> 0) & 0x3) #define LL(x) ((x) & 0x3)
#define LL_MSG(x) ll_msgs[LL(x)] #define LL_MSG(x) ll_msgs[LL(x)]
#define TO(x) (((x) >> 8) & 0x1) #define TO(x) (((x) >> 8) & 0x1)
#define TO_MSG(x) to_msgs[TO(x)] #define TO_MSG(x) to_msgs[TO(x)]
#define PP(x) (((x) >> 9) & 0x3) #define PP(x) (((x) >> 9) & 0x3)
#define PP_MSG(x) pp_msgs[PP(x)] #define PP_MSG(x) pp_msgs[PP(x)]
#define RRRR(x) (((x) >> 4) & 0xf) #define R4(x) (((x) >> 4) & 0xf)
#define RRRR_MSG(x) ((RRRR(x) < 9) ? rrrr_msgs[RRRR(x)] : "Wrong R4!") #define R4_MSG(x) ((R4(x) < 9) ? rrrr_msgs[R4(x)] : "Wrong R4!")
#define K8_NBSH 0x4C #define K8_NBSH 0x4C
...@@ -100,8 +100,8 @@ struct err_regs { ...@@ -100,8 +100,8 @@ struct err_regs {
* per-family decoder ops * per-family decoder ops
*/ */
struct amd_decoder_ops { struct amd_decoder_ops {
bool (*dc_mce)(u16); bool (*dc_mce)(u16, u8);
bool (*ic_mce)(u16); bool (*ic_mce)(u16, u8);
bool (*nb_mce)(u16, u8); bool (*nb_mce)(u16, u8);
}; };
......
...@@ -88,10 +88,11 @@ static ssize_t edac_inject_bank_store(struct kobject *kobj, ...@@ -88,10 +88,11 @@ static ssize_t edac_inject_bank_store(struct kobject *kobj,
return -EINVAL; return -EINVAL;
} }
if (value > 5) { if (value > 5)
printk(KERN_ERR "Non-existant MCE bank: %lu\n", value); if (boot_cpu_data.x86 != 0x15 || value > 6) {
return -EINVAL; printk(KERN_ERR "Non-existant MCE bank: %lu\n", value);
} return -EINVAL;
}
i_mce.bank = value; i_mce.bank = value;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment