diff options
author | Vignesh Raghavendra <vigneshr@ti.com> | 2023-02-16 15:41:14 +0530 |
---|---|---|
committer | Vignesh Raghavendra <vigneshr@ti.com> | 2023-02-16 15:41:14 +0530 |
commit | 8ffeeca907557f941a0dd873f3ad7a63d130b6fa (patch) | |
tree | f1629bee72e4adb24d64464dfbe911818023edfc /mm/khugepaged.c | |
parent | 76b3e88d569210a51399e8d8c8babd995af29d11 (diff) | |
parent | 179624a57b78c02de833370b7bdf0b0f4a27ca31 (diff) |
Merge tag 'v5.10.165' of https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux into ti-linux-5.10.y-cicd
This is the 5.10.165 stable release
* tag 'v5.10.165' of https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux: (951 commits)
Linux 5.10.165
io_uring/rw: remove leftover debug statement
io_uring/rw: ensure kiocb_end_write() is always called
io_uring: fix double poll leak on repolling
io_uring: Clean up a false-positive warning from GCC 9.3.0
mm/khugepaged: fix collapse_pte_mapped_thp() to allow anon_vma
Bluetooth: hci_qca: Fixed issue during suspend
Bluetooth: hci_qca: check for SSR triggered flag while suspend
Bluetooth: hci_qca: Wait for SSR completion during suspend
soc: qcom: apr: Make qcom,protection-domain optional again
Revert "wifi: mac80211: fix memory leak in ieee80211_if_add()"
net/mlx5: fix missing mutex_unlock in mlx5_fw_fatal_reporter_err_work()
net/ulp: use consistent error code when blocking ULP
io_uring/net: fix fast_iov assignment in io_setup_async_msg()
io_uring: io_kiocb_update_pos() should not touch file for non -1 offset
tracing: Use alignof__(struct {type b;}) instead of offsetof()
x86/fpu: Use _Alignof to avoid undefined behavior in TYPE_ALIGN
Revert "drm/amdgpu: make display pinning more flexible (v2)"
efi: rt-wrapper: Add missing include
arm64: efi: Execute runtime services from a dedicated stack
...
Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
# Conflicts:
# net/hsr/hsr_device.c
# net/hsr/hsr_forward.c
Diffstat (limited to 'mm/khugepaged.c')
-rw-r--r-- | mm/khugepaged.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 0eb3adf4ff68..b77186ec70e9 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -1459,14 +1459,6 @@ void collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr) if (!hugepage_vma_check(vma, vma->vm_flags | VM_HUGEPAGE)) return; - /* - * Symmetry with retract_page_tables(): Exclude MAP_PRIVATE mappings - * that got written to. Without this, we'd have to also lock the - * anon_vma if one exists. - */ - if (vma->anon_vma) - return; - hpage = find_lock_page(vma->vm_file->f_mapping, linear_page_index(vma, haddr)); if (!hpage) @@ -1538,6 +1530,10 @@ void collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr) } /* step 4: collapse pmd */ + /* we make no change to anon, but protect concurrent anon page lookup */ + if (vma->anon_vma) + anon_vma_lock_write(vma->anon_vma); + mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, NULL, mm, haddr, haddr + HPAGE_PMD_SIZE); mmu_notifier_invalidate_range_start(&range); @@ -1547,6 +1543,8 @@ void collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr) mmu_notifier_invalidate_range_end(&range); pte_free(mm, pmd_pgtable(_pmd)); + if (vma->anon_vma) + anon_vma_unlock_write(vma->anon_vma); i_mmap_unlock_write(vma->vm_file->f_mapping); drop_hpage: |