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

Function kmem_back

freebsd/vm/vm_kern.c:515–547  ·  view source on GitHub ↗

* kmem_back: * * Allocate physical pages for the specified virtual address range. */

Source from the content-addressed store, hash-verified

513 * Allocate physical pages for the specified virtual address range.
514 */
515int
516kmem_back(vm_object_t object, vm_offset_t addr, vm_size_t size, int flags)
517{
518 vm_offset_t end, next, start;
519 int domain, rv;
520
521 KASSERT(object == kernel_object,
522 ("kmem_back: only supports kernel object."));
523
524 for (start = addr, end = addr + size; addr < end; addr = next) {
525 /*
526 * We must ensure that pages backing a given large virtual page
527 * all come from the same physical domain.
528 */
529 if (vm_ndomains > 1) {
530 domain = (addr >> KVA_QUANTUM_SHIFT) % vm_ndomains;
531 while (VM_DOMAIN_EMPTY(domain))
532 domain++;
533 next = roundup2(addr + 1, KVA_QUANTUM);
534 if (next > end || next < start)
535 next = end;
536 } else {
537 domain = 0;
538 next = end;
539 }
540 rv = kmem_back_domain(domain, object, addr, next - addr, flags);
541 if (rv != KERN_SUCCESS) {
542 kmem_unback(object, start, addr - start);
543 break;
544 }
545 }
546 return (rv);
547}
548
549/*
550 * kmem_unback:

Callers 1

memguard_allocFunction · 0.85

Calls 2

kmem_back_domainFunction · 0.85
kmem_unbackFunction · 0.85

Tested by

no test coverage detected