summaryrefslogtreecommitdiff
path: root/sys/uvm/uvm_km.c
AgeCommit message (Collapse)Author
2010-06-27doh! Use pmap_kenter/pmap_kremove in the backend page allocator to preventThordur I. Bjornsson
recursion in pmap_enter as seen on zaurus. ok art@ also, release a the uvm_km_page.mtx before calling uvm_km_kmemalloc as we can sleep there. ok oga@
2010-06-27uvm constraints. Add two mandatory MD symbols, uvm_md_constraintsThordur I. Bjornsson
which contains the constraints for DMA/memory allocation for each architecture, and dma_constraints which contains the range of addresses that are dma accessable by the system. This is based on ariane@'s physcontig diff, with lots of bugfixes and additions the following additions by my self: Introduce a new function pool_set_constraints() which sets the address range for which we allocate pages for the pool from, this is now used for the mbuf/mbuf cluster pools to keep them dma accessible. The !direct archs no longer stuff pages into the kernel object in uvm_km_getpage_pla but rather do a pmap_extract() in uvm_km_putpages. Tested heavily by my self on i386, amd64 and sparc64. Some tests on alpha and SGI. "commit it" beck, art, oga, deraadt "i like the diff" deraadt
2010-02-12introduce a uvm_km_valloc_try function that won't get a lower level lockTed Unangst
for use by the uvm pseg code. this is the path of least resistance until we sort out how many of these functions we really need. problem found by mikeb ok kettenis oga
2009-07-25Add an extra argument to uvm_unmap_remove(), for the caller to tell itMiod Vallat
whether removing holes or parts of them is allowed or not. Only allow hole removal in uvmspace_free(), when tearing the vmspace down. ok 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-17date based reversion of uvm to the 4th May.Owain Ainsworth
More backouts in line with previous ones, this appears to bring us back to a stable condition. 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-05-05Second step of PG_RELEASED cleanup.Owain Ainsworth
uvm_km deals with kernel memory which is either part of one of the kernel maps, or the main kernel object (a uao). If on km_pgremove we hit a busy page, just sleep on it, if so there's some async io (and that is unlikely). we can remove the check for uvm_km_alloc1() for a released page since now we will never end up with a removed but released page in the kernel map (due to the other chunk and the last diff). ok ariane@. Diff survived several make builds, on amd64 and sparc64, also forced paging with ariane's evil program.
2009-02-22On machines with less than 16MB of physical memory, reduce the lower boundMiod Vallat
of uvm_km_pages. ok deraadt@ tedu@
2009-02-11Remove uvm_km_alloc_poolpage1 as it serves no particular purposeMike Belopuhov
now and valid for __HAVE_PMAP_DIRECT archs only, though implements both code paths. Put it's code directly into the uvm_km_getpage for PMAP_DIRECT archs. No functional change. ok tedu, art
2008-10-23a better fix for the "uvm_km thread runs out of memory" problem.Ted Unangst
add a new arg to the backend so it can tell pool to slow down. when we get this flag, yield *after* putting the page in the pool's free list. whatever we do, don't let the thread sleep. this makes things better by still letting the thread run when a huge pf request comes in, but without artificially increasing pressure on the backend by eating pages without feeding them forward. ok deraadt
2008-06-14If we have one syscall that consumes large amounts of memory (like forArtur Grabowski
example an ioctl that loads bazillions of entries into a pf table) it would exhaust the pool of free pages and not let uvm_km_thread catch up until the pool was actually empty. This could be bad for non-sleeping allocators since they can't wait for the memory while the big hog can. Instead of letting the syscall exhaust the pool, detect when we fall below the low watermark, wake the thread, sleep once and let the thread catch up. This paces the huge consumer so that the more critical consumers never find an exhausted pool of pages. "seems reasonable" kettenis@
2007-12-15export kernel uvm_km_pages_free as vm.kmpagesfree; ok tedu, tested jsgTheo de Raadt
2007-12-11use a mutex for protection of the uvm_km list. ok artTed Unangst
2007-08-03Don't let pagedaemon wait for pages here. We could trigger this easilyArtur Grabowski
when we hit swap before actually fully populating the buffer cache which would lead to deadlocks. From pedro, tested by many, deraadt@ ok
2007-04-29Change the loop test in uvm_km_kmemalloc from '<' to '!='. EverythingArtur Grabowski
is aligned just fine and in case we allocate the last piece of the address space we don't want wrap-around to cause us to fail. pointed out by and ok miod@
2007-04-27Use the right size when we're backing out the allocation inArtur Grabowski
uvm_km_kmemalloc. "should probbaly go in" millert@, "I think it should too" deraadt@
2007-04-15One more voff_t in the right place.Artur Grabowski
miod@ ok
2007-04-15Use the right types for calculating the object offset.Artur Grabowski
miod@ ok
2007-04-15Clean up prototypes, change vm_map_t to struct vm_map *.Artur Grabowski
miod@ ok
2007-04-13While splitting flags and pqflags might have been a good idea in theoryArtur Grabowski
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@
2007-04-11Instead of managing pages for intrsafe maps in special objects (aka.Artur Grabowski
kmem_object) just so that we can remove them, just use pmap_extract to get the pages to free and simplify a lot of code to not deal with the list of intrsafe maps, intrsafe objects, etc. miod@ ok
2007-04-04Mechanically rename the "flags" and "version" fields in struct vm_pageArtur Grabowski
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")
2007-03-25remove KERN_SUCCESS and use 0 instead.Artur Grabowski
eyeballed by miod@ and pedro@
2006-11-29We don't use mb_map anymore since a long time already. Remove it.Miod Vallat
2006-11-29Add an alignment parameter to uvm_km_alloc1(), and change all callers toMiod Vallat
pass zero; this will be used shortly. From art@
2006-07-31fix uvmhist #2: args are always u_long so fix missing %d and %x and no %ll; ↵Michael Shalayeff
no change for normal code
2006-07-26fix fmts for UVMHIST_LOG() entries making it more useful on 64bit archs; ↵Michael Shalayeff
miod@ ok
2006-04-25limit pool backend preallocation to 2048 pages max (which only affects >2g ↵Michael Shalayeff
physmem); miod@ toby@ ok
2006-03-06deal w/ uvm_km_alloc() returning null; tedu@ okMichael Shalayeff
2005-10-06typoBrad Smith
2005-09-09typosPedro Martelletto
2005-05-24add a new field to vm_space and use it to track the number of anonTed Unangst
pages a process uses. this is now the userland "data size" value. ok art deraadt tdeval. thanks testers.
2004-12-30Import M_CANFAIL support from NetBSD, removes a nasty panic during low-mem ↵Niklas Hallqvist
scenarios, instead generating an ENOMEM backfeed, ok tedu@, prodded by many
2004-08-24change physmem divisor to 256. divide by page size was wrong. this doesTed Unangst
what i intended all along, without contrived arithmetic screw up. from discussions with mickey and deraadt
2004-08-24adapt uvm_km_pages_lowat to physmem. thanks testers. ok deraadt@Ted Unangst
2004-07-13#define __HAVE_PMAP_DIRECT and use it. requested by artTed Unangst
2004-06-09rename POOLPAGE macros to pmap_map_directTed Unangst
break out uvm_km_page bits for this case, no thread here lots of testing tech@, deraadt@, naddy@, mickey@, ...
2004-05-31explanatory comments for the uvm_km_page functions.Ted Unangst
2004-05-27change uvm_km_getpage to take waitok argument and sleep if appropriate.Ted Unangst
change both the nointr and default pool allocators to using uvm_km_getpage. change pools to default to a maxpages value of 8, so they hoard less memory. change mbuf pools to use default pool allocator. pools are now more efficient, use less of kmem_map, and a bit faster. tested mcbride, deraadt, pedro, drahn, miod to work everywhere
2004-04-28remove mb_object*; ok teduMarkus Friedl
2004-04-20set uvm_km_pages_lowat to 128; unbreaks mbuf allocation;Markus Friedl
tested by jmc, brad, hshoexer
2004-04-19introduce a new km_page allocator that gets pages from kernel_map usingTed Unangst
an interrupt safe thread. use this as the new backend for mbpool and mclpool, eliminating the mb_map. introduce a sysctl kern.maxclusters which controls the limit of clusters allocated. testing by many people, works everywhere but m68k. ok deraadt@ this essentially deprecates the NMBCLUSTERS option, don't use it. this should reduce pressure on the kmem_map and the uvm reserve of static map entries.
2004-02-23sync of pmap_update() calls with NetBSD. pmap_update is defined away onDale Rahn
all architectures but arm, where it is needed.
2002-10-29Since memory deallocation can't fail, remove the error return fromArtur Grabowski
uvm_unmap, uvm_deallocate and a few other functions. Simplifies some code and reduces diff to the UBC branch.
2002-09-12Change the PMAP_{MAP,UNMAP}_POOLPAGE api to take a vm_page as argumentArtur Grabowski
and return a VM_PAGE. This is to allow sparc64 to cheaply record the VAC color for those pages.
2002-05-30spelling errors; moritz@jodeit.orgTheo de Raadt
2002-04-25do not map memory for malloc w/ execute perms.Michael Shalayeff
this prevents i-cache preload on some archs, but does not hurt on others anyway. art looked all over all the pmaps, miod and mickey tested it on all possible archs, deraadt made a lesson out of it for the rest of the folks.
2002-04-22Uncommit. Since this came out of the blue, without anyone else havingTheo de Raadt
known of it; and since the commit message does not give the rest of us any feeling that this was tested by anyone, this is being removed. This is not an area where one commits because just art agrees. And that is what the commit message says.
2002-04-22do not map malloced memory executable (do avoid possible i-cache prefetch); ↵Michael Shalayeff
art@ ok