Lines Matching refs:m
116 static void (*quirk_no_way_out)(int bank, struct mce *m, struct pt_regs *regs);
117 static int mce_usable_address(struct mce *m);
126 void mce_setup(struct mce *m) in mce_setup() argument
128 memset(m, 0, sizeof(struct mce)); in mce_setup()
129 m->cpu = m->extcpu = smp_processor_id(); in mce_setup()
130 m->tsc = rdtsc(); in mce_setup()
132 m->time = get_seconds(); in mce_setup()
133 m->cpuvendor = boot_cpu_data.x86_vendor; in mce_setup()
134 m->cpuid = cpuid_eax(1); in mce_setup()
135 m->socketid = cpu_data(m->extcpu).phys_proc_id; in mce_setup()
136 m->apicid = cpu_data(m->extcpu).initial_apicid; in mce_setup()
137 rdmsrl(MSR_IA32_MCG_CAP, m->mcgcap); in mce_setup()
202 void mce_inject_log(struct mce *m) in mce_inject_log() argument
205 mce_log(m); in mce_inject_log()
228 static void print_mce(struct mce *m) in print_mce() argument
233 m->extcpu, m->mcgstatus, m->bank, m->status); in print_mce()
235 if (m->ip) { in print_mce()
237 !(m->mcgstatus & MCG_STATUS_EIPV) ? " !INEXACT!" : "", in print_mce()
238 m->cs, m->ip); in print_mce()
240 if (m->cs == __KERNEL_CS) in print_mce()
241 print_symbol("{%s}", m->ip); in print_mce()
245 pr_emerg(HW_ERR "TSC %llx ", m->tsc); in print_mce()
246 if (m->addr) in print_mce()
247 pr_cont("ADDR %llx ", m->addr); in print_mce()
248 if (m->misc) in print_mce()
249 pr_cont("MISC %llx ", m->misc); in print_mce()
257 m->cpuvendor, m->cpuid, m->time, m->socketid, m->apicid, in print_mce()
258 cpu_data(m->extcpu).microcode); in print_mce()
264 ret = atomic_notifier_call_chain(&x86_mce_decoder_chain, 0, m); in print_mce()
313 struct mce *m = &mcelog.entry[i]; in mce_panic() local
314 if (!(m->status & MCI_STATUS_VAL)) in mce_panic()
316 if (!(m->status & MCI_STATUS_UC)) { in mce_panic()
317 print_mce(m); in mce_panic()
319 apei_err = apei_write_mce(m); in mce_panic()
324 struct mce *m = &mcelog.entry[i]; in mce_panic() local
325 if (!(m->status & MCI_STATUS_VAL)) in mce_panic()
327 if (!(m->status & MCI_STATUS_UC)) in mce_panic()
329 if (!final || memcmp(m, final, sizeof(struct mce))) { in mce_panic()
330 print_mce(m); in mce_panic()
332 apei_err = apei_write_mce(m); in mce_panic()
414 static inline void mce_gather_info(struct mce *m, struct pt_regs *regs) in mce_gather_info() argument
416 mce_setup(m); in mce_gather_info()
418 m->mcgstatus = mce_rdmsrl(MSR_IA32_MCG_STATUS); in mce_gather_info()
424 if (m->mcgstatus & (MCG_STATUS_RIPV|MCG_STATUS_EIPV)) { in mce_gather_info()
425 m->ip = regs->ip; in mce_gather_info()
426 m->cs = regs->cs; in mce_gather_info()
434 m->cs |= 3; in mce_gather_info()
438 m->ip = mce_rdmsrl(mca_cfg.rip_msr); in mce_gather_info()
502 static void mce_read_aux(struct mce *m, int i) in mce_read_aux() argument
504 if (m->status & MCI_STATUS_MISCV) in mce_read_aux()
505 m->misc = mce_rdmsrl(MSR_IA32_MCx_MISC(i)); in mce_read_aux()
506 if (m->status & MCI_STATUS_ADDRV) { in mce_read_aux()
507 m->addr = mce_rdmsrl(MSR_IA32_MCx_ADDR(i)); in mce_read_aux()
512 if (mca_cfg.ser && (m->status & MCI_STATUS_MISCV)) { in mce_read_aux()
513 u8 shift = MCI_MISC_ADDR_LSB(m->misc); in mce_read_aux()
514 m->addr >>= shift; in mce_read_aux()
515 m->addr <<= shift; in mce_read_aux()
520 static bool memory_error(struct mce *m) in memory_error() argument
543 return (m->status & 0xef80) == BIT(7) || in memory_error()
544 (m->status & 0xef00) == BIT(8) || in memory_error()
545 (m->status & 0xeffc) == 0xc; in memory_error()
571 struct mce m; in machine_check_poll() local
577 mce_gather_info(&m, NULL); in machine_check_poll()
583 m.misc = 0; in machine_check_poll()
584 m.addr = 0; in machine_check_poll()
585 m.bank = i; in machine_check_poll()
586 m.tsc = 0; in machine_check_poll()
589 m.status = mce_rdmsrl(MSR_IA32_MCx_STATUS(i)); in machine_check_poll()
590 if (!(m.status & MCI_STATUS_VAL)) in machine_check_poll()
601 (m.status & (mca_cfg.ser ? MCI_STATUS_S : MCI_STATUS_UC))) in machine_check_poll()
604 mce_read_aux(&m, i); in machine_check_poll()
607 m.tsc = 0; in machine_check_poll()
609 severity = mce_severity(&m, mca_cfg.tolerant, NULL, false); in machine_check_poll()
615 if (severity == MCE_DEFERRED_SEVERITY && memory_error(&m)) { in machine_check_poll()
616 if (m.status & MCI_STATUS_ADDRV) { in machine_check_poll()
617 m.severity = severity; in machine_check_poll()
618 m.usable_addr = mce_usable_address(&m); in machine_check_poll()
620 if (!mce_gen_pool_add(&m)) in machine_check_poll()
631 mce_log(&m); in machine_check_poll()
655 static int mce_no_way_out(struct mce *m, char **msg, unsigned long *validp, in mce_no_way_out() argument
662 m->status = mce_rdmsrl(MSR_IA32_MCx_STATUS(i)); in mce_no_way_out()
663 if (m->status & MCI_STATUS_VAL) { in mce_no_way_out()
666 quirk_no_way_out(i, m, regs); in mce_no_way_out()
669 if (mce_severity(m, mca_cfg.tolerant, &tmp, true) >= MCE_PANIC_SEVERITY) { in mce_no_way_out()
743 struct mce *m = NULL; in mce_reign() local
760 m = &per_cpu(mces_seen, cpu); in mce_reign()
769 if (m && global_worst >= MCE_PANIC_SEVERITY && mca_cfg.tolerant < 3) in mce_reign()
770 mce_panic("Fatal machine check", m, msg); in mce_reign()
940 static int mce_usable_address(struct mce *m) in mce_usable_address() argument
942 if (!(m->status & MCI_STATUS_MISCV) || !(m->status & MCI_STATUS_ADDRV)) in mce_usable_address()
944 if (MCI_MISC_ADDR_LSB(m->misc) > PAGE_SHIFT) in mce_usable_address()
946 if (MCI_MISC_ADDR_MODE(m->misc) != MCI_MISC_ADDR_PHYS) in mce_usable_address()
976 struct mce m, *final; in do_machine_check() local
1020 mce_gather_info(&m, regs); in do_machine_check()
1023 *final = m; in do_machine_check()
1026 no_way_out = mce_no_way_out(&m, &msg, valid_banks, regs); in do_machine_check()
1035 if (!(m.mcgstatus & MCG_STATUS_RIPV)) in do_machine_check()
1041 if (m.mcgstatus & MCG_STATUS_LMCES) in do_machine_check()
1060 m.misc = 0; in do_machine_check()
1061 m.addr = 0; in do_machine_check()
1062 m.bank = i; in do_machine_check()
1064 m.status = mce_rdmsrl(MSR_IA32_MCx_STATUS(i)); in do_machine_check()
1065 if ((m.status & MCI_STATUS_VAL) == 0) in do_machine_check()
1072 if (!(m.status & (cfg->ser ? MCI_STATUS_S : MCI_STATUS_UC)) && in do_machine_check()
1081 severity = mce_severity(&m, cfg->tolerant, NULL, true); in do_machine_check()
1099 mce_read_aux(&m, i); in do_machine_check()
1102 m.severity = severity; in do_machine_check()
1103 m.usable_addr = mce_usable_address(&m); in do_machine_check()
1105 mce_log(&m); in do_machine_check()
1108 *final = m; in do_machine_check()
1114 m = *final; in do_machine_check()
1144 mce_panic("Fatal machine check on current CPU", &m, msg); in do_machine_check()
1146 recover_paddr = m.addr; in do_machine_check()
1147 if (!(m.mcgstatus & MCG_STATUS_RIPV)) in do_machine_check()
1222 struct mce m; in mce_log_therm_throt_event() local
1224 mce_setup(&m); in mce_log_therm_throt_event()
1225 m.bank = MCE_THERMAL_BANK; in mce_log_therm_throt_event()
1226 m.status = status; in mce_log_therm_throt_event()
1227 mce_log(&m); in mce_log_therm_throt_event()
1454 static void quirk_sandybridge_ifu(int bank, struct mce *m, struct pt_regs *regs) in quirk_sandybridge_ifu() argument
1458 if ((m->mcgstatus & (MCG_STATUS_EIPV|MCG_STATUS_RIPV)) != 0) in quirk_sandybridge_ifu()
1460 if ((m->status & (MCI_STATUS_OVER|MCI_STATUS_UC| in quirk_sandybridge_ifu()
1469 m->mcgstatus |= MCG_STATUS_EIPV; in quirk_sandybridge_ifu()
1470 m->ip = regs->ip; in quirk_sandybridge_ifu()
1471 m->cs = regs->cs; in quirk_sandybridge_ifu()
1781 struct mce m; in __mce_read_apei() local
1786 rc = apei_read_mce(&m, &record_id); in __mce_read_apei()
1799 if (copy_to_user(*ubuf, &m, sizeof(struct mce))) in __mce_read_apei()
1849 struct mce *m = &mcelog.entry[i]; in mce_chrdev_read() local
1851 while (!m->finished) { in mce_chrdev_read()
1853 memset(m, 0, sizeof(*m)); in mce_chrdev_read()
1859 err |= copy_to_user(buf, m, sizeof(*m)); in mce_chrdev_read()
1860 buf += sizeof(*m); in mce_chrdev_read()
1880 struct mce *m = &mcelog.entry[i]; in mce_chrdev_read() local
1882 if (m->finished && m->tsc < cpu_tsc[m->cpu]) { in mce_chrdev_read()
1883 err |= copy_to_user(buf, m, sizeof(*m)); in mce_chrdev_read()
1885 buf += sizeof(*m); in mce_chrdev_read()
1886 memset(m, 0, sizeof(*m)); in mce_chrdev_read()