| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
separately).
a change at or just before the hackathon has either exposed or added a
very very nasty memory corruption bug that is giving us hell right now.
So in the interest of kernel stability these diffs are being backed out
until such a time as that corruption bug has been found and squashed,
then the ones that are proven good may slowly return.
a quick hitlist of the main commits this backs out:
mine:
uvm_objwire
the lock change in uvm_swap.c
using trees for uvm objects instead of the hash
removing the pgo_releasepg callback.
art@'s:
putting pmap_page_protect(VM_PROT_NONE) in uvm_pagedeactivate() since
all callers called that just prior anyway.
ok beck@, ariane@.
prompted by deraadt@.
|
|
|
|
|
|
| |
just move that into uvm_pagedeactivate.
oga@ ok
|
|
|
|
|
|
|
|
|
| |
global lock, switch the uvm object pages to being kept in a per-object
RB_TREE. Right now this is approximately the same speed, but cleaner.
When biglock usage is reduced this will improve concurrency due to lock
contention..
ok beck@ art@. Thanks to jasper for the speed testing.
|
|
|
|
|
|
|
|
| |
pgo_releasepg() hook and just free the page the "normal" way in the one
place we'll ever see PG_RELEASED and should care (uvm_page_unbusy,
called in aiodoned).
ok art@, beck@, thib@
|
|
|
|
|
|
|
|
|
| |
to free ranges.
Classify memory based on region with associated use-counter (which is used
to construct a priority list of where to allocate memory).
Based on code from tedu@, help from many.
Ok art@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
similar to the aobj.c changes, this one does vnodes. Vnodes are more
complex because they actaully have to sync to backing store. So firstly,
convert sync to sleep instead of setting released.
Now, for backing store, in the PGO_FREE case, if we set PG_RELEASED
*before* an async io, (nothing else will see it, the page is busy), then
we can ignore the page after the io is done. We could do something
similar for PGO_DEACTIVATE too, but that is another change. On error we
just clear the released flag, nothing else sets it for uobj pages other
than aiodoned.
ok thib@, beck@, ariane@
|
|
|
|
| |
addresses is another diff.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
fraction of the wakeups and sleeps involved here actually grab that
lock. The remainder, on the other hand, always have the fpageq_lock
locked.
So, make this locking correct by switching the other users over to
fpageq_lock, too.
This would probably be better off being a semaphore, but for now at
least it's correct.
"ok, unless you want to implement semaphores" art@
|
|
|
|
|
|
|
|
| |
Fix up the one case of lock recursion (which blatantly ignored the
comment right above it saying that we don't need to lock). The rest of
the lock usage has been checked and appears to be correct.
ok ariane@.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
while there's io pending (async io makes that possible, but not often
hit), then we'll be waiting for the pgo_releasepg hook to free the
object when all of our pages disappear.
However, uvn_releasepg, while it does everything else that unreferencing
the object would do, it neglects to do the final vrele() on the vnode.
So in this rare situation we'd end up with the vnode waiting around
until it was forcibly recycled. Fix this by adding in the missing vrele().
ok thib@
|
|
|
|
|
|
|
| |
K&R function declarations, so switch them all over to ansi-style, in
accordance with the prophesy.
"go for it" art@
|
|
|
|
| |
no ok's from anyone because they are all slacking
|
|
|
|
|
|
|
|
| |
vnode locking actually works, just check the VLOCKSWORK
flag. Also, change this ifdef DEBUG to VFSDEBUG since
VLOCKSWORK is only ever set if VFSDEBUG is defined.
ok/input miod@, art@ (earlier diff)
|
|
|
|
|
|
| |
some comment cleanup and a touch of KNF.
ok art@
|
|
|
|
|
| |
to size. tested on almost all machines, double checked by miod and krw
next comes the type handling surrounding these values
|
|
|
|
| |
ok art@
|
|
|
|
| |
ok beck miod pedro thib
|
|
|
|
|
|
|
|
|
|
|
|
| |
to separate locking, on most modern machines this is not enough
since operations on short types touch other short types that share the
same word in memory.
Merge pg_flags and pqflags again and now use atomic operations to change
the flags. Also bump wire_count to an int and pg_version might go
int as well, just for alignment.
tested by many, many. ok miod@
|
|
|
|
|
|
|
|
|
|
| |
to "pg_flags" and "pg_version", so that they are a bit easier to work with.
Whoever uses generic names like this for a popular struct obviously doesn't
read much code.
Most architectures compile and there are no functionality changes.
deraadt@ ok ("if something fails to compile, we fix that by hand")
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
of panics and bugfixes. Access curproc directly, do not expect a process
pointer as an argument. Should fix many "process context required" bugs.
Incentive and okay millert@, okay marc@. Various testing, thanks.
|
|
|
|
| |
no change in compiler assembly output.
|
| |
|
|
|
|
| |
ok deraadt@
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
machines or some configurations or in some phase of the moon (we actually
don't know when or why) files disappeared. Since we've not been able to
track down the problem in two weeks intense debugging and we need -current
to be stable, back out everything to a state it had before UBC.
We apologise for the inconvenience.
|
| |
|
|
|
|
|
|
|
|
|
| |
so that we can get back the old behavior where a vnode with cached data
is less likely to be recycled than a vnode without cached data.
XXX - This is a brute-force solution - we do it where uvmexp.vnodepages
are changed, I am not really sure it is correct but people have been
very happy with the diff so far and want this in the tree.
|
|
|
|
|
|
| |
Today we add a pmap argument to pmap_update() and allocate map entries for
kernel_map from kmem_map instead of using the static entries. This should
get rid of MAX_KMAPENT panics. Also some uvm_loan problems are fixed.
|
|
|
|
|
| |
Note that VOP_PUTPAGES has the same problems, but the fix will be more
complicated.
|
|
|
|
| |
Contains also support for page coloring.
|
|
|
|
|
| |
This time we're getting rid of KERN_* and VM_PAGER_* error codes and
use errnos instead.
|
|
|
|
|
|
|
| |
code is written mostly by Chuck Silvers <chuq@chuq.com>/<chs@netbsd.org>.
Tested for the past few weeks by many developers, should be in a pretty stable
state, but will require optimizations and additional cleanups.
|
|
|
|
|
|
|
|
|
|
| |
UBC, but prerequsites for it.
- Create a daemon that processes async I/O (swap and paging in the future)
requests that need processing in process context and that were processed
in the pagedaemon before.
- Convert some ugly ifdef DIAGNOSTIC code to less intrusive KASSERTs.
- misc other cleanups.
|
| |
|
|
|
|
|
|
|
| |
The only thing left in vm/ are just dumb wrappers.
vm/vm.h includes uvm/uvm_extern.h
vm/pmap.h includes uvm/uvm_pmap.h
vm/vm_page.h includes uvm/uvm_page.h
|
| |
|
| |
|
| |
|
|
|
|
| |
Including support for zeroing pages in the idle loop (not enabled yet).
|
|
|
|
|
|
|
|
| |
into objects.
Gives the possibilty to mmap beyond the size of vaddr_t.
From NetBSD.
|
| |
|
|
|
|
| |
From NetBSD.
|
|
|
|
|
| |
The archs that didn't have a proper PMAP_NEW now have a dummy implementation
with wrappers around the old functions.
|