HomeFreeBSD

Use a dedicated per-CPU stack for machine check exceptions.

Description

Use a dedicated per-CPU stack for machine check exceptions.

Similar to NMIs, machine check exceptions can fire at any time and are
not masked by IF. This means that machine checks can fire when the
kstack is too deep to hold a trap frame, or at critical sections in
trap handlers when a user %gs is used with a kernel %cs. Use the same
strategy used for NMIs of using a dedicated per-CPU stack configured
in IST 3. Store the CPU's pcpu pointer at the stop of the stack so
that the machine check handler can reliably find the proper value for
%gs (also borrowed from NMIs).

This should also fix a similar issue with PTI with a MC# occurring
while the CPU is executing on the trampoline stack.

While here, bypass trap() entirely and just call mca_intr(). This
avoids a bogus call to kdb_reenter() (there's no reason to try to
reenter kdb if a MC# is raised).

Reviewed by: kib
Tested by: avg (on AMD without PTI)
Differential Revision: https://reviews.freebsd.org/D13962

Details

Committed
jhbJan 18 2018, 11:50 PM
Reviewer
kib
Differential Revision
D13962: Use a dedicated per-CPU stack for machine check exceptions.
Parents
rS328156: stand: Move sections around to fix stand/ build with ld.lld on armv7
Branches
Unknown
Tags
Unknown