summaryrefslogtreecommitdiff
path: root/sys/kern/kern_malloc.c
Commit message (Collapse)AuthorAgeFilesLines
* Change and clean the mutex lock interface.Bosko Milekic2001-02-091-12/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | mtx_enter(lock, type) becomes: mtx_lock(lock) for sleep locks (MTX_DEF-initialized locks) mtx_lock_spin(lock) for spin locks (MTX_SPIN-initialized) similarily, for releasing a lock, we now have: mtx_unlock(lock) for MTX_DEF and mtx_unlock_spin(lock) for MTX_SPIN. We change the caller interface for the two different types of locks because the semantics are entirely different for each case, and this makes it explicitly clear and, at the same time, it rids us of the extra `type' argument. The enter->lock and exit->unlock change has been made with the idea that we're "locking data" and not "entering locked code" in mind. Further, remove all additional "flags" previously passed to the lock acquire/release routines with the exception of two: MTX_QUIET and MTX_NOSWITCH The functionality of these flags is preserved and they can be passed to the lock/unlock routines by calling the corresponding wrappers: mtx_{lock, unlock}_flags(lock, flag(s)) and mtx_{lock, unlock}_spin_flags(lock, flag(s)) for MTX_DEF and MTX_SPIN locks, respectively. Re-inline some lock acq/rel code; in the sleep lock case, we only inline the _obtain_lock()s in order to ensure that the inlined code fits into a cache line. In the spin lock case, we inline recursion and actually only perform a function call if we need to spin. This change has been made with the idea that we generally tend to avoid spin locks and that also the spin locks that we do have and are heavily used (i.e. sched_lock) do recurse, and therefore in an effort to reduce function call overhead for some architectures (such as alpha), we inline recursion for this case. Create a new malloc type for the witness code and retire from using the M_DEV type. The new type is called M_WITNESS and is only declared if WITNESS is enabled. Begin cleaning up some machdep/mutex.h code - specifically updated the "optimized" inlined code in alpha/mutex.h and wrote MTX_LOCK_SPIN and MTX_UNLOCK_SPIN asm macros for the i386/mutex.h as we presently need those. Finally, caught up to the interface changes in all sys code. Contributors: jake, jhb, jasone (in no particular order) Notes: svn path=/head/; revision=72200
* Let M_PANIC go back to the private tree as its intention isn't understood wellBoris Popov2001-01-311-6/+2
| | | | | | | for now. Notes: svn path=/head/; revision=71859
* Add M_PANIC flag to the list of available flags passed to malloc().Boris Popov2001-01-291-2/+6
| | | | | | | | | | With this flag set malloc() will panic if memory allocation failed. This usable only in critical places where failed allocation is fatal. Reviewed by: peter Notes: svn path=/head/; revision=71799
* p->p_intr_nesting_level is MI now and initialized to 0 in kern_fork.c,Peter Wemm2001-01-271-1/+1
| | | | | | | | so it should be save to KASSERT() on it even on an arch that may not use it. Notes: svn path=/head/; revision=71707
* Don't grab Giant when calling kmem_alloc/kmem_free as this is justJohn Baldwin2001-01-241-4/+0
| | | | | | | | encouraging other people to follow the same practice. If this is going to be done, then it should be done inside of those two functions instead. Notes: svn path=/head/; revision=71501
* Make intr_nesting_level per-process, rather than per-cpu. SetupJake Burkholder2001-01-211-1/+2
| | | | | | | | | | | interrupt threads to run with it always >= 1, so that malloc can detect M_WAITOK from "interrupt" context. This is also necessary in order to context switch from sched_ithd() directly. Reviewed By: peter Notes: svn path=/head/; revision=71337
* Remove MUTEX_DECLARE() and MTX_COLD. Instead, postpone full mutexJason Evans2001-01-211-2/+2
| | | | | | | | | | | initialization until after malloc() is safe to call, then iterate through all mutexes and complete their initialization. This change is necessary in order to avoid some circular bootstrapping dependencies. Notes: svn path=/head/; revision=71320
* Use PCPU_GET, PCPU_PTR and PCPU_SET to access all per-cpu variablesJake Burkholder2001-01-101-1/+1
| | | | | | | other then curproc. Notes: svn path=/head/; revision=70861
* Introduce the M_ZERO flag to malloc(9)Poul-Henning Kamp2000-10-201-0/+3
| | | | | | | | | | | | | | | | | Instead of: foo = malloc(sizeof(foo), M_WAIT); bzero(foo, sizeof(foo)); You can now (and please do) use: foo = malloc(sizeof(foo), M_WAIT | M_ZERO); In the future this will enable us to do idle-time pre-zeroing of malloc-space. Notes: svn path=/head/; revision=67384
* - machine/mutex.h -> sys/mutex.hJohn Baldwin2000-10-201-4/+3
| | | | | | | - Use MUTEX_DECLARE() and MTX_COLD for the malloc_mtx mutex Notes: svn path=/head/; revision=67354
* Don't #include <sys/proc.h>, since machine/mutex.h does it now.Jason Evans2000-09-231-1/+1
| | | | Notes: svn path=/head/; revision=66281
* Remove the mtx_t, witness_t, and witness_blessed_t types. Instead, justJohn Baldwin2000-09-141-1/+1
| | | | | | | | | use struct mtx, struct witness, and struct witness_blessed. Requested by: bde Notes: svn path=/head/; revision=65856
* Add malloc_mtx to protect malloc and friends, so that they're thread-safe.Jason Evans2000-09-111-1/+30
| | | | | | | Reviewed by: peter Notes: svn path=/head/; revision=65710
* Back out the addition of malloc_mtx. It was incompletely conceived, andJason Evans2000-09-101-13/+0
| | | | | | | will be done correctly in the future. Notes: svn path=/head/; revision=65663
* Add a mutex to the malloc interfaces so that it can safely be calledJason Evans2000-09-091-0/+15
| | | | | | | without owning the Giant lock. Notes: svn path=/head/; revision=65649
* Move #ifdef to the right place.Boris Popov2000-06-291-1/+1
| | | | Notes: svn path=/head/; revision=62248
* If kernel compiled with INVARIANTS:Boris Popov2000-06-291-0/+24
| | | | | | | | | | | On unload, remove references from freelist to memory type defined by module. Print a warning if module defines and allocate its own memory type, but didn't free it all on unload. Reviewed by: peter Notes: svn path=/head/; revision=62231
* sys/malloc.h:Bruce Evans2000-06-141-14/+1
| | | | | | | | | | | | | | | Order the SYSINIT() for MALLOC_DEFINE() correctly so that malloc() doesn't have to waste time initializing itself. The (SI_SUB_KMEM, SI_ORDER_ANY) order was shared with syscons' SYSINIT() for scmeminit(), and scmeminit() calls malloc(), so malloc() initialization was not always complete on the first call to malloc(). kern/kern_malloc.c: - Removed self-initialization in malloc(). - Removed half-baked sanity check in free(). Trust MALLOC_DEFINE(). Notes: svn path=/head/; revision=61689
* Print "previous type" correctly when INVARIANTS is defined.Jun Kuriyama2000-03-141-1/+1
| | | | | | | Reviewed by: current@FreeBSD.org Notes: svn path=/head/; revision=58063
* Fix null-pointer dereference crash when the system is intentionallyMatthew Dillon2000-02-161-1/+2
| | | | | | | | | | | | | | | | | | | run out of KVM through a mmap()/fork() bomb that allocates hundreds of thousands of vm_map_entry structures. Add panic to make null-pointer dereference crash a little more verbose. Add a new sysctl, vm.max_proc_mmap, which specifies the maximum number of mmap()'d spaces (discrete vm_map_entry's in the process). The value defaults to around 9000 for a 128MB machine. The test is scaled for the number of processes sharing a vmspace (aka linux threads). Setting the value to 0 disables the feature. PR: kern/16573 Approved by: jkh Notes: svn path=/head/; revision=57263
* Fixed sign and overflow bugs that caused the allocation size of the kernelDavid Greenman2000-01-281-6/+12
| | | | | | | | | | | | | | | malloc region (kmem_map) to be wrong and semi-random on systems with more than 1GB of RAM. This is not a complete fix, but is sufficient for machines with 4GB or less of memory. A complete fix will require some changes to the getenv stuff so that 64bit values can be passed around. NOT FIXED: machines with more than 4GB of RAM (e.g. some large Alphas) since we're still using ints to hold some of the values. Reviewed by: bde Notes: svn path=/head/; revision=56720
* KAME netinet6 basic part(no IPsec,no V6 Multicast Forwarding, no UDP/TCPYoshinobu Inoue1999-11-221-2/+5
| | | | | | | | | | | | | for IPv6 yet) With this patch, you can assigne IPv6 addr automatically, and can reply to IPv6 ping. Reviewed by: freebsd-arch, cvs-committers Obtained from: KAME project Notes: svn path=/head/; revision=53541
* Before we start to mess with the VFS name-cache clean things up a little bit:Poul-Henning Kamp1999-10-031-1/+1
| | | | | | | Isolate the namecache in its own file, and give it a dedicated malloc type. Notes: svn path=/head/; revision=51906
* KASSERT that we cannot use M_WAITOK in interrupt context.Poul-Henning Kamp1999-09-191-0/+9
| | | | | | | Reviewed by: bde Notes: svn path=/head/; revision=51401
* Get rid of MALLOC_INSTANTIATE and MALLOC_MAKE_TYPE(). Just handle the 3Bruce Evans1999-09-111-1/+4
| | | | | | | malloc types declared in <sys/malloc.h> like other global malloc types. Notes: svn path=/head/; revision=51167
* $Id$ -> $FreeBSD$Peter Wemm1999-08-281-1/+1
| | | | Notes: svn path=/head/; revision=50477
* Move the initialisation/tuning of nmbclusters from param.c/machdep.cMike Smith1999-07-051-8/+7
| | | | | | | | | | | | | | | | | | into uipc_mbuf.c. This reduces three sets of identical tunable code to one set, and puts the initialisation with the mbuf code proper. Make NMBUFs tunable as well. Move the nmbclusters sysctl here as well. Move the initialisation of maxsockets from param.c to uipc_socket2.c, next to its corresponding sysctl. Use the new tunable macros for the kern.vm.kmem.size tunable (this should have been in a separate commit, whoops). Notes: svn path=/head/; revision=48579
* Fixed corruption of the kmemstatistcs list. The first malloc()Bruce Evans1999-05-121-5/+9
| | | | | | | | | | | | | | | with malloc type at the tail of the list changed the list from linear to circular. This seemed to cause surprisingly few problems, but it now causes weird output from `vmstat -m', probably because a more important malloc type is now at the tail of the list. Fix it by abusing ks_limit instead of ks_next as a flag for being on the list. Don't forget to clear the flag when a malloc type is uninit'ed. Uninit'ing is still fundamentally broken -- it loses history. Notes: svn path=/head/; revision=47067
* Add sufficient braces to keep egcs happy about potentially ambiguousPeter Wemm1999-05-061-2/+3
| | | | | | | if/else nesting. Notes: svn path=/head/; revision=46568
* Fix warnings in preparation for adding -Wall -Wcast-qual to theMatthew Dillon1999-01-271-3/+3
| | | | | | | kernel compile Notes: svn path=/head/; revision=43301
* Allow VM_KMEM_SIZE to be tuned from the kernel environment. This tuningMike Smith1999-01-211-1/+6
| | | | | | | value *completely* overrides any value precalculated by the kernel. Notes: svn path=/head/; revision=43012
* This is a rather large commit that encompasses the new swapper,Matthew Dillon1999-01-211-5/+31
| | | | | | | | | | | | | changes to the VM system to support the new swapper, VM bug fixes, several VM optimizations, and some additional revamping of the VM code. The specific bug fixes will be documented with additional forced commits. This commit is somewhat rough in regards to code cleanup issues. Reviewed by: "John S. Dyson" <root@dyson.iquest.net>, "David Greenman" <dg@root.com> Notes: svn path=/head/; revision=42957
* KNFize, by bde.Eivind Eklund1999-01-101-6/+5
| | | | Notes: svn path=/head/; revision=42453
* Split DIAGNOSTIC -> DIAGNOSTIC, INVARIANTS, and INVARIANT_SUPPORT asEivind Eklund1999-01-081-24/+19
| | | | | | | | | | | | discussed on -hackers. Introduce 'KASSERT(assertion, ("panic message", args))' for simple check + panic. Reviewed by: msmith Notes: svn path=/head/; revision=42408
* Have MALLOC_DECLARE() initialize malloc types explicitly, and have themPeter Wemm1998-11-101-6/+34
| | | | | | | | | | | removed at module unload (if in a module of course). However; this introduces a new dependency on <sys/kernel.h> for things that use MALLOC_DECLARE(). Bruce told me it is better to add sys/kernel.h to the handful of files that need it rather than add an extra include to sys/malloc.h for kernel compiles. Updates to follow in subsequent commits. Notes: svn path=/head/; revision=41054
* Nitpicking and dusting performed on a train. Removes trivial warningsPoul-Henning Kamp1998-10-251-3/+1
| | | | | | | about unused variables, labels and other lint. Notes: svn path=/head/; revision=40648
* Use [u]intptr_t instead of [u_]long for casts between pointers andBruce Evans1998-08-161-3/+3
| | | | | | | integers. Don't forget to cast to (void *) as well. Notes: svn path=/head/; revision=38354
* Fixed printf format errors.Bruce Evans1998-07-291-7/+8
| | | | Notes: svn path=/head/; revision=37951
* Reviewed by: dyson@freebsd.org (john Dyson), dg@root.com (david greenman)Julian Elischer1998-03-081-3/+3
| | | | | | | | Submitted by: Kirk McKusick (mcKusick@mckusick.com) Obtained from: WHistle development tree Notes: svn path=/head/; revision=34266
* Try to dynamically size the VM_KMEM_SIZE (but is still able to be overriddenJohn Dyson1998-02-231-10/+39
| | | | | | | | | | | in a way identically as before.) I had problems with the system properly handling the number of vnodes when there is alot of system memory, and the default VM_KMEM_SIZE. Two new options "VM_KMEM_SIZE_SCALE" and "VM_KMEM_SIZE_MAX" have been added to support better auto-sizing for systems with greater than 128MB. Notes: svn path=/head/; revision=33756
* Staticize.Eivind Eklund1998-02-091-2/+2
| | | | Notes: svn path=/head/; revision=33181
* Back out DIAGNOSTIC changes.Eivind Eklund1998-02-061-3/+1
| | | | Notes: svn path=/head/; revision=33134
* 1) Start using a cleaner and more consistant page allocator insteadJohn Dyson1998-02-051-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | of the various ad-hoc schemes. 2) When bringing in UPAGES, the pmap code needs to do another vm_page_lookup. 3) When appropriate, set the PG_A or PG_M bits a-priori to both avoid some processor errata, and to minimize redundant processor updating of page tables. 4) Modify pmap_protect so that it can only remove permissions (as it originally supported.) The additional capability is not needed. 5) Streamline read-only to read-write page mappings. 6) For pmap_copy_page, don't enable write mapping for source page. 7) Correct and clean-up pmap_incore. 8) Cluster initial kern_exec pagin. 9) Removal of some minor lint from kern_malloc. 10) Correct some ioopt code. 11) Remove some dead code from the MI swapout routine. 12) Correct vm_object_deallocate (to remove backing_object ref.) 13) Fix dead object handling, that had problems under heavy memory load. 14) Add minor vm_page_lookup improvements. 15) Some pages are not in objects, and make sure that the vm_page.c can properly support such pages. 16) Add some more page deficit handling. 17) Some minor code readability improvements. Notes: svn path=/head/; revision=33109
* Turn DIAGNOSTIC into a new-style option.Eivind Eklund1998-02-041-1/+3
| | | | Notes: svn path=/head/; revision=33108
* VM level code cleanups.John Dyson1998-01-221-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1) Start using TSM. Struct procs continue to point to upages structure, after being freed. Struct vmspace continues to point to pte object and kva space for kstack. u_map is now superfluous. 2) vm_map's don't need to be reference counted. They always exist either in the kernel or in a vmspace. The vmspaces are managed by reference counts. 3) Remove the "wired" vm_map nonsense. 4) No need to keep a cache of kernel stack kva's. 5) Get rid of strange looking ++var, and change to var++. 6) Change more data structures to use our "zone" allocator. Added struct proc, struct vmspace and struct vnode. This saves a significant amount of kva space and physical memory. Additionally, this enables TSM for the zone managed memory. 7) Keep ioopt disabled for now. 8) Remove the now bogus "single use" map concept. 9) Use generation counts or id's for data structures residing in TSM, where it allows us to avoid unneeded restart overhead during traversals, where blocking might occur. 10) Account better for memory deficits, so the pageout daemon will be able to make enough memory available (experimental.) 11) Fix some vnode locking problems. (From Tor, I think.) 12) Add a check in ufs_lookup, to avoid lots of unneeded calls to bcmp. (experimental.) 13) Significantly shrink, cleanup, and make slightly faster the vm_fault.c code. Use generation counts, get rid of unneded collpase operations, and clean up the cluster code. 14) Make vm_zone more suitable for TSM. This commit is partially as a result of discussions and contributions from other people, including DG, Tor Egge, PHK, and probably others that I have forgotten to attribute (so let me know, if I forgot.) This is not the infamous, final cleanup of the vnode stuff, but a necessary step. Vnode mgmt should be correct, but things might still change, and there is still some missing stuff (like ioopt, and physical backing of non-merged cache files, debugging of layering concepts.) Notes: svn path=/head/; revision=32702
* Some fixes from John Hood:John Dyson1997-12-051-1/+4
| | | | | | | | | | | 1) Fix the initialization of malloc structure that changed due to perf opt. 2) Remove unneeded include. 3) An initialization assert added to malloc. Submitted by: John Hood <cgull@smoke.marlboro.vt.us> Notes: svn path=/head/; revision=31549
* Remove the long description from the in-kernel datastructure.Poul-Henning Kamp1997-10-281-1/+4
| | | | | | | | Put a magic field in there instead, to help catch uninitialized malloc types. Notes: svn path=/head/; revision=30817
* Last major round (Unless Bruce thinks of somthing :-) of malloc changes.Poul-Henning Kamp1997-10-121-1/+3
| | | | | | | | | | | Distribute all but the most fundamental malloc types. This time I also remembered the trick to making things static: Put "static" in front of them. A couple of finer points by: bde Notes: svn path=/head/; revision=30354
* Freeing with unknown type is a panic kind of thing.Poul-Henning Kamp1997-10-111-2/+2
| | | | Notes: svn path=/head/; revision=30306
* Remove a debug printf entirely.Poul-Henning Kamp1997-10-111-4/+1
| | | | Notes: svn path=/head/; revision=30299