summaryrefslogtreecommitdiff
path: root/sys/uvm/uvm_aobj.c
AgeCommit message (Collapse)Author
2017-01-31Sprinkle some free sizes in uvm/David Hill
ok stefan@ visa@
2016-09-24use hashfree for aobj hashes. from Mathieu -Ted Unangst
ok guenther
2016-09-16move the vm_page struct from being stored in RB macro trees to RBT functionsDavid Gwynne
vm_page structs go into three trees, uvm_objtree, uvm_pmr_addr, and uvm_pmr_size. all these have been moved to RBT code. this should give us a decent chunk of code space back.
2016-09-15all pools have their ipl set via pool_setipl, so fold it into pool_init.David Gwynne
the ioff argument to pool_init() is unused and has been for many years, so this replaces it with an ipl argument. because the ipl will be set on init we no longer need pool_setipl. most of these changes have been done with coccinelle using the spatch below. cocci sucks at formatting code though, so i fixed that by hand. the manpage and subr_pool.c bits i did myself. ok tedu@ jmatthew@ @ipl@ expression pp; expression ipl; expression s, a, o, f, m, p; @@ -pool_init(pp, s, a, o, f, m, p); -pool_setipl(pp, ipl); +pool_init(pp, s, a, ipl, f, m, p);
2016-06-17pool_setipl on all uvm pools.David Gwynne
ok kettenis@ visa@
2015-08-21Remove the unused loan_count field and the related uvm logic. Most ofVisa Hankala
the page loaning code is already in the Attic. ok kettenis@, beck@
2015-05-07fix indentationJonathan Gray
ok miod@
2015-02-08Something is subtly wrong with this. On ramdisks, processes run out ofTheo de Raadt
mappable memory (direct or via execve), perhaps because of the address allocator behind maps and the way wiring counts work?
2015-02-06Clear PQ_AOBJ before calling uvm_pagefree(), clearing up one false XXXTheo de Raadt
comment (one is fixed, one is deleted). ok kettenis beck
2014-12-23convert pool_init nointr to waitokTed Unangst
2014-12-18remove two useless and unused hash penalty definesTed Unangst
2014-12-17remove lock.h from uvm_extern.h. another holdover from the simpletonlockTed Unangst
era. fix uvm including c files to include lock.h or atomic.h as necessary. ok deraadt
2014-12-09Sprinkle in a little more mallocarray().Doug Hogan
ok deraadt@ tedu@
2014-11-21somebody permitted simple_locks back into uvm. they will be referred toTed Unangst
the bureau of party loyalty for reeducation.
2014-11-18Nuke yet more obvious #include duplications.Kenneth R Westerback
ok miod@
2014-11-16Replace a plethora of historical protection options with justTheo de Raadt
PROT_NONE, PROT_READ, PROT_WRITE, and PROT_EXEC from mman.h. PROT_MASK is introduced as the one true way of extracting those bits. Remove UVM_ADV_* wrapper, using the standard names. ok doug guenther kettenis
2014-09-14remove uneeded proc.h includesJonathan Gray
ok mpi@ kspillner@
2014-09-08Don't sleep on allocation of hash table entries. Should fix crashes peopleMark Kettenis
have been seeing with tmpfs. Based on a similar fix from Bitrig by Owain Ainsworth. ok jsg@
2014-07-12add a size argument to free. will be used soon, but for now default to 0.Ted Unangst
after discussions with beck deraadt kettenis.
2014-07-11Chuck Cranor rescinded clauses in his licenseJonathan Gray
on the 2nd of February 2011 in NetBSD. http://marc.info/?l=netbsd-source-changes&m=129658899212732&w=2 http://marc.info/?l=netbsd-source-changes&m=129659095515558&w=2 http://marc.info/?l=netbsd-source-changes&m=129659157916514&w=2 http://marc.info/?l=netbsd-source-changes&m=129665962324372&w=2 http://marc.info/?l=netbsd-source-changes&m=129666033625342&w=2 http://marc.info/?l=netbsd-source-changes&m=129666052825545&w=2 http://marc.info/?l=netbsd-source-changes&m=129666922906480&w=2 http://marc.info/?l=netbsd-source-changes&m=129667725518082&w=2
2014-07-03It is important that we don't release the kernel lock between issuing aMark Kettenis
wakeup and clearing the PG_BUSY and PG_WANTED flags, so try to keep those bits as close together and defenitely avoid calling random code in between. ok guenther@, tedu@
2014-05-08Fix some potential integer overflows caused by converting a page number intoMark Kettenis
an offset/size/address by shifting by PAGE_SHIFT. Make uvm_objwrire/unwire use voff_t instead of off_t. The former is the right type here even if it is equivalent to the latter. Inspired by a somewhat similar changes in Bitrig. ok deraadt@, guenther@
2014-04-30Make sure we flush discarded pages even if the number of hash buckets doesn'tMark Kettenis
change. From Pedro Martelletto via bitrig. ok beck@, krw@
2014-04-30Assigning list pointers doesn't really work with doubly linked lists. UseMark Kettenis
a remove-and-insert-all-items approach for now and remove the comments that suggest manipulating list pointers. Pointed out by Pedro Martelletto. ok beck@, krw@, mikeb@
2014-04-13compress code by turning four line comments into one line comments.Ted Unangst
emphatic ok usual suspects, grudging ok miod
2013-12-09forgot to say: aobj grow/shrink tweaks are mostly from Pedro Martelletto,Marc Espie
like the rest of tmpfs
2013-12-08allow aobj to shrink grow, for tmpfs supportMarc Espie
A few tweaks asked by kettenis@ (code doesn't affect systems without mounted tmpfs at all) okay beck@
2013-05-30UVM_UNLOCK_AND_WAIT no longer unlocks, so rename it to UVM_WAIT.Ted Unangst
2013-05-30remove lots of comments about locking per beck's requestTed Unangst
2013-05-30remove simple_locks from uvm code. ok beck deraadtTed Unangst
2012-04-12Remove dead UBC codeAriane van der Steldt
2011-07-03Rip out and burn support for UVM_HIST.Owain Ainsworth
The vm hackers don't use it, don't maintain it and have to look at it all the time. About time this 800 lines of code hit /dev/null. ``never liked it'' tedu@. ariane@ was very happy when i told her i wrote this diff.
2011-05-10Don't leak swapslots when doing a uvm_km_pgremove and a page is in swap only.Owain Ainsworth
Before we were only calling uao_dropswap() if there was a page, maning that if the buffer was swapped out then we would leak the slot. Quite rare because only pipebuffers should swap from the kernel object, but i've seen panics that implied this had happened (alpha.p for example). ok thib@ after a lot of discussion and checking the semantics.
2011-05-07Uvm Anonymous Objects depending on size either use an array or aOwain Ainsworth
hashtable to keep the list of swap slots in use in. Only one of these will be in use at any one tmie, so shave some bytes and make it a union. ok thib@
2010-07-02fix corrupt UVMHIST_LOGTakuya ASADA
2010-04-30Right now, if anything internal changes with a uvm object, diverseOwain Ainsworth
places in the tree need to be touched to update the object initialisation with respect to that. So, make a function (uvm_initobj) that takes the refcount, object and pager ops and does this initialisation for us. This should save on maintainance in the future. looked good to fgs@. Tedu complained about the British spelling but OKed it anyway.
2010-04-30Prevent a possible case of lock recursion in swapoff.Owain Ainsworth
If when we have successfully swapped an aobj back in, then we release our reference count, and that reference is the last reference, we will free the the aobj and recursively lock the list lock. Fix this by keeping track of the last object we had a reference on, and releasing the refcount the next time we unlock the list lock. Put a couple of comments in explaining lock ordering in this file. noticed by, discussed with and ok guenther@.
2010-04-25Switch uao_list_lock protecting the uao list (for create, destroy andOwain Ainsworth
most importantly swapoff) over to a mutex. No idea how many times i've written this diff in the past. ok deraadt@
2009-08-06reintroduce the uvm_tree commit.Owain Ainsworth
Now instead of the global object hashtable, we have a per object tree. Testing shows no performance difference and a slight code shrink. OTOH when locking is more fine grained this should be faster due to lock contention on uvm.hashlock. ok thib@, art@.
2009-07-22Put the PG_RELEASED changes diff back in.Owain Ainsworth
This has has been tested very very thoroughly on all archs we have excepting 88k and 68k. Please see cvs log for the individual commit messages. ok beck@, thib@
2009-06-16date based reversion of uvm to the 4th May.Owain Ainsworth
We still have no idea why this stops the crashes. but it does. a machine forced to 64mb of ram cycled 10GB through swap with this diff and is still running as I type this. Other tests by ariane@ and thib@ also seem to show that it's alright. ok deraadt@, thib@, ariane@
2009-06-16Backout all the PG_RELEASED changes.Owain Ainsworth
This is for the same reason as the earlier backouts, to avoid the bug either added or exposed sometime around c2k9. This *should* be the last one. prompted by deraadt@ ok ariane@
2009-06-16Backout all changes to uvm after pmemrange (which will be backed outOwain Ainsworth
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@.
2009-06-06Since all callers of uvm_pagedeactivate did pmap_page_protect(.., VM_PROT_NONE)Artur Grabowski
just move that into uvm_pagedeactivate. oga@ ok
2009-06-02Instead of the global hash table with the terrible hashfunction and aOwain Ainsworth
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.
2009-06-01Since we've now cleared up a lot of the PG_RELEASED setting, remove theOwain Ainsworth
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@
2009-05-08Remove static qualifier of functions that are not inline.Ariane van der Steldt
Makes trace in ddb useful. ok oga
2009-05-05The first step in cleaning up the use of PG_RELEASED for uvm objects.Owain Ainsworth
Now, the PG_ RELEASED flag currently has two (maybe three) uses. The valid one is for use with async io where we want to free the page after we've paged it out. The other ones are "oh i'd like to free this, but someone else is playing with it". It's simpler to just sleep on the damned page instead and stop the fiddling. First step does uao's: in uao_detach, sleep on the object and free it when we're clean, instead of setting a flag so it's freed after. In uao_flush, do the same. Change the interation over the object in flush so that we don't have to add marker pages or other such voodoo to the list when we sleep (netbsd did that when they had a similar diff), just use the hash always. We can now change uao_releasepg() to just free the page, and not bother with the KILLME stuff. When the other objects are fixed this hook will vanish. Much discussion with art@ over the idea, and ariane@ over this specific diff. As mentioned, this one is based loosely on a similar idea in netbsd. Been in my tree for a while, survived many make builds, etc, and forcing paging using ariane's evil program. ok ariane@, beck@.
2009-05-02a few more memset changes.Owain Ainsworth
two cases of pool_get() + memset(0) -> pool_get(,,,PR_ZERO) 1.5 cases of global variables are already zeroed, so don't zero them. ok ariane@, comments on stuff i'd missed from blambert@ and cnst@.
2009-03-20While working on some stuff in uvm I've gotten REALLY sick of readingOwain Ainsworth
K&R function declarations, so switch them all over to ansi-style, in accordance with the prophesy. "go for it" art@