RFC mm: some enhancements to the page fault mechanism
Get series with b4
b4 am [email protected]Versions newest first · linked by author and title
- v3 RFC Latest4 patches 0 repliesNew
- v2 RFC4 patches 0 repliesSuperseded
Changes in v3 from the cover letter
- fix up issues that krobot reported, rebase
Patches in v3 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/4 | mm: gup: rename "nonblocking" to "locked" where propermm/ mm/ | +25 | 0 replies | |
| 2/4 | mm: userfault: return VM_FAULT_RETRY on signalsarch/ arch/ arch/ +21 more | +73 | 0 replies | |
| 3/4 | mm: allow VM_FAULT_RETRY for multiple timesarch/ arch/ arch/ +20 more | +3 | 0 replies | |
| 4/4 | mm: gup: allow VM_FAULT_RETRY for multiple timesmm/ | +13 | 0 replies |
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v3 yet.
Cover letter [PATCH RFC v3 0/4] mm: some enhancements to the page fault mechanism
v3:
- fix up issues that krobot reported, rebase
This is an RFC series as cleanup and enhancements to current page fault logic. The whole idea comes from the discussion between Andrea and Linus on the bug reported by syzbot here:
https://lkml.org/lkml/2017/11/2/833
Basically it does two things:
(a) Allows the page fault logic to be more interactive on not only SIGKILL, but also the rest of userspace signals, and,
(b) Allows the page fault retry (VM_FAULT_RETRY) to happen for more than once.
For (a): with the changes we should be able to react faster when page faults are working in parallel with userspace signals like SIGSTOP and SIGCONT (and more), and with that we can remove the buggy part in userfaultfd and benefit the whole page fault mechanism on faster signal processing to reach the userspace.
For (b), we should be able to allow the page fault handler to loop for even more than twice. Some context: for now since we have FAULT_FLAG_ALLOW_RETRY we can allow to retry the page fault once with the same interrupt context, however never more than twice. This can be not only a potential cleanup to remove this assumption since AFAIU the code itself doesn't really have this twice-only limitation (though that should be a protective approach in the past), at the same time it'll greatly simplify future works like userfaultfd write-protect where it's possible to retry for more than twice (please have a look at [1] below for a possible user that might require the page fault to be handled for a third time; if we can remove the retry limitation we can simply drop that patch and those complexity).
Some more details on each of the patch (even more in commit messages):
Patch 1: A cleanup of existing GUP code to rename the confusing
"nonblocking" parameter to "locked" which seems suite more.
Patch 2: Complete the page fault faster for non-sigkill signals
Patch 3: Remove the limitation to only allow to retry page fault for
twice (page fault part)
Patch 4: Similar work of patch 3, but for GUP.
The series is only lightly tested. Before running more tests, I'd be really glad to see whether there's any feedback first.
Looking forward to your comments. Thanks,
Peter Xu (4):
mm: gup: rename "nonblocking" to "locked" where proper
mm: userfault: return VM_FAULT_RETRY on signals
mm: allow VM_FAULT_RETRY for multiple times
mm: gup: allow VM_FAULT_RETRY for multiple times
arch/alpha/mm/fault.c | 4 +-- arch/arc/mm/fault.c | 12 ++++---- arch/arm/mm/fault.c | 17 ++++++----- arch/arm64/mm/fault.c | 11 ++----- arch/hexagon/mm/vm_fault.c | 3 +- arch/ia64/mm/fault.c | 3 +- arch/m68k/mm/fault.c | 5 +--- arch/microblaze/mm/fault.c | 3 +- arch/mips/mm/fault.c | 3 +- arch/nds32/mm/fault.c | 7 ++--- arch/nios2/mm/fault.c | 5 +--- arch/openrisc/mm/fault.c | 3 +- arch/parisc/mm/fault.c | 4 +-- arch/powerpc/mm/fault.c | 9 ++---- arch/riscv/mm/fault.c | 9 ++---- arch/s390/mm/fault.c | 14 ++++----- arch/sh/mm/fault.c | 5 +++- arch/sparc/mm/fault_32.c | 4 ++- arch/sparc/mm/fault_64.c | 4 ++- arch/um/kernel/trap.c | 6 ++-- arch/unicore32/mm/fault.c | 10 ++----- arch/x86/mm/fault.c | 13 ++++++-- arch/xtensa/mm/fault.c | 4 ++- fs/userfaultfd.c | 24 --------------- mm/gup.c | 61 +++++++++++++++++++++----------------- mm/hugetlb.c | 8 ++--- 26 files changed, 114 insertions(+), 137 deletions(-)
Signature · 1 line
2.17.1