vm.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. /*-
  2. * SPDX-License-Identifier: (BSD-3-Clause AND MIT-CMU)
  3. *
  4. * Copyright (c) 1991, 1993
  5. * The Regents of the University of California. All rights reserved.
  6. *
  7. * Redistribution and use in source and binary forms, with or without
  8. * modification, are permitted provided that the following conditions
  9. * are met:
  10. * 1. Redistributions of source code must retain the above copyright
  11. * notice, this list of conditions and the following disclaimer.
  12. * 2. Redistributions in binary form must reproduce the above copyright
  13. * notice, this list of conditions and the following disclaimer in the
  14. * documentation and/or other materials provided with the distribution.
  15. * 3. Neither the name of the University nor the names of its contributors
  16. * may be used to endorse or promote products derived from this software
  17. * without specific prior written permission.
  18. *
  19. * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  20. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  21. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  22. * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  23. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  24. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  25. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  26. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  27. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  28. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  29. * SUCH DAMAGE.
  30. *
  31. * Copyright (c) 1987, 1990 Carnegie-Mellon University.
  32. * All rights reserved.
  33. *
  34. * Authors: Avadis Tevanian, Jr., Michael Wayne Young
  35. *
  36. * Permission to use, copy, modify and distribute this software and
  37. * its documentation is hereby granted, provided that both the copyright
  38. * notice and this permission notice appear in all copies of the
  39. * software, derivative works or modified versions, and any portions
  40. * thereof, and that both notices appear in supporting documentation.
  41. *
  42. * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
  43. * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
  44. * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
  45. *
  46. * Carnegie Mellon requests users of this software to return to
  47. *
  48. * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
  49. * School of Computer Science
  50. * Carnegie Mellon University
  51. * Pittsburgh PA 15213-3890
  52. *
  53. * any improvements or extensions that they make and grant Carnegie the
  54. * rights to redistribute these changes.
  55. */
  56. #ifndef VM_H
  57. #define VM_H
  58. #include <machine/vm.h>
  59. typedef char vm_inherit_t; /* inheritance codes */
  60. #define VM_INHERIT_SHARE ((vm_inherit_t) 0)
  61. #define VM_INHERIT_COPY ((vm_inherit_t) 1)
  62. #define VM_INHERIT_NONE ((vm_inherit_t) 2)
  63. #define VM_INHERIT_ZERO ((vm_inherit_t) 3)
  64. #define VM_INHERIT_DEFAULT VM_INHERIT_COPY
  65. typedef u_char vm_prot_t; /* protection codes */
  66. #define VM_PROT_NONE ((vm_prot_t) 0x00)
  67. #define VM_PROT_READ ((vm_prot_t) 0x01)
  68. #define VM_PROT_WRITE ((vm_prot_t) 0x02)
  69. #define VM_PROT_EXECUTE ((vm_prot_t) 0x04)
  70. #define VM_PROT_COPY ((vm_prot_t) 0x08) /* copy-on-read */
  71. #define VM_PROT_PRIV_FLAG ((vm_prot_t) 0x10)
  72. #define VM_PROT_FAULT_LOOKUP VM_PROT_PRIV_FLAG
  73. #define VM_PROT_NO_PROMOTE VM_PROT_PRIV_FLAG
  74. #define VM_PROT_QUICK_NOFAULT VM_PROT_PRIV_FLAG /* same to save bits */
  75. #define VM_PROT_ALL (VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE)
  76. #define VM_PROT_RW (VM_PROT_READ|VM_PROT_WRITE)
  77. #define VM_PROT_DEFAULT VM_PROT_ALL
  78. enum obj_type {
  79. OBJT_RESERVED = 0, /* was OBJT_DEFAULT */
  80. OBJT_SWAP,
  81. OBJT_DEFAULT = OBJT_SWAP,
  82. OBJT_VNODE,
  83. OBJT_DEVICE,
  84. OBJT_PHYS,
  85. OBJT_DEAD,
  86. OBJT_SG,
  87. OBJT_MGTDEVICE,
  88. OBJT_FIRST_DYN,
  89. };
  90. typedef u_char objtype_t;
  91. union vm_map_object;
  92. typedef union vm_map_object vm_map_object_t;
  93. struct vm_map_entry;
  94. typedef struct vm_map_entry *vm_map_entry_t;
  95. struct vm_map;
  96. typedef struct vm_map *vm_map_t;
  97. struct vm_object;
  98. typedef struct vm_object *vm_object_t;
  99. #ifndef _KERNEL
  100. /*
  101. * This is defined in <sys/types.h> for the kernel so that non-vm kernel
  102. * sources (mainly Mach-derived ones such as ddb) don't have to include
  103. * vm stuff. Defining it there for applications might break things.
  104. * Define it here for "applications" that include vm headers (e.g.,
  105. * genassym).
  106. */
  107. #ifndef HAVE_BOOLEAN
  108. typedef int boolean_t;
  109. #endif
  110. /*
  111. * The exact set of memory attributes is machine dependent. However,
  112. * every machine is required to define VM_MEMATTR_DEFAULT and
  113. * VM_MEMATTR_UNCACHEABLE.
  114. */
  115. typedef char vm_memattr_t; /* memory attribute codes */
  116. /*
  117. * This is defined in <sys/types.h> for the kernel so that vnode_if.h
  118. * doesn't have to include <vm/vm.h>.
  119. */
  120. struct vm_page;
  121. typedef struct vm_page *vm_page_t;
  122. #endif /* _KERNEL */
  123. struct vm_reserv;
  124. typedef struct vm_reserv *vm_reserv_t;
  125. /*
  126. * Information passed from the machine-independent VM initialization code
  127. * for use by machine-dependant code (mainly for MMU support)
  128. */
  129. struct kva_md_info {
  130. vm_offset_t buffer_sva;
  131. vm_offset_t buffer_eva;
  132. vm_offset_t clean_sva;
  133. vm_offset_t clean_eva;
  134. };
  135. /* bits from overcommit */
  136. #define SWAP_RESERVE_FORCE_ON (1 << 0)
  137. #define SWAP_RESERVE_RLIMIT_ON (1 << 1)
  138. #define SWAP_RESERVE_ALLOW_NONWIRED (1 << 2)
  139. #ifdef NUMA
  140. #define __numa_used
  141. #else
  142. #define __numa_used __unused
  143. #endif
  144. #ifdef _KERNEL
  145. struct ucred;
  146. void vm_ksubmap_init(struct kva_md_info *);
  147. bool swap_reserve(vm_ooffset_t incr);
  148. bool swap_reserve_by_cred(vm_ooffset_t incr, struct ucred *cred);
  149. void swap_reserve_force(vm_ooffset_t incr);
  150. void swap_release(vm_ooffset_t decr);
  151. void swap_release_by_cred(vm_ooffset_t decr, struct ucred *cred);
  152. void swapper(void);
  153. extern struct kva_md_info kmi;
  154. #define VA_IS_CLEANMAP(va) \
  155. ((va) >= kmi.clean_sva && (va) < kmi.clean_eva)
  156. extern int old_mlock;
  157. extern int vm_ndomains;
  158. extern int vm_overcommit;
  159. #endif /* _KERNEL */
  160. #endif /* VM_H */