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);