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

Function vm_page_sunbusy

freebsd/vm/vm_page.c:975–1001  ·  view source on GitHub ↗

* vm_page_sunbusy: * * Shared unbusy a page. */

Source from the content-addressed store, hash-verified

973 * Shared unbusy a page.
974 */
975void
976vm_page_sunbusy(vm_page_t m)
977{
978 u_int x;
979
980 vm_page_assert_sbusied(m);
981
982 x = vm_page_busy_fetch(m);
983 for (;;) {
984 KASSERT(x != VPB_FREED,
985 ("vm_page_sunbusy: Unlocking freed page."));
986 if (VPB_SHARERS(x) > 1) {
987 if (atomic_fcmpset_int(&m->busy_lock, &x,
988 x - VPB_ONE_SHARER))
989 break;
990 continue;
991 }
992 KASSERT((x & ~VPB_BIT_WAITERS) == VPB_SHARERS_WORD(1),
993 ("vm_page_sunbusy: invalid lock state"));
994 if (!atomic_fcmpset_rel_int(&m->busy_lock, &x, VPB_UNBUSIED))
995 continue;
996 if ((x & VPB_BIT_WAITERS) == 0)
997 break;
998 wakeup(m);
999 break;
1000 }
1001}
1002
1003/*
1004 * vm_page_busy_sleep:

Callers 15

page_unbusyFunction · 0.85
mappedread_sfFunction · 0.85
vfs_vmio_iodoneFunction · 0.85
vfs_vmio_invalidateFunction · 0.85
vfs_unbusy_pagesFunction · 0.85
vfs_busy_pages_releaseFunction · 0.85
vfs_bio_getpagesFunction · 0.85
vn_read_from_objFunction · 0.85
cluster_rbuildFunction · 0.85
cluster_wbuildFunction · 0.85
uiomove_object_pageFunction · 0.85
vm_page_trysbusyFunction · 0.85

Calls 1

wakeupFunction · 0.50

Tested by

no test coverage detected