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

Function pmap_vmspace_copy

freebsd/amd64/amd64/pmap.c:7738–7766  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7736}
7737
7738int
7739pmap_vmspace_copy(pmap_t dst_pmap, pmap_t src_pmap)
7740{
7741 int error;
7742
7743 if (dst_pmap->pm_type != src_pmap->pm_type ||
7744 dst_pmap->pm_type != PT_X86 ||
7745 (cpu_stdext_feature2 & CPUID_STDEXT2_PKU) == 0)
7746 return (0);
7747 for (;;) {
7748 if (dst_pmap < src_pmap) {
7749 PMAP_LOCK(dst_pmap);
7750 PMAP_LOCK(src_pmap);
7751 } else {
7752 PMAP_LOCK(src_pmap);
7753 PMAP_LOCK(dst_pmap);
7754 }
7755 error = pmap_pkru_copy(dst_pmap, src_pmap);
7756 /* Clean up partial copy on failure due to no memory. */
7757 if (error == ENOMEM)
7758 pmap_pkru_deassign_all(dst_pmap);
7759 PMAP_UNLOCK(src_pmap);
7760 PMAP_UNLOCK(dst_pmap);
7761 if (error != ENOMEM)
7762 break;
7763 vm_wait(NULL);
7764 }
7765 return (error);
7766}
7767
7768/*
7769 * Zero the specified hardware page.

Callers 1

vmspace_forkFunction · 0.50

Calls 3

pmap_pkru_copyFunction · 0.85
pmap_pkru_deassign_allFunction · 0.85
vm_waitFunction · 0.85

Tested by

no test coverage detected