diff options
author | alc <alc@FreeBSD.org> | 2012-08-01 16:04:13 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2012-08-01 16:04:13 +0000 |
commit | 9c4b62fad8853cdccbe2f3a1900de7ec19bb52ca (patch) | |
tree | ca90665994a83282a7e75e13ed388776aca81e44 /sys/netinet/tcp_syncache.c | |
parent | e5c6ca6783da2418a0046f43f47977f4534925d3 (diff) | |
download | FreeBSD-src-9c4b62fad8853cdccbe2f3a1900de7ec19bb52ca.zip FreeBSD-src-9c4b62fad8853cdccbe2f3a1900de7ec19bb52ca.tar.gz |
Revise pmap_enter()'s handling of mapping updates that change the
PTE's PG_M and PG_RW bits but not the physical page frame. First,
only perform vm_page_dirty() on a managed vm_page when the PG_M bit is
being cleared. If the updated PTE continues to have PG_M set, then
there is no requirement to perform vm_page_dirty(). Second, flush the
mapping from the TLB when PG_M alone is cleared, not just when PG_M
and PG_RW are cleared. Otherwise, a stale TLB entry may stop PG_M
from being set again on the next store to the virtual page. However,
since the vm_page's dirty field already shows the physical page as
being dirty, no actual harm comes from the PG_M bit not being set.
Nonetheless, it is potentially confusing to someone expecting to see
the PTE change after a store to the virtual page.
Diffstat (limited to 'sys/netinet/tcp_syncache.c')
0 files changed, 0 insertions, 0 deletions