freebsd-nq/sys/i386
Alan Cox a971139680 Correct a long-standing error in _pmap_unwire_pte_hold() affecting
multiprocessors.  Specifically, the error is conditioning the call to
pmap_invalidate_page() on whether the pmap is active on the current CPU.
This call must be unconditional.  Regardless of whether the pmap is active
on the CPU performing _pmap_unwire_pte_hold(), it could be active on another
CPU.  For example, a call to pmap_remove_all() by the page daemon could
result in a call to _pmap_unwire_pte_hold() with the pmap inactive on the
current CPU and active on another CPU.  In such circumstances, failing to
call pmap_invalidate_page() results in a stale TLB entry on the other CPU
that still maps the now deallocated page table page.  What happens next is
typically a mysterious panic in pmap_enter() by the other CPU, either
"pmap_enter: attempted pmap_enter on 4MB page" or "pmap_enter: pte vanished,
va: 0x%lx".  Both occur because the former page table page has been recycled
and allocated to a new purpose.  Consequently, it no longer contains zeroes.

See also Peter's i386/i386/pmap.c revision 1.448 and the related e-mail
thread last year.

Many thanks to the engineers at Sandvine for providing clear and concise
information until all of the pieces of the puzzle fell into place and
for testing an earlier patch.

MT5 Candidate
2004-09-22 05:01:48 +00:00
..
acpica Be sure to always unlock the sx lock when exiting the sysctl function. 2004-08-24 17:53:25 +00:00
bios Clarify SDT feature word bits. 2004-08-31 21:51:51 +00:00
compile
conf Put in a commented out ispfw device under isp and note that this is usually 2004-09-19 00:52:22 +00:00
cpufreq o Fix whitespace bug introduced in the previous commit. 2004-08-23 10:09:29 +00:00
i386 Correct a long-standing error in _pmap_unwire_pte_hold() affecting 2004-09-22 05:01:48 +00:00
ibcs2 Regenerate after fcntl() wrappers were marked MP safe. 2004-08-24 20:24:34 +00:00
include Fix breakpoint handling for i386. 2004-09-15 23:26:49 +00:00
isa Add new a function isa_dma_init() which returns an errno when it fails 2004-09-15 12:09:50 +00:00
linux Regen. 2004-09-06 09:33:30 +00:00
pci Consistently use __inline instead of __inline__ as the former is an empty macro 2004-07-04 16:11:03 +00:00
svr4 Attempt to make the proper changes here for the proc.h commit: 2004-01-05 00:29:00 +00:00
Makefile