On Fri, May 08, 2026 at 04:55:24PM +0100, Kiryl Shutsemau (Meta) wrote: > Add an ioctl to toggle async mode at runtime without re-registering > the userfaultfd. This allows a VMM to switch between sync and async > RWP modes on-the-fly -- for example, starting in async mode for > working set scanning, then switching to sync mode to intercept faults > during page eviction. > > UFFDIO_SET_MODE takes an enable/disable bitmask of UFFD_FEATURE_* > flags. Only UFFD_FEATURE_RWP_ASYNC is toggleable today; the ioctl > rejects any other bit with -EINVAL. Enabling RWP_ASYNC also requires > RWP to have been negotiated at UFFDIO_API time, mirroring the > UFFDIO_API invariant. > > Fault-path readers of ctx->features run under mmap_read_lock or a > per-VMA lock; the RMW takes mmap_write_lock and calls > vma_start_write() on every UFFD-armed VMA, so those readers are fully > excluded. userfaultfd_show_fdinfo(), however, reads ctx->features > without any lock, so the RMW is written as a single WRITE_ONCE and > fdinfo reads it with READ_ONCE. That keeps the lockless observer from > seeing a mid-RMW intermediate and removes the audit burden when new > toggleable bits are added later. > > When switching to async, pending sync waiters are woken so they retry > and auto-resolve under the new mode. > > Signed-off-by: Kiryl Shutsemau (Meta) <[email protected]> > Assisted-by: Claude:claude-opus-4-6
Reviewed-by: Mike Rapoport (Microsoft) <[email protected]> > --- > fs/userfaultfd.c | 150 +++++++++++++++++++++++++------ > include/uapi/linux/userfaultfd.h | 14 +++ > 2 files changed, 136 insertions(+), 28 deletions(-) -- Sincerely yours, Mike.

