Add kern_mincore() helper for micore() syscall.
Suggested by: kib@ Reviewed by: kib@ MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D10143
This commit is contained in:
parent
cb83812c70
commit
46dc8e9d6a
@ -152,6 +152,7 @@ int kern_lseek(struct thread *td, int fd, off_t offset, int whence);
|
||||
int kern_lutimes(struct thread *td, char *path, enum uio_seg pathseg,
|
||||
struct timeval *tptr, enum uio_seg tptrseg);
|
||||
int kern_madvise(struct thread *td, uintptr_t addr, size_t len, int behav);
|
||||
int kern_mincore(struct thread *td, uintptr_t addr, size_t len, char *vec);
|
||||
int kern_mkdirat(struct thread *td, int fd, char *path,
|
||||
enum uio_seg segflg, int mode);
|
||||
int kern_mkfifoat(struct thread *td, int fd, char *path,
|
||||
|
@ -710,12 +710,18 @@ struct mincore_args {
|
||||
|
||||
int
|
||||
sys_mincore(struct thread *td, struct mincore_args *uap)
|
||||
{
|
||||
|
||||
return (kern_mincore(td, (uintptr_t)uap->addr, uap->len, uap->vec));
|
||||
}
|
||||
|
||||
int
|
||||
kern_mincore(struct thread *td, uintptr_t addr0, size_t len, char *vec)
|
||||
{
|
||||
vm_offset_t addr, first_addr;
|
||||
vm_offset_t end, cend;
|
||||
pmap_t pmap;
|
||||
vm_map_t map;
|
||||
char *vec;
|
||||
int error = 0;
|
||||
int vecindex, lastvecindex;
|
||||
vm_map_entry_t current;
|
||||
@ -732,17 +738,12 @@ sys_mincore(struct thread *td, struct mincore_args *uap)
|
||||
* Make sure that the addresses presented are valid for user
|
||||
* mode.
|
||||
*/
|
||||
first_addr = addr = trunc_page((vm_offset_t) uap->addr);
|
||||
end = addr + (vm_size_t)round_page(uap->len);
|
||||
first_addr = addr = trunc_page(addr0);
|
||||
end = addr + (vm_size_t)round_page(len);
|
||||
map = &td->td_proc->p_vmspace->vm_map;
|
||||
if (end > vm_map_max(map) || end < addr)
|
||||
return (ENOMEM);
|
||||
|
||||
/*
|
||||
* Address of byte vector
|
||||
*/
|
||||
vec = uap->vec;
|
||||
|
||||
pmap = vmspace_pmap(td->td_proc->p_vmspace);
|
||||
|
||||
vm_map_lock_read(map);
|
||||
|
Loading…
Reference in New Issue
Block a user