Apparently not everyone checks the page state for PAGE_STATE_BUSY.
vm_page_write_modified_pages() does now at least.
* Fixed typos in comments.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22349 a95241bf-73f2-0310-859d-f6bbb57e9c96
* We now have a page writer that takes some pages from the modified queue
and writes it back every few seconds. It can be triggered by the page
scanner to do that more often, though. That mechanism can be greatly
improved once we have our I/O scheduler working.
* Removed vm_page_write_modified_page() again - it was all "eaten up" by
the page writer.
* Reworked vm_page_write_modified_pages() a bit: it now uses
vm_test_map_modification() and vm_clear_map_flags() instead of the
iterating over all areas which wouldn't even work correctly.
The code is much simpler now, too.
* You usually put something to the tail of a queue, and remove the contents
from the head, not vice versa - changed queue implementation to reflect this.
* Additionally, there is now a enqueue_page_to_head() if you actually want the
opposite.
* vm_page_requeue() allows you to move a page in a queue to the head or tail.
* Replaced vm_clear_map_activation() with vm_clear_map_flags() which allows
you to clear other flags than PAGE_ACCESSED.
* The page scanner dumps now some arguments with each run.
* Removed the old disabled pageout_daemon() from NewOS.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22348 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Clear fMinMaxValid when a new constraint is added. "Height for width"
constraints are therefore no longer ignored.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22343 a95241bf-73f2-0310-859d-f6bbb57e9c96
be considered redundant, although they weren't. We do now use smaller
"unlimited" sizes which we can add without risking overflow, and can thus
correctly identify redundant constraints. This fixes the
SplitterGridLayoutTest1 in the LayoutTest1 app.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22337 a95241bf-73f2-0310-859d-f6bbb57e9c96
properties (like the weight or min/max) would be ignored, besides memory
being leaked.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22336 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Use the new ComplexLayouter for the more complex layouting tasks.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22335 a95241bf-73f2-0310-859d-f6bbb57e9c96
made it conditional, added/modified comments documenting the maths and
algorithms.
* Refactored quite a bit in ComplexLayouter and added special handling for
the case that the desired solution is already feasible.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22334 a95241bf-73f2-0310-859d-f6bbb57e9c96
arguments into vm.h.
* This should fix the broken build from earlier - thanks Stefano for the note!
* That also allowed to clean some other includes a bit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22331 a95241bf-73f2-0310-859d-f6bbb57e9c96
to the private VM types are including vm_types.h now.
* Removed vm_page, vm_area, vm_cache, and vm_address_space typedefs; it's
cleaner this way, and the actual types are only used in C++ files now,
anyway.
* And that caused changes in many files...
* Made commpage.h self-containing.
* Minor cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22329 a95241bf-73f2-0310-859d-f6bbb57e9c96
in enqueue_page() - it doesn't really belong there.
* Minor cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22328 a95241bf-73f2-0310-859d-f6bbb57e9c96
For some reason, shell wildcards do not include deleted files... :)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22327 a95241bf-73f2-0310-859d-f6bbb57e9c96
opaque types for C.
* As a result, I've renamed some more source files to .cpp, and fixed
all warnings caused by that.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22326 a95241bf-73f2-0310-859d-f6bbb57e9c96
If a Tab is partially out of the window, clicking on it to make it the
active tab will scroll it to be completely visible.
The best solution would probably be having a way to scroll through the
whole list of tabs, or something like this. But for now, at least, makes
the tabbed terminal a bit more useful.
Thanks!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22325 a95241bf-73f2-0310-859d-f6bbb57e9c96
introduced a new vm_page_write_modified_page().
* Resolved a TODO: vm_page_write_modified_pages() did not mark a to be
written page busy but unlocked its cache which could let someone else
steal that page in the mean time.
* Moved the logic when to move a page to the active or inactive queue to
a new function move_page_to_active_or_inactive_queue().
* Moved page_state_to_string() to vm_page(); it's now also used by the
"page" and "page_queue" KDL commands.
* Made the output of the "page_queue list" command more useful.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22323 a95241bf-73f2-0310-859d-f6bbb57e9c96
despite using the "AHCI native" setting in the BIOS.
Added switching to AHCI mode during init, this makes it work.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22322 a95241bf-73f2-0310-859d-f6bbb57e9c96
is tracked while the page scanner runs much slower. Now, we just set it to a
fixed positive, so that they can easily age in case they are actually unused.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22320 a95241bf-73f2-0310-859d-f6bbb57e9c96
are locked, there is now a vm_page_reserve_pages() call to ensure upfront that
there is a page for me when I need it, and may have locked some caches.
* The vm_soft_fault() routine now makes use of that feature.
* vm_page_allocate_page() now resets the vm_page::usage_count, so that the file
cache does not need to do this in read_chunk_into_cache() and
write_chunk_to_cache().
* In cache_io() however, it need to update the usage_count - and it does that
now. Since non-mapped caches don't have mappings, the page scanner will punish
the cache pages stronger than other pages which is accidently just what we
want.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22319 a95241bf-73f2-0310-859d-f6bbb57e9c96
documentation... when you ask the block cache for a writable block, it's
automatically dirty.
* This fixes bug #1330.
* Minor style cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22317 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Removed the vm_cache/vm_store ref_count duality that besides being a bit ugly
also created the page dameon cache retrieval problem: now, only areas (and
cache consumers) retrieve a reference to the store (and therefore, the vnode).
The page daemon doesn't need to care about this at all anymore, and the pseudo
references of the vm_cache could be removed again.
* Rearranged deletion of vnodes such that its ID can be reused directly after
fs_remove_vnode() has been called.
* vm_page_allocate_page() no longer panics when it runs out of pages, but just
waits for new pages to become available using the new sFreeCondition condition
variable - to make sure this happens in an acceptable time frame, it'll
trigger a run of the low memory handlers.
* Implemented a page_thief() that steals inactive pages from caches and puts
them into the free queue. It runs as a low memory handler.
* The file cache now sets the usage count on the pages it inserts into the
cache (needs some rework though, cache_io() doesn't do it yet).
* Instead of panicking, the kernel will currently dead lock in low memory
situations, since BFS does a bit too much in bfs_release_vnode().
* Some minor cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22315 a95241bf-73f2-0310-859d-f6bbb57e9c96
* The page daemon now runs independently from the low memory state.
* It now also increases its frequency and scanned pages, as well as decreases
the interval between runs with increasing memory pressure.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22314 a95241bf-73f2-0310-859d-f6bbb57e9c96
* vm_low_memory() no longer calls call_handlers() directly, but just triggers
a run immediately.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22313 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Replaced release_sem() with release_sem_etc() for future addition of the
B_DO_NOT_RESCHEDULE flag.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22308 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Fixed vm_page_allocate_page_run(): it did not take the pageState into account,
and would therefore return uninitialized memory (ie. B_CONTIGUOUS areas would
contain garbage).
Now, it stores if a page is cleared in a new vm_page::is_cleared field.
* Some cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22306 a95241bf-73f2-0310-859d-f6bbb57e9c96