a0f64f38a1
protection change. On superpage promotion, x86 pmaps do not invalidate existing 4K entries for the superpage range, because they are compatible with the promoted 2/4M entry. But the invalidation on superpage removal or protection change only did single INVLPG with the base address of the superpage. This reliably flushed superpage TLB entry, and 4K entry for the first page of the superpage, potentially leaving other 4K TLB entries lingering. Do the invalidation of the whole superpage range to correct the problem. Note that the precise invalidation is done by x86 code for kernel_pmap only, for user pmaps whole (per-AS) TLB is flushed. This made the bug well hidden, because promotions of the kernel mappings require specific load. Reported and tested by: Jonathan Looney <jtl@netflix.com> (previous version) Reviewed by: alc Sponsored by: The FreeBSD Foundation MFC after: 1 week |
||
---|---|---|
.. | ||
apic_vector.s | ||
atomic.c | ||
atpic_vector.s | ||
bios.c | ||
bioscall.s | ||
bpf_jit_machdep.c | ||
bpf_jit_machdep.h | ||
db_disasm.c | ||
db_interface.c | ||
db_trace.c | ||
elan-mmcr.c | ||
elf_machdep.c | ||
exception.s | ||
gdb_machdep.c | ||
genassym.c | ||
geode.c | ||
i686_mem.c | ||
in_cksum.c | ||
initcpu.c | ||
io.c | ||
k6_mem.c | ||
locore.s | ||
longrun.c | ||
machdep.c | ||
mem.c | ||
minidump_machdep.c | ||
mp_clock.c | ||
mp_machdep.c | ||
mpboot.s | ||
perfmon.c | ||
pmap.c | ||
ptrace_machdep.c | ||
support.s | ||
swtch.s | ||
sys_machdep.c | ||
trap.c | ||
uio_machdep.c | ||
vm86.c | ||
vm86bios.s | ||
vm_machdep.c |