MCPcopy Create free account
hub / github.com/F-Stack/f-stack / kern_msync

Function kern_msync

freebsd/vm/vm_mmap.c:518–556  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

516}
517
518int
519kern_msync(struct thread *td, uintptr_t addr0, size_t size, int flags)
520{
521 vm_offset_t addr;
522 vm_size_t pageoff;
523 vm_map_t map;
524 int rv;
525
526 addr = addr0;
527 pageoff = (addr & PAGE_MASK);
528 addr -= pageoff;
529 size += pageoff;
530 size = (vm_size_t) round_page(size);
531 if (addr + size < addr)
532 return (EINVAL);
533
534 if ((flags & (MS_ASYNC|MS_INVALIDATE)) == (MS_ASYNC|MS_INVALIDATE))
535 return (EINVAL);
536
537 map = &td->td_proc->p_vmspace->vm_map;
538
539 /*
540 * Clean the pages and interpret the return value.
541 */
542 rv = vm_map_sync(map, addr, addr + size, (flags & MS_ASYNC) == 0,
543 (flags & MS_INVALIDATE) != 0);
544 switch (rv) {
545 case KERN_SUCCESS:
546 return (0);
547 case KERN_INVALID_ADDRESS:
548 return (ENOMEM);
549 case KERN_INVALID_ARGUMENT:
550 return (EBUSY);
551 case KERN_FAILURE:
552 return (EIO);
553 default:
554 return (EINVAL);
555 }
556}
557
558#ifndef _SYS_SYSPROTO_H_
559struct munmap_args {

Callers 1

sys_msyncFunction · 0.85

Calls 1

vm_map_syncFunction · 0.85

Tested by

no test coverage detected