Skip to content

Commit

Permalink
Merge tag 'mm-hotfixes-stable-2024-01-05-11-35' of git://git.kernel.o…
Browse files Browse the repository at this point in the history
…rg/pub/scm/linux/kernel/git/akpm/mm

Pull misc mm fixes from Andrew Morton:
 "12 hotfixes.

  Two are cc:stable and the remainder either address post-6.7 issues or
  aren't considered necessary for earlier kernel versions"

* tag 'mm-hotfixes-stable-2024-01-05-11-35' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm:
  mm: shrinker: use kvzalloc_node() from expand_one_shrinker_info()
  mailmap: add entries for Mathieu Othacehe
  MAINTAINERS: change vmware.com addresses to broadcom.com
  arch/mm/fault: fix major fault accounting when retrying under per-VMA lock
  mm/mglru: skip special VMAs in lru_gen_look_around()
  MAINTAINERS: hand over hwpoison maintainership to Miaohe Lin
  MAINTAINERS: remove hugetlb maintainer Mike Kravetz
  mm: fix unmap_mapping_range high bits shift bug
  mm: memcg: fix split queue list crash when large folio migration
  mm: fix arithmetic for max_prop_frac when setting max_ratio
  mm: fix arithmetic for bdi min_ratio
  mm: align larger anonymous mappings on THP boundaries
  • Loading branch information
torvalds committed Jan 5, 2024
2 parents 0d3ac66 + 7fba942 commit 95c8a35
Show file tree
Hide file tree
Showing 15 changed files with 52 additions and 19 deletions.
3 changes: 2 additions & 1 deletion .mailmap
Original file line number Diff line number Diff line change
Expand Up @@ -377,7 +377,7 @@ Martin Kepplinger <[email protected]> <[email protected]>
Martin Kepplinger <[email protected]> <[email protected]>
Martin Kepplinger <[email protected]> <[email protected]>
Martyna Szapar-Mudlaw <[email protected]> <[email protected]>
Mathieu Othacehe <[email protected]>
Mathieu Othacehe <[email protected]> <[email protected]>
Mat Martineau <[email protected]> <[email protected]>
Mat Martineau <[email protected]> <[email protected]>
Matthew Wilcox <[email protected]> <[email protected]>
Expand Down Expand Up @@ -638,4 +638,5 @@ Wolfram Sang <[email protected]> <[email protected]>
Wolfram Sang <[email protected]> <[email protected]>
Yakir Yang <[email protected]> <[email protected]>
Yusuke Goda <[email protected]>
Zack Rusin <[email protected]> <[email protected]>
Zhu Yanjun <[email protected]> <[email protected]>
4 changes: 4 additions & 0 deletions CREDITS
Original file line number Diff line number Diff line change
Expand Up @@ -2130,6 +2130,10 @@ S: 2213 La Terrace Circle
S: San Jose, CA 95123
S: USA

N: Mike Kravetz
E: [email protected]
D: Maintenance and development of the hugetlb subsystem

N: Andreas S. Krebs
E: [email protected]
D: CYPRESS CY82C693 chipset IDE, Digital's PC-Alpha 164SX boards
Expand Down
14 changes: 6 additions & 8 deletions MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -6901,8 +6901,8 @@ T: git git://anongit.freedesktop.org/drm/drm-misc
F: drivers/gpu/drm/vboxvideo/

DRM DRIVER FOR VMWARE VIRTUAL GPU
M: Zack Rusin <zackr@vmware.com>
R: VMware Graphics Reviewers <linux-graphics-maintainer@vmware.com>
M: Zack Rusin <zack.rusin@broadcom.com>
R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>
L: [email protected]
S: Supported
T: git git://anongit.freedesktop.org/drm/drm-misc
Expand Down Expand Up @@ -9767,7 +9767,6 @@ F: Documentation/networking/device_drivers/ethernet/huawei/hinic.rst
F: drivers/net/ethernet/huawei/hinic/

HUGETLB SUBSYSTEM
M: Mike Kravetz <[email protected]>
M: Muchun Song <[email protected]>
L: [email protected]
S: Maintained
Expand All @@ -9791,8 +9790,8 @@ T: git git://linuxtv.org/media_tree.git
F: drivers/media/platform/st/sti/hva

HWPOISON MEMORY FAILURE HANDLING
M: Naoya Horiguchi <naoya.horiguchi@nec.com>
R: Miaohe Lin <linmiaohe@huawei.com>
M: Miaohe Lin <linmiaohe@huawei.com>
R: Naoya Horiguchi <naoya.horiguchi@nec.com>
L: [email protected]
S: Maintained
F: mm/hwpoison-inject.c
Expand Down Expand Up @@ -23215,9 +23214,8 @@ F: drivers/misc/vmw_vmci/
F: include/linux/vmw_vmci*

VMWARE VMMOUSE SUBDRIVER
M: Zack Rusin <[email protected]>
R: VMware Graphics Reviewers <[email protected]>
R: VMware PV-Drivers Reviewers <[email protected]>
M: Zack Rusin <[email protected]>
R: Broadcom internal kernel review list <[email protected]>
L: [email protected]
S: Supported
F: drivers/input/mouse/vmmouse.c
Expand Down
2 changes: 2 additions & 0 deletions arch/arm64/mm/fault.c
Original file line number Diff line number Diff line change
Expand Up @@ -607,6 +607,8 @@ static int __kprobes do_page_fault(unsigned long far, unsigned long esr,
goto done;
}
count_vm_vma_lock_event(VMA_LOCK_RETRY);
if (fault & VM_FAULT_MAJOR)
mm_flags |= FAULT_FLAG_TRIED;

/* Quick path to respond to signals */
if (fault_signal_pending(fault, regs)) {
Expand Down
2 changes: 2 additions & 0 deletions arch/powerpc/mm/fault.c
Original file line number Diff line number Diff line change
Expand Up @@ -497,6 +497,8 @@ static int ___do_page_fault(struct pt_regs *regs, unsigned long address,
goto done;
}
count_vm_vma_lock_event(VMA_LOCK_RETRY);
if (fault & VM_FAULT_MAJOR)
flags |= FAULT_FLAG_TRIED;

if (fault_signal_pending(fault, regs))
return user_mode(regs) ? 0 : SIGBUS;
Expand Down
2 changes: 2 additions & 0 deletions arch/riscv/mm/fault.c
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,8 @@ void handle_page_fault(struct pt_regs *regs)
goto done;
}
count_vm_vma_lock_event(VMA_LOCK_RETRY);
if (fault & VM_FAULT_MAJOR)
flags |= FAULT_FLAG_TRIED;

if (fault_signal_pending(fault, regs)) {
if (!user_mode(regs))
Expand Down
3 changes: 3 additions & 0 deletions arch/s390/mm/fault.c
Original file line number Diff line number Diff line change
Expand Up @@ -337,6 +337,9 @@ static void do_exception(struct pt_regs *regs, int access)
return;
}
count_vm_vma_lock_event(VMA_LOCK_RETRY);
if (fault & VM_FAULT_MAJOR)
flags |= FAULT_FLAG_TRIED;

/* Quick path to respond to signals */
if (fault_signal_pending(fault, regs)) {
if (!user_mode(regs))
Expand Down
2 changes: 2 additions & 0 deletions arch/x86/mm/fault.c
Original file line number Diff line number Diff line change
Expand Up @@ -1370,6 +1370,8 @@ void do_user_addr_fault(struct pt_regs *regs,
goto done;
}
count_vm_vma_lock_event(VMA_LOCK_RETRY);
if (fault & VM_FAULT_MAJOR)
flags |= FAULT_FLAG_TRIED;

/* Quick path to respond to signals */
if (fault_signal_pending(fault, regs)) {
Expand Down
2 changes: 1 addition & 1 deletion mm/huge_memory.c
Original file line number Diff line number Diff line change
Expand Up @@ -2823,7 +2823,7 @@ void folio_undo_large_rmappable(struct folio *folio)
spin_lock_irqsave(&ds_queue->split_queue_lock, flags);
if (!list_empty(&folio->_deferred_list)) {
ds_queue->split_queue_len--;
list_del(&folio->_deferred_list);
list_del_init(&folio->_deferred_list);
}
spin_unlock_irqrestore(&ds_queue->split_queue_lock, flags);
}
Expand Down
11 changes: 11 additions & 0 deletions mm/memcontrol.c
Original file line number Diff line number Diff line change
Expand Up @@ -7543,6 +7543,17 @@ void mem_cgroup_migrate(struct folio *old, struct folio *new)

/* Transfer the charge and the css ref */
commit_charge(new, memcg);
/*
* If the old folio is a large folio and is in the split queue, it needs
* to be removed from the split queue now, in case getting an incorrect
* split queue in destroy_large_folio() after the memcg of the old folio
* is cleared.
*
* In addition, the old folio is about to be freed after migration, so
* removing from the split queue a bit earlier seems reasonable.
*/
if (folio_test_large(old) && folio_test_large_rmappable(old))
folio_undo_large_rmappable(old);
old->memcg_data = 0;
}

Expand Down
4 changes: 2 additions & 2 deletions mm/memory.c
Original file line number Diff line number Diff line change
Expand Up @@ -3624,8 +3624,8 @@ EXPORT_SYMBOL_GPL(unmap_mapping_pages);
void unmap_mapping_range(struct address_space *mapping,
loff_t const holebegin, loff_t const holelen, int even_cows)
{
pgoff_t hba = holebegin >> PAGE_SHIFT;
pgoff_t hlen = (holelen + PAGE_SIZE - 1) >> PAGE_SHIFT;
pgoff_t hba = (pgoff_t)(holebegin) >> PAGE_SHIFT;
pgoff_t hlen = ((pgoff_t)(holelen) + PAGE_SIZE - 1) >> PAGE_SHIFT;

/* Check for overflow. */
if (sizeof(holelen) > sizeof(hlen)) {
Expand Down
3 changes: 3 additions & 0 deletions mm/mmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -1829,6 +1829,9 @@ get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,
*/
pgoff = 0;
get_area = shmem_get_unmapped_area;
} else if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)) {
/* Ensures that larger anonymous mappings are THP aligned. */
get_area = thp_get_unmapped_area;
}

addr = get_area(file, addr, len, pgoff, flags);
Expand Down
4 changes: 2 additions & 2 deletions mm/page-writeback.c
Original file line number Diff line number Diff line change
Expand Up @@ -692,7 +692,6 @@ static int __bdi_set_min_ratio(struct backing_dev_info *bdi, unsigned int min_ra

if (min_ratio > 100 * BDI_RATIO_SCALE)
return -EINVAL;
min_ratio *= BDI_RATIO_SCALE;

spin_lock_bh(&bdi_lock);
if (min_ratio > bdi->max_ratio) {
Expand Down Expand Up @@ -729,7 +728,8 @@ static int __bdi_set_max_ratio(struct backing_dev_info *bdi, unsigned int max_ra
ret = -EINVAL;
} else {
bdi->max_ratio = max_ratio;
bdi->max_prop_frac = (FPROP_FRAC_BASE * max_ratio) / 100;
bdi->max_prop_frac = (FPROP_FRAC_BASE * max_ratio) /
(100 * BDI_RATIO_SCALE);
}
spin_unlock_bh(&bdi_lock);

Expand Down
2 changes: 1 addition & 1 deletion mm/shrinker.c
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ static int expand_one_shrinker_info(struct mem_cgroup *memcg, int new_size,
if (new_nr_max <= old->map_nr_max)
continue;

new = kvmalloc_node(sizeof(*new) + new_size, GFP_KERNEL, nid);
new = kvzalloc_node(sizeof(*new) + new_size, GFP_KERNEL, nid);
if (!new)
return -ENOMEM;

Expand Down
13 changes: 9 additions & 4 deletions mm/vmscan.c
Original file line number Diff line number Diff line change
Expand Up @@ -3955,6 +3955,7 @@ void lru_gen_look_around(struct page_vma_mapped_walk *pvmw)
int young = 0;
pte_t *pte = pvmw->pte;
unsigned long addr = pvmw->address;
struct vm_area_struct *vma = pvmw->vma;
struct folio *folio = pfn_folio(pvmw->pfn);
bool can_swap = !folio_is_file_lru(folio);
struct mem_cgroup *memcg = folio_memcg(folio);
Expand All @@ -3969,11 +3970,15 @@ void lru_gen_look_around(struct page_vma_mapped_walk *pvmw)
if (spin_is_contended(pvmw->ptl))
return;

/* exclude special VMAs containing anon pages from COW */
if (vma->vm_flags & VM_SPECIAL)
return;

/* avoid taking the LRU lock under the PTL when possible */
walk = current->reclaim_state ? current->reclaim_state->mm_walk : NULL;

start = max(addr & PMD_MASK, pvmw->vma->vm_start);
end = min(addr | ~PMD_MASK, pvmw->vma->vm_end - 1) + 1;
start = max(addr & PMD_MASK, vma->vm_start);
end = min(addr | ~PMD_MASK, vma->vm_end - 1) + 1;

if (end - start > MIN_LRU_BATCH * PAGE_SIZE) {
if (addr - start < MIN_LRU_BATCH * PAGE_SIZE / 2)
Expand All @@ -3998,7 +4003,7 @@ void lru_gen_look_around(struct page_vma_mapped_walk *pvmw)
unsigned long pfn;
pte_t ptent = ptep_get(pte + i);

pfn = get_pte_pfn(ptent, pvmw->vma, addr);
pfn = get_pte_pfn(ptent, vma, addr);
if (pfn == -1)
continue;

Expand All @@ -4009,7 +4014,7 @@ void lru_gen_look_around(struct page_vma_mapped_walk *pvmw)
if (!folio)
continue;

if (!ptep_test_and_clear_young(pvmw->vma, addr, pte + i))
if (!ptep_test_and_clear_young(vma, addr, pte + i))
VM_WARN_ON_ONCE(true);

young++;
Expand Down

0 comments on commit 95c8a35

Please sign in to comment.