eb0262fc4c
- While walking down the cache chain, we keep all upper caches locked. - When we have to unlock -- when waiting for a busy page or reading a page in -- we unlock completely, including the address space, and restart vm_soft_fault(). - Folded fault_get_page() and fault_find_page() into one. This simplifies and improves things considerably: - We no longer need dummy pages. - We no longer need vm_area::no_cache_change. - #2710 is fixed, since we no longer hold the address space lock while waiting. * vm_soft_fault(): When we have found our page, we first check whether a page is already mapped at the address. If it is already our page, we just change its protection. If not, we unmap it first. Fixes race conditions when multiple threads fault at the same address at the same time. * fault_get_page(): When copying a read-only page from a lower cache, no longer mark it active, since at least for the fault area it is shadowed from then on. * vm_set_area_protection(): Fixed potential overflow for in the vm_translation_map::protect() call. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30911 a95241bf-73f2-0310-859d-f6bbb57e9c96 |
||
---|---|---|
.. | ||
add-ons | ||
apps | ||
bin | ||
build | ||
data | ||
documentation | ||
kits | ||
libs | ||
preferences | ||
servers | ||
system | ||
tests | ||
tools | ||
Jamfile |