I was recently working with custom hardware that was not fully respecting the PCIe bus standards, and certain reads from the device would cause a bus fault and Linux machine check exception. When this happened, the pthread in my application that had triggered the MCE would die. All other threads in the same process would continue. Any mutex locks that the killed thread happened to be holding at the time of the MCE would not be released, which would typically lead to the application deadlocking.
Can anyone explain the behavior of the Linux kernel when it is responding to an MCE? Is it expected/intended that a single thread from a multithreaded process can be stopped? I am not aware of any other conditions under which the kernel may unilaterally terminate a LWP while leaving its parent process alive, so I would like to know more about this.