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

Function vm_page_bits_set

freebsd/vm/vm_page.c:4885–4916  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4883}
4884
4885void
4886vm_page_bits_set(vm_page_t m, vm_page_bits_t *bits, vm_page_bits_t set)
4887{
4888
4889#if PAGE_SIZE == 32768
4890 atomic_set_64((uint64_t *)bits, set);
4891#elif PAGE_SIZE == 16384
4892 atomic_set_32((uint32_t *)bits, set);
4893#elif (PAGE_SIZE == 8192) && defined(atomic_set_16)
4894 atomic_set_16((uint16_t *)bits, set);
4895#elif (PAGE_SIZE == 4096) && defined(atomic_set_8)
4896 atomic_set_8((uint8_t *)bits, set);
4897#else /* PAGE_SIZE <= 8192 */
4898 uintptr_t addr;
4899 int shift;
4900
4901 addr = (uintptr_t)bits;
4902 /*
4903 * Use a trick to perform a 32-bit atomic on the
4904 * containing aligned word, to not depend on the existence
4905 * of atomic_{set, clear}_{8, 16}.
4906 */
4907 shift = addr & (sizeof(uint32_t) - 1);
4908#if BYTE_ORDER == BIG_ENDIAN
4909 shift = (sizeof(uint32_t) - sizeof(vm_page_bits_t) - shift) * NBBY;
4910#else
4911 shift *= NBBY;
4912#endif
4913 addr &= ~(sizeof(uint32_t) - 1);
4914 atomic_set_32((uint32_t *)addr, set << shift);
4915#endif /* PAGE_SIZE */
4916}
4917
4918static inline void
4919vm_page_bits_clear(vm_page_t m, vm_page_bits_t *bits, vm_page_bits_t clear)

Callers 4

vm_page_set_valid_rangeFunction · 0.85
vm_page_set_validcleanFunction · 0.85
vm_page_validFunction · 0.85
vnode_pager_input_smlfsFunction · 0.85

Calls 2

atomic_set_64Function · 0.50
atomic_set_32Function · 0.50

Tested by

no test coverage detected