53#include <sys/resourcevar.h>
54#include <sys/syscallsubr.h>
55#include <sys/sysent.h>
56#include <sys/sysproto.h>
58#if defined(__amd64__) || defined(__i386__)
59#include <machine/md_var.h>
67#ifndef _SYS_SYSPROTO_H_
75#if !defined(__aarch64__) && !defined(__riscv)
79 addr = (uintptr_t)uap->
nsize;
82 td->td_retval[0] = addr;
92 struct vmspace *vm = td->td_proc->p_vmspace;
94 vm_offset_t
new, old, base;
95 rlim_t datalim, lmemlim, vmemlim;
99 datalim = lim_cur(td, RLIMIT_DATA);
100 lmemlim = lim_cur(td, RLIMIT_MEMLOCK);
101 vmemlim = lim_cur(td, RLIMIT_VMEM);
103 new = round_page(*addr);
106 base = round_page((vm_offset_t) vm->
vm_daddr);
113 if (
new - base > datalim &&
new > old) {
121 }
else if (
new < base) {
136 (
new - old) > lmemlim) {
141 if (map->
size + (
new - old) > vmemlim) {
147 PROC_LOCK(td->td_proc);
148 error = racct_set(td->td_proc, RACCT_DATA,
new - base);
150 PROC_UNLOCK(td->td_proc);
154 error = racct_set(td->td_proc, RACCT_VMEM,
155 map->
size + (
new - old));
157 racct_set_force(td->td_proc, RACCT_DATA,
159 PROC_UNLOCK(td->td_proc);
164 error = racct_set(td->td_proc, RACCT_MEMLOCK,
168 racct_set_force(td->td_proc, RACCT_DATA,
170 racct_set_force(td->td_proc, RACCT_VMEM,
172 PROC_UNLOCK(td->td_proc);
177 PROC_UNLOCK(td->td_proc);
181#if (defined(COMPAT_FREEBSD32) && defined(__amd64__)) || defined(__i386__)
182 if (i386_read_exec && SV_PROC_FLAG(td->td_proc, SV_ILP32))
196 PROC_LOCK(td->td_proc);
197 racct_set_force(td->td_proc,
198 RACCT_DATA, old - base);
199 racct_set_force(td->td_proc,
200 RACCT_VMEM, map->
size);
202 racct_set_force(td->td_proc,
206 PROC_UNLOCK(td->td_proc);
213 }
else if (
new < old) {
222 PROC_LOCK(td->td_proc);
223 racct_set_force(td->td_proc, RACCT_DATA,
new - base);
224 racct_set_force(td->td_proc, RACCT_VMEM, map->
size);
226 racct_set_force(td->td_proc, RACCT_MEMLOCK,
229 PROC_UNLOCK(td->td_proc);
242#ifdef COMPAT_FREEBSD11
244freebsd11_vadvise(
struct thread *td,
struct freebsd11_vadvise_args *uap)
#define pmap_wired_count(pm)
int vm_map_insert(vm_map_t map, vm_object_t object, vm_ooffset_t offset, vm_offset_t start, vm_offset_t end, vm_prot_t prot, vm_prot_t max, int cow)
int vm_map_wire_locked(vm_map_t map, vm_offset_t start, vm_offset_t end, int flags)
int vm_map_delete(vm_map_t map, vm_offset_t start, vm_offset_t end)
static __inline vm_offset_t vm_map_max(const struct vm_map *map)
#define VM_MAP_WIRE_NOHOLES
#define vm_map_unlock(map)
int kern_break(struct thread *td, uintptr_t *addr)
int sys_break(struct thread *td, struct break_args *uap)