mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-10-22 15:03:53 +02:00
21 hotfixes. 8 are cc:stable and the remainder address post-6.13 issues.
13 are for MM and 8 are for non-MM. All are singletons, please see the changelogs for details. -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQTTMBEPP41GrTpTJgfdBJ7gKXxAjgUCZ54MEgAKCRDdBJ7gKXxA jlhdAP0evTQ9JX+22DDWSVdWFBbnQ74c5ddFXVQc1LO2G2FhFgD+OXhH8E65Nez5 qGWjb4xgjoQTHS7AL4pYEFYqx/cpbAQ= =rN+l -----END PGP SIGNATURE----- Merge tag 'mm-hotfixes-stable-2025-02-01-03-56' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm Pull misc fixes from Andrew Morton: "21 hotfixes. 8 are cc:stable and the remainder address post-6.13 issues. 13 are for MM and 8 are for non-MM. All are singletons, please see the changelogs for details" * tag 'mm-hotfixes-stable-2025-02-01-03-56' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm: (21 commits) MAINTAINERS: include linux-mm for xarray maintenance revert "xarray: port tests to kunit" MAINTAINERS: add lib/test_xarray.c mailmap, MAINTAINERS, docs: update Carlos's email address mm/hugetlb: fix hugepage allocation for interleaved memory nodes mm: gup: fix infinite loop within __get_longterm_locked mm, swap: fix reclaim offset calculation error during allocation .mailmap: update email address for Christopher Obbard kfence: skip __GFP_THISNODE allocations on NUMA systems nilfs2: fix possible int overflows in nilfs_fiemap() mm: compaction: use the proper flag to determine watermarks kernel: be more careful about dup_mmap() failures and uprobe registering mm/fake-numa: handle cases with no SRAT info mm: kmemleak: fix upper boundary check for physical address objects mailmap: add an entry for Hamza Mahfooz MAINTAINERS: mailmap: update Yosry Ahmed's email address scripts/gdb: fix aarch64 userspace detection in get_current_task mm/vmscan: accumulate nr_demoted for accurate demotion statistics ocfs2: fix incorrect CPU endianness conversion causing mount failure mm/zsmalloc: add __maybe_unused attribute for is_first_zpdesc() ...
This commit is contained in:
commit
03cc3579bc
7
.mailmap
7
.mailmap
|
@ -150,7 +150,9 @@ Bryan Tan <bryan-bt.tan@broadcom.com> <bryantan@vmware.com>
|
||||||
Cai Huoqing <cai.huoqing@linux.dev> <caihuoqing@baidu.com>
|
Cai Huoqing <cai.huoqing@linux.dev> <caihuoqing@baidu.com>
|
||||||
Can Guo <quic_cang@quicinc.com> <cang@codeaurora.org>
|
Can Guo <quic_cang@quicinc.com> <cang@codeaurora.org>
|
||||||
Carl Huang <quic_cjhuang@quicinc.com> <cjhuang@codeaurora.org>
|
Carl Huang <quic_cjhuang@quicinc.com> <cjhuang@codeaurora.org>
|
||||||
Carlos Bilbao <carlos.bilbao.osdev@gmail.com> <carlos.bilbao@amd.com>
|
Carlos Bilbao <carlos.bilbao@kernel.org> <carlos.bilbao@amd.com>
|
||||||
|
Carlos Bilbao <carlos.bilbao@kernel.org> <carlos.bilbao.osdev@gmail.com>
|
||||||
|
Carlos Bilbao <carlos.bilbao@kernel.org> <bilbao@vt.edu>
|
||||||
Changbin Du <changbin.du@intel.com> <changbin.du@gmail.com>
|
Changbin Du <changbin.du@intel.com> <changbin.du@gmail.com>
|
||||||
Changbin Du <changbin.du@intel.com> <changbin.du@intel.com>
|
Changbin Du <changbin.du@intel.com> <changbin.du@intel.com>
|
||||||
Chao Yu <chao@kernel.org> <chao2.yu@samsung.com>
|
Chao Yu <chao@kernel.org> <chao2.yu@samsung.com>
|
||||||
|
@ -167,6 +169,7 @@ 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>
|
Christian Marangi <ansuelsmth@gmail.com>
|
||||||
Christophe Ricard <christophe.ricard@gmail.com>
|
Christophe Ricard <christophe.ricard@gmail.com>
|
||||||
|
Christopher Obbard <christopher.obbard@linaro.org> <chris.obbard@collabora.com>
|
||||||
Christoph Hellwig <hch@lst.de>
|
Christoph Hellwig <hch@lst.de>
|
||||||
Chuck Lever <chuck.lever@oracle.com> <cel@kernel.org>
|
Chuck Lever <chuck.lever@oracle.com> <cel@kernel.org>
|
||||||
Chuck Lever <chuck.lever@oracle.com> <cel@netapp.com>
|
Chuck Lever <chuck.lever@oracle.com> <cel@netapp.com>
|
||||||
|
@ -263,6 +266,7 @@ Guo Ren <guoren@kernel.org> <ren_guo@c-sky.com>
|
||||||
Guru Das Srinagesh <quic_gurus@quicinc.com> <gurus@codeaurora.org>
|
Guru Das Srinagesh <quic_gurus@quicinc.com> <gurus@codeaurora.org>
|
||||||
Gustavo Padovan <gustavo@las.ic.unicamp.br>
|
Gustavo Padovan <gustavo@las.ic.unicamp.br>
|
||||||
Gustavo Padovan <padovan@profusion.mobi>
|
Gustavo Padovan <padovan@profusion.mobi>
|
||||||
|
Hamza Mahfooz <hamzamahfooz@linux.microsoft.com> <hamza.mahfooz@amd.com>
|
||||||
Hanjun Guo <guohanjun@huawei.com> <hanjun.guo@linaro.org>
|
Hanjun Guo <guohanjun@huawei.com> <hanjun.guo@linaro.org>
|
||||||
Hans Verkuil <hverkuil@xs4all.nl> <hansverk@cisco.com>
|
Hans Verkuil <hverkuil@xs4all.nl> <hansverk@cisco.com>
|
||||||
Hans Verkuil <hverkuil@xs4all.nl> <hverkuil-cisco@xs4all.nl>
|
Hans Verkuil <hverkuil@xs4all.nl> <hverkuil-cisco@xs4all.nl>
|
||||||
|
@ -763,6 +767,7 @@ Wolfram Sang <wsa@kernel.org> <wsa@the-dreams.de>
|
||||||
Yakir Yang <kuankuan.y@gmail.com> <ykk@rock-chips.com>
|
Yakir Yang <kuankuan.y@gmail.com> <ykk@rock-chips.com>
|
||||||
Yanteng Si <si.yanteng@linux.dev> <siyanteng@loongson.cn>
|
Yanteng Si <si.yanteng@linux.dev> <siyanteng@loongson.cn>
|
||||||
Ying Huang <huang.ying.caritas@gmail.com> <ying.huang@intel.com>
|
Ying Huang <huang.ying.caritas@gmail.com> <ying.huang@intel.com>
|
||||||
|
Yosry Ahmed <yosry.ahmed@linux.dev> <yosryahmed@google.com>
|
||||||
Yusuke Goda <goda.yusuke@renesas.com>
|
Yusuke Goda <goda.yusuke@renesas.com>
|
||||||
Zack Rusin <zack.rusin@broadcom.com> <zackr@vmware.com>
|
Zack Rusin <zack.rusin@broadcom.com> <zackr@vmware.com>
|
||||||
Zhu Yanjun <zyjzyj2000@gmail.com> <yanjunz@nvidia.com>
|
Zhu Yanjun <zyjzyj2000@gmail.com> <yanjunz@nvidia.com>
|
||||||
|
|
|
@ -7,7 +7,7 @@ Traducción al español
|
||||||
|
|
||||||
\kerneldocCJKoff
|
\kerneldocCJKoff
|
||||||
|
|
||||||
:maintainer: Carlos Bilbao <carlos.bilbao.osdev@gmail.com>
|
:maintainer: Carlos Bilbao <carlos.bilbao@kernel.org>
|
||||||
|
|
||||||
.. _sp_disclaimer:
|
.. _sp_disclaimer:
|
||||||
|
|
||||||
|
|
12
MAINTAINERS
12
MAINTAINERS
|
@ -1090,7 +1090,7 @@ F: drivers/video/fbdev/geode/
|
||||||
|
|
||||||
AMD HSMP DRIVER
|
AMD HSMP DRIVER
|
||||||
M: Naveen Krishna Chatradhi <naveenkrishna.chatradhi@amd.com>
|
M: Naveen Krishna Chatradhi <naveenkrishna.chatradhi@amd.com>
|
||||||
R: Carlos Bilbao <carlos.bilbao.osdev@gmail.com>
|
R: Carlos Bilbao <carlos.bilbao@kernel.org>
|
||||||
L: platform-driver-x86@vger.kernel.org
|
L: platform-driver-x86@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/arch/x86/amd_hsmp.rst
|
F: Documentation/arch/x86/amd_hsmp.rst
|
||||||
|
@ -5857,7 +5857,7 @@ F: drivers/usb/atm/cxacru.c
|
||||||
|
|
||||||
CONFIDENTIAL COMPUTING THREAT MODEL FOR X86 VIRTUALIZATION (SNP/TDX)
|
CONFIDENTIAL COMPUTING THREAT MODEL FOR X86 VIRTUALIZATION (SNP/TDX)
|
||||||
M: Elena Reshetova <elena.reshetova@intel.com>
|
M: Elena Reshetova <elena.reshetova@intel.com>
|
||||||
M: Carlos Bilbao <carlos.bilbao.osdev@gmail.com>
|
M: Carlos Bilbao <carlos.bilbao@kernel.org>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/security/snp-tdx-threat-model.rst
|
F: Documentation/security/snp-tdx-threat-model.rst
|
||||||
|
|
||||||
|
@ -11331,7 +11331,7 @@ S: Orphan
|
||||||
F: drivers/video/fbdev/imsttfb.c
|
F: drivers/video/fbdev/imsttfb.c
|
||||||
|
|
||||||
INDEX OF FURTHER KERNEL DOCUMENTATION
|
INDEX OF FURTHER KERNEL DOCUMENTATION
|
||||||
M: Carlos Bilbao <carlos.bilbao.osdev@gmail.com>
|
M: Carlos Bilbao <carlos.bilbao@kernel.org>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/process/kernel-docs.rst
|
F: Documentation/process/kernel-docs.rst
|
||||||
|
|
||||||
|
@ -22215,7 +22215,7 @@ Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||||
F: drivers/media/dvb-frontends/sp2*
|
F: drivers/media/dvb-frontends/sp2*
|
||||||
|
|
||||||
SPANISH DOCUMENTATION
|
SPANISH DOCUMENTATION
|
||||||
M: Carlos Bilbao <carlos.bilbao.osdev@gmail.com>
|
M: Carlos Bilbao <carlos.bilbao@kernel.org>
|
||||||
R: Avadhut Naik <avadhut.naik@amd.com>
|
R: Avadhut Naik <avadhut.naik@amd.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/translations/sp_SP/
|
F: Documentation/translations/sp_SP/
|
||||||
|
@ -25739,11 +25739,13 @@ F: arch/x86/entry/vdso/
|
||||||
XARRAY
|
XARRAY
|
||||||
M: Matthew Wilcox <willy@infradead.org>
|
M: Matthew Wilcox <willy@infradead.org>
|
||||||
L: linux-fsdevel@vger.kernel.org
|
L: linux-fsdevel@vger.kernel.org
|
||||||
|
L: linux-mm@kvack.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/core-api/xarray.rst
|
F: Documentation/core-api/xarray.rst
|
||||||
F: include/linux/idr.h
|
F: include/linux/idr.h
|
||||||
F: include/linux/xarray.h
|
F: include/linux/xarray.h
|
||||||
F: lib/idr.c
|
F: lib/idr.c
|
||||||
|
F: lib/test_xarray.c
|
||||||
F: lib/xarray.c
|
F: lib/xarray.c
|
||||||
F: tools/testing/radix-tree
|
F: tools/testing/radix-tree
|
||||||
|
|
||||||
|
@ -26223,7 +26225,7 @@ K: zstd
|
||||||
|
|
||||||
ZSWAP COMPRESSED SWAP CACHING
|
ZSWAP COMPRESSED SWAP CACHING
|
||||||
M: Johannes Weiner <hannes@cmpxchg.org>
|
M: Johannes Weiner <hannes@cmpxchg.org>
|
||||||
M: Yosry Ahmed <yosryahmed@google.com>
|
M: Yosry Ahmed <yosry.ahmed@linux.dev>
|
||||||
M: Nhat Pham <nphamcs@gmail.com>
|
M: Nhat Pham <nphamcs@gmail.com>
|
||||||
R: Chengming Zhou <chengming.zhou@linux.dev>
|
R: Chengming Zhou <chengming.zhou@linux.dev>
|
||||||
L: linux-mm@kvack.org
|
L: linux-mm@kvack.org
|
||||||
|
|
|
@ -626,6 +626,7 @@ CONFIG_TEST_PRINTF=m
|
||||||
CONFIG_TEST_SCANF=m
|
CONFIG_TEST_SCANF=m
|
||||||
CONFIG_TEST_BITMAP=m
|
CONFIG_TEST_BITMAP=m
|
||||||
CONFIG_TEST_UUID=m
|
CONFIG_TEST_UUID=m
|
||||||
|
CONFIG_TEST_XARRAY=m
|
||||||
CONFIG_TEST_MAPLE_TREE=m
|
CONFIG_TEST_MAPLE_TREE=m
|
||||||
CONFIG_TEST_RHASHTABLE=m
|
CONFIG_TEST_RHASHTABLE=m
|
||||||
CONFIG_TEST_IDA=m
|
CONFIG_TEST_IDA=m
|
||||||
|
|
|
@ -583,6 +583,7 @@ CONFIG_TEST_PRINTF=m
|
||||||
CONFIG_TEST_SCANF=m
|
CONFIG_TEST_SCANF=m
|
||||||
CONFIG_TEST_BITMAP=m
|
CONFIG_TEST_BITMAP=m
|
||||||
CONFIG_TEST_UUID=m
|
CONFIG_TEST_UUID=m
|
||||||
|
CONFIG_TEST_XARRAY=m
|
||||||
CONFIG_TEST_MAPLE_TREE=m
|
CONFIG_TEST_MAPLE_TREE=m
|
||||||
CONFIG_TEST_RHASHTABLE=m
|
CONFIG_TEST_RHASHTABLE=m
|
||||||
CONFIG_TEST_IDA=m
|
CONFIG_TEST_IDA=m
|
||||||
|
|
|
@ -603,6 +603,7 @@ CONFIG_TEST_PRINTF=m
|
||||||
CONFIG_TEST_SCANF=m
|
CONFIG_TEST_SCANF=m
|
||||||
CONFIG_TEST_BITMAP=m
|
CONFIG_TEST_BITMAP=m
|
||||||
CONFIG_TEST_UUID=m
|
CONFIG_TEST_UUID=m
|
||||||
|
CONFIG_TEST_XARRAY=m
|
||||||
CONFIG_TEST_MAPLE_TREE=m
|
CONFIG_TEST_MAPLE_TREE=m
|
||||||
CONFIG_TEST_RHASHTABLE=m
|
CONFIG_TEST_RHASHTABLE=m
|
||||||
CONFIG_TEST_IDA=m
|
CONFIG_TEST_IDA=m
|
||||||
|
|
|
@ -575,6 +575,7 @@ CONFIG_TEST_PRINTF=m
|
||||||
CONFIG_TEST_SCANF=m
|
CONFIG_TEST_SCANF=m
|
||||||
CONFIG_TEST_BITMAP=m
|
CONFIG_TEST_BITMAP=m
|
||||||
CONFIG_TEST_UUID=m
|
CONFIG_TEST_UUID=m
|
||||||
|
CONFIG_TEST_XARRAY=m
|
||||||
CONFIG_TEST_MAPLE_TREE=m
|
CONFIG_TEST_MAPLE_TREE=m
|
||||||
CONFIG_TEST_RHASHTABLE=m
|
CONFIG_TEST_RHASHTABLE=m
|
||||||
CONFIG_TEST_IDA=m
|
CONFIG_TEST_IDA=m
|
||||||
|
|
|
@ -585,6 +585,7 @@ CONFIG_TEST_PRINTF=m
|
||||||
CONFIG_TEST_SCANF=m
|
CONFIG_TEST_SCANF=m
|
||||||
CONFIG_TEST_BITMAP=m
|
CONFIG_TEST_BITMAP=m
|
||||||
CONFIG_TEST_UUID=m
|
CONFIG_TEST_UUID=m
|
||||||
|
CONFIG_TEST_XARRAY=m
|
||||||
CONFIG_TEST_MAPLE_TREE=m
|
CONFIG_TEST_MAPLE_TREE=m
|
||||||
CONFIG_TEST_RHASHTABLE=m
|
CONFIG_TEST_RHASHTABLE=m
|
||||||
CONFIG_TEST_IDA=m
|
CONFIG_TEST_IDA=m
|
||||||
|
|
|
@ -602,6 +602,7 @@ CONFIG_TEST_PRINTF=m
|
||||||
CONFIG_TEST_SCANF=m
|
CONFIG_TEST_SCANF=m
|
||||||
CONFIG_TEST_BITMAP=m
|
CONFIG_TEST_BITMAP=m
|
||||||
CONFIG_TEST_UUID=m
|
CONFIG_TEST_UUID=m
|
||||||
|
CONFIG_TEST_XARRAY=m
|
||||||
CONFIG_TEST_MAPLE_TREE=m
|
CONFIG_TEST_MAPLE_TREE=m
|
||||||
CONFIG_TEST_RHASHTABLE=m
|
CONFIG_TEST_RHASHTABLE=m
|
||||||
CONFIG_TEST_IDA=m
|
CONFIG_TEST_IDA=m
|
||||||
|
|
|
@ -689,6 +689,7 @@ CONFIG_TEST_PRINTF=m
|
||||||
CONFIG_TEST_SCANF=m
|
CONFIG_TEST_SCANF=m
|
||||||
CONFIG_TEST_BITMAP=m
|
CONFIG_TEST_BITMAP=m
|
||||||
CONFIG_TEST_UUID=m
|
CONFIG_TEST_UUID=m
|
||||||
|
CONFIG_TEST_XARRAY=m
|
||||||
CONFIG_TEST_MAPLE_TREE=m
|
CONFIG_TEST_MAPLE_TREE=m
|
||||||
CONFIG_TEST_RHASHTABLE=m
|
CONFIG_TEST_RHASHTABLE=m
|
||||||
CONFIG_TEST_IDA=m
|
CONFIG_TEST_IDA=m
|
||||||
|
|
|
@ -575,6 +575,7 @@ CONFIG_TEST_PRINTF=m
|
||||||
CONFIG_TEST_SCANF=m
|
CONFIG_TEST_SCANF=m
|
||||||
CONFIG_TEST_BITMAP=m
|
CONFIG_TEST_BITMAP=m
|
||||||
CONFIG_TEST_UUID=m
|
CONFIG_TEST_UUID=m
|
||||||
|
CONFIG_TEST_XARRAY=m
|
||||||
CONFIG_TEST_MAPLE_TREE=m
|
CONFIG_TEST_MAPLE_TREE=m
|
||||||
CONFIG_TEST_RHASHTABLE=m
|
CONFIG_TEST_RHASHTABLE=m
|
||||||
CONFIG_TEST_IDA=m
|
CONFIG_TEST_IDA=m
|
||||||
|
|
|
@ -576,6 +576,7 @@ CONFIG_TEST_PRINTF=m
|
||||||
CONFIG_TEST_SCANF=m
|
CONFIG_TEST_SCANF=m
|
||||||
CONFIG_TEST_BITMAP=m
|
CONFIG_TEST_BITMAP=m
|
||||||
CONFIG_TEST_UUID=m
|
CONFIG_TEST_UUID=m
|
||||||
|
CONFIG_TEST_XARRAY=m
|
||||||
CONFIG_TEST_MAPLE_TREE=m
|
CONFIG_TEST_MAPLE_TREE=m
|
||||||
CONFIG_TEST_RHASHTABLE=m
|
CONFIG_TEST_RHASHTABLE=m
|
||||||
CONFIG_TEST_IDA=m
|
CONFIG_TEST_IDA=m
|
||||||
|
|
|
@ -592,6 +592,7 @@ CONFIG_TEST_PRINTF=m
|
||||||
CONFIG_TEST_SCANF=m
|
CONFIG_TEST_SCANF=m
|
||||||
CONFIG_TEST_BITMAP=m
|
CONFIG_TEST_BITMAP=m
|
||||||
CONFIG_TEST_UUID=m
|
CONFIG_TEST_UUID=m
|
||||||
|
CONFIG_TEST_XARRAY=m
|
||||||
CONFIG_TEST_MAPLE_TREE=m
|
CONFIG_TEST_MAPLE_TREE=m
|
||||||
CONFIG_TEST_RHASHTABLE=m
|
CONFIG_TEST_RHASHTABLE=m
|
||||||
CONFIG_TEST_IDA=m
|
CONFIG_TEST_IDA=m
|
||||||
|
|
|
@ -572,6 +572,7 @@ CONFIG_TEST_PRINTF=m
|
||||||
CONFIG_TEST_SCANF=m
|
CONFIG_TEST_SCANF=m
|
||||||
CONFIG_TEST_BITMAP=m
|
CONFIG_TEST_BITMAP=m
|
||||||
CONFIG_TEST_UUID=m
|
CONFIG_TEST_UUID=m
|
||||||
|
CONFIG_TEST_XARRAY=m
|
||||||
CONFIG_TEST_MAPLE_TREE=m
|
CONFIG_TEST_MAPLE_TREE=m
|
||||||
CONFIG_TEST_RHASHTABLE=m
|
CONFIG_TEST_RHASHTABLE=m
|
||||||
CONFIG_TEST_IDA=m
|
CONFIG_TEST_IDA=m
|
||||||
|
|
|
@ -573,6 +573,7 @@ CONFIG_TEST_PRINTF=m
|
||||||
CONFIG_TEST_SCANF=m
|
CONFIG_TEST_SCANF=m
|
||||||
CONFIG_TEST_BITMAP=m
|
CONFIG_TEST_BITMAP=m
|
||||||
CONFIG_TEST_UUID=m
|
CONFIG_TEST_UUID=m
|
||||||
|
CONFIG_TEST_XARRAY=m
|
||||||
CONFIG_TEST_MAPLE_TREE=m
|
CONFIG_TEST_MAPLE_TREE=m
|
||||||
CONFIG_TEST_RHASHTABLE=m
|
CONFIG_TEST_RHASHTABLE=m
|
||||||
CONFIG_TEST_IDA=m
|
CONFIG_TEST_IDA=m
|
||||||
|
|
|
@ -448,6 +448,7 @@ CONFIG_TEST_PRINTF=m
|
||||||
CONFIG_TEST_SCANF=m
|
CONFIG_TEST_SCANF=m
|
||||||
CONFIG_TEST_BITMAP=m
|
CONFIG_TEST_BITMAP=m
|
||||||
CONFIG_TEST_UUID=m
|
CONFIG_TEST_UUID=m
|
||||||
|
CONFIG_TEST_XARRAY=m
|
||||||
CONFIG_TEST_MAPLE_TREE=m
|
CONFIG_TEST_MAPLE_TREE=m
|
||||||
CONFIG_TEST_RHASHTABLE=m
|
CONFIG_TEST_RHASHTABLE=m
|
||||||
CONFIG_TEST_IDA=m
|
CONFIG_TEST_IDA=m
|
||||||
|
|
|
@ -95,9 +95,13 @@ int __init fix_pxm_node_maps(int max_nid)
|
||||||
int i, j, index = -1, count = 0;
|
int i, j, index = -1, count = 0;
|
||||||
nodemask_t nodes_to_enable;
|
nodemask_t nodes_to_enable;
|
||||||
|
|
||||||
if (numa_off || srat_disabled())
|
if (numa_off)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
/* no or incomplete node/PXM mapping set, nothing to do */
|
||||||
|
if (srat_disabled())
|
||||||
|
return 0;
|
||||||
|
|
||||||
/* find fake nodes PXM mapping */
|
/* find fake nodes PXM mapping */
|
||||||
for (i = 0; i < MAX_NUMNODES; i++) {
|
for (i = 0; i < MAX_NUMNODES; i++) {
|
||||||
if (node_to_pxm_map[i] != PXM_INVAL) {
|
if (node_to_pxm_map[i] != PXM_INVAL) {
|
||||||
|
@ -117,6 +121,11 @@ int __init fix_pxm_node_maps(int max_nid)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (index == -1) {
|
||||||
|
pr_debug("No node/PXM mapping has been set\n");
|
||||||
|
/* nothing more to be done */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if (WARN(index != max_nid, "%d max nid when expected %d\n",
|
if (WARN(index != max_nid, "%d max nid when expected %d\n",
|
||||||
index, max_nid))
|
index, max_nid))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -1186,7 +1186,7 @@ int nilfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
|
||||||
if (size) {
|
if (size) {
|
||||||
if (phys && blkphy << blkbits == phys + size) {
|
if (phys && blkphy << blkbits == phys + size) {
|
||||||
/* The current extent goes on */
|
/* The current extent goes on */
|
||||||
size += n << blkbits;
|
size += (u64)n << blkbits;
|
||||||
} else {
|
} else {
|
||||||
/* Terminate the current extent */
|
/* Terminate the current extent */
|
||||||
ret = fiemap_fill_next_extent(
|
ret = fiemap_fill_next_extent(
|
||||||
|
@ -1199,14 +1199,14 @@ int nilfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
|
||||||
flags = FIEMAP_EXTENT_MERGED;
|
flags = FIEMAP_EXTENT_MERGED;
|
||||||
logical = blkoff << blkbits;
|
logical = blkoff << blkbits;
|
||||||
phys = blkphy << blkbits;
|
phys = blkphy << blkbits;
|
||||||
size = n << blkbits;
|
size = (u64)n << blkbits;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* Start a new extent */
|
/* Start a new extent */
|
||||||
flags = FIEMAP_EXTENT_MERGED;
|
flags = FIEMAP_EXTENT_MERGED;
|
||||||
logical = blkoff << blkbits;
|
logical = blkoff << blkbits;
|
||||||
phys = blkphy << blkbits;
|
phys = blkphy << blkbits;
|
||||||
size = n << blkbits;
|
size = (u64)n << blkbits;
|
||||||
}
|
}
|
||||||
blkoff += n;
|
blkoff += n;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2285,7 +2285,7 @@ static int ocfs2_verify_volume(struct ocfs2_dinode *di,
|
||||||
mlog(ML_ERROR, "found superblock with incorrect block "
|
mlog(ML_ERROR, "found superblock with incorrect block "
|
||||||
"size bits: found %u, should be 9, 10, 11, or 12\n",
|
"size bits: found %u, should be 9, 10, 11, or 12\n",
|
||||||
blksz_bits);
|
blksz_bits);
|
||||||
} else if ((1 << le32_to_cpu(blksz_bits)) != blksz) {
|
} else if ((1 << blksz_bits) != blksz) {
|
||||||
mlog(ML_ERROR, "found superblock with incorrect block "
|
mlog(ML_ERROR, "found superblock with incorrect block "
|
||||||
"size: found %u, should be %u\n", 1 << blksz_bits, blksz);
|
"size: found %u, should be %u\n", 1 << blksz_bits, blksz);
|
||||||
} else if (le16_to_cpu(di->id2.i_super.s_major_rev_level) !=
|
} else if (le16_to_cpu(di->id2.i_super.s_major_rev_level) !=
|
||||||
|
|
|
@ -222,6 +222,7 @@ enum {
|
||||||
};
|
};
|
||||||
|
|
||||||
#define SWAP_CLUSTER_MAX 32UL
|
#define SWAP_CLUSTER_MAX 32UL
|
||||||
|
#define SWAP_CLUSTER_MAX_SKIPPED (SWAP_CLUSTER_MAX << 10)
|
||||||
#define COMPACT_CLUSTER_MAX SWAP_CLUSTER_MAX
|
#define COMPACT_CLUSTER_MAX SWAP_CLUSTER_MAX
|
||||||
|
|
||||||
/* Bit flag in swap_map */
|
/* Bit flag in swap_map */
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include <linux/rcupdate_trace.h>
|
#include <linux/rcupdate_trace.h>
|
||||||
#include <linux/workqueue.h>
|
#include <linux/workqueue.h>
|
||||||
#include <linux/srcu.h>
|
#include <linux/srcu.h>
|
||||||
|
#include <linux/oom.h> /* check_stable_address_space */
|
||||||
|
|
||||||
#include <linux/uprobes.h>
|
#include <linux/uprobes.h>
|
||||||
|
|
||||||
|
@ -1260,6 +1261,9 @@ register_for_each_vma(struct uprobe *uprobe, struct uprobe_consumer *new)
|
||||||
* returns NULL in find_active_uprobe_rcu().
|
* returns NULL in find_active_uprobe_rcu().
|
||||||
*/
|
*/
|
||||||
mmap_write_lock(mm);
|
mmap_write_lock(mm);
|
||||||
|
if (check_stable_address_space(mm))
|
||||||
|
goto unlock;
|
||||||
|
|
||||||
vma = find_vma(mm, info->vaddr);
|
vma = find_vma(mm, info->vaddr);
|
||||||
if (!vma || !valid_vma(vma, is_register) ||
|
if (!vma || !valid_vma(vma, is_register) ||
|
||||||
file_inode(vma->vm_file) != uprobe->inode)
|
file_inode(vma->vm_file) != uprobe->inode)
|
||||||
|
|
|
@ -760,7 +760,8 @@ loop_out:
|
||||||
mt_set_in_rcu(vmi.mas.tree);
|
mt_set_in_rcu(vmi.mas.tree);
|
||||||
ksm_fork(mm, oldmm);
|
ksm_fork(mm, oldmm);
|
||||||
khugepaged_fork(mm, oldmm);
|
khugepaged_fork(mm, oldmm);
|
||||||
} else if (mpnt) {
|
} else {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The entire maple tree has already been duplicated. If the
|
* The entire maple tree has already been duplicated. If the
|
||||||
* mmap duplication fails, mark the failure point with
|
* mmap duplication fails, mark the failure point with
|
||||||
|
@ -768,8 +769,18 @@ loop_out:
|
||||||
* stop releasing VMAs that have not been duplicated after this
|
* stop releasing VMAs that have not been duplicated after this
|
||||||
* point.
|
* point.
|
||||||
*/
|
*/
|
||||||
mas_set_range(&vmi.mas, mpnt->vm_start, mpnt->vm_end - 1);
|
if (mpnt) {
|
||||||
mas_store(&vmi.mas, XA_ZERO_ENTRY);
|
mas_set_range(&vmi.mas, mpnt->vm_start, mpnt->vm_end - 1);
|
||||||
|
mas_store(&vmi.mas, XA_ZERO_ENTRY);
|
||||||
|
/* Avoid OOM iterating a broken tree */
|
||||||
|
set_bit(MMF_OOM_SKIP, &mm->flags);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* The mm_struct is going to exit, but the locks will be dropped
|
||||||
|
* first. Set the mm_struct as unstable is advisable as it is
|
||||||
|
* not fully initialised.
|
||||||
|
*/
|
||||||
|
set_bit(MMF_UNSTABLE, &mm->flags);
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
mmap_write_unlock(mm);
|
mmap_write_unlock(mm);
|
||||||
|
|
|
@ -2456,22 +2456,8 @@ config TEST_BITMAP
|
||||||
config TEST_UUID
|
config TEST_UUID
|
||||||
tristate "Test functions located in the uuid module at runtime"
|
tristate "Test functions located in the uuid module at runtime"
|
||||||
|
|
||||||
config XARRAY_KUNIT
|
config TEST_XARRAY
|
||||||
tristate "KUnit test XArray code at runtime" if !KUNIT_ALL_TESTS
|
tristate "Test the XArray code at runtime"
|
||||||
depends on KUNIT
|
|
||||||
default KUNIT_ALL_TESTS
|
|
||||||
help
|
|
||||||
Enable this option to test the Xarray code at boot.
|
|
||||||
|
|
||||||
KUnit tests run during boot and output the results to the debug log
|
|
||||||
in TAP format (http://testanything.org/). Only useful for kernel devs
|
|
||||||
running the KUnit test harness, and not intended for inclusion into a
|
|
||||||
production build.
|
|
||||||
|
|
||||||
For more information on KUnit and unit tests in general please refer
|
|
||||||
to the KUnit documentation in Documentation/dev-tools/kunit/.
|
|
||||||
|
|
||||||
If unsure, say N.
|
|
||||||
|
|
||||||
config TEST_MAPLE_TREE
|
config TEST_MAPLE_TREE
|
||||||
tristate "Test the Maple Tree code at runtime or module load"
|
tristate "Test the Maple Tree code at runtime or module load"
|
||||||
|
|
|
@ -94,6 +94,7 @@ GCOV_PROFILE_test_bitmap.o := n
|
||||||
endif
|
endif
|
||||||
|
|
||||||
obj-$(CONFIG_TEST_UUID) += test_uuid.o
|
obj-$(CONFIG_TEST_UUID) += test_uuid.o
|
||||||
|
obj-$(CONFIG_TEST_XARRAY) += test_xarray.o
|
||||||
obj-$(CONFIG_TEST_MAPLE_TREE) += test_maple_tree.o
|
obj-$(CONFIG_TEST_MAPLE_TREE) += test_maple_tree.o
|
||||||
obj-$(CONFIG_TEST_PARMAN) += test_parman.o
|
obj-$(CONFIG_TEST_PARMAN) += test_parman.o
|
||||||
obj-$(CONFIG_TEST_KMOD) += test_kmod.o
|
obj-$(CONFIG_TEST_KMOD) += test_kmod.o
|
||||||
|
@ -372,7 +373,6 @@ CFLAGS_bitfield_kunit.o := $(DISABLE_STRUCTLEAK_PLUGIN)
|
||||||
obj-$(CONFIG_BITFIELD_KUNIT) += bitfield_kunit.o
|
obj-$(CONFIG_BITFIELD_KUNIT) += bitfield_kunit.o
|
||||||
obj-$(CONFIG_CHECKSUM_KUNIT) += checksum_kunit.o
|
obj-$(CONFIG_CHECKSUM_KUNIT) += checksum_kunit.o
|
||||||
obj-$(CONFIG_UTIL_MACROS_KUNIT) += util_macros_kunit.o
|
obj-$(CONFIG_UTIL_MACROS_KUNIT) += util_macros_kunit.o
|
||||||
obj-$(CONFIG_XARRAY_KUNIT) += test_xarray.o
|
|
||||||
obj-$(CONFIG_LIST_KUNIT_TEST) += list-test.o
|
obj-$(CONFIG_LIST_KUNIT_TEST) += list-test.o
|
||||||
obj-$(CONFIG_HASHTABLE_KUNIT_TEST) += hashtable_test.o
|
obj-$(CONFIG_HASHTABLE_KUNIT_TEST) += hashtable_test.o
|
||||||
obj-$(CONFIG_LINEAR_RANGES_TEST) += test_linear_ranges.o
|
obj-$(CONFIG_LINEAR_RANGES_TEST) += test_linear_ranges.o
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -2491,7 +2491,8 @@ bool compaction_zonelist_suitable(struct alloc_context *ac, int order,
|
||||||
*/
|
*/
|
||||||
static enum compact_result
|
static enum compact_result
|
||||||
compaction_suit_allocation_order(struct zone *zone, unsigned int order,
|
compaction_suit_allocation_order(struct zone *zone, unsigned int order,
|
||||||
int highest_zoneidx, unsigned int alloc_flags)
|
int highest_zoneidx, unsigned int alloc_flags,
|
||||||
|
bool async)
|
||||||
{
|
{
|
||||||
unsigned long watermark;
|
unsigned long watermark;
|
||||||
|
|
||||||
|
@ -2500,6 +2501,23 @@ compaction_suit_allocation_order(struct zone *zone, unsigned int order,
|
||||||
alloc_flags))
|
alloc_flags))
|
||||||
return COMPACT_SUCCESS;
|
return COMPACT_SUCCESS;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For unmovable allocations (without ALLOC_CMA), check if there is enough
|
||||||
|
* free memory in the non-CMA pageblocks. Otherwise compaction could form
|
||||||
|
* the high-order page in CMA pageblocks, which would not help the
|
||||||
|
* allocation to succeed. However, limit the check to costly order async
|
||||||
|
* compaction (such as opportunistic THP attempts) because there is the
|
||||||
|
* possibility that compaction would migrate pages from non-CMA to CMA
|
||||||
|
* pageblock.
|
||||||
|
*/
|
||||||
|
if (order > PAGE_ALLOC_COSTLY_ORDER && async &&
|
||||||
|
!(alloc_flags & ALLOC_CMA)) {
|
||||||
|
watermark = low_wmark_pages(zone) + compact_gap(order);
|
||||||
|
if (!__zone_watermark_ok(zone, 0, watermark, highest_zoneidx,
|
||||||
|
0, zone_page_state(zone, NR_FREE_PAGES)))
|
||||||
|
return COMPACT_SKIPPED;
|
||||||
|
}
|
||||||
|
|
||||||
if (!compaction_suitable(zone, order, highest_zoneidx))
|
if (!compaction_suitable(zone, order, highest_zoneidx))
|
||||||
return COMPACT_SKIPPED;
|
return COMPACT_SKIPPED;
|
||||||
|
|
||||||
|
@ -2535,7 +2553,8 @@ compact_zone(struct compact_control *cc, struct capture_control *capc)
|
||||||
if (!is_via_compact_memory(cc->order)) {
|
if (!is_via_compact_memory(cc->order)) {
|
||||||
ret = compaction_suit_allocation_order(cc->zone, cc->order,
|
ret = compaction_suit_allocation_order(cc->zone, cc->order,
|
||||||
cc->highest_zoneidx,
|
cc->highest_zoneidx,
|
||||||
cc->alloc_flags);
|
cc->alloc_flags,
|
||||||
|
cc->mode == MIGRATE_ASYNC);
|
||||||
if (ret != COMPACT_CONTINUE)
|
if (ret != COMPACT_CONTINUE)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -3038,7 +3057,8 @@ static bool kcompactd_node_suitable(pg_data_t *pgdat)
|
||||||
|
|
||||||
ret = compaction_suit_allocation_order(zone,
|
ret = compaction_suit_allocation_order(zone,
|
||||||
pgdat->kcompactd_max_order,
|
pgdat->kcompactd_max_order,
|
||||||
highest_zoneidx, ALLOC_WMARK_MIN);
|
highest_zoneidx, ALLOC_WMARK_MIN,
|
||||||
|
false);
|
||||||
if (ret == COMPACT_CONTINUE)
|
if (ret == COMPACT_CONTINUE)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -3079,7 +3099,8 @@ static void kcompactd_do_work(pg_data_t *pgdat)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ret = compaction_suit_allocation_order(zone,
|
ret = compaction_suit_allocation_order(zone,
|
||||||
cc.order, zoneid, ALLOC_WMARK_MIN);
|
cc.order, zoneid, ALLOC_WMARK_MIN,
|
||||||
|
false);
|
||||||
if (ret != COMPACT_CONTINUE)
|
if (ret != COMPACT_CONTINUE)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
14
mm/gup.c
14
mm/gup.c
|
@ -2320,13 +2320,13 @@ static void pofs_unpin(struct pages_or_folios *pofs)
|
||||||
/*
|
/*
|
||||||
* Returns the number of collected folios. Return value is always >= 0.
|
* Returns the number of collected folios. Return value is always >= 0.
|
||||||
*/
|
*/
|
||||||
static unsigned long collect_longterm_unpinnable_folios(
|
static void collect_longterm_unpinnable_folios(
|
||||||
struct list_head *movable_folio_list,
|
struct list_head *movable_folio_list,
|
||||||
struct pages_or_folios *pofs)
|
struct pages_or_folios *pofs)
|
||||||
{
|
{
|
||||||
unsigned long i, collected = 0;
|
|
||||||
struct folio *prev_folio = NULL;
|
struct folio *prev_folio = NULL;
|
||||||
bool drain_allow = true;
|
bool drain_allow = true;
|
||||||
|
unsigned long i;
|
||||||
|
|
||||||
for (i = 0; i < pofs->nr_entries; i++) {
|
for (i = 0; i < pofs->nr_entries; i++) {
|
||||||
struct folio *folio = pofs_get_folio(pofs, i);
|
struct folio *folio = pofs_get_folio(pofs, i);
|
||||||
|
@ -2338,8 +2338,6 @@ static unsigned long collect_longterm_unpinnable_folios(
|
||||||
if (folio_is_longterm_pinnable(folio))
|
if (folio_is_longterm_pinnable(folio))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
collected++;
|
|
||||||
|
|
||||||
if (folio_is_device_coherent(folio))
|
if (folio_is_device_coherent(folio))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -2361,8 +2359,6 @@ static unsigned long collect_longterm_unpinnable_folios(
|
||||||
NR_ISOLATED_ANON + folio_is_file_lru(folio),
|
NR_ISOLATED_ANON + folio_is_file_lru(folio),
|
||||||
folio_nr_pages(folio));
|
folio_nr_pages(folio));
|
||||||
}
|
}
|
||||||
|
|
||||||
return collected;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2439,11 +2435,9 @@ static long
|
||||||
check_and_migrate_movable_pages_or_folios(struct pages_or_folios *pofs)
|
check_and_migrate_movable_pages_or_folios(struct pages_or_folios *pofs)
|
||||||
{
|
{
|
||||||
LIST_HEAD(movable_folio_list);
|
LIST_HEAD(movable_folio_list);
|
||||||
unsigned long collected;
|
|
||||||
|
|
||||||
collected = collect_longterm_unpinnable_folios(&movable_folio_list,
|
collect_longterm_unpinnable_folios(&movable_folio_list, pofs);
|
||||||
pofs);
|
if (list_empty(&movable_folio_list))
|
||||||
if (!collected)
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return migrate_longterm_unpinnable_folios(&movable_folio_list, pofs);
|
return migrate_longterm_unpinnable_folios(&movable_folio_list, pofs);
|
||||||
|
|
|
@ -3309,7 +3309,7 @@ static void __init gather_bootmem_prealloc(void)
|
||||||
.thread_fn = gather_bootmem_prealloc_parallel,
|
.thread_fn = gather_bootmem_prealloc_parallel,
|
||||||
.fn_arg = NULL,
|
.fn_arg = NULL,
|
||||||
.start = 0,
|
.start = 0,
|
||||||
.size = num_node_state(N_MEMORY),
|
.size = nr_node_ids,
|
||||||
.align = 1,
|
.align = 1,
|
||||||
.min_chunk = 1,
|
.min_chunk = 1,
|
||||||
.max_threads = num_node_state(N_MEMORY),
|
.max_threads = num_node_state(N_MEMORY),
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include <linux/log2.h>
|
#include <linux/log2.h>
|
||||||
#include <linux/memblock.h>
|
#include <linux/memblock.h>
|
||||||
#include <linux/moduleparam.h>
|
#include <linux/moduleparam.h>
|
||||||
|
#include <linux/nodemask.h>
|
||||||
#include <linux/notifier.h>
|
#include <linux/notifier.h>
|
||||||
#include <linux/panic_notifier.h>
|
#include <linux/panic_notifier.h>
|
||||||
#include <linux/random.h>
|
#include <linux/random.h>
|
||||||
|
@ -1084,6 +1085,7 @@ void *__kfence_alloc(struct kmem_cache *s, size_t size, gfp_t flags)
|
||||||
* properties (e.g. reside in DMAable memory).
|
* properties (e.g. reside in DMAable memory).
|
||||||
*/
|
*/
|
||||||
if ((flags & GFP_ZONEMASK) ||
|
if ((flags & GFP_ZONEMASK) ||
|
||||||
|
((flags & __GFP_THISNODE) && num_online_nodes() > 1) ||
|
||||||
(s->flags & (SLAB_CACHE_DMA | SLAB_CACHE_DMA32))) {
|
(s->flags & (SLAB_CACHE_DMA | SLAB_CACHE_DMA32))) {
|
||||||
atomic_long_inc(&counters[KFENCE_COUNTER_SKIP_INCOMPAT]);
|
atomic_long_inc(&counters[KFENCE_COUNTER_SKIP_INCOMPAT]);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -1689,7 +1689,7 @@ static void kmemleak_scan(void)
|
||||||
unsigned long phys = object->pointer;
|
unsigned long phys = object->pointer;
|
||||||
|
|
||||||
if (PHYS_PFN(phys) < min_low_pfn ||
|
if (PHYS_PFN(phys) < min_low_pfn ||
|
||||||
PHYS_PFN(phys + object->size) >= max_low_pfn)
|
PHYS_PFN(phys + object->size) > max_low_pfn)
|
||||||
__paint_it(object, KMEMLEAK_BLACK);
|
__paint_it(object, KMEMLEAK_BLACK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -794,7 +794,7 @@ static unsigned int alloc_swap_scan_cluster(struct swap_info_struct *si,
|
||||||
if (!cluster_scan_range(si, ci, offset, nr_pages, &need_reclaim))
|
if (!cluster_scan_range(si, ci, offset, nr_pages, &need_reclaim))
|
||||||
continue;
|
continue;
|
||||||
if (need_reclaim) {
|
if (need_reclaim) {
|
||||||
ret = cluster_reclaim_range(si, ci, start, end);
|
ret = cluster_reclaim_range(si, ci, offset, offset + nr_pages);
|
||||||
/*
|
/*
|
||||||
* Reclaim drops ci->lock and cluster could be used
|
* Reclaim drops ci->lock and cluster could be used
|
||||||
* by another order. Not checking flag as off-list
|
* by another order. Not checking flag as off-list
|
||||||
|
|
13
mm/vmscan.c
13
mm/vmscan.c
|
@ -1086,7 +1086,7 @@ static unsigned int shrink_folio_list(struct list_head *folio_list,
|
||||||
struct folio_batch free_folios;
|
struct folio_batch free_folios;
|
||||||
LIST_HEAD(ret_folios);
|
LIST_HEAD(ret_folios);
|
||||||
LIST_HEAD(demote_folios);
|
LIST_HEAD(demote_folios);
|
||||||
unsigned int nr_reclaimed = 0;
|
unsigned int nr_reclaimed = 0, nr_demoted = 0;
|
||||||
unsigned int pgactivate = 0;
|
unsigned int pgactivate = 0;
|
||||||
bool do_demote_pass;
|
bool do_demote_pass;
|
||||||
struct swap_iocb *plug = NULL;
|
struct swap_iocb *plug = NULL;
|
||||||
|
@ -1550,8 +1550,9 @@ keep:
|
||||||
/* 'folio_list' is always empty here */
|
/* 'folio_list' is always empty here */
|
||||||
|
|
||||||
/* Migrate folios selected for demotion */
|
/* Migrate folios selected for demotion */
|
||||||
stat->nr_demoted = demote_folio_list(&demote_folios, pgdat);
|
nr_demoted = demote_folio_list(&demote_folios, pgdat);
|
||||||
nr_reclaimed += stat->nr_demoted;
|
nr_reclaimed += nr_demoted;
|
||||||
|
stat->nr_demoted += nr_demoted;
|
||||||
/* Folios that could not be demoted are still in @demote_folios */
|
/* Folios that could not be demoted are still in @demote_folios */
|
||||||
if (!list_empty(&demote_folios)) {
|
if (!list_empty(&demote_folios)) {
|
||||||
/* Folios which weren't demoted go back on @folio_list */
|
/* Folios which weren't demoted go back on @folio_list */
|
||||||
|
@ -1692,6 +1693,7 @@ static unsigned long isolate_lru_folios(unsigned long nr_to_scan,
|
||||||
unsigned long nr_skipped[MAX_NR_ZONES] = { 0, };
|
unsigned long nr_skipped[MAX_NR_ZONES] = { 0, };
|
||||||
unsigned long skipped = 0;
|
unsigned long skipped = 0;
|
||||||
unsigned long scan, total_scan, nr_pages;
|
unsigned long scan, total_scan, nr_pages;
|
||||||
|
unsigned long max_nr_skipped = 0;
|
||||||
LIST_HEAD(folios_skipped);
|
LIST_HEAD(folios_skipped);
|
||||||
|
|
||||||
total_scan = 0;
|
total_scan = 0;
|
||||||
|
@ -1706,9 +1708,12 @@ static unsigned long isolate_lru_folios(unsigned long nr_to_scan,
|
||||||
nr_pages = folio_nr_pages(folio);
|
nr_pages = folio_nr_pages(folio);
|
||||||
total_scan += nr_pages;
|
total_scan += nr_pages;
|
||||||
|
|
||||||
if (folio_zonenum(folio) > sc->reclaim_idx) {
|
/* Using max_nr_skipped to prevent hard LOCKUP*/
|
||||||
|
if (max_nr_skipped < SWAP_CLUSTER_MAX_SKIPPED &&
|
||||||
|
(folio_zonenum(folio) > sc->reclaim_idx)) {
|
||||||
nr_skipped[folio_zonenum(folio)] += nr_pages;
|
nr_skipped[folio_zonenum(folio)] += nr_pages;
|
||||||
move_to = &folios_skipped;
|
move_to = &folios_skipped;
|
||||||
|
max_nr_skipped++;
|
||||||
goto move;
|
goto move;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -452,7 +452,7 @@ static DEFINE_PER_CPU(struct mapping_area, zs_map_area) = {
|
||||||
.lock = INIT_LOCAL_LOCK(lock),
|
.lock = INIT_LOCAL_LOCK(lock),
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline bool is_first_zpdesc(struct zpdesc *zpdesc)
|
static inline bool __maybe_unused is_first_zpdesc(struct zpdesc *zpdesc)
|
||||||
{
|
{
|
||||||
return PagePrivate(zpdesc_page(zpdesc));
|
return PagePrivate(zpdesc_page(zpdesc));
|
||||||
}
|
}
|
||||||
|
|
|
@ -167,7 +167,7 @@ def get_current_task(cpu):
|
||||||
var_ptr = gdb.parse_and_eval("&pcpu_hot.current_task")
|
var_ptr = gdb.parse_and_eval("&pcpu_hot.current_task")
|
||||||
return per_cpu(var_ptr, cpu).dereference()
|
return per_cpu(var_ptr, cpu).dereference()
|
||||||
elif utils.is_target_arch("aarch64"):
|
elif utils.is_target_arch("aarch64"):
|
||||||
current_task_addr = gdb.parse_and_eval("$SP_EL0")
|
current_task_addr = gdb.parse_and_eval("(unsigned long)$SP_EL0")
|
||||||
if (current_task_addr >> 63) != 0:
|
if (current_task_addr >> 63) != 0:
|
||||||
current_task = current_task_addr.cast(task_ptr_type)
|
current_task = current_task_addr.cast(task_ptr_type)
|
||||||
return current_task.dereference()
|
return current_task.dereference()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user