freebsd-dev/sys/vm
Mark Johnston a9ea09e548 Re-check for wirings after busying the page in vm_page_release_locked().
A concurrent unlocked lookup can wire the page after
vm_page_release_locked() releases the last wiring, in which case
vm_page_release_locked() must not free the page.  Once the xbusy lock is
acquired, that, the object lock and the fact that the page is unmapped
ensure that the wire count cannot increase, so re-check for new wirings
after the page is xbusied.

Update the comment above vm_page_wired() to reflect the new
synchronization rules.

Reported by:	glebius
Reviewed by:	alc, jeff, kib
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D24592
2020-04-28 13:51:41 +00:00
..
_vm_radix.h sys: general adoption of SPDX licensing ID tags. 2017-11-27 15:23:17 +00:00
default_pager.c SPDX: wrong license. 2017-11-30 15:45:42 +00:00
device_pager.c Don't hold the object lock while calling getpages. 2020-01-19 23:47:32 +00:00
memguard.c Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00
memguard.h sys: general adoption of SPDX licensing ID tags. 2017-11-27 15:23:17 +00:00
phys_pager.c Don't hold the object lock while calling getpages. 2020-01-19 23:47:32 +00:00
pmap.h Remove page locking from pmap_mincore(). 2019-10-16 22:03:27 +00:00
redzone.c Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00
redzone.h sys: general adoption of SPDX licensing ID tags. 2017-11-27 15:23:17 +00:00
sg_pager.c Don't hold the object lock while calling getpages. 2020-01-19 23:47:32 +00:00
swap_pager.c Use COUNTER_U64_DEFINE_EARLY() in places where it simplifies things. 2020-03-06 19:10:00 +00:00
swap_pager.h Remove swblk_t. 2020-02-17 15:11:07 +00:00
uma_core.c Clean up uma_int.h a bit. 2020-03-07 15:37:23 +00:00
uma_dbg.c Fix compilation failures on different arches that have vm_machdep.c not 2019-01-15 19:33:47 +00:00
uma_dbg.h sys: general adoption of SPDX licensing ID tags. 2017-11-27 15:23:17 +00:00
uma_int.h Clean up uma_int.h a bit. 2020-03-07 15:37:23 +00:00
uma.h Constify uma_zcache_create() and uma_zsecond_create()'s "name" argument. 2020-02-22 17:44:28 +00:00
vm_domainset.c Add a !NUMA definition for vm_domainset_iter_policy_ref_init(). 2018-10-24 17:09:20 +00:00
vm_domainset.h Refactor domainset iterators for use by malloc(9) and UMA. 2018-10-23 16:35:58 +00:00
vm_extern.h Use a single VM object for kernel stacks. 2020-04-26 20:08:57 +00:00
vm_fault.c Add a blocking counter KPI. 2020-02-28 16:05:18 +00:00
vm_glue.c Use a single VM object for kernel stacks. 2020-04-26 20:08:57 +00:00
vm_init.c Simplify VM and UMA startup by eliminating boot pages. Instead use careful 2020-01-16 05:01:21 +00:00
vm_kern.c Factor out the kmem contig page alloc and reclamation code. 2020-04-21 16:01:44 +00:00
vm_kern.h Use a single VM object for kernel stacks. 2020-04-26 20:08:57 +00:00
vm_map.c sys/vm: quiet -Wwrite-strings 2020-02-23 03:32:04 +00:00
vm_map.h Revert r355505. The code that it allowed to compile has been removed. 2019-12-09 05:09:46 +00:00
vm_meter.c Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00
vm_mmap.c Introduce kern_mmap_req(). 2020-03-04 21:27:12 +00:00
vm_object.c Use COUNTER_U64_DEFINE_EARLY() in places where it simplifies things. 2020-03-06 19:10:00 +00:00
vm_object.h Add a blocking counter KPI. 2020-02-28 16:05:18 +00:00
vm_page.c Re-check for wirings after busying the page in vm_page_release_locked(). 2020-04-28 13:51:41 +00:00
vm_page.h Re-check for wirings after busying the page in vm_page_release_locked(). 2020-04-28 13:51:41 +00:00
vm_pageout.c Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00
vm_pageout.h Fix OOM handling of some corner cases. 2019-08-16 09:43:49 +00:00
vm_pagequeue.h Simplify vm_pageout_init_domain() and add a "big picture" comment. 2019-11-22 16:31:43 +00:00
vm_pager.c sys/vm: quiet -Wwrite-strings 2020-02-23 03:32:04 +00:00
vm_pager.h Add a blocking counter KPI. 2020-02-28 16:05:18 +00:00
vm_param.h (fault 3/9) Move map relookup into a dedicated function. 2020-01-23 05:07:01 +00:00
vm_phys.c Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00
vm_phys.h Encapsulate phys_avail manipulation in a set of simple routines. Add a 2019-08-18 07:06:31 +00:00
vm_radix.c Move SMR pointer type definition and access macros to smr_types.h. 2020-03-07 00:55:46 +00:00
vm_radix.h Use SMR to provide a safe unlocked lookup for vm_radix. 2020-02-19 19:58:31 +00:00
vm_reserv.c Use COUNTER_U64_DEFINE_EARLY() in places where it simplifies things. 2020-03-06 19:10:00 +00:00
vm_reserv.h Fix locking in vm_reserv_reclaim_contig(). 2019-11-22 16:28:52 +00:00
vm_swapout_dummy.c SPDX: Consider code from Carnegie-Mellon University. 2017-11-30 15:48:35 +00:00
vm_swapout.c Use a single VM object for kernel stacks. 2020-04-26 20:08:57 +00:00
vm_unix.c Provide separate accounting for user-wired pages. 2019-05-13 16:38:48 +00:00
vm.h Move vm_ndomains to vm.h where it can be used with a single header include 2018-03-27 03:27:02 +00:00
vnode_pager.c VOP_GETPAGES_ASYNC(): consistently call iodone() callback in case of error. 2020-03-30 21:44:30 +00:00
vnode_pager.h vm pager: writemapping accounting for OBJT_SWAP 2019-09-03 20:31:48 +00:00