^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Machine check exception header file.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright 2013 IBM Corporation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Author: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #ifndef __ASM_PPC64_MCE_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #define __ASM_PPC64_MCE_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <linux/bitops.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) enum MCE_Version {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) MCE_V1 = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) enum MCE_Severity {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) MCE_SEV_NO_ERROR = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) MCE_SEV_WARNING = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) MCE_SEV_SEVERE = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) MCE_SEV_FATAL = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) enum MCE_Disposition {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) MCE_DISPOSITION_RECOVERED = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) MCE_DISPOSITION_NOT_RECOVERED = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) enum MCE_Initiator {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) MCE_INITIATOR_UNKNOWN = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) MCE_INITIATOR_CPU = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) MCE_INITIATOR_PCI = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) MCE_INITIATOR_ISA = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) MCE_INITIATOR_MEMORY= 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) MCE_INITIATOR_POWERMGM = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) enum MCE_ErrorType {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) MCE_ERROR_TYPE_UNKNOWN = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) MCE_ERROR_TYPE_UE = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) MCE_ERROR_TYPE_SLB = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) MCE_ERROR_TYPE_ERAT = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) MCE_ERROR_TYPE_TLB = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) MCE_ERROR_TYPE_USER = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) MCE_ERROR_TYPE_RA = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) MCE_ERROR_TYPE_LINK = 7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) MCE_ERROR_TYPE_DCACHE = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) MCE_ERROR_TYPE_ICACHE = 9,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) enum MCE_ErrorClass {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) MCE_ECLASS_UNKNOWN = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) MCE_ECLASS_HARDWARE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) MCE_ECLASS_HARD_INDETERMINATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) MCE_ECLASS_SOFTWARE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) MCE_ECLASS_SOFT_INDETERMINATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) enum MCE_UeErrorType {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) MCE_UE_ERROR_INDETERMINATE = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) MCE_UE_ERROR_IFETCH = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) MCE_UE_ERROR_PAGE_TABLE_WALK_IFETCH = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) MCE_UE_ERROR_LOAD_STORE = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) MCE_UE_ERROR_PAGE_TABLE_WALK_LOAD_STORE = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) enum MCE_SlbErrorType {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) MCE_SLB_ERROR_INDETERMINATE = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) MCE_SLB_ERROR_PARITY = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) MCE_SLB_ERROR_MULTIHIT = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) enum MCE_EratErrorType {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) MCE_ERAT_ERROR_INDETERMINATE = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) MCE_ERAT_ERROR_PARITY = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) MCE_ERAT_ERROR_MULTIHIT = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) enum MCE_TlbErrorType {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) MCE_TLB_ERROR_INDETERMINATE = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) MCE_TLB_ERROR_PARITY = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) MCE_TLB_ERROR_MULTIHIT = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) enum MCE_UserErrorType {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) MCE_USER_ERROR_INDETERMINATE = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) MCE_USER_ERROR_TLBIE = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) MCE_USER_ERROR_SCV = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) enum MCE_RaErrorType {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) MCE_RA_ERROR_INDETERMINATE = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) MCE_RA_ERROR_IFETCH = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) MCE_RA_ERROR_IFETCH_FOREIGN = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) MCE_RA_ERROR_PAGE_TABLE_WALK_IFETCH = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) MCE_RA_ERROR_PAGE_TABLE_WALK_IFETCH_FOREIGN = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) MCE_RA_ERROR_LOAD = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) MCE_RA_ERROR_STORE = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) MCE_RA_ERROR_PAGE_TABLE_WALK_LOAD_STORE = 7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) MCE_RA_ERROR_PAGE_TABLE_WALK_LOAD_STORE_FOREIGN = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) MCE_RA_ERROR_LOAD_STORE_FOREIGN = 9,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) enum MCE_LinkErrorType {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) MCE_LINK_ERROR_INDETERMINATE = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) MCE_LINK_ERROR_IFETCH_TIMEOUT = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) MCE_LINK_ERROR_PAGE_TABLE_WALK_IFETCH_TIMEOUT = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) MCE_LINK_ERROR_LOAD_TIMEOUT = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) MCE_LINK_ERROR_STORE_TIMEOUT = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) MCE_LINK_ERROR_PAGE_TABLE_WALK_LOAD_STORE_TIMEOUT = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) struct machine_check_event {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) enum MCE_Version version:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) u8 in_use;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) enum MCE_Severity severity:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) enum MCE_Initiator initiator:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) enum MCE_ErrorType error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) enum MCE_ErrorClass error_class:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) enum MCE_Disposition disposition:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) bool sync_error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) u16 cpu;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) u64 gpr3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) u64 srr0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) u64 srr1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) enum MCE_UeErrorType ue_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) u8 effective_address_provided;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) u8 physical_address_provided;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) u8 ignore_event;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) u8 reserved_1[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) u64 effective_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) u64 physical_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) u8 reserved_2[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) } ue_error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) enum MCE_SlbErrorType slb_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) u8 effective_address_provided;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) u8 reserved_1[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) u64 effective_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) u8 reserved_2[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) } slb_error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) enum MCE_EratErrorType erat_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) u8 effective_address_provided;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) u8 reserved_1[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) u64 effective_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) u8 reserved_2[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) } erat_error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) enum MCE_TlbErrorType tlb_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) u8 effective_address_provided;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) u8 reserved_1[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) u64 effective_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) u8 reserved_2[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) } tlb_error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) enum MCE_UserErrorType user_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) u8 effective_address_provided;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) u8 reserved_1[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) u64 effective_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) u8 reserved_2[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) } user_error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) enum MCE_RaErrorType ra_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) u8 effective_address_provided;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) u8 reserved_1[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) u64 effective_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) u8 reserved_2[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) } ra_error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) enum MCE_LinkErrorType link_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) u8 effective_address_provided;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) u8 reserved_1[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) u64 effective_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) u8 reserved_2[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) } link_error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) } u;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) struct mce_error_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) enum MCE_ErrorType error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) enum MCE_UeErrorType ue_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) enum MCE_SlbErrorType slb_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) enum MCE_EratErrorType erat_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) enum MCE_TlbErrorType tlb_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) enum MCE_UserErrorType user_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) enum MCE_RaErrorType ra_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) enum MCE_LinkErrorType link_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) } u;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) enum MCE_Severity severity:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) enum MCE_Initiator initiator:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) enum MCE_ErrorClass error_class:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) bool sync_error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) bool ignore_event;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) #define MAX_MC_EVT 100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) /* Release flags for get_mce_event() */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) #define MCE_EVENT_RELEASE true
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) #define MCE_EVENT_DONTRELEASE false
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) struct pt_regs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) struct notifier_block;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) extern void save_mce_event(struct pt_regs *regs, long handled,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) struct mce_error_info *mce_err, uint64_t nip,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) uint64_t addr, uint64_t phys_addr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) extern int get_mce_event(struct machine_check_event *mce, bool release);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) extern void release_mce_event(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) extern void machine_check_queue_event(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) extern void machine_check_print_event_info(struct machine_check_event *evt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) bool user_mode, bool in_guest);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) unsigned long addr_to_pfn(struct pt_regs *regs, unsigned long addr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) extern void mce_common_process_ue(struct pt_regs *regs,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) struct mce_error_info *mce_err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) int mce_register_notifier(struct notifier_block *nb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) int mce_unregister_notifier(struct notifier_block *nb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) #ifdef CONFIG_PPC_BOOK3S_64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) void flush_and_reload_slb(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) long __machine_check_early_realmode_p7(struct pt_regs *regs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) long __machine_check_early_realmode_p8(struct pt_regs *regs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) long __machine_check_early_realmode_p9(struct pt_regs *regs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) long __machine_check_early_realmode_p10(struct pt_regs *regs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) #endif /* CONFIG_PPC_BOOK3S_64 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) #endif /* __ASM_PPC64_MCE_H__ */