mce.c (c1bbf387d6191e6e18f3adc4db45b922822c2ba4) | mce.c (7b9f71f974a12740e79e918cfd58c2fce0b5b580) |
---|---|
1/* 2 * Machine check exception handling. 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * --- 44 unchanged lines hidden (view full) --- 53 mce->u.slb_error.slb_error_type = mce_err->u.slb_error_type; 54 break; 55 case MCE_ERROR_TYPE_ERAT: 56 mce->u.erat_error.erat_error_type = mce_err->u.erat_error_type; 57 break; 58 case MCE_ERROR_TYPE_TLB: 59 mce->u.tlb_error.tlb_error_type = mce_err->u.tlb_error_type; 60 break; | 1/* 2 * Machine check exception handling. 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * --- 44 unchanged lines hidden (view full) --- 53 mce->u.slb_error.slb_error_type = mce_err->u.slb_error_type; 54 break; 55 case MCE_ERROR_TYPE_ERAT: 56 mce->u.erat_error.erat_error_type = mce_err->u.erat_error_type; 57 break; 58 case MCE_ERROR_TYPE_TLB: 59 mce->u.tlb_error.tlb_error_type = mce_err->u.tlb_error_type; 60 break; |
61 case MCE_ERROR_TYPE_USER: 62 mce->u.user_error.user_error_type = mce_err->u.user_error_type; 63 break; 64 case MCE_ERROR_TYPE_RA: 65 mce->u.ra_error.ra_error_type = mce_err->u.ra_error_type; 66 break; 67 case MCE_ERROR_TYPE_LINK: 68 mce->u.link_error.link_error_type = mce_err->u.link_error_type; 69 break; |
|
61 case MCE_ERROR_TYPE_UNKNOWN: 62 default: 63 break; 64 } 65} 66 67/* 68 * Decode and save high level MCE information into per cpu buffer which --- 42 unchanged lines hidden (view full) --- 111 mce->u.tlb_error.effective_address_provided = true; 112 mce->u.tlb_error.effective_address = addr; 113 } else if (mce->error_type == MCE_ERROR_TYPE_SLB) { 114 mce->u.slb_error.effective_address_provided = true; 115 mce->u.slb_error.effective_address = addr; 116 } else if (mce->error_type == MCE_ERROR_TYPE_ERAT) { 117 mce->u.erat_error.effective_address_provided = true; 118 mce->u.erat_error.effective_address = addr; | 70 case MCE_ERROR_TYPE_UNKNOWN: 71 default: 72 break; 73 } 74} 75 76/* 77 * Decode and save high level MCE information into per cpu buffer which --- 42 unchanged lines hidden (view full) --- 120 mce->u.tlb_error.effective_address_provided = true; 121 mce->u.tlb_error.effective_address = addr; 122 } else if (mce->error_type == MCE_ERROR_TYPE_SLB) { 123 mce->u.slb_error.effective_address_provided = true; 124 mce->u.slb_error.effective_address = addr; 125 } else if (mce->error_type == MCE_ERROR_TYPE_ERAT) { 126 mce->u.erat_error.effective_address_provided = true; 127 mce->u.erat_error.effective_address = addr; |
128 } else if (mce->error_type == MCE_ERROR_TYPE_USER) { 129 mce->u.user_error.effective_address_provided = true; 130 mce->u.user_error.effective_address = addr; 131 } else if (mce->error_type == MCE_ERROR_TYPE_RA) { 132 mce->u.ra_error.effective_address_provided = true; 133 mce->u.ra_error.effective_address = addr; 134 } else if (mce->error_type == MCE_ERROR_TYPE_LINK) { 135 mce->u.link_error.effective_address_provided = true; 136 mce->u.link_error.effective_address = addr; |
|
119 } else if (mce->error_type == MCE_ERROR_TYPE_UE) { 120 mce->u.ue_error.effective_address_provided = true; 121 mce->u.ue_error.effective_address = addr; 122 } 123 return; 124} 125 126/* --- 108 unchanged lines hidden (view full) --- 235 "Parity", 236 "Multihit", 237 }; 238 static const char *mc_tlb_types[] = { 239 "Indeterminate", 240 "Parity", 241 "Multihit", 242 }; | 137 } else if (mce->error_type == MCE_ERROR_TYPE_UE) { 138 mce->u.ue_error.effective_address_provided = true; 139 mce->u.ue_error.effective_address = addr; 140 } 141 return; 142} 143 144/* --- 108 unchanged lines hidden (view full) --- 253 "Parity", 254 "Multihit", 255 }; 256 static const char *mc_tlb_types[] = { 257 "Indeterminate", 258 "Parity", 259 "Multihit", 260 }; |
261 static const char *mc_user_types[] = { 262 "Indeterminate", 263 "tlbie(l) invalid", 264 }; 265 static const char *mc_ra_types[] = { 266 "Indeterminate", 267 "Instruction fetch (bad)", 268 "Page table walk ifetch (bad)", 269 "Page table walk ifetch (foreign)", 270 "Load (bad)", 271 "Store (bad)", 272 "Page table walk Load/Store (bad)", 273 "Page table walk Load/Store (foreign)", 274 "Load/Store (foreign)", 275 }; 276 static const char *mc_link_types[] = { 277 "Indeterminate", 278 "Instruction fetch (timeout)", 279 "Page table walk ifetch (timeout)", 280 "Load (timeout)", 281 "Store (timeout)", 282 "Page table walk Load/Store (timeout)", 283 }; |
|
243 244 /* Print things out */ 245 if (evt->version != MCE_V1) { 246 pr_err("Machine Check Exception, Unknown event version %d !\n", 247 evt->version); 248 return; 249 } 250 switch (evt->severity) { --- 60 unchanged lines hidden (view full) --- 311 ARRAY_SIZE(mc_tlb_types) ? 312 mc_tlb_types[evt->u.tlb_error.tlb_error_type] 313 : "Unknown"; 314 printk("%s Error type: TLB [%s]\n", level, subtype); 315 if (evt->u.tlb_error.effective_address_provided) 316 printk("%s Effective address: %016llx\n", 317 level, evt->u.tlb_error.effective_address); 318 break; | 284 285 /* Print things out */ 286 if (evt->version != MCE_V1) { 287 pr_err("Machine Check Exception, Unknown event version %d !\n", 288 evt->version); 289 return; 290 } 291 switch (evt->severity) { --- 60 unchanged lines hidden (view full) --- 352 ARRAY_SIZE(mc_tlb_types) ? 353 mc_tlb_types[evt->u.tlb_error.tlb_error_type] 354 : "Unknown"; 355 printk("%s Error type: TLB [%s]\n", level, subtype); 356 if (evt->u.tlb_error.effective_address_provided) 357 printk("%s Effective address: %016llx\n", 358 level, evt->u.tlb_error.effective_address); 359 break; |
360 case MCE_ERROR_TYPE_USER: 361 subtype = evt->u.user_error.user_error_type < 362 ARRAY_SIZE(mc_user_types) ? 363 mc_user_types[evt->u.user_error.user_error_type] 364 : "Unknown"; 365 printk("%s Error type: User [%s]\n", level, subtype); 366 if (evt->u.user_error.effective_address_provided) 367 printk("%s Effective address: %016llx\n", 368 level, evt->u.user_error.effective_address); 369 break; 370 case MCE_ERROR_TYPE_RA: 371 subtype = evt->u.ra_error.ra_error_type < 372 ARRAY_SIZE(mc_ra_types) ? 373 mc_ra_types[evt->u.ra_error.ra_error_type] 374 : "Unknown"; 375 printk("%s Error type: Real address [%s]\n", level, subtype); 376 if (evt->u.ra_error.effective_address_provided) 377 printk("%s Effective address: %016llx\n", 378 level, evt->u.ra_error.effective_address); 379 break; 380 case MCE_ERROR_TYPE_LINK: 381 subtype = evt->u.link_error.link_error_type < 382 ARRAY_SIZE(mc_link_types) ? 383 mc_link_types[evt->u.link_error.link_error_type] 384 : "Unknown"; 385 printk("%s Error type: Link [%s]\n", level, subtype); 386 if (evt->u.link_error.effective_address_provided) 387 printk("%s Effective address: %016llx\n", 388 level, evt->u.link_error.effective_address); 389 break; |
|
319 default: 320 case MCE_ERROR_TYPE_UNKNOWN: 321 printk("%s Error type: Unknown\n", level); 322 break; 323 } 324} 325 326uint64_t get_mce_fault_addr(struct machine_check_event *evt) --- 10 unchanged lines hidden (view full) --- 337 case MCE_ERROR_TYPE_ERAT: 338 if (evt->u.erat_error.effective_address_provided) 339 return evt->u.erat_error.effective_address; 340 break; 341 case MCE_ERROR_TYPE_TLB: 342 if (evt->u.tlb_error.effective_address_provided) 343 return evt->u.tlb_error.effective_address; 344 break; | 390 default: 391 case MCE_ERROR_TYPE_UNKNOWN: 392 printk("%s Error type: Unknown\n", level); 393 break; 394 } 395} 396 397uint64_t get_mce_fault_addr(struct machine_check_event *evt) --- 10 unchanged lines hidden (view full) --- 408 case MCE_ERROR_TYPE_ERAT: 409 if (evt->u.erat_error.effective_address_provided) 410 return evt->u.erat_error.effective_address; 411 break; 412 case MCE_ERROR_TYPE_TLB: 413 if (evt->u.tlb_error.effective_address_provided) 414 return evt->u.tlb_error.effective_address; 415 break; |
416 case MCE_ERROR_TYPE_USER: 417 if (evt->u.user_error.effective_address_provided) 418 return evt->u.user_error.effective_address; 419 break; 420 case MCE_ERROR_TYPE_RA: 421 if (evt->u.ra_error.effective_address_provided) 422 return evt->u.ra_error.effective_address; 423 break; 424 case MCE_ERROR_TYPE_LINK: 425 if (evt->u.link_error.effective_address_provided) 426 return evt->u.link_error.effective_address; 427 break; |
|
345 default: 346 case MCE_ERROR_TYPE_UNKNOWN: 347 break; 348 } 349 return 0; 350} 351EXPORT_SYMBOL(get_mce_fault_addr); | 428 default: 429 case MCE_ERROR_TYPE_UNKNOWN: 430 break; 431 } 432 return 0; 433} 434EXPORT_SYMBOL(get_mce_fault_addr); |