Alan Cox
c9267356b7
- Mark the kernel_map as a system map immediately after its creation.
...
- Correct a cast.
2002-12-30 05:55:41 +00:00
Alan Cox
3a92e5d5e9
- Increment the vm_map's timestamp if _vm_map_trylock() succeeds.
...
- Introduce map_sleep_mtx and use it to replace Giant in
vm_map_unlock_and_wait() and vm_map_wakeup(). (Original
version by: tegge.)
2002-12-30 00:41:33 +00:00
Alan Cox
e3a9e1b2a8
- Remove vm_object_init2(). It is unused.
...
- Add a mtx_destroy() to vm_object_collapse(). (This allows a bzero()
to migrate from _vm_object_allocate() to vm_object_zinit(), where it
will be performed less often.)
2002-12-29 21:01:14 +00:00
Alan Cox
a28cc55e5b
Reduce the number of times that we acquire and release the page queues
...
lock by making vm_page_rename()'s caller, rather than vm_page_rename(),
responsible for acquiring it.
2002-12-29 07:17:06 +00:00
Alan Cox
2ee5fea7d3
Assert that the page queues lock rather than Giant is held in
...
vm_page_flag_clear().
2002-12-28 22:49:37 +00:00
Matthew Dillon
40bb4f4bcf
vm_pager_put_pages() takes VM_PAGER_* flags, not OBJPC_* flags. It just
...
so happens that OBJPC_SYNC has the same value as VM_PAGER_PUT_SYNC so no
harm done. But fix it :-)
No operational changes.
MFC after: 1 day
2002-12-28 21:15:39 +00:00
Matthew Dillon
43b7990e30
Allow the VM object flushing code to cluster. When the filesystem syncer
...
comes along and flushes a file which has been mmap()'d SHARED/RW, with
dirty pages, it was flushing the underlying VM object asynchronously,
resulting in thousands of 8K writes. With this change the VM Object flushing
code will cluster dirty pages in 64K blocks.
Note that until the low memory deadlock issue is reviewed, it is not safe
to allow the pageout daemon to use this feature. Forced pageouts still
use fs block size'd ops for the moment.
MFC after: 3 days
2002-12-28 21:03:42 +00:00
Alan Cox
a623fedef7
Two changes to kmem_malloc():
...
- Use VM_ALLOC_WIRED.
- Perform vm_page_wakeup() after pmap_enter(), like we do everywhere else.
2002-12-28 19:03:54 +00:00
Alan Cox
35c016315f
- Change vm_object_page_collect_flush() to assert rather than
...
acquire the page queues lock.
- Acquire the page queues lock in vm_object_page_clean().
2002-12-27 20:16:13 +00:00
Alan Cox
969da54c3a
Increase the scope of the page queues lock in phys_pager_getpages().
2002-12-27 06:09:56 +00:00
Alan Cox
82ea080d88
- Hold the page queues lock around calls to vm_page_flag_clear().
2002-12-24 19:02:03 +00:00
Alan Cox
dc907f6632
- Hold the page queues lock around vm_page_wakeup().
2002-12-24 04:24:58 +00:00
Alan Cox
6e14fce9d9
- Hold the kernel_object's lock around vm_page_insert(..., kernel_object,
...
...).
2002-12-23 20:39:15 +00:00
Alan Cox
7af7dd3c6f
Eliminate some dead code. (Any possible use for this code died with
...
vm/vm_page.c revision 1.220.)
Submitted by: bde
2002-12-23 04:35:38 +00:00
Matthew Dillon
9991ea7178
The UP -current was not properly counting the per-cpu VM stats in the
...
sysctl code. This makes 'systat -vm 1's syscall count work again.
Submitted by: Michal Mertl <mime@traveller.cz>
Note: also slated for 5.0
2002-12-22 05:04:30 +00:00
Alan Cox
671e427ce9
Increase the scope of the kmem_object locking in kmem_malloc().
2002-12-20 18:59:23 +00:00
Alan Cox
4b420d501f
Add a mutex to struct vm_object. Initialize and destroy that mutex
...
at appropriate times. For the moment, the mutex is only used on
the kmem_object.
2002-12-20 05:10:32 +00:00
Alan Cox
cf3e6e4837
Remove the hash_rand field from struct vm_object. As of revision 1.215 of
...
vm/vm_page.c, it is unused.
2002-12-19 20:01:22 +00:00
Alan Cox
24c9ad6bed
- Remove vm_page_sleep_busy(). The transition to vm_page_sleep_if_busy(),
...
which incorporates page queue and field locking, is complete.
- Assert that the page queue lock rather than Giant is held in
vm_page_flag_set().
2002-12-19 07:23:46 +00:00
Alan Cox
9a96b6382a
- Hold the page queues lock when performing vm_page_busy() or
...
vm_page_flag_set().
- Replace vm_page_sleep_busy() with proper page queues locking
and vm_page_sleep_if_busy().
2002-12-19 01:20:24 +00:00
Alan Cox
bd82dc7460
- Hold the page queues lock when performing vm_page_busy().
...
- Replace vm_page_sleep_busy() with proper page queues locking
and vm_page_sleep_if_busy().
2002-12-18 04:39:15 +00:00
Alan Cox
b365ea9e30
Hold the page queues lock when performing vm_page_flag_set().
2002-12-18 04:02:02 +00:00
Alan Cox
d8e7c54e1e
Hold the page queues lock when performing vm_page_flag_set().
2002-12-17 19:55:28 +00:00
Matthew Dillon
fa7dd9c5bc
Change the way ELF coredumps are handled. Instead of unconditionally
...
skipping read-only pages, which can result in valuable non-text-related
data not getting dumped, the ELF loader and the dynamic loader now mark
read-only text pages NOCORE and the coredump code only checks (primarily) for
complete inaccessibility of the page or NOCORE being set.
Certain applications which map large amounts of read-only data will
produce much larger cores. A new sysctl has been added,
debug.elf_legacy_coredump, which will revert to the old behavior.
This commit represents collaborative work by all parties involved.
The PR contains a program demonstrating the problem.
PR: kern/45994
Submitted by: "Peter Edwards" <pmedwards@eircom.net>, Archie Cobbs <archie@dellroad.org>
Reviewed by: jdp, dillon
MFC after: 7 days
2002-12-16 19:24:43 +00:00
Alan Cox
4b36fe0cbd
Perform vm_object_lock() and vm_object_unlock() on kmem_object
...
around vm_page_lookup() and vm_page_free().
2002-12-15 21:09:09 +00:00
Matthew Dillon
92da00bb24
This is David Schultz's swapoff code which I am finally able to commit.
...
This should be considered highly experimental for the moment.
Submitted by: David Schultz <dschultz@uclink.Berkeley.EDU>
MFC after: 3 weeks
2002-12-15 19:17:57 +00:00
Matthew Dillon
389d2b6e21
Fix a refcount race with the vmspace structure. In order to prevent
...
resource starvation we clean-up as much of the vmspace structure as we
can when the last process using it exits. The rest of the structure
is cleaned up when it is reaped. But since exit1() decrements the ref
count it is possible for a double-free to occur if someone else, such as
the process swapout code, references and then dereferences the structure.
Additionally, the final cleanup of the structure should not occur until
the last process referencing it is reaped.
This commit solves the problem by introducing a secondary reference count,
calling 'vm_exitingcnt'. The normal reference count is decremented on exit
and vm_exitingcnt is incremented. vm_exitingcnt is decremented when the
process is reaped. When both vm_exitingcnt and vm_refcnt are 0, the
structure is freed for real.
MFC after: 3 weeks
2002-12-15 18:50:04 +00:00
Alan Cox
2840cabe6a
As per the comments, vm_object_page_remove() now expects its caller to lock
...
the object (i.e., acquire Giant).
2002-12-15 07:30:51 +00:00
Alan Cox
5e83956af5
Perform vm_object_lock() and vm_object_unlock() around
...
vm_object_page_remove().
2002-12-15 07:16:51 +00:00
Alan Cox
475e8011ab
Perform vm_object_lock() and vm_object_unlock() around
...
vm_object_page_remove().
2002-12-15 05:41:56 +00:00
Alan Cox
495bedfbd0
Assert that the page queues lock is held in vm_page_unhold(),
...
vm_page_remove(), and vm_page_free_toq().
2002-12-15 00:06:02 +00:00
Alan Cox
bc105a6797
Hold the page queues lock when calling pmap_protect(); it updates fields
...
of the vm_page structure. Make the style of the pmap_protect() calls
consistent.
Approved by: re (blanket)
2002-12-01 18:57:56 +00:00
Alan Cox
38857e7f73
Hold the page queues lock when calling pmap_protect(); it updates fields
...
of the vm_page structure. Nearby, remove an unnecessary semicolon and
return statement.
Approved by: re (blanket)
2002-12-01 05:40:18 +00:00
Alan Cox
78f7187d01
Increase the scope of the page queue lock in vm_pageout_scan().
...
Approved by: re (blanket)
2002-12-01 00:02:39 +00:00
Alan Cox
e80b7b691e
Lock page field accesses in mincore().
...
Approved by: re (blanket)
2002-11-28 08:01:39 +00:00
Alan Cox
85e0124324
Hold the page queues lock when performing pmap_clear_modify().
...
Approved by: re (blanket)
2002-11-27 19:51:48 +00:00
Alan Cox
3a199de3d9
Hold the page queues lock while performing pmap_page_protect().
...
Approved by: re (blanket)
2002-11-27 08:03:24 +00:00
Alan Cox
85e03a7e1e
Acquire and release the page queues lock around calls to pmap_protect()
...
because it updates flags within the vm page.
Approved by: re (blanket)
2002-11-25 22:00:31 +00:00
Alan Cox
13dc71ed40
Extend the scope of the page queues/fields locking in vm_freeze_copyopts()
...
to cover pmap_remove_all().
Approved by: re
2002-11-24 06:13:38 +00:00
Alan Cox
178949e021
Hold the page queues/flags lock when calling vm_page_set_validclean().
...
Approved by: re
2002-11-23 19:10:31 +00:00
Alan Cox
ba0208b945
Assert that the page queues lock rather than Giant is held in
...
vm_pageout_page_free().
Approved by: re
2002-11-23 08:08:54 +00:00
Alan Cox
e8a27959f6
Add page queue and flag locking in vnode_pager_setsize().
...
Approved by: re
2002-11-23 03:58:35 +00:00
Jeff Roberson
855a310fcb
- Add an event that is triggered when the system is low on memory. This is
...
intended to be used by significant memory consumers so that they may drain
some of their caches.
Inspired by: phk
Approved by: re
Tested on: x86, alpha
2002-11-21 09:17:56 +00:00
Jeff Roberson
74c924b553
- Wakeup the correct address when a zone is no longer full.
...
Spotted by: jake
2002-11-18 08:27:14 +00:00
Alan Cox
a12cc0e489
Remove vm_page_protect(). Instead, use pmap_page_protect() directly.
2002-11-18 04:05:22 +00:00
Jeff Roberson
f3da1873bc
- Don't forget the flags value when using boot pages.
...
Reported by: grehan
2002-11-16 20:57:41 +00:00
Alan Cox
4fec79bef8
Now that pmap_remove_all() is exported by our pmap implementations
...
use it directly.
2002-11-16 07:44:25 +00:00
Alan Cox
81b9ee99e7
Remove dead code that hasn't been needed since the demise of share maps
...
in various revisions of vm/vm_map.c between 1.148 and 1.153.
2002-11-13 19:50:06 +00:00
Alan Cox
eea85e9bb6
Move pmap_collect() out of the machine-dependent code, rename it
...
to reflect its new location, and add page queue and flag locking.
Notes: (1) alpha, i386, and ia64 had identical implementations
of pmap_collect() in terms of machine-independent interfaces;
(2) sparc64 doesn't require it; (3) powerpc had it as a TODO.
2002-11-13 05:39:58 +00:00
Olivier Houchard
f64e99baa2
Remove extra #include<sys/vmmeter.h>.
2002-11-11 13:57:50 +00:00