haiku/src/system/kernel/vm
Axel Dörfler fe70b87d91 Fixed a couple of issues in our VM:
* we now always flush the TLBs after having unmapped some pages.
* vm_soft_fault() could traverse to a source cache while it was being collapsed
  by vm_cache_remove_consumer() - this is now no longer possible as the latter
  marks the cache as busy when doing so, and the former now tests this flag and
  locks the cache (via the new fault_acquire_locked_source() function).
* if fault_acquire_locked_source() fails with B_BUSY, the current cache is locked
  again, and tested again for the page - as it might have been moved upwards to it
  with the destruction of its former source.
* The cache delivering the page for vm_soft_fault() is now locked until the end;
  it can no longer go away before having actually mapped the page into the area.
* This also fixes the issue where pages would get lost as vm_soft_fault() put the
  page in the active list, no matter if its cache still existed.
* Also, we now keep a reference of to a cache in case a dummy page is inserted; this
  makes again sure that it doesn't go away during the execution of vm_soft_fault()
  (which could even add this page to the free list...).
* divided vm_soft_fault() into several smaller functions which should make it much
  more readable.
* Added a "cache_chain" KDL command that dumps the whole chain until the bottom
  when giving a pointer to a vm_cache as parameter.
* now usually call vm_cache_acquire_ref() before map_backing_store(), even though
  it shouldn't be really needed (I added it for debugging purposes).
* Some minor cleanup.
* NOTE: a major problem still persists: when removing a vm_cache, it's possible
  that some of its pages are still mapped, and there is currently no mechanism
  to get rid of these mappings! I've added TODO comments into vm_cache.c where
  appropriate.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20028 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-02-01 12:12:54 +00:00
..
Jamfile * Introduced new build system variables 2005-12-30 21:20:07 +00:00
vm_address_space.c First baby step towards a lockless get_memory_map(): vm_get_current_user_address_space() 2006-04-27 17:46:19 +00:00
vm_cache.c Fixed a couple of issues in our VM: 2007-02-01 12:12:54 +00:00
vm_daemons.c Separated vm_address_space.h from vm.h. 2005-12-20 15:54:45 +00:00
vm_low_memory.cpp * Removed my old doubly linked list implementation, and stay with Ingo's. 2006-03-27 10:27:05 +00:00
vm_page.c The KDL command "page" can now also look up the physical page behind a virtual address. 2007-01-30 12:03:04 +00:00
vm_store_anonymous_noswap.c * Added the possibility to pre-commit pages for areas that can overcommit. 2007-01-12 18:51:01 +00:00
vm_store_anonymous_noswap.h * Added the possibility to pre-commit pages for areas that can overcommit. 2007-01-12 18:51:01 +00:00
vm_store_device.c vm_store::fault() is now called with having the vm_cache_ref locked, so it shouldn't 2007-01-15 10:24:22 +00:00
vm_store_device.h Moved the headers of the different store implementations into the VM source 2005-12-21 20:08:49 +00:00
vm_store_null.c Added a "reenter" parameter to the {read|write}_pages() functions to give file 2006-04-12 13:34:04 +00:00
vm_store_null.h Moved the headers of the different store implementations into the VM source 2005-12-21 20:08:49 +00:00
vm_tests.c Separated vm_address_space.h from vm.h. 2005-12-20 15:54:45 +00:00
vm.cpp Fixed a couple of issues in our VM: 2007-02-01 12:12:54 +00:00