[BACK]Return to uvm_extern.h CVS log [TXT][DIR] Up to [local] / sys / uvm

Annotation of sys/uvm/uvm_extern.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: uvm_extern.h,v 1.66 2007/05/27 20:59:26 miod Exp $    */
                      2: /*     $NetBSD: uvm_extern.h,v 1.57 2001/03/09 01:02:12 chs Exp $      */
                      3:
                      4: /*
                      5:  *
                      6:  * Copyright (c) 1997 Charles D. Cranor and Washington University.
                      7:  * All rights reserved.
                      8:  *
                      9:  * Redistribution and use in source and binary forms, with or without
                     10:  * modification, are permitted provided that the following conditions
                     11:  * are met:
                     12:  * 1. Redistributions of source code must retain the above copyright
                     13:  *    notice, this list of conditions and the following disclaimer.
                     14:  * 2. Redistributions in binary form must reproduce the above copyright
                     15:  *    notice, this list of conditions and the following disclaimer in the
                     16:  *    documentation and/or other materials provided with the distribution.
                     17:  * 3. All advertising materials mentioning features or use of this software
                     18:  *    must display the following acknowledgement:
                     19:  *      This product includes software developed by Charles D. Cranor and
                     20:  *      Washington University.
                     21:  * 4. The name of the author may not be used to endorse or promote products
                     22:  *    derived from this software without specific prior written permission.
                     23:  *
                     24:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     25:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     26:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     27:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     28:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     29:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     30:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     31:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     32:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     33:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     34:  *
                     35:  * from: Id: uvm_extern.h,v 1.1.2.21 1998/02/07 01:16:53 chs Exp
                     36:  */
                     37:
                     38: /*-
                     39:  * Copyright (c) 1991, 1992, 1993
                     40:  *     The Regents of the University of California.  All rights reserved.
                     41:  *
                     42:  * Redistribution and use in source and binary forms, with or without
                     43:  * modification, are permitted provided that the following conditions
                     44:  * are met:
                     45:  * 1. Redistributions of source code must retain the above copyright
                     46:  *    notice, this list of conditions and the following disclaimer.
                     47:  * 2. Redistributions in binary form must reproduce the above copyright
                     48:  *    notice, this list of conditions and the following disclaimer in the
                     49:  *    documentation and/or other materials provided with the distribution.
                     50:  * 3. Neither the name of the University nor the names of its contributors
                     51:  *    may be used to endorse or promote products derived from this software
                     52:  *    without specific prior written permission.
                     53:  *
                     54:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     55:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     56:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     57:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     58:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     59:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     60:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     61:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     62:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     63:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     64:  * SUCH DAMAGE.
                     65:  *
                     66:  *     @(#)vm_extern.h 8.5 (Berkeley) 5/3/95
                     67:  */
                     68:
                     69: #ifndef _UVM_UVM_EXTERN_H_
                     70: #define _UVM_UVM_EXTERN_H_
                     71:
                     72: /*
                     73:  * uvm_extern.h: this file defines the external interface to the VM system.
                     74:  *
                     75:  * this should be the only file included by non-VM parts of the kernel
                     76:  * which need access to VM services.   if you want to know the interface
                     77:  * to the MI VM layer without knowing the details, this is the file to
                     78:  * learn.
                     79:  *
                     80:  * NOTE: vm system calls are prototyped in syscallargs.h
                     81:  */
                     82:
                     83: /*
                     84:  * typedefs, necessary for standard UVM headers.
                     85:  */
                     86:
                     87: typedef unsigned int  uvm_flag_t;
                     88: typedef int vm_fault_t;
                     89:
                     90: typedef int vm_inherit_t;      /* XXX: inheritance codes */
                     91: typedef off_t voff_t;          /* XXX: offset within a uvm_object */
                     92:
                     93: union vm_map_object;
                     94: typedef union vm_map_object vm_map_object_t;
                     95:
                     96: struct vm_map_entry;
                     97: typedef struct vm_map_entry *vm_map_entry_t;
                     98:
                     99: struct vm_map;
                    100: typedef struct vm_map *vm_map_t;
                    101:
                    102: struct vm_page;
                    103: typedef struct vm_page  *vm_page_t;
                    104:
                    105: /*
                    106:  * defines
                    107:  */
                    108:
                    109: /*
                    110:  * the following defines are for uvm_map and functions which call it.
                    111:  */
                    112:
                    113: /* protections bits */
                    114: #define UVM_PROT_MASK  0x07    /* protection mask */
                    115: #define UVM_PROT_NONE  0x00    /* protection none */
                    116: #define UVM_PROT_ALL   0x07    /* everything */
                    117: #define UVM_PROT_READ  0x01    /* read */
                    118: #define UVM_PROT_WRITE  0x02   /* write */
                    119: #define UVM_PROT_EXEC  0x04    /* exec */
                    120:
                    121: /* protection short codes */
                    122: #define UVM_PROT_R     0x01    /* read */
                    123: #define UVM_PROT_W     0x02    /* write */
                    124: #define UVM_PROT_RW    0x03    /* read-write */
                    125: #define UVM_PROT_X     0x04    /* exec */
                    126: #define UVM_PROT_RX    0x05    /* read-exec */
                    127: #define UVM_PROT_WX    0x06    /* write-exec */
                    128: #define UVM_PROT_RWX   0x07    /* read-write-exec */
                    129:
                    130: /* 0x08: not used */
                    131:
                    132: /* inherit codes */
                    133: #define UVM_INH_MASK   0x30    /* inherit mask */
                    134: #define UVM_INH_SHARE  0x00    /* "share" */
                    135: #define UVM_INH_COPY   0x10    /* "copy" */
                    136: #define UVM_INH_NONE   0x20    /* "none" */
                    137: #define UVM_INH_DONATE 0x30    /* "donate" << not used */
                    138:
                    139: /* 0x40, 0x80: not used */
                    140:
                    141: /* bits 0x700: max protection, 0x800: not used */
                    142:
                    143: /* bits 0x7000: advice, 0x8000: not used */
                    144:
                    145: typedef int            vm_prot_t;
                    146:
                    147: /*
                    148:  *     Protection values, defined as bits within the vm_prot_t type
                    149:  *
                    150:  *   These are funky definitions from old CMU VM and are kept
                    151:  *   for compatibility reasons, one day they are going to die,
                    152:  *   just like everybody else.
                    153:  */
                    154:
                    155: #define        VM_PROT_NONE    ((vm_prot_t) 0x00)
                    156:
                    157: #define VM_PROT_READ   ((vm_prot_t) 0x01)      /* read permission */
                    158: #define VM_PROT_WRITE  ((vm_prot_t) 0x02)      /* write permission */
                    159: #define VM_PROT_EXECUTE        ((vm_prot_t) 0x04)      /* execute permission */
                    160:
                    161: /*
                    162:  *     The default protection for newly-created virtual memory
                    163:  */
                    164:
                    165: #define VM_PROT_DEFAULT        (VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE)
                    166:
                    167: /*
                    168:  *     The maximum privileges possible, for parameter checking.
                    169:  */
                    170:
                    171: #define VM_PROT_ALL    (VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE)
                    172:
                    173: /* advice: matches MADV_* from sys/mman.h */
                    174: #define UVM_ADV_NORMAL 0x0     /* 'normal' */
                    175: #define UVM_ADV_RANDOM 0x1     /* 'random' */
                    176: #define UVM_ADV_SEQUENTIAL 0x2 /* 'sequential' */
                    177: /* 0x3: will need, 0x4: dontneed */
                    178: #define UVM_ADV_MASK   0x7     /* mask */
                    179:
                    180: /* mapping flags */
                    181: #define UVM_FLAG_FIXED   0x010000 /* find space */
                    182: #define UVM_FLAG_OVERLAY 0x020000 /* establish overlay */
                    183: #define UVM_FLAG_NOMERGE 0x040000 /* don't merge map entries */
                    184: #define UVM_FLAG_COPYONW 0x080000 /* set copy_on_write flag */
                    185: #define UVM_FLAG_AMAPPAD 0x100000 /* for bss: pad amap to reduce malloc() */
                    186: #define UVM_FLAG_TRYLOCK 0x200000 /* fail if we can not lock map */
                    187:
                    188: /* macros to extract info */
                    189: #define UVM_PROTECTION(X)      ((X) & UVM_PROT_MASK)
                    190: #define UVM_INHERIT(X)         (((X) & UVM_INH_MASK) >> 4)
                    191: #define UVM_MAXPROTECTION(X)   (((X) >> 8) & UVM_PROT_MASK)
                    192: #define UVM_ADVICE(X)          (((X) >> 12) & UVM_ADV_MASK)
                    193:
                    194: #define UVM_MAPFLAG(PROT,MAXPROT,INH,ADVICE,FLAGS) \
                    195:        ((MAXPROT << 8)|(PROT)|(INH)|((ADVICE) << 12)|(FLAGS))
                    196:
                    197: /* magic offset value */
                    198: #define UVM_UNKNOWN_OFFSET ((voff_t) -1)
                    199:                                /* offset not known(obj) or don't care(!obj) */
                    200:
                    201: /*
                    202:  * the following defines are for uvm_km_kmemalloc's flags
                    203:  */
                    204: #define UVM_KMF_NOWAIT 0x1                     /* matches M_NOWAIT */
                    205: #define UVM_KMF_VALLOC 0x2                     /* allocate VA only */
                    206: #define UVM_KMF_CANFAIL        0x4                     /* caller handles failure */
                    207: #define UVM_KMF_TRYLOCK        UVM_FLAG_TRYLOCK        /* try locking only */
                    208:
                    209: /*
                    210:  * the following defines the strategies for uvm_pagealloc_strat()
                    211:  */
                    212: #define        UVM_PGA_STRAT_NORMAL    0       /* high -> low free list walk */
                    213: #define        UVM_PGA_STRAT_ONLY      1       /* only specified free list */
                    214: #define        UVM_PGA_STRAT_FALLBACK  2       /* ONLY falls back on NORMAL */
                    215:
                    216: /*
                    217:  * flags for uvm_pagealloc_strat()
                    218:  */
                    219: #define UVM_PGA_USERESERVE     0x0001  /* ok to use reserve pages */
                    220: #define        UVM_PGA_ZERO            0x0002  /* returned page must be zeroed */
                    221:
                    222: /*
                    223:  * lockflags that control the locking behavior of various functions.
                    224:  */
                    225: #define        UVM_LK_ENTER    0x00000001      /* map locked on entry */
                    226: #define        UVM_LK_EXIT     0x00000002      /* leave map locked on exit */
                    227:
                    228: /*
                    229:  * structures
                    230:  */
                    231:
                    232: struct buf;
                    233: struct core;
                    234: struct mount;
                    235: struct pglist;
                    236: struct proc;
                    237: struct ucred;
                    238: struct uio;
                    239: struct uvm_object;
                    240: struct vm_anon;
                    241: struct vm_aref;
                    242: struct vm_map;
                    243: struct vmspace;
                    244: struct pmap;
                    245: struct vnode;
                    246: struct pool;
                    247: struct simplelock;
                    248:
                    249: extern struct pool *uvm_aiobuf_pool;
                    250:
                    251: /*
                    252:  * uvmexp: global data structures that are exported to parts of the kernel
                    253:  * other than the vm system.
                    254:  */
                    255:
                    256: struct uvmexp {
                    257:        /* vm_page constants */
                    258:        int pagesize;   /* size of a page (PAGE_SIZE): must be power of 2 */
                    259:        int pagemask;   /* page mask */
                    260:        int pageshift;  /* page shift */
                    261:
                    262:        /* vm_page counters */
                    263:        int npages;     /* number of pages we manage */
                    264:        int free;       /* number of free pages */
                    265:        int active;     /* number of active pages */
                    266:        int inactive;   /* number of pages that we free'd but may want back */
                    267:        int paging;     /* number of pages in the process of being paged out */
                    268:        int wired;      /* number of wired pages */
                    269:
                    270:        int zeropages;          /* number of zero'd pages */
                    271:        int reserve_pagedaemon; /* number of pages reserved for pagedaemon */
                    272:        int reserve_kernel;     /* number of pages reserved for kernel */
                    273:        int anonpages;          /* number of pages used by anon pagers */
                    274:        int vnodepages;         /* number of pages used by vnode page cache */
                    275:        int vtextpages;         /* number of pages used by vtext vnodes */
                    276:
                    277:        /* pageout params */
                    278:        int freemin;    /* min number of free pages */
                    279:        int freetarg;   /* target number of free pages */
                    280:        int inactarg;   /* target number of inactive pages */
                    281:        int wiredmax;   /* max number of wired pages */
                    282:        int anonmin;    /* min threshold for anon pages */
                    283:        int vtextmin;   /* min threshold for vtext pages */
                    284:        int vnodemin;   /* min threshold for vnode pages */
                    285:        int anonminpct; /* min percent anon pages */
                    286:        int vtextminpct;/* min percent vtext pages */
                    287:        int vnodeminpct;/* min percent vnode pages */
                    288:
                    289:        /* swap */
                    290:        int nswapdev;   /* number of configured swap devices in system */
                    291:        int swpages;    /* number of PAGE_SIZE'ed swap pages */
                    292:        int swpginuse;  /* number of swap pages in use */
                    293:        int swpgonly;   /* number of swap pages in use, not also in RAM */
                    294:        int nswget;     /* number of times fault calls uvm_swap_get() */
                    295:        int nanon;      /* number total of anon's in system */
                    296:        int nanonneeded;/* number of anons currently needed */
                    297:        int nfreeanon;  /* number of free anon's */
                    298:
                    299:        /* stat counters */
                    300:        int faults;             /* page fault count */
                    301:        int traps;              /* trap count */
                    302:        int intrs;              /* interrupt count */
                    303:        int swtch;              /* context switch count */
                    304:        int softs;              /* software interrupt count */
                    305:        int syscalls;           /* system calls */
                    306:        int pageins;            /* pagein operation count */
                    307:                                /* pageouts are in pdpageouts below */
                    308:        int swapins;            /* swapins */
                    309:        int swapouts;           /* swapouts */
                    310:        int pgswapin;           /* pages swapped in */
                    311:        int pgswapout;          /* pages swapped out */
                    312:        int forks;              /* forks */
                    313:        int forks_ppwait;       /* forks where parent waits */
                    314:        int forks_sharevm;      /* forks where vmspace is shared */
                    315:        int pga_zerohit;        /* pagealloc where zero wanted and zero
                    316:                                   was available */
                    317:        int pga_zeromiss;       /* pagealloc where zero wanted and zero
                    318:                                   not available */
                    319:        int zeroaborts;         /* number of times page zeroing was
                    320:                                   aborted */
                    321:
                    322:        /* fault subcounters */
                    323:        int fltnoram;   /* number of times fault was out of ram */
                    324:        int fltnoanon;  /* number of times fault was out of anons */
                    325:        int fltpgwait;  /* number of times fault had to wait on a page */
                    326:        int fltpgrele;  /* number of times fault found a released page */
                    327:        int fltrelck;   /* number of times fault relock called */
                    328:        int fltrelckok; /* number of times fault relock is a success */
                    329:        int fltanget;   /* number of times fault gets anon page */
                    330:        int fltanretry; /* number of times fault retrys an anon get */
                    331:        int fltamcopy;  /* number of times fault clears "needs copy" */
                    332:        int fltnamap;   /* number of times fault maps a neighbor anon page */
                    333:        int fltnomap;   /* number of times fault maps a neighbor obj page */
                    334:        int fltlget;    /* number of times fault does a locked pgo_get */
                    335:        int fltget;     /* number of times fault does an unlocked get */
                    336:        int flt_anon;   /* number of times fault anon (case 1a) */
                    337:        int flt_acow;   /* number of times fault anon cow (case 1b) */
                    338:        int flt_obj;    /* number of times fault is on object page (2a) */
                    339:        int flt_prcopy; /* number of times fault promotes with copy (2b) */
                    340:        int flt_przero; /* number of times fault promotes with zerofill (2b) */
                    341:
                    342:        /* daemon counters */
                    343:        int pdwoke;     /* number of times daemon woke up */
                    344:        int pdrevs;     /* number of times daemon rev'd clock hand */
                    345:        int pdswout;    /* number of times daemon called for swapout */
                    346:        int pdfreed;    /* number of pages daemon freed since boot */
                    347:        int pdscans;    /* number of pages daemon scanned since boot */
                    348:        int pdanscan;   /* number of anonymous pages scanned by daemon */
                    349:        int pdobscan;   /* number of object pages scanned by daemon */
                    350:        int pdreact;    /* number of pages daemon reactivated since boot */
                    351:        int pdbusy;     /* number of times daemon found a busy page */
                    352:        int pdpageouts; /* number of times daemon started a pageout */
                    353:        int pdpending;  /* number of times daemon got a pending pagout */
                    354:        int pddeact;    /* number of pages daemon deactivates */
                    355:        int pdreanon;   /* anon pages reactivated due to min threshold */
                    356:        int pdrevnode;  /* vnode pages reactivated due to min threshold */
                    357:        int pdrevtext;  /* vtext pages reactivated due to min threshold */
                    358:
                    359:        int fpswtch;    /* FPU context switches */
                    360:        int kmapent;    /* number of kernel map entries */
                    361: };
                    362:
                    363: #ifdef _KERNEL
                    364: extern struct uvmexp uvmexp;
                    365: #endif
                    366:
                    367: /*
                    368:  * Finally, bring in standard UVM headers.
                    369:  */
                    370: #include <sys/vmmeter.h>
                    371: #include <sys/queue.h>
                    372: #include <sys/tree.h>
                    373: #include <uvm/uvm_param.h>
                    374: #include <sys/lock.h>
                    375: #include <uvm/uvm_page.h>
                    376: #include <uvm/uvm_pmap.h>
                    377: #include <uvm/uvm_map.h>
                    378: #include <uvm/uvm_fault.h>
                    379: #include <uvm/uvm_pager.h>
                    380:
                    381: /*
                    382:  * Shareable process virtual address space.
                    383:  * May eventually be merged with vm_map.
                    384:  * Several fields are temporary (text, data stuff).
                    385:  */
                    386: struct vmspace {
                    387:        struct  vm_map vm_map;  /* VM address map */
                    388:        int     vm_refcnt;      /* number of references */
                    389:        caddr_t vm_shm;         /* SYS5 shared memory private data XXX */
                    390: /* we copy from vm_startcopy to the end of the structure on fork */
                    391: #define vm_startcopy vm_rssize
                    392:        segsz_t vm_rssize;      /* current resident set size in pages */
                    393:        segsz_t vm_swrss;       /* resident set size before last swap */
                    394:        segsz_t vm_tsize;       /* text size (pages) XXX */
                    395:        segsz_t vm_dsize;       /* data size (pages) XXX */
                    396:        segsz_t vm_dused;       /* data segment length (pages) XXX */
                    397:        segsz_t vm_ssize;       /* stack size (pages) */
                    398:        caddr_t vm_taddr;       /* user virtual address of text XXX */
                    399:        caddr_t vm_daddr;       /* user virtual address of data XXX */
                    400:        caddr_t vm_maxsaddr;    /* user VA at max stack growth */
                    401:        caddr_t vm_minsaddr;    /* user VA at top of stack */
                    402: };
                    403:
                    404: #ifdef _KERNEL
                    405:
                    406: /*
                    407:  * the various kernel maps, owned by MD code
                    408:  */
                    409: extern struct vm_map *exec_map;
                    410: extern struct vm_map *kernel_map;
                    411: extern struct vm_map *kmem_map;
                    412: extern struct vm_map *phys_map;
                    413:
                    414:
                    415: /*
                    416:  * macros
                    417:  */
                    418:
                    419: /* zalloc zeros memory, alloc does not */
                    420: #define uvm_km_zalloc(MAP,SIZE) uvm_km_alloc1(MAP,SIZE,0,TRUE)
                    421: #define uvm_km_alloc(MAP,SIZE)  uvm_km_alloc1(MAP,SIZE,0,FALSE)
                    422:
                    423: #endif /* _KERNEL */
                    424:
                    425: #ifdef pmap_resident_count
                    426: #define vm_resident_count(vm) (pmap_resident_count((vm)->vm_map.pmap))
                    427: #else
                    428: #define vm_resident_count(vm) ((vm)->vm_rssize)
                    429: #endif
                    430:
                    431: /* XXX clean up later */
                    432: struct buf;
                    433: struct loadavg;
                    434: struct proc;
                    435: struct pmap;
                    436: struct vmspace;
                    437: struct vmtotal;
                    438: struct mount;
                    439: struct vnode;
                    440: struct core;
                    441:
                    442: #ifdef _KERNEL
                    443:
                    444: /* vm_machdep.c */
                    445: void           vmapbuf(struct buf *, vsize_t);
                    446: void           vunmapbuf(struct buf *, vsize_t);
                    447: void           cpu_fork(struct proc *, struct proc *, void *, size_t,
                    448:                    void (*)(void *), void *);
                    449:
                    450: /* uvm_aobj.c */
                    451: struct uvm_object      *uao_create(vsize_t, int);
                    452: void                   uao_detach(struct uvm_object *);
                    453: void                   uao_detach_locked(struct uvm_object *);
                    454: void                   uao_reference(struct uvm_object *);
                    455: void                   uao_reference_locked(struct uvm_object *);
                    456:
                    457: /* uvm_fault.c */
                    458: int                    uvm_fault(vm_map_t, vaddr_t,
                    459:                                vm_fault_t, vm_prot_t);
                    460:                                /* handle a page fault */
                    461:
                    462: /* uvm_glue.c */
                    463: #if defined(KGDB)
                    464: void                   uvm_chgkprot(caddr_t, size_t, int);
                    465: #endif
                    466: void                   uvm_fork(struct proc *, struct proc *, boolean_t,
                    467:                            void *, size_t, void (*)(void *), void *);
                    468: void                   uvm_exit(struct proc *);
                    469: void                   uvm_init_limits(struct proc *);
                    470: boolean_t              uvm_kernacc(caddr_t, size_t, int);
                    471: __dead void            uvm_scheduler(void);
                    472:
                    473: int                    uvm_vslock(struct proc *, caddr_t, size_t,
                    474:                            vm_prot_t);
                    475: void                   uvm_vsunlock(struct proc *, caddr_t, size_t);
                    476:
                    477:
                    478: /* uvm_init.c */
                    479: void                   uvm_init(void);
                    480:                                /* init the uvm system */
                    481:
                    482: /* uvm_io.c */
                    483: int                    uvm_io(vm_map_t, struct uio *, int);
                    484:
                    485: #define        UVM_IO_FIXPROT  0x01
                    486:
                    487: /* uvm_km.c */
                    488: vaddr_t                        uvm_km_alloc1(vm_map_t, vsize_t, vsize_t, boolean_t);
                    489: void                   uvm_km_free(vm_map_t, vaddr_t, vsize_t);
                    490: void                   uvm_km_free_wakeup(vm_map_t, vaddr_t,
                    491:                                                vsize_t);
                    492: vaddr_t                        uvm_km_kmemalloc(vm_map_t, struct uvm_object *,
                    493:                                                vsize_t, int);
                    494: struct vm_map          *uvm_km_suballoc(vm_map_t, vaddr_t *,
                    495:                                vaddr_t *, vsize_t, int,
                    496:                                boolean_t, vm_map_t);
                    497: vaddr_t                        uvm_km_valloc(vm_map_t, vsize_t);
                    498: vaddr_t                        uvm_km_valloc_align(vm_map_t, vsize_t, vsize_t);
                    499: vaddr_t                        uvm_km_valloc_wait(vm_map_t, vsize_t);
                    500: vaddr_t                        uvm_km_valloc_prefer_wait(vm_map_t, vsize_t,
                    501:                                        voff_t);
                    502: vaddr_t                        uvm_km_alloc_poolpage1(vm_map_t,
                    503:                                struct uvm_object *, boolean_t);
                    504: void                   uvm_km_free_poolpage1(vm_map_t, vaddr_t);
                    505:
                    506: void                   *uvm_km_getpage(boolean_t);
                    507: void                   uvm_km_putpage(void *);
                    508:
                    509: /* uvm_map.c */
                    510: #define        uvm_map(_m, _a, _sz, _u, _f, _al, _fl) uvm_map_p(_m, _a, _sz, _u, _f, _al, _fl, 0)
                    511: int                    uvm_map_p(vm_map_t, vaddr_t *, vsize_t,
                    512:                                struct uvm_object *, voff_t, vsize_t,
                    513:                                uvm_flag_t, struct proc *);
                    514: int                    uvm_map_pageable(vm_map_t, vaddr_t,
                    515:                                vaddr_t, boolean_t, int);
                    516: int                    uvm_map_pageable_all(vm_map_t, int, vsize_t);
                    517: boolean_t              uvm_map_checkprot(vm_map_t, vaddr_t,
                    518:                                vaddr_t, vm_prot_t);
                    519: int                    uvm_map_protect(vm_map_t, vaddr_t,
                    520:                                vaddr_t, vm_prot_t, boolean_t);
                    521: struct vmspace         *uvmspace_alloc(vaddr_t, vaddr_t,
                    522:                                boolean_t);
                    523: void                   uvmspace_init(struct vmspace *, struct pmap *,
                    524:                                vaddr_t, vaddr_t, boolean_t);
                    525: void                   uvmspace_exec(struct proc *, vaddr_t, vaddr_t);
                    526: struct vmspace         *uvmspace_fork(struct vmspace *);
                    527: void                   uvmspace_free(struct vmspace *);
                    528: void                   uvmspace_share(struct proc *, struct proc *);
                    529: void                   uvmspace_unshare(struct proc *);
                    530:
                    531:
                    532: /* uvm_meter.c */
                    533: void                   uvm_meter(void);
                    534: int                    uvm_sysctl(int *, u_int, void *, size_t *,
                    535:                                void *, size_t, struct proc *);
                    536: void                   uvm_total(struct vmtotal *);
                    537:
                    538: /* uvm_mmap.c */
                    539: int                    uvm_mmap(vm_map_t, vaddr_t *, vsize_t,
                    540:                                vm_prot_t, vm_prot_t, int,
                    541:                                caddr_t, voff_t, vsize_t, struct proc *);
                    542:
                    543: /* uvm_page.c */
                    544: struct vm_page         *uvm_pagealloc_strat(struct uvm_object *,
                    545:                                voff_t, struct vm_anon *, int, int, int);
                    546: #define        uvm_pagealloc(obj, off, anon, flags) \
                    547:            uvm_pagealloc_strat((obj), (off), (anon), (flags), \
                    548:                                UVM_PGA_STRAT_NORMAL, 0)
                    549: vaddr_t                        uvm_pagealloc_contig(vaddr_t, vaddr_t,
                    550:                                vaddr_t, vaddr_t);
                    551: void                   uvm_pagerealloc(struct vm_page *,
                    552:                                             struct uvm_object *, voff_t);
                    553: /* Actually, uvm_page_physload takes PF#s which need their own type */
                    554: void                   uvm_page_physload(paddr_t, paddr_t,
                    555:                                               paddr_t, paddr_t, int);
                    556: void                   uvm_setpagesize(void);
                    557:
                    558: /* uvm_pager.c */
                    559: void                   uvm_aio_biodone1(struct buf *);
                    560: void                   uvm_aio_biodone(struct buf *);
                    561: void                   uvm_aio_aiodone(struct buf *);
                    562:
                    563: /* uvm_pdaemon.c */
                    564: void                   uvm_pageout(void *);
                    565: void                   uvm_aiodone_daemon(void *);
                    566:
                    567: /* uvm_pglist.c */
                    568: int                    uvm_pglistalloc(psize_t, paddr_t,
                    569:                                paddr_t, paddr_t, paddr_t,
                    570:                                struct pglist *, int, int);
                    571: void                   uvm_pglistfree(struct pglist *);
                    572:
                    573: /* uvm_swap.c */
                    574: void                   uvm_swap_init(void);
                    575:
                    576: /* uvm_unix.c */
                    577: int                    uvm_coredump(struct proc *, struct vnode *,
                    578:                                struct ucred *, struct core *);
                    579: void                   uvm_grow(struct proc *, vaddr_t);
                    580:
                    581: /* uvm_user.c */
                    582: void                   uvm_deallocate(vm_map_t, vaddr_t, vsize_t);
                    583:
                    584: /* uvm_vnode.c */
                    585: void                   uvm_vnp_setsize(struct vnode *, voff_t);
                    586: void                   uvm_vnp_sync(struct mount *);
                    587: void                   uvm_vnp_terminate(struct vnode *);
                    588:                                /* terminate a uvm/uvn object */
                    589: boolean_t              uvm_vnp_uncache(struct vnode *);
                    590: struct uvm_object      *uvn_attach(void *, vm_prot_t);
                    591:
                    592: /* kern_malloc.c */
                    593: void                   kmeminit_nkmempages(void);
                    594: void                   kmeminit(void);
                    595: extern u_int           nkmempages;
                    596:
                    597: #endif /* _KERNEL */
                    598:
                    599: #endif /* _UVM_UVM_EXTERN_H_ */

CVSweb