]> git.karo-electronics.de Git - linux-beck.git/commitdiff
Merge branch 'x86-mce-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 6 Aug 2010 23:24:51 +0000 (16:24 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 6 Aug 2010 23:24:51 +0000 (16:24 -0700)
* 'x86-mce-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  x86, mce: Use HW_ERR in MCE handler
  x86, mce: Add HW_ERR printk prefix for hardware error logging
  x86, mce: Fix MSR_IA32_MCI_CTL2 CMCI threshold setup
  x86, mce: Rename MSR_IA32_MCx_CTL2 value

1  2 
arch/x86/include/asm/msr-index.h
arch/x86/kernel/cpu/mcheck/mce.c
include/linux/kernel.h

index 65bbec2093aa71ffb5b0858abca890cee6b86447,38f66eb5854142ba48cf3e03aca3cd220b6db6b0..986f7790fdb2880c4f9efda864a489a0edb83892
@@@ -20,7 -20,6 +20,7 @@@
  #define _EFER_LMA             10 /* Long mode active (read-only) */
  #define _EFER_NX              11 /* No execute enable */
  #define _EFER_SVME            12 /* Enable virtualization */
 +#define _EFER_LMSLE           13 /* Long Mode Segment Limit Enable */
  #define _EFER_FFXSR           14 /* Enable Fast FXSAVE/FXRSTOR */
  
  #define EFER_SCE              (1<<_EFER_SCE)
@@@ -28,7 -27,6 +28,7 @@@
  #define EFER_LMA              (1<<_EFER_LMA)
  #define EFER_NX                       (1<<_EFER_NX)
  #define EFER_SVME             (1<<_EFER_SVME)
 +#define EFER_LMSLE            (1<<_EFER_LMSLE)
  #define EFER_FFXSR            (1<<_EFER_FFXSR)
  
  /* Intel MSRs. Some also available on other CPUs */
@@@ -96,9 -94,6 +96,6 @@@
  #define MSR_IA32_MC0_CTL2             0x00000280
  #define MSR_IA32_MCx_CTL2(x)          (MSR_IA32_MC0_CTL2 + (x))
  
- #define CMCI_EN                       (1ULL << 30)
- #define CMCI_THRESHOLD_MASK           0xffffULL
  #define MSR_P6_PERFCTR0                       0x000000c1
  #define MSR_P6_PERFCTR1                       0x000000c2
  #define MSR_P6_EVNTSEL0                       0x00000186
  #define MSR_AMD64_PATCH_LOADER                0xc0010020
  #define MSR_AMD64_OSVW_ID_LENGTH      0xc0010140
  #define MSR_AMD64_OSVW_STATUS         0xc0010141
 +#define MSR_AMD64_DC_CFG              0xc0011022
  #define MSR_AMD64_IBSFETCHCTL         0xc0011030
  #define MSR_AMD64_IBSFETCHLINAD               0xc0011031
  #define MSR_AMD64_IBSFETCHPHYSAD      0xc0011032
  #define MSR_K7_FID_VID_STATUS         0xc0010042
  
  /* K6 MSRs */
 -#define MSR_K6_EFER                   0xc0000080
 -#define MSR_K6_STAR                   0xc0000081
  #define MSR_K6_WHCR                   0xc0000082
  #define MSR_K6_UWCCR                  0xc0000085
  #define MSR_K6_EPMR                   0xc0000086
  #define MSR_IA32_THERM_CONTROL                0x0000019a
  #define MSR_IA32_THERM_INTERRUPT      0x0000019b
  
 -#define THERM_INT_LOW_ENABLE          (1 << 0)
 -#define THERM_INT_HIGH_ENABLE         (1 << 1)
 +#define THERM_INT_HIGH_ENABLE         (1 << 0)
 +#define THERM_INT_LOW_ENABLE          (1 << 1)
 +#define THERM_INT_PLN_ENABLE          (1 << 24)
  
  #define MSR_IA32_THERM_STATUS         0x0000019c
  
  #define THERM_STATUS_PROCHOT          (1 << 0)
 +#define THERM_STATUS_POWER_LIMIT      (1 << 10)
  
  #define MSR_THERM2_CTL                        0x0000019d
  
  
  #define MSR_IA32_TEMPERATURE_TARGET   0x000001a2
  
 +#define MSR_IA32_ENERGY_PERF_BIAS     0x000001b0
 +
 +#define MSR_IA32_PACKAGE_THERM_STATUS         0x000001b1
 +
 +#define PACKAGE_THERM_STATUS_PROCHOT          (1 << 0)
 +#define PACKAGE_THERM_STATUS_POWER_LIMIT      (1 << 10)
 +
 +#define MSR_IA32_PACKAGE_THERM_INTERRUPT      0x000001b2
 +
 +#define PACKAGE_THERM_INT_HIGH_ENABLE         (1 << 0)
 +#define PACKAGE_THERM_INT_LOW_ENABLE          (1 << 1)
 +#define PACKAGE_THERM_INT_PLN_ENABLE          (1 << 24)
 +
  /* MISC_ENABLE bits: architectural */
  #define MSR_IA32_MISC_ENABLE_FAST_STRING      (1ULL << 0)
  #define MSR_IA32_MISC_ENABLE_TCC              (1ULL << 1)
index e1269d62c569a3ec79f59516712c89192c2071bb,094b228c8b06fac97510b3dbc109e1bd21484016..ed41562909fe6d368f9f2c50a6c3000c6d9c9f5e
@@@ -51,7 -51,7 +51,7 @@@
  static DEFINE_MUTEX(mce_read_mutex);
  
  #define rcu_dereference_check_mce(p) \
 -      rcu_dereference_check((p), \
 +      rcu_dereference_index_check((p), \
                              rcu_read_lock_sched_held() || \
                              lockdep_is_held(&mce_read_mutex))
  
@@@ -107,8 -107,8 +107,8 @@@ EXPORT_SYMBOL_GPL(x86_mce_decoder_chain
  static int default_decode_mce(struct notifier_block *nb, unsigned long val,
                               void *data)
  {
-       pr_emerg("No human readable MCE decoding support on this CPU type.\n");
-       pr_emerg("Run the message through 'mcelog --ascii' to decode.\n");
+       pr_emerg(HW_ERR "No human readable MCE decoding support on this CPU type.\n");
+       pr_emerg(HW_ERR "Run the message through 'mcelog --ascii' to decode.\n");
  
        return NOTIFY_STOP;
  }
@@@ -211,11 -211,11 +211,11 @@@ void mce_log(struct mce *mce
  
  static void print_mce(struct mce *m)
  {
-       pr_emerg("CPU %d: Machine Check Exception: %16Lx Bank %d: %016Lx\n",
+       pr_emerg(HW_ERR "CPU %d: Machine Check Exception: %Lx Bank %d: %016Lx\n",
               m->extcpu, m->mcgstatus, m->bank, m->status);
  
        if (m->ip) {
-               pr_emerg("RIP%s %02x:<%016Lx> ",
+               pr_emerg(HW_ERR "RIP%s %02x:<%016Lx> ",
                        !(m->mcgstatus & MCG_STATUS_EIPV) ? " !INEXACT!" : "",
                                m->cs, m->ip);
  
                pr_cont("\n");
        }
  
-       pr_emerg("TSC %llx ", m->tsc);
+       pr_emerg(HW_ERR "TSC %llx ", m->tsc);
        if (m->addr)
                pr_cont("ADDR %llx ", m->addr);
        if (m->misc)
                pr_cont("MISC %llx ", m->misc);
  
        pr_cont("\n");
-       pr_emerg("PROCESSOR %u:%x TIME %llu SOCKET %u APIC %x\n",
+       pr_emerg(HW_ERR "PROCESSOR %u:%x TIME %llu SOCKET %u APIC %x\n",
                m->cpuvendor, m->cpuid, m->time, m->socketid, m->apicid);
  
        /*
        atomic_notifier_call_chain(&x86_mce_decoder_chain, 0, m);
  }
  
- static void print_mce_head(void)
- {
-       pr_emerg("\nHARDWARE ERROR\n");
- }
- static void print_mce_tail(void)
- {
-       pr_emerg("This is not a software problem!\n");
- }
  #define PANIC_TIMEOUT 5 /* 5 seconds */
  
  static atomic_t mce_paniced;
@@@ -291,7 -281,6 +281,6 @@@ static void mce_panic(char *msg, struc
                if (atomic_inc_return(&mce_fake_paniced) > 1)
                        return;
        }
-       print_mce_head();
        /* First print corrected ones that are still unlogged */
        for (i = 0; i < MCE_LOG_LEN; i++) {
                struct mce *m = &mcelog.entry[i];
                        apei_err = apei_write_mce(final);
        }
        if (cpu_missing)
-               printk(KERN_EMERG "Some CPUs didn't answer in synchronization\n");
-       print_mce_tail();
+               pr_emerg(HW_ERR "Some CPUs didn't answer in synchronization\n");
        if (exp)
-               printk(KERN_EMERG "Machine check: %s\n", exp);
+               pr_emerg(HW_ERR "Machine check: %s\n", exp);
        if (!fake_panic) {
                if (panic_timeout == 0)
                        panic_timeout = mce_panic_timeout;
                panic(msg);
        } else
-               printk(KERN_EMERG "Fake kernel panic: %s\n", msg);
+               pr_emerg(HW_ERR "Fake kernel panic: %s\n", msg);
  }
  
  /* Support code for software error injection */
@@@ -600,7 -588,6 +588,7 @@@ void machine_check_poll(enum mcp_flags 
                 */
                if (!(flags & MCP_DONTLOG) && !mce_dont_log_ce) {
                        mce_log(&m);
 +                      atomic_notifier_call_chain(&x86_mce_decoder_chain, 0, &m);
                        add_taint(TAINT_MACHINE_CHECK);
                }
  
@@@ -1221,7 -1208,7 +1209,7 @@@ int mce_notify_irq(void
                        schedule_work(&mce_trigger_work);
  
                if (__ratelimit(&ratelimit))
-                       printk(KERN_INFO "Machine check events logged\n");
+                       pr_info(HW_ERR "Machine check events logged\n");
  
                return 1;
        }
diff --combined include/linux/kernel.h
index 38e462e00594f43dc5094b63bb52706cb7abb95f,3bf740bb069ebce9adf2ec82ea8f0ff169d765fe..7d5b10ff63e0649562d26611fa98de5b57c4600e
@@@ -171,11 -171,6 +171,11 @@@ static inline void might_fault(void
  }
  #endif
  
 +struct va_format {
 +      const char *fmt;
 +      va_list *va;
 +};
 +
  extern struct atomic_notifier_head panic_notifier_list;
  extern long (*panic_blink)(long time);
  NORET_TYPE void panic(const char * fmt, ...)
@@@ -252,6 -247,13 +252,13 @@@ extern struct pid *session_of_pgrp(stru
  #define FW_WARN               "[Firmware Warn]: "
  #define FW_INFO               "[Firmware Info]: "
  
+ /*
+  * HW_ERR
+  * Add this to a message for hardware errors, so that user can report
+  * it to hardware vendor instead of LKML or software vendor.
+  */
+ #define HW_ERR                "[Hardware Error]: "
  #ifdef CONFIG_PRINTK
  asmlinkage int vprintk(const char *fmt, va_list args)
        __attribute__ ((format (printf, 1, 0)));
@@@ -513,6 -515,9 +520,6 @@@ extern void tracing_start(void)
  extern void tracing_stop(void);
  extern void ftrace_off_permanent(void);
  
 -extern void
 -ftrace_special(unsigned long arg1, unsigned long arg2, unsigned long arg3);
 -
  static inline void __attribute__ ((format (printf, 1, 2)))
  ____trace_printk_check_format(const char *fmt, ...)
  {
@@@ -588,6 -593,8 +595,6 @@@ __ftrace_vprintk(unsigned long ip, cons
  
  extern void ftrace_dump(enum ftrace_dump_mode oops_dump_mode);
  #else
 -static inline void
 -ftrace_special(unsigned long arg1, unsigned long arg2, unsigned long arg3) { }
  static inline int
  trace_printk(const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
  
@@@ -728,6 -735,12 +735,6 @@@ extern int do_sysinfo(struct sysinfo *i
  
  #endif /* __KERNEL__ */
  
 -#ifndef __EXPORTED_HEADERS__
 -#ifndef __KERNEL__
 -#warning Attempt to use kernel headers from user space, see http://kernelnewbies.org/KernelHeaders
 -#endif /* __KERNEL__ */
 -#endif /* __EXPORTED_HEADERS__ */
 -
  #define SI_LOAD_SHIFT 16
  struct sysinfo {
        long uptime;                    /* Seconds since boot */