Commit 413c1f14 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'mm-hotfixes-stable-2022-06-26' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm

Pull hotfixes from Andrew Morton:
 "Minor things, mainly - mailmap updates, MAINTAINERS updates, etc.

  Fixes for this merge window:

   - fix for a damon boot hang, from SeongJae

   - fix for a kfence warning splat, from Jason Donenfeld

   - fix for zero-pfn pinning, from Alex Williamson

   - fix for fallocate hole punch clearing, from Mike Kravetz

  Fixes for previous releases:

   - fix for a performance regression, from Marcelo

   - fix for a hwpoisining BUG from zhenwei pi"

* tag 'mm-hotfixes-stable-2022-06-26' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm:
  mailmap: add entry for Christian Marangi
  mm/memory-failure: disable unpoison once hw error happens
  hugetlbfs: zero partial pages during fallocate hole punch
  mm: memcontrol: reference to tools/cgroup/memcg_slabinfo.py
  mm: re-allow pinning of zero pfns
  mm/kfence: select random number before taking raw lock
  MAINTAINERS: add maillist information for LoongArch
  MAINTAINERS: update MM tree references
  MAINTAINERS: update Abel Vesa's email
  MAINTAINERS: add MEMORY HOT(UN)PLUG section and add David as reviewer
  MAINTAINERS: add Miaohe Lin as a memory-failure reviewer
  mailmap: add alias for jarkko@profian.com
  mm/damon/reclaim: schedule 'damon_reclaim_timer' only after 'system_wq' is initialized
  kthread: make it clear that kthread_create_on_node() might be terminated by any fatal signal
  mm: lru_cache_disable: use synchronize_rcu_expedited
  mm/page_isolation.c: fix one kernel-doc comment
parents 893d1eaa e67679cc
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -10,6 +10,8 @@
# Please keep this list dictionary sorted.
# Please keep this list dictionary sorted.
#
#
Aaron Durbin <adurbin@google.com>
Aaron Durbin <adurbin@google.com>
Abel Vesa <abelvesa@kernel.org> <abel.vesa@nxp.com>
Abel Vesa <abelvesa@kernel.org> <abelvesa@gmail.com>
Abhinav Kumar <quic_abhinavk@quicinc.com> <abhinavk@codeaurora.org>
Abhinav Kumar <quic_abhinavk@quicinc.com> <abhinavk@codeaurora.org>
Adam Oldham <oldhamca@gmail.com>
Adam Oldham <oldhamca@gmail.com>
Adam Radford <aradford@gmail.com>
Adam Radford <aradford@gmail.com>
@@ -85,6 +87,7 @@ Christian Borntraeger <borntraeger@linux.ibm.com> <borntrae@de.ibm.com>
Christian Brauner <brauner@kernel.org> <christian@brauner.io>
Christian Brauner <brauner@kernel.org> <christian@brauner.io>
Christian Brauner <brauner@kernel.org> <christian.brauner@canonical.com>
Christian Brauner <brauner@kernel.org> <christian.brauner@canonical.com>
Christian Brauner <brauner@kernel.org> <christian.brauner@ubuntu.com>
Christian Brauner <brauner@kernel.org> <christian.brauner@ubuntu.com>
Christian Marangi <ansuelsmth@gmail.com>
Christophe Ricard <christophe.ricard@gmail.com>
Christophe Ricard <christophe.ricard@gmail.com>
Christoph Hellwig <hch@lst.de>
Christoph Hellwig <hch@lst.de>
Colin Ian King <colin.king@intel.com> <colin.king@canonical.com>
Colin Ian King <colin.king@intel.com> <colin.king@canonical.com>
@@ -165,6 +168,7 @@ Jan Glauber <jan.glauber@gmail.com> <jang@de.ibm.com>
Jan Glauber <jan.glauber@gmail.com> <jang@linux.vnet.ibm.com>
Jan Glauber <jan.glauber@gmail.com> <jang@linux.vnet.ibm.com>
Jan Glauber <jan.glauber@gmail.com> <jglauber@cavium.com>
Jan Glauber <jan.glauber@gmail.com> <jglauber@cavium.com>
Jarkko Sakkinen <jarkko@kernel.org> <jarkko.sakkinen@linux.intel.com>
Jarkko Sakkinen <jarkko@kernel.org> <jarkko.sakkinen@linux.intel.com>
Jarkko Sakkinen <jarkko@kernel.org> <jarkko@profian.com>
Jason Gunthorpe <jgg@ziepe.ca> <jgg@mellanox.com>
Jason Gunthorpe <jgg@ziepe.ca> <jgg@mellanox.com>
Jason Gunthorpe <jgg@ziepe.ca> <jgg@nvidia.com>
Jason Gunthorpe <jgg@ziepe.ca> <jgg@nvidia.com>
Jason Gunthorpe <jgg@ziepe.ca> <jgunthorpe@obsidianresearch.com>
Jason Gunthorpe <jgg@ziepe.ca> <jgunthorpe@obsidianresearch.com>
+2 −1
Original line number Original line Diff line number Diff line
@@ -120,7 +120,8 @@ Testing
  unpoison-pfn
  unpoison-pfn
	Software-unpoison page at PFN echoed into this file. This way
	Software-unpoison page at PFN echoed into this file. This way
	a page can be reused again.  This only works for Linux
	a page can be reused again.  This only works for Linux
	injected failures, not for real memory failures.
	injected failures, not for real memory failures. Once any hardware
	memory failure happens, this feature is disabled.


  Note these injection interfaces are not stable and might change between
  Note these injection interfaces are not stable and might change between
  kernel versions
  kernel versions
+17 −4
Original line number Original line Diff line number Diff line
@@ -9152,6 +9152,7 @@ F: drivers/media/platform/st/sti/hva
HWPOISON MEMORY FAILURE HANDLING
HWPOISON MEMORY FAILURE HANDLING
M:	Naoya Horiguchi <naoya.horiguchi@nec.com>
M:	Naoya Horiguchi <naoya.horiguchi@nec.com>
R:	Miaohe Lin <linmiaohe@huawei.com>
L:	linux-mm@kvack.org
L:	linux-mm@kvack.org
S:	Maintained
S:	Maintained
F:	mm/hwpoison-inject.c
F:	mm/hwpoison-inject.c
@@ -11623,6 +11624,7 @@ F: drivers/gpu/drm/bridge/lontium-lt8912b.c
LOONGARCH
LOONGARCH
M:	Huacai Chen <chenhuacai@kernel.org>
M:	Huacai Chen <chenhuacai@kernel.org>
R:	WANG Xuerui <kernel@xen0n.name>
R:	WANG Xuerui <kernel@xen0n.name>
L:	loongarch@lists.linux.dev
S:	Maintained
S:	Maintained
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson.git
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson.git
F:	arch/loongarch/
F:	arch/loongarch/
@@ -12879,9 +12881,8 @@ M: Andrew Morton <akpm@linux-foundation.org>
L:	linux-mm@kvack.org
L:	linux-mm@kvack.org
S:	Maintained
S:	Maintained
W:	http://www.linux-mm.org
W:	http://www.linux-mm.org
T:	quilt https://ozlabs.org/~akpm/mmotm/
T:	git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
T:	quilt https://ozlabs.org/~akpm/mmots/
T:	quilt git://git.kernel.org/pub/scm/linux/kernel/git/akpm/25-new
T:	git git://github.com/hnaz/linux-mm.git
F:	include/linux/gfp.h
F:	include/linux/gfp.h
F:	include/linux/memory_hotplug.h
F:	include/linux/memory_hotplug.h
F:	include/linux/mm.h
F:	include/linux/mm.h
@@ -12891,6 +12892,18 @@ F: include/linux/vmalloc.h
F:	mm/
F:	mm/
F:	tools/testing/selftests/vm/
F:	tools/testing/selftests/vm/
MEMORY HOT(UN)PLUG
M:	David Hildenbrand <david@redhat.com>
M:	Oscar Salvador <osalvador@suse.de>
L:	linux-mm@kvack.org
S:	Maintained
F:	Documentation/admin-guide/mm/memory-hotplug.rst
F:	Documentation/core-api/memory-hotplug.rst
F:	drivers/base/memory.c
F:	include/linux/memory_hotplug.h
F:	mm/memory_hotplug.c
F:	tools/testing/selftests/memory-hotplug/
MEMORY TECHNOLOGY DEVICES (MTD)
MEMORY TECHNOLOGY DEVICES (MTD)
M:	Miquel Raynal <miquel.raynal@bootlin.com>
M:	Miquel Raynal <miquel.raynal@bootlin.com>
M:	Richard Weinberger <richard@nod.at>
M:	Richard Weinberger <richard@nod.at>
@@ -14295,7 +14308,7 @@ F: drivers/iio/gyro/fxas21002c_i2c.c
F:	drivers/iio/gyro/fxas21002c_spi.c
F:	drivers/iio/gyro/fxas21002c_spi.c
NXP i.MX CLOCK DRIVERS
NXP i.MX CLOCK DRIVERS
M:	Abel Vesa <abel.vesa@nxp.com>
M:	Abel Vesa <abelvesa@kernel.org>
L:	linux-clk@vger.kernel.org
L:	linux-clk@vger.kernel.org
L:	linux-imx@nxp.com
L:	linux-imx@nxp.com
S:	Maintained
S:	Maintained
+1 −1
Original line number Original line Diff line number Diff line
@@ -558,7 +558,7 @@ static ssize_t hard_offline_page_store(struct device *dev,
	if (kstrtoull(buf, 0, &pfn) < 0)
	if (kstrtoull(buf, 0, &pfn) < 0)
		return -EINVAL;
		return -EINVAL;
	pfn >>= PAGE_SHIFT;
	pfn >>= PAGE_SHIFT;
	ret = memory_failure(pfn, 0);
	ret = memory_failure(pfn, MF_SW_SIMULATED);
	if (ret == -EOPNOTSUPP)
	if (ret == -EOPNOTSUPP)
		ret = 0;
		ret = 0;
	return ret ? ret : count;
	return ret ? ret : count;
+53 −15
Original line number Original line Diff line number Diff line
@@ -600,23 +600,43 @@ static void hugetlb_vmtruncate(struct inode *inode, loff_t offset)
	remove_inode_hugepages(inode, offset, LLONG_MAX);
	remove_inode_hugepages(inode, offset, LLONG_MAX);
}
}


static void hugetlbfs_zero_partial_page(struct hstate *h,
					struct address_space *mapping,
					loff_t start,
					loff_t end)
{
	pgoff_t idx = start >> huge_page_shift(h);
	struct folio *folio;

	folio = filemap_lock_folio(mapping, idx);
	if (!folio)
		return;

	start = start & ~huge_page_mask(h);
	end = end & ~huge_page_mask(h);
	if (!end)
		end = huge_page_size(h);

	folio_zero_segment(folio, (size_t)start, (size_t)end);

	folio_unlock(folio);
	folio_put(folio);
}

static long hugetlbfs_punch_hole(struct inode *inode, loff_t offset, loff_t len)
static long hugetlbfs_punch_hole(struct inode *inode, loff_t offset, loff_t len)
{
{
	struct hugetlbfs_inode_info *info = HUGETLBFS_I(inode);
	struct address_space *mapping = inode->i_mapping;
	struct hstate *h = hstate_inode(inode);
	struct hstate *h = hstate_inode(inode);
	loff_t hpage_size = huge_page_size(h);
	loff_t hpage_size = huge_page_size(h);
	loff_t hole_start, hole_end;
	loff_t hole_start, hole_end;


	/*
	/*
	 * For hole punch round up the beginning offset of the hole and
	 * hole_start and hole_end indicate the full pages within the hole.
	 * round down the end.
	 */
	 */
	hole_start = round_up(offset, hpage_size);
	hole_start = round_up(offset, hpage_size);
	hole_end = round_down(offset + len, hpage_size);
	hole_end = round_down(offset + len, hpage_size);


	if (hole_end > hole_start) {
		struct address_space *mapping = inode->i_mapping;
		struct hugetlbfs_inode_info *info = HUGETLBFS_I(inode);

	inode_lock(inode);
	inode_lock(inode);


	/* protected by i_rwsem */
	/* protected by i_rwsem */
@@ -626,14 +646,32 @@ static long hugetlbfs_punch_hole(struct inode *inode, loff_t offset, loff_t len)
	}
	}


	i_mmap_lock_write(mapping);
	i_mmap_lock_write(mapping);

	/* If range starts before first full page, zero partial page. */
	if (offset < hole_start)
		hugetlbfs_zero_partial_page(h, mapping,
				offset, min(offset + len, hole_start));

	/* Unmap users of full pages in the hole. */
	if (hole_end > hole_start) {
		if (!RB_EMPTY_ROOT(&mapping->i_mmap.rb_root))
		if (!RB_EMPTY_ROOT(&mapping->i_mmap.rb_root))
			hugetlb_vmdelete_list(&mapping->i_mmap,
			hugetlb_vmdelete_list(&mapping->i_mmap,
					      hole_start >> PAGE_SHIFT,
					      hole_start >> PAGE_SHIFT,
					      hole_end >> PAGE_SHIFT, 0);
					      hole_end >> PAGE_SHIFT, 0);
	}

	/* If range extends beyond last full page, zero partial page. */
	if ((offset + len) > hole_end && (offset + len) > hole_start)
		hugetlbfs_zero_partial_page(h, mapping,
				hole_end, offset + len);

	i_mmap_unlock_write(mapping);
	i_mmap_unlock_write(mapping);

	/* Remove full pages from the file. */
	if (hole_end > hole_start)
		remove_inode_hugepages(inode, hole_start, hole_end);
		remove_inode_hugepages(inode, hole_start, hole_end);

	inode_unlock(inode);
	inode_unlock(inode);
	}


	return 0;
	return 0;
}
}
Loading