* abort_imprecise() handles the following abort: * * FAULT_EA_IMPREC - Imprecise External Abort * * The imprecise means that we don't know where the abort happened, * thus FAR is undefined. The abort should not never fire, but hot * plugging or accidental hardware failure can be the cause of it. * If the abort happens, it can even be on different (thread) context. * Without any additional
| 214 | * FAULT_IS_NOT_MINE value, then the abort is fatal. |
| 215 | */ |
| 216 | static __inline void |
| 217 | abort_imprecise(struct trapframe *tf, u_int fsr, u_int prefetch, bool usermode) |
| 218 | { |
| 219 | |
| 220 | /* |
| 221 | * XXX - We can got imprecise abort as result of access |
| 222 | * to not-present PCI/PCIe configuration space. |
| 223 | */ |
| 224 | #if 0 |
| 225 | goto out; |
| 226 | #endif |
| 227 | abort_fatal(tf, FAULT_EA_IMPREC, fsr, 0, prefetch, curthread, NULL); |
| 228 | |
| 229 | /* |
| 230 | * Returning from this function means that we ignore |
| 231 | * the abort for good reason. Note that imprecise abort |
| 232 | * could fire any time even in user mode. |
| 233 | */ |
| 234 | |
| 235 | #if 0 |
| 236 | out: |
| 237 | if (usermode) |
| 238 | userret(curthread, tf); |
| 239 | #endif |
| 240 | } |
| 241 | |
| 242 | /* |
| 243 | * abort_debug() handles the following abort: |
no test coverage detected