summaryrefslogtreecommitdiffstats
path: root/contrib/libc++/src/thread.cpp
diff options
context:
space:
mode:
authormarcel <marcel@FreeBSD.org>2014-01-15 03:57:41 +0000
committermarcel <marcel@FreeBSD.org>2014-01-15 03:57:41 +0000
commit4d43158298b79cad374fafa6dbd365bb93c82ea7 (patch)
tree1b4e7b99a2312d43a1dda2cbf070540730ff088f /contrib/libc++/src/thread.cpp
parent11b54efacfc10d4eaf58b4c11039c8298315eeb3 (diff)
downloadFreeBSD-src-4d43158298b79cad374fafa6dbd365bb93c82ea7.zip
FreeBSD-src-4d43158298b79cad374fafa6dbd365bb93c82ea7.tar.gz
In the nested TLB fault handler, for a direct-mapped address, make
sure to clear the lower 12 bits. We're adding the translation attributes to the physical address and non-zero bits in the first 12 bits would give us something unexpected, including invalid bit values. Those trigger nested general protection faults. We do not have to clear the region bits, because they are ignored anyway, so we can replace an existing dep instruction with the one we need. This fixes GP faults for the swapper thread, as it's the only thread that has a direct-mapped stack. Since the bug is in the nested TLB fault handler, the frequency of hitting the GP is in the order of hours/days under load.
Diffstat (limited to 'contrib/libc++/src/thread.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud