* incoming @ 2020-04-02 4:01 Andrew Morton 2020-04-02 4:02 ` [patch 001/155] tools/accounting/getdelays.c: fix netlink attribute length Andrew Morton ` (154 more replies) 0 siblings, 155 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:01 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits A large amount of MM, plenty more to come. 155 patches, based on GIT 1a323ea5356edbb3073dc59d51b9e6b86908857d Subsystems affected by this patch series: tools kthread kbuild scripts ocfs2 vfs mm/slub mm/kmemleak mm/pagecache mm/gup mm/swap mm/memcg mm/pagemap mm/mremap mm/sparsemem mm/kasan mm/pagealloc mm/vmscan mm/compaction mm/mempolicy mm/hugetlbfs mm/hugetlb Subsystem: tools David Ahern <dsahern@kernel.org>: tools/accounting/getdelays.c: fix netlink attribute length Subsystem: kthread Petr Mladek <pmladek@suse.com>: kthread: mark timer used by delayed kthread works as IRQ safe Subsystem: kbuild Masahiro Yamada <masahiroy@kernel.org>: asm-generic: make more kernel-space headers mandatory Subsystem: scripts Jonathan Neuschäfer <j.neuschaefer@gmx.net>: scripts/spelling.txt: add syfs/sysfs pattern Colin Ian King <colin.king@canonical.com>: scripts/spelling.txt: add more spellings to spelling.txt Subsystem: ocfs2 Alex Shi <alex.shi@linux.alibaba.com>: ocfs2: remove FS_OCFS2_NM ocfs2: remove unused macros ocfs2: use OCFS2_SEC_BITS in macro ocfs2: remove dlm_lock_is_remote wangyan <wangyan122@huawei.com>: ocfs2: there is no need to log twice in several functions ocfs2: correct annotation from "l_next_rec" to "l_next_free_rec" Alex Shi <alex.shi@linux.alibaba.com>: ocfs2: remove useless err Jules Irenge <jbi.octave@gmail.com>: ocfs2: Add missing annotations for ocfs2_refcount_cache_lock() and ocfs2_refcount_cache_unlock() "Gustavo A. R. Silva" <gustavo@embeddedor.com>: ocfs2: replace zero-length array with flexible-array member ocfs2: cluster: replace zero-length array with flexible-array member ocfs2: dlm: replace zero-length array with flexible-array member ocfs2: ocfs2_fs.h: replace zero-length array with flexible-array member wangjian <wangjian161@huawei.com>: ocfs2: roll back the reference count modification of the parent directory if an error occurs Takashi Iwai <tiwai@suse.de>: ocfs2: use scnprintf() for avoiding potential buffer overflow "Matthew Wilcox (Oracle)" <willy@infradead.org>: ocfs2: use memalloc_nofs_save instead of memalloc_noio_save Subsystem: vfs Kees Cook <keescook@chromium.org>: fs_parse: Remove pr_notice() about each validation Subsystem: mm/slub chenqiwu <chenqiwu@xiaomi.com>: mm/slub.c: replace cpu_slab->partial with wrapped APIs mm/slub.c: replace kmem_cache->cpu_partial with wrapped APIs Kees Cook <keescook@chromium.org>: slub: improve bit diffusion for freelist ptr obfuscation slub: relocate freelist pointer to middle of object Vlastimil Babka <vbabka@suse.cz>: Revert "topology: add support for node_to_mem_node() to determine the fallback node" Subsystem: mm/kmemleak Nathan Chancellor <natechancellor@gmail.com>: mm/kmemleak.c: use address-of operator on section symbols Qian Cai <cai@lca.pw>: mm/Makefile: disable KCSAN for kmemleak Subsystem: mm/pagecache Jan Kara <jack@suse.cz>: mm/filemap.c: don't bother dropping mmap_sem for zero size readahead Mauricio Faria de Oliveira <mfo@canonical.com>: mm/page-writeback.c: write_cache_pages(): deduplicate identical checks Xianting Tian <xianting_tian@126.com>: mm/filemap.c: clear page error before actual read Souptick Joarder <jrdr.linux@gmail.com>: mm/filemap.c: remove unused argument from shrink_readahead_size_eio() "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm/filemap.c: use vm_fault error code directly include/linux/pagemap.h: rename arguments to find_subpage mm/page-writeback.c: use VM_BUG_ON_PAGE in clear_page_dirty_for_io mm/filemap.c: unexport find_get_entry mm/filemap.c: rewrite pagecache_get_page documentation Subsystem: mm/gup John Hubbard <jhubbard@nvidia.com>: Patch series "mm/gup: track FOLL_PIN pages", v6: mm/gup: split get_user_pages_remote() into two routines mm/gup: pass a flags arg to __gup_device_* functions mm: introduce page_ref_sub_return() mm/gup: pass gup flags to two more routines mm/gup: require FOLL_GET for get_user_pages_fast() mm/gup: track FOLL_PIN pages mm/gup: page->hpage_pinned_refcount: exact pin counts for huge pages mm/gup: /proc/vmstat: pin_user_pages (FOLL_PIN) reporting mm/gup_benchmark: support pin_user_pages() and related calls selftests/vm: run_vmtests: invoke gup_benchmark with basic FOLL_PIN coverage "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm: improve dump_page() for compound pages John Hubbard <jhubbard@nvidia.com>: mm: dump_page(): additional diagnostics for huge pinned pages Claudio Imbrenda <imbrenda@linux.ibm.com>: mm/gup/writeback: add callbacks for inaccessible pages Pingfan Liu <kernelfans@gmail.com>: mm/gup: rename nr as nr_pinned in get_user_pages_fast() mm/gup: fix omission of check on FOLL_LONGTERM in gup fast path Subsystem: mm/swap Chen Wandun <chenwandun@huawei.com>: mm/swapfile.c: fix comments for swapcache_prepare Wei Yang <richardw.yang@linux.intel.com>: mm/swap.c: not necessary to export __pagevec_lru_add() Qian Cai <cai@lca.pw>: mm/swapfile: fix data races in try_to_unuse() Wei Yang <richard.weiyang@linux.alibaba.com>: mm/swap_slots.c: assign|reset cache slot by value directly Yang Shi <yang.shi@linux.alibaba.com>: mm: swap: make page_evictable() inline mm: swap: use smp_mb__after_atomic() to order LRU bit set Wei Yang <richard.weiyang@gmail.com>: mm/swap_state.c: use the same way to count page in [add_to|delete_from]_swap_cache Subsystem: mm/memcg Yafang Shao <laoar.shao@gmail.com>: mm, memcg: fix build error around the usage of kmem_caches Kirill Tkhai <ktkhai@virtuozzo.com>: mm/memcontrol.c: allocate shrinker_map on appropriate NUMA node Roman Gushchin <guro@fb.com>: mm: memcg/slab: use mem_cgroup_from_obj() Patch series "mm: memcg: kmem API cleanup", v2: mm: kmem: cleanup (__)memcg_kmem_charge_memcg() arguments mm: kmem: cleanup memcg_kmem_uncharge_memcg() arguments mm: kmem: rename memcg_kmem_(un)charge() into memcg_kmem_(un)charge_page() mm: kmem: switch to nr_pages in (__)memcg_kmem_charge_memcg() mm: memcg/slab: cache page number in memcg_(un)charge_slab() mm: kmem: rename (__)memcg_kmem_(un)charge_memcg() to __memcg_kmem_(un)charge() Johannes Weiner <hannes@cmpxchg.org>: Patch series "mm: memcontrol: recursive memory.low protection", v3: mm: memcontrol: fix memory.low proportional distribution mm: memcontrol: clean up and document effective low/min calculations mm: memcontrol: recursive memory.low protection Shakeel Butt <shakeelb@google.com>: memcg: css_tryget_online cleanups Vincenzo Frascino <vincenzo.frascino@arm.com>: mm/memcontrol.c: make mem_cgroup_id_get_many() __maybe_unused Chris Down <chris@chrisdown.name>: mm, memcg: prevent memory.high load/store tearing mm, memcg: prevent memory.max load tearing mm, memcg: prevent memory.low load/store tearing mm, memcg: prevent memory.min load/store tearing mm, memcg: prevent memory.swap.max load tearing mm, memcg: prevent mem_cgroup_protected store tearing Roman Gushchin <guro@fb.com>: mm: memcg: make memory.oom.group tolerable to task migration Subsystem: mm/pagemap Thomas Hellstrom <thellstrom@vmware.com>: mm/mapping_dirty_helpers: Update huge page-table entry callbacks Anshuman Khandual <anshuman.khandual@arm.com>: Patch series "mm/vma: some more minor changes", v2: mm/vma: move VM_NO_KHUGEPAGED into generic header mm/vma: make vma_is_foreign() available for general use mm/vma: make is_vma_temporary_stack() available for general use "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm: add pagemap.h to the fine documentation Peter Xu <peterx@redhat.com>: Patch series "mm: Page fault enhancements", v6: mm/gup: rename "nonblocking" to "locked" where proper mm/gup: fix __get_user_pages() on fault retry of hugetlb mm: introduce fault_signal_pending() x86/mm: use helper fault_signal_pending() arc/mm: use helper fault_signal_pending() arm64/mm: use helper fault_signal_pending() powerpc/mm: use helper fault_signal_pending() sh/mm: use helper fault_signal_pending() mm: return faster for non-fatal signals in user mode faults userfaultfd: don't retake mmap_sem to emulate NOPAGE mm: introduce FAULT_FLAG_DEFAULT mm: introduce FAULT_FLAG_INTERRUPTIBLE mm: allow VM_FAULT_RETRY for multiple times mm/gup: allow VM_FAULT_RETRY for multiple times mm/gup: allow to react to fatal signals mm/userfaultfd: honor FAULT_FLAG_KILLABLE in fault path WANG Wenhu <wenhu.wang@vivo.com>: mm: clarify a confusing comment for remap_pfn_range() Wang Wenhu <wenhu.wang@vivo.com>: mm/memory.c: clarify a confusing comment for vm_iomap_memory Jaewon Kim <jaewon31.kim@samsung.com>: Patch series "mm: mmap: add mmap trace point", v3: mmap: remove inline of vm_unmapped_area mm: mmap: add trace point of vm_unmapped_area Subsystem: mm/mremap Brian Geffon <bgeffon@google.com>: mm/mremap: add MREMAP_DONTUNMAP to mremap() selftests: add MREMAP_DONTUNMAP selftest Subsystem: mm/sparsemem Wei Yang <richardw.yang@linux.intel.com>: mm/sparsemem: get address to page struct instead of address to pfn Pingfan Liu <kernelfans@gmail.com>: mm/sparse: rename pfn_present() to pfn_in_present_section() Baoquan He <bhe@redhat.com>: mm/sparse.c: use kvmalloc/kvfree to alloc/free memmap for the classic sparse mm/sparse.c: allocate memmap preferring the given node Subsystem: mm/kasan Walter Wu <walter-zh.wu@mediatek.com>: Patch series "fix the missing underflow in memory operation function", v4: kasan: detect negative size in memory operation function kasan: add test for invalid size in memmove Subsystem: mm/pagealloc Joel Savitz <jsavitz@redhat.com>: mm/page_alloc: increase default min_free_kbytes bound Mateusz Nosek <mateusznosek0@gmail.com>: mm, pagealloc: micro-optimisation: save two branches on hot page allocation path chenqiwu <chenqiwu@xiaomi.com>: mm/page_alloc.c: use free_area_empty() instead of open-coding Mateusz Nosek <mateusznosek0@gmail.com>: mm/page_alloc.c: micro-optimisation Remove unnecessary branch chenqiwu <chenqiwu@xiaomi.com>: mm/page_alloc: simplify page_is_buddy() for better code readability Subsystem: mm/vmscan Yang Shi <yang.shi@linux.alibaba.com>: mm: vmpressure: don't need call kfree if kstrndup fails mm: vmpressure: use mem_cgroup_is_root API mm: vmscan: replace open codings to NUMA_NO_NODE Wei Yang <richardw.yang@linux.intel.com>: mm/vmscan.c: remove cpu online notification for now Qian Cai <cai@lca.pw>: mm/vmscan.c: fix data races using kswapd_classzone_idx Mateusz Nosek <mateusznosek0@gmail.com>: mm/vmscan.c: Clean code by removing unnecessary assignment Kirill Tkhai <ktkhai@virtuozzo.com>: mm/vmscan.c: make may_enter_fs bool in shrink_page_list() Mateusz Nosek <mateusznosek0@gmail.com>: mm/vmscan.c: do_try_to_free_pages(): clean code by removing unnecessary assignment Michal Hocko <mhocko@suse.com>: selftests: vm: drop dependencies on page flags from mlock2 tests Subsystem: mm/compaction Rik van Riel <riel@surriel.com>: Patch series "fix THP migration for CMA allocations", v2: mm,compaction,cma: add alloc_contig flag to compact_control mm,thp,compaction,cma: allow THP migration for CMA allocations Vlastimil Babka <vbabka@suse.cz>: mm, compaction: fully assume capture is not NULL in compact_zone_order() Sebastian Andrzej Siewior <bigeasy@linutronix.de>: mm/compaction: really limit compact_unevictable_allowed to 0 and 1 mm/compaction: Disable compact_unevictable_allowed on RT Mateusz Nosek <mateusznosek0@gmail.com>: mm/compaction.c: clean code by removing unnecessary assignment Subsystem: mm/mempolicy Li Xinhai <lixinhai.lxh@gmail.com>: mm/mempolicy: support MPOL_MF_STRICT for huge page mapping mm/mempolicy: check hugepage migration is supported by arch in vma_migratable() Yang Shi <yang.shi@linux.alibaba.com>: mm: mempolicy: use VM_BUG_ON_VMA in queue_pages_test_walk() Randy Dunlap <rdunlap@infradead.org>: mm: mempolicy: require at least one nodeid for MPOL_PREFERRED Colin Ian King <colin.king@canonical.com>: mm/memblock.c: remove redundant assignment to variable max_addr Subsystem: mm/hugetlbfs Mike Kravetz <mike.kravetz@oracle.com>: Patch series "hugetlbfs: use i_mmap_rwsem for more synchronization", v2: hugetlbfs: use i_mmap_rwsem for more pmd sharing synchronization hugetlbfs: Use i_mmap_rwsem to address page fault/truncate race Subsystem: mm/hugetlb Mina Almasry <almasrymina@google.com>: hugetlb_cgroup: add hugetlb_cgroup reservation counter hugetlb_cgroup: add interface for charge/uncharge hugetlb reservations mm/hugetlb_cgroup: fix hugetlb_cgroup migration hugetlb_cgroup: add reservation accounting for private mappings hugetlb: disable region_add file_region coalescing hugetlb_cgroup: add accounting for shared mappings hugetlb_cgroup: support noreserve mappings hugetlb: support file_region coalescing again hugetlb_cgroup: add hugetlb_cgroup reservation tests hugetlb_cgroup: add hugetlb_cgroup reservation docs Mateusz Nosek <mateusznosek0@gmail.com>: mm/hugetlb.c: clean code by removing unnecessary initialization Vlastimil Babka <vbabka@suse.cz>: mm/hugetlb: remove unnecessary memory fetch in PageHeadHuge() Christophe Leroy <christophe.leroy@c-s.fr>: selftests/vm: fix map_hugetlb length used for testing read and write mm/hugetlb: fix build failure with HUGETLB_PAGE but not HUGEBTLBFS "Matthew Wilcox (Oracle)" <willy@infradead.org>: include/linux/huge_mm.h: check PageTail in hpage_nr_pages even when !THP Documentation/admin-guide/cgroup-v1/hugetlb.rst | 103 +- Documentation/admin-guide/cgroup-v2.rst | 11 Documentation/admin-guide/sysctl/vm.rst | 3 Documentation/core-api/mm-api.rst | 3 Documentation/core-api/pin_user_pages.rst | 86 + arch/alpha/include/asm/Kbuild | 11 arch/alpha/mm/fault.c | 6 arch/arc/include/asm/Kbuild | 21 arch/arc/mm/fault.c | 37 arch/arm/include/asm/Kbuild | 12 arch/arm/mm/fault.c | 7 arch/arm64/include/asm/Kbuild | 18 arch/arm64/mm/fault.c | 26 arch/c6x/include/asm/Kbuild | 37 arch/csky/include/asm/Kbuild | 36 arch/h8300/include/asm/Kbuild | 46 arch/hexagon/include/asm/Kbuild | 33 arch/hexagon/mm/vm_fault.c | 5 arch/ia64/include/asm/Kbuild | 7 arch/ia64/mm/fault.c | 5 arch/m68k/include/asm/Kbuild | 24 arch/m68k/mm/fault.c | 7 arch/microblaze/include/asm/Kbuild | 29 arch/microblaze/mm/fault.c | 5 arch/mips/include/asm/Kbuild | 13 arch/mips/mm/fault.c | 5 arch/nds32/include/asm/Kbuild | 37 arch/nds32/mm/fault.c | 5 arch/nios2/include/asm/Kbuild | 38 arch/nios2/mm/fault.c | 7 arch/openrisc/include/asm/Kbuild | 36 arch/openrisc/mm/fault.c | 5 arch/parisc/include/asm/Kbuild | 18 arch/parisc/mm/fault.c | 8 arch/powerpc/include/asm/Kbuild | 4 arch/powerpc/mm/book3s64/pkeys.c | 12 arch/powerpc/mm/fault.c | 20 arch/powerpc/platforms/pseries/hotplug-memory.c | 2 arch/riscv/include/asm/Kbuild | 28 arch/riscv/mm/fault.c | 9 arch/s390/include/asm/Kbuild | 15 arch/s390/mm/fault.c | 10 arch/sh/include/asm/Kbuild | 16 arch/sh/mm/fault.c | 13 arch/sparc/include/asm/Kbuild | 14 arch/sparc/mm/fault_32.c | 5 arch/sparc/mm/fault_64.c | 5 arch/um/kernel/trap.c | 3 arch/unicore32/include/asm/Kbuild | 34 arch/unicore32/mm/fault.c | 8 arch/x86/include/asm/Kbuild | 2 arch/x86/include/asm/mmu_context.h | 15 arch/x86/mm/fault.c | 32 arch/xtensa/include/asm/Kbuild | 26 arch/xtensa/mm/fault.c | 5 drivers/base/node.c | 2 drivers/gpu/drm/ttm/ttm_bo_vm.c | 12 fs/fs_parser.c | 2 fs/hugetlbfs/inode.c | 30 fs/ocfs2/alloc.c | 3 fs/ocfs2/cluster/heartbeat.c | 12 fs/ocfs2/cluster/netdebug.c | 4 fs/ocfs2/cluster/tcp.c | 27 fs/ocfs2/cluster/tcp.h | 2 fs/ocfs2/dir.c | 4 fs/ocfs2/dlm/dlmcommon.h | 8 fs/ocfs2/dlm/dlmdebug.c | 100 - fs/ocfs2/dlm/dlmmaster.c | 2 fs/ocfs2/dlm/dlmthread.c | 3 fs/ocfs2/dlmglue.c | 2 fs/ocfs2/journal.c | 2 fs/ocfs2/namei.c | 15 fs/ocfs2/ocfs2_fs.h | 18 fs/ocfs2/refcounttree.c | 2 fs/ocfs2/reservations.c | 3 fs/ocfs2/stackglue.c | 2 fs/ocfs2/suballoc.c | 5 fs/ocfs2/super.c | 46 fs/pipe.c | 2 fs/userfaultfd.c | 64 - include/asm-generic/Kbuild | 52 + include/linux/cgroup-defs.h | 5 include/linux/fs.h | 5 include/linux/gfp.h | 6 include/linux/huge_mm.h | 10 include/linux/hugetlb.h | 76 + include/linux/hugetlb_cgroup.h | 175 +++ include/linux/kasan.h | 2 include/linux/kthread.h | 3 include/linux/memcontrol.h | 66 - include/linux/mempolicy.h | 29 include/linux/mm.h | 243 +++- include/linux/mm_types.h | 7 include/linux/mmzone.h | 6 include/linux/page_ref.h | 9 include/linux/pagemap.h | 29 include/linux/sched/signal.h | 18 include/linux/swap.h | 1 include/linux/topology.h | 17 include/trace/events/mmap.h | 48 include/uapi/linux/mman.h | 5 kernel/cgroup/cgroup.c | 17 kernel/fork.c | 9 kernel/sysctl.c | 31 lib/test_kasan.c | 19 mm/Makefile | 1 mm/compaction.c | 31 mm/debug.c | 54 - mm/filemap.c | 77 - mm/gup.c | 682 ++++++++++--- mm/gup_benchmark.c | 71 + mm/huge_memory.c | 29 mm/hugetlb.c | 866 ++++++++++++----- mm/hugetlb_cgroup.c | 347 +++++- mm/internal.h | 32 mm/kasan/common.c | 26 mm/kasan/generic.c | 9 mm/kasan/generic_report.c | 11 mm/kasan/kasan.h | 2 mm/kasan/report.c | 5 mm/kasan/tags.c | 9 mm/kasan/tags_report.c | 11 mm/khugepaged.c | 4 mm/kmemleak.c | 2 mm/list_lru.c | 12 mm/mapping_dirty_helpers.c | 42 mm/memblock.c | 2 mm/memcontrol.c | 378 ++++--- mm/memory-failure.c | 29 mm/memory.c | 4 mm/mempolicy.c | 73 + mm/migrate.c | 25 mm/mmap.c | 32 mm/mremap.c | 92 + mm/page-writeback.c | 19 mm/page_alloc.c | 82 - mm/page_counter.c | 29 mm/page_ext.c | 2 mm/rmap.c | 39 mm/shuffle.c | 2 mm/slab.h | 32 mm/slab_common.c | 2 mm/slub.c | 27 mm/sparse.c | 33 mm/swap.c | 5 mm/swap_slots.c | 12 mm/swap_state.c | 2 mm/swapfile.c | 10 mm/userfaultfd.c | 11 mm/vmpressure.c | 8 mm/vmscan.c | 111 -- mm/vmstat.c | 2 scripts/spelling.txt | 21 tools/accounting/getdelays.c | 2 tools/testing/selftests/vm/.gitignore | 1 tools/testing/selftests/vm/Makefile | 2 tools/testing/selftests/vm/charge_reserved_hugetlb.sh | 575 +++++++++++ tools/testing/selftests/vm/gup_benchmark.c | 15 tools/testing/selftests/vm/hugetlb_reparenting_test.sh | 244 ++++ tools/testing/selftests/vm/map_hugetlb.c | 14 tools/testing/selftests/vm/mlock2-tests.c | 233 ---- tools/testing/selftests/vm/mremap_dontunmap.c | 313 ++++++ tools/testing/selftests/vm/run_vmtests | 37 tools/testing/selftests/vm/write_hugetlb_memory.sh | 23 tools/testing/selftests/vm/write_to_hugetlbfs.c | 242 ++++ 165 files changed, 5020 insertions(+), 2376 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 001/155] tools/accounting/getdelays.c: fix netlink attribute length 2020-04-02 4:01 incoming Andrew Morton @ 2020-04-02 4:02 ` Andrew Morton 2020-04-02 4:02 ` [patch 002/155] kthread: mark timer used by delayed kthread works as IRQ safe Andrew Morton ` (153 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:02 UTC (permalink / raw) To: akpm, dsahern, johannes, laoar.shao, linux-mm, mm-commits, nagar, stable, torvalds From: David Ahern <dsahern@kernel.org> Subject: tools/accounting/getdelays.c: fix netlink attribute length A recent change to the netlink code: 6e237d099fac ("netlink: Relax attr validation for fixed length types") logs a warning when programs send messages with invalid attributes (e.g., wrong length for a u32). Yafang reported this error message for tools/accounting/getdelays.c. send_cmd() is wrongly adding 1 to the attribute length. As noted in include/uapi/linux/netlink.h nla_len should be NLA_HDRLEN + payload length, so drop the +1. Link: http://lkml.kernel.org/r/20200327173111.63922-1-dsahern@kernel.org Fixes: 9e06d3f9f6b1 ("per task delay accounting taskstats interface: documentation fix") Signed-off-by: David Ahern <dsahern@kernel.org> Reported-by: Yafang Shao <laoar.shao@gmail.com> Tested-by: Yafang Shao <laoar.shao@gmail.com> Cc: Johannes Berg <johannes@sipsolutions.net> Cc: Shailabh Nagar <nagar@watson.ibm.com> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- tools/accounting/getdelays.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/tools/accounting/getdelays.c~getdelays-fix-netlink-attribute-length +++ a/tools/accounting/getdelays.c @@ -136,7 +136,7 @@ static int send_cmd(int sd, __u16 nlmsg_ msg.g.version = 0x1; na = (struct nlattr *) GENLMSG_DATA(&msg); na->nla_type = nla_type; - na->nla_len = nla_len + 1 + NLA_HDRLEN; + na->nla_len = nla_len + NLA_HDRLEN; memcpy(NLA_DATA(na), nla_data, nla_len); msg.n.nlmsg_len += NLMSG_ALIGN(na->nla_len); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 002/155] kthread: mark timer used by delayed kthread works as IRQ safe 2020-04-02 4:01 incoming Andrew Morton 2020-04-02 4:02 ` [patch 001/155] tools/accounting/getdelays.c: fix netlink attribute length Andrew Morton @ 2020-04-02 4:02 ` Andrew Morton 2020-04-02 4:03 ` [patch 003/155] asm-generic: make more kernel-space headers mandatory Andrew Morton ` (152 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:02 UTC (permalink / raw) To: akpm, grygorii.strashko, linux-mm, mm-commits, pmladek, tglx, tj, torvalds From: Petr Mladek <pmladek@suse.com> Subject: kthread: mark timer used by delayed kthread works as IRQ safe The timer used by delayed kthread works are IRQ safe because the used kthread_delayed_work_timer_fn() is IRQ safe. It is properly marked when initialized by KTHREAD_DELAYED_WORK_INIT(). But TIMER_IRQSAFE flag is missing when initialized by kthread_init_delayed_work(). The missing flag might trigger invalid warning from del_timer_sync() when kthread_mod_delayed_work() is called with interrupts disabled. This patch is result of a discussion about using the API, see https://lkml.kernel.org/r/cfa886ad-e3b7-c0d2-3ff8-58d94170eab5@ti.com Link: http://lkml.kernel.org/r/20200217120709.1974-1-pmladek@suse.com Signed-off-by: Petr Mladek <pmladek@suse.com> Reported-by: Grygorii Strashko <grygorii.strashko@ti.com> Tested-by: Grygorii Strashko <grygorii.strashko@ti.com> Acked-by: Tejun Heo <tj@kernel.org> Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/kthread.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --- a/include/linux/kthread.h~kthread-mark-timer-used-by-delayed-kthread-works-as-irq-safe +++ a/include/linux/kthread.h @@ -165,7 +165,8 @@ extern void __kthread_init_worker(struct do { \ kthread_init_work(&(dwork)->work, (fn)); \ timer_setup(&(dwork)->timer, \ - kthread_delayed_work_timer_fn, 0); \ + kthread_delayed_work_timer_fn, \ + TIMER_IRQSAFE); \ } while (0) int kthread_worker_fn(void *worker_ptr); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 003/155] asm-generic: make more kernel-space headers mandatory 2020-04-02 4:01 incoming Andrew Morton 2020-04-02 4:02 ` [patch 001/155] tools/accounting/getdelays.c: fix netlink attribute length Andrew Morton 2020-04-02 4:02 ` [patch 002/155] kthread: mark timer used by delayed kthread works as IRQ safe Andrew Morton @ 2020-04-02 4:03 ` Andrew Morton 2020-04-02 4:03 ` [patch 004/155] scripts/spelling.txt: add syfs/sysfs pattern Andrew Morton ` (151 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:03 UTC (permalink / raw) To: akpm, arnd, hch, linux-mm, masahiroy, michal.simek, mm-commits, torvalds From: Masahiro Yamada <masahiroy@kernel.org> Subject: asm-generic: make more kernel-space headers mandatory Change a header to mandatory-y if both of the following are met: [1] At least one architecture (except um) specifies it as generic-y in arch/*/include/asm/Kbuild [2] Every architecture (except um) either has its own implementation (arch/*/include/asm/*.h) or specifies it as generic-y in arch/*/include/asm/Kbuild This commit was generated by the following shell script. ----------------------------------->8----------------------------------- arches=$(cd arch; ls -1 | sed -e '/Kconfig/d' -e '/um/d') tmpfile=$(mktemp) grep "^mandatory-y +=" include/asm-generic/Kbuild > $tmpfile find arch -path 'arch/*/include/asm/Kbuild' | xargs sed -n 's/^generic-y += \(.*\)/\1/p' | sort -u | while read header do mandatory=yes for arch in $arches do if ! grep -q "generic-y += $header" arch/$arch/include/asm/Kbuild && ! [ -f arch/$arch/include/asm/$header ]; then mandatory=no break fi done if [ "$mandatory" = yes ]; then echo "mandatory-y += $header" >> $tmpfile for arch in $arches do sed -i "/generic-y += $header/d" arch/$arch/include/asm/Kbuild done fi done sed -i '/^mandatory-y +=/d' include/asm-generic/Kbuild LANG=C sort $tmpfile >> include/asm-generic/Kbuild ----------------------------------->8----------------------------------- One obvious benefit is the diff stat: 25 files changed, 52 insertions(+), 557 deletions(-) It is tedious to list generic-y for each arch that needs it. So, mandatory-y works like a fallback default (by just wrapping asm-generic one) when arch does not have a specific header implementation. See the following commits: def3f7cefe4e81c296090e1722a76551142c227c a1b39bae16a62ce4aae02d958224f19316d98b24 It is tedious to convert headers one by one, so I processed by a shell script. Link: http://lkml.kernel.org/r/20200210175452.5030-1-masahiroy@kernel.org Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Cc: Michal Simek <michal.simek@xilinx.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- arch/alpha/include/asm/Kbuild | 11 ----- arch/arc/include/asm/Kbuild | 21 ---------- arch/arm/include/asm/Kbuild | 12 ------ arch/arm64/include/asm/Kbuild | 18 --------- arch/c6x/include/asm/Kbuild | 37 ------------------- arch/csky/include/asm/Kbuild | 36 ------------------ arch/h8300/include/asm/Kbuild | 46 ----------------------- arch/hexagon/include/asm/Kbuild | 33 ----------------- arch/ia64/include/asm/Kbuild | 7 --- arch/m68k/include/asm/Kbuild | 24 ------------ arch/microblaze/include/asm/Kbuild | 29 --------------- arch/mips/include/asm/Kbuild | 13 ------ arch/nds32/include/asm/Kbuild | 37 ------------------- arch/nios2/include/asm/Kbuild | 38 ------------------- arch/openrisc/include/asm/Kbuild | 36 ------------------ arch/parisc/include/asm/Kbuild | 18 --------- arch/powerpc/include/asm/Kbuild | 4 -- arch/riscv/include/asm/Kbuild | 28 -------------- arch/s390/include/asm/Kbuild | 15 ------- arch/sh/include/asm/Kbuild | 16 -------- arch/sparc/include/asm/Kbuild | 14 ------- arch/unicore32/include/asm/Kbuild | 34 ----------------- arch/x86/include/asm/Kbuild | 2 - arch/xtensa/include/asm/Kbuild | 26 ------------- include/asm-generic/Kbuild | 52 +++++++++++++++++++++++++++ 25 files changed, 52 insertions(+), 555 deletions(-) --- a/arch/alpha/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/alpha/include/asm/Kbuild @@ -1,17 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 generated-y += syscall_table.h -generic-y += compat.h -generic-y += exec.h generic-y += export.h -generic-y += fb.h -generic-y += irq_work.h generic-y += kvm_para.h generic-y += mcs_spinlock.h -generic-y += mm-arch-hooks.h -generic-y += mmiowb.h -generic-y += preempt.h -generic-y += sections.h -generic-y += trace_clock.h -generic-y += current.h -generic-y += kprobes.h --- a/arch/arc/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/arc/include/asm/Kbuild @@ -1,28 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 -generic-y += bugs.h -generic-y += compat.h -generic-y += device.h -generic-y += div64.h -generic-y += dma-mapping.h -generic-y += emergency-restart.h generic-y += extable.h -generic-y += ftrace.h -generic-y += hardirq.h -generic-y += hw_irq.h -generic-y += irq_regs.h -generic-y += irq_work.h generic-y += kvm_para.h -generic-y += local.h generic-y += local64.h generic-y += mcs_spinlock.h -generic-y += mm-arch-hooks.h -generic-y += mmiowb.h generic-y += parport.h -generic-y += percpu.h -generic-y += preempt.h -generic-y += topology.h -generic-y += trace_clock.h generic-y += user.h -generic-y += vga.h -generic-y += word-at-a-time.h -generic-y += xor.h --- a/arch/arm64/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/arm64/include/asm/Kbuild @@ -1,26 +1,8 @@ # SPDX-License-Identifier: GPL-2.0 -generic-y += bugs.h -generic-y += delay.h -generic-y += div64.h -generic-y += dma.h -generic-y += dma-mapping.h generic-y += early_ioremap.h -generic-y += emergency-restart.h -generic-y += hw_irq.h -generic-y += irq_regs.h -generic-y += kdebug.h -generic-y += kmap_types.h -generic-y += local.h generic-y += local64.h generic-y += mcs_spinlock.h -generic-y += mm-arch-hooks.h -generic-y += mmiowb.h generic-y += qrwlock.h generic-y += qspinlock.h -generic-y += serial.h generic-y += set_memory.h -generic-y += switch_to.h -generic-y += trace_clock.h -generic-y += unaligned.h generic-y += user.h -generic-y += vga.h --- a/arch/arm/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/arm/include/asm/Kbuild @@ -1,22 +1,10 @@ # SPDX-License-Identifier: GPL-2.0 -generic-y += compat.h -generic-y += current.h generic-y += early_ioremap.h -generic-y += emergency-restart.h -generic-y += exec.h generic-y += extable.h generic-y += flat.h -generic-y += irq_regs.h -generic-y += kdebug.h -generic-y += local.h generic-y += local64.h -generic-y += mm-arch-hooks.h -generic-y += mmiowb.h generic-y += parport.h -generic-y += preempt.h generic-y += seccomp.h -generic-y += serial.h -generic-y += trace_clock.h generated-y += mach-types.h generated-y += unistd-nr.h --- a/arch/c6x/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/c6x/include/asm/Kbuild @@ -1,42 +1,5 @@ # SPDX-License-Identifier: GPL-2.0 -generic-y += atomic.h -generic-y += barrier.h -generic-y += bugs.h -generic-y += compat.h -generic-y += current.h -generic-y += device.h -generic-y += div64.h -generic-y += dma.h -generic-y += dma-mapping.h -generic-y += emergency-restart.h -generic-y += exec.h generic-y += extable.h -generic-y += fb.h -generic-y += futex.h -generic-y += hw_irq.h -generic-y += io.h -generic-y += irq_regs.h -generic-y += irq_work.h -generic-y += kdebug.h -generic-y += kmap_types.h -generic-y += kprobes.h generic-y += kvm_para.h -generic-y += local.h generic-y += mcs_spinlock.h -generic-y += mm-arch-hooks.h -generic-y += mmiowb.h -generic-y += mmu.h -generic-y += mmu_context.h -generic-y += pci.h -generic-y += percpu.h -generic-y += pgalloc.h -generic-y += preempt.h -generic-y += serial.h -generic-y += shmparam.h -generic-y += tlbflush.h -generic-y += topology.h -generic-y += trace_clock.h generic-y += user.h -generic-y += vga.h -generic-y += word-at-a-time.h -generic-y += xor.h --- a/arch/csky/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/csky/include/asm/Kbuild @@ -1,44 +1,8 @@ # SPDX-License-Identifier: GPL-2.0 generic-y += asm-offsets.h -generic-y += bugs.h -generic-y += compat.h -generic-y += current.h -generic-y += delay.h -generic-y += device.h -generic-y += div64.h -generic-y += dma.h -generic-y += dma-mapping.h -generic-y += emergency-restart.h -generic-y += exec.h -generic-y += fb.h -generic-y += futex.h generic-y += gpio.h -generic-y += hardirq.h -generic-y += hw_irq.h -generic-y += irq.h -generic-y += irq_regs.h -generic-y += irq_work.h -generic-y += kdebug.h -generic-y += kmap_types.h -generic-y += kprobes.h generic-y += kvm_para.h -generic-y += linkage.h -generic-y += local.h generic-y += local64.h -generic-y += mm-arch-hooks.h -generic-y += mmiowb.h -generic-y += module.h -generic-y += percpu.h -generic-y += preempt.h generic-y += qrwlock.h -generic-y += sections.h -generic-y += serial.h -generic-y += timex.h -generic-y += topology.h -generic-y += trace_clock.h -generic-y += unaligned.h generic-y += user.h -generic-y += vga.h generic-y += vmlinux.lds.h -generic-y += word-at-a-time.h -generic-y += xor.h --- a/arch/h8300/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/h8300/include/asm/Kbuild @@ -1,54 +1,8 @@ # SPDX-License-Identifier: GPL-2.0 generic-y += asm-offsets.h -generic-y += barrier.h -generic-y += bugs.h -generic-y += cacheflush.h -generic-y += checksum.h -generic-y += compat.h -generic-y += current.h -generic-y += delay.h -generic-y += device.h -generic-y += div64.h -generic-y += dma.h -generic-y += dma-mapping.h -generic-y += emergency-restart.h -generic-y += exec.h generic-y += extable.h -generic-y += fb.h -generic-y += ftrace.h -generic-y += futex.h -generic-y += hardirq.h -generic-y += hw_irq.h -generic-y += irq_regs.h -generic-y += irq_work.h -generic-y += kdebug.h -generic-y += kmap_types.h -generic-y += kprobes.h generic-y += kvm_para.h -generic-y += linkage.h -generic-y += local.h generic-y += local64.h generic-y += mcs_spinlock.h -generic-y += mm-arch-hooks.h -generic-y += mmiowb.h -generic-y += mmu.h -generic-y += mmu_context.h -generic-y += module.h generic-y += parport.h -generic-y += pci.h -generic-y += percpu.h -generic-y += pgalloc.h -generic-y += preempt.h -generic-y += sections.h -generic-y += serial.h -generic-y += shmparam.h generic-y += spinlock.h -generic-y += timex.h -generic-y += tlbflush.h -generic-y += topology.h -generic-y += trace_clock.h -generic-y += uaccess.h -generic-y += unaligned.h -generic-y += vga.h -generic-y += word-at-a-time.h -generic-y += xor.h --- a/arch/hexagon/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/hexagon/include/asm/Kbuild @@ -1,39 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 -generic-y += barrier.h -generic-y += bug.h -generic-y += bugs.h -generic-y += compat.h -generic-y += current.h -generic-y += device.h -generic-y += div64.h -generic-y += dma-mapping.h -generic-y += emergency-restart.h generic-y += extable.h -generic-y += fb.h -generic-y += ftrace.h -generic-y += hardirq.h -generic-y += hw_irq.h generic-y += iomap.h -generic-y += irq_regs.h -generic-y += irq_work.h -generic-y += kdebug.h -generic-y += kmap_types.h -generic-y += kprobes.h generic-y += kvm_para.h -generic-y += local.h generic-y += local64.h generic-y += mcs_spinlock.h -generic-y += mm-arch-hooks.h -generic-y += mmiowb.h -generic-y += pci.h -generic-y += percpu.h -generic-y += preempt.h -generic-y += sections.h -generic-y += serial.h -generic-y += shmparam.h -generic-y += topology.h -generic-y += trace_clock.h -generic-y += unaligned.h -generic-y += vga.h -generic-y += word-at-a-time.h -generic-y += xor.h --- a/arch/ia64/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/ia64/include/asm/Kbuild @@ -1,12 +1,5 @@ # SPDX-License-Identifier: GPL-2.0 generated-y += syscall_table.h -generic-y += compat.h -generic-y += exec.h -generic-y += irq_work.h generic-y += kvm_para.h generic-y += mcs_spinlock.h -generic-y += mm-arch-hooks.h -generic-y += preempt.h -generic-y += trace_clock.h generic-y += vtime.h -generic-y += word-at-a-time.h --- a/arch/m68k/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/m68k/include/asm/Kbuild @@ -1,32 +1,8 @@ # SPDX-License-Identifier: GPL-2.0 generated-y += syscall_table.h -generic-y += barrier.h -generic-y += compat.h -generic-y += device.h -generic-y += dma-mapping.h -generic-y += emergency-restart.h -generic-y += exec.h generic-y += extable.h -generic-y += futex.h generic-y += hardirq.h -generic-y += hw_irq.h -generic-y += irq_regs.h -generic-y += irq_work.h -generic-y += kdebug.h -generic-y += kmap_types.h -generic-y += kprobes.h generic-y += kvm_para.h -generic-y += local.h generic-y += local64.h generic-y += mcs_spinlock.h -generic-y += mm-arch-hooks.h -generic-y += mmiowb.h -generic-y += percpu.h -generic-y += preempt.h -generic-y += sections.h -generic-y += shmparam.h generic-y += spinlock.h -generic-y += topology.h -generic-y += trace_clock.h -generic-y += word-at-a-time.h -generic-y += xor.h --- a/arch/microblaze/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/microblaze/include/asm/Kbuild @@ -1,40 +1,11 @@ # SPDX-License-Identifier: GPL-2.0 generated-y += syscall_table.h -generic-y += bitops.h -generic-y += bug.h -generic-y += bugs.h -generic-y += compat.h -generic-y += device.h -generic-y += div64.h -generic-y += dma-mapping.h -generic-y += emergency-restart.h -generic-y += exec.h generic-y += extable.h -generic-y += fb.h -generic-y += hardirq.h generic-y += hw_irq.h -generic-y += irq_regs.h -generic-y += irq_work.h -generic-y += kdebug.h -generic-y += kmap_types.h -generic-y += kprobes.h generic-y += kvm_para.h -generic-y += linkage.h -generic-y += local.h generic-y += local64.h generic-y += mcs_spinlock.h -generic-y += mm-arch-hooks.h -generic-y += mmiowb.h generic-y += parport.h -generic-y += percpu.h -generic-y += preempt.h -generic-y += serial.h -generic-y += shmparam.h generic-y += syscalls.h generic-y += tlb.h -generic-y += topology.h -generic-y += trace_clock.h generic-y += user.h -generic-y += vga.h -generic-y += word-at-a-time.h -generic-y += xor.h --- a/arch/mips/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/mips/include/asm/Kbuild @@ -4,23 +4,10 @@ generated-y += syscall_table_32_o32.h generated-y += syscall_table_64_n32.h generated-y += syscall_table_64_n64.h generated-y += syscall_table_64_o32.h -generic-y += current.h -generic-y += device.h -generic-y += emergency-restart.h generic-y += export.h -generic-y += irq_work.h generic-y += local64.h generic-y += mcs_spinlock.h -generic-y += mm-arch-hooks.h generic-y += parport.h -generic-y += percpu.h -generic-y += preempt.h generic-y += qrwlock.h generic-y += qspinlock.h -generic-y += sections.h -generic-y += serial.h -generic-y += trace_clock.h -generic-y += unaligned.h generic-y += user.h -generic-y += word-at-a-time.h -generic-y += xor.h --- a/arch/nds32/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/nds32/include/asm/Kbuild @@ -1,46 +1,9 @@ # SPDX-License-Identifier: GPL-2.0 generic-y += asm-offsets.h -generic-y += atomic.h -generic-y += bitops.h -generic-y += bug.h -generic-y += bugs.h -generic-y += checksum.h generic-y += cmpxchg.h -generic-y += compat.h -generic-y += device.h -generic-y += div64.h -generic-y += dma.h -generic-y += dma-mapping.h -generic-y += emergency-restart.h -generic-y += exec.h generic-y += export.h -generic-y += fb.h generic-y += gpio.h -generic-y += hardirq.h -generic-y += hw_irq.h -generic-y += irq.h -generic-y += irq_regs.h -generic-y += irq_work.h -generic-y += kdebug.h -generic-y += kmap_types.h -generic-y += kprobes.h generic-y += kvm_para.h -generic-y += local.h generic-y += local64.h -generic-y += mm-arch-hooks.h -generic-y += mmiowb.h generic-y += parport.h -generic-y += pci.h -generic-y += percpu.h -generic-y += preempt.h -generic-y += sections.h -generic-y += serial.h -generic-y += switch_to.h -generic-y += timex.h -generic-y += topology.h -generic-y += trace_clock.h -generic-y += xor.h -generic-y += unaligned.h generic-y += user.h -generic-y += vga.h -generic-y += word-at-a-time.h --- a/arch/nios2/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/nios2/include/asm/Kbuild @@ -1,45 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 -generic-y += atomic.h -generic-y += barrier.h -generic-y += bitops.h -generic-y += bug.h -generic-y += bugs.h generic-y += cmpxchg.h -generic-y += compat.h -generic-y += current.h -generic-y += device.h -generic-y += div64.h -generic-y += dma.h -generic-y += dma-mapping.h -generic-y += emergency-restart.h -generic-y += exec.h generic-y += extable.h -generic-y += fb.h -generic-y += ftrace.h -generic-y += futex.h -generic-y += hardirq.h -generic-y += hw_irq.h -generic-y += irq_regs.h -generic-y += irq_work.h -generic-y += kdebug.h -generic-y += kmap_types.h -generic-y += kprobes.h generic-y += kvm_para.h -generic-y += local.h generic-y += mcs_spinlock.h -generic-y += mm-arch-hooks.h -generic-y += mmiowb.h -generic-y += module.h -generic-y += pci.h -generic-y += percpu.h -generic-y += preempt.h -generic-y += sections.h -generic-y += serial.h generic-y += spinlock.h -generic-y += topology.h -generic-y += trace_clock.h -generic-y += unaligned.h generic-y += user.h -generic-y += vga.h -generic-y += word-at-a-time.h -generic-y += xor.h --- a/arch/openrisc/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/openrisc/include/asm/Kbuild @@ -1,45 +1,9 @@ # SPDX-License-Identifier: GPL-2.0 -generic-y += barrier.h -generic-y += bug.h -generic-y += bugs.h -generic-y += checksum.h -generic-y += compat.h -generic-y += current.h -generic-y += device.h -generic-y += div64.h -generic-y += dma.h -generic-y += dma-mapping.h -generic-y += emergency-restart.h -generic-y += exec.h generic-y += extable.h -generic-y += fb.h -generic-y += ftrace.h -generic-y += hardirq.h -generic-y += hw_irq.h -generic-y += irq_regs.h -generic-y += irq_work.h -generic-y += kdebug.h -generic-y += kmap_types.h -generic-y += kprobes.h generic-y += kvm_para.h -generic-y += local.h generic-y += mcs_spinlock.h -generic-y += mm-arch-hooks.h -generic-y += mmiowb.h -generic-y += module.h -generic-y += pci.h -generic-y += percpu.h -generic-y += preempt.h generic-y += qspinlock_types.h generic-y += qspinlock.h generic-y += qrwlock_types.h generic-y += qrwlock.h -generic-y += sections.h -generic-y += shmparam.h -generic-y += switch_to.h -generic-y += topology.h -generic-y += trace_clock.h generic-y += user.h -generic-y += vga.h -generic-y += word-at-a-time.h -generic-y += xor.h --- a/arch/parisc/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/parisc/include/asm/Kbuild @@ -2,26 +2,8 @@ generated-y += syscall_table_32.h generated-y += syscall_table_64.h generated-y += syscall_table_c32.h -generic-y += current.h -generic-y += device.h -generic-y += div64.h -generic-y += emergency-restart.h -generic-y += exec.h -generic-y += hw_irq.h -generic-y += irq_regs.h -generic-y += irq_work.h -generic-y += kdebug.h generic-y += kvm_para.h -generic-y += local.h generic-y += local64.h generic-y += mcs_spinlock.h -generic-y += mm-arch-hooks.h -generic-y += mmiowb.h -generic-y += percpu.h -generic-y += preempt.h generic-y += seccomp.h -generic-y += trace_clock.h generic-y += user.h -generic-y += vga.h -generic-y += word-at-a-time.h -generic-y += xor.h --- a/arch/powerpc/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/powerpc/include/asm/Kbuild @@ -3,12 +3,8 @@ generated-y += syscall_table_32.h generated-y += syscall_table_64.h generated-y += syscall_table_c32.h generated-y += syscall_table_spu.h -generic-y += div64.h -generic-y += dma-mapping.h generic-y += export.h -generic-y += irq_regs.h generic-y += local64.h generic-y += mcs_spinlock.h -generic-y += preempt.h generic-y += vtime.h generic-y += early_ioremap.h --- a/arch/riscv/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/riscv/include/asm/Kbuild @@ -1,35 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 -generic-y += bugs.h -generic-y += checksum.h -generic-y += compat.h -generic-y += device.h -generic-y += div64.h generic-y += extable.h generic-y += flat.h -generic-y += dma.h -generic-y += dma-mapping.h -generic-y += emergency-restart.h -generic-y += exec.h -generic-y += fb.h -generic-y += hardirq.h -generic-y += hw_irq.h -generic-y += irq_regs.h -generic-y += irq_work.h -generic-y += kdebug.h -generic-y += kmap_types.h generic-y += kvm_para.h -generic-y += local.h generic-y += local64.h -generic-y += mm-arch-hooks.h -generic-y += percpu.h -generic-y += preempt.h -generic-y += sections.h -generic-y += serial.h -generic-y += shmparam.h -generic-y += topology.h -generic-y += trace_clock.h -generic-y += unaligned.h generic-y += user.h -generic-y += vga.h generic-y += vmlinux.lds.h -generic-y += xor.h --- a/arch/s390/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/s390/include/asm/Kbuild @@ -5,21 +5,6 @@ generated-y += syscall_table.h generated-y += unistd_nr.h generic-y += asm-offsets.h -generic-y += cacheflush.h -generic-y += device.h -generic-y += dma-mapping.h -generic-y += div64.h -generic-y += emergency-restart.h generic-y += export.h -generic-y += fb.h -generic-y += irq_regs.h -generic-y += irq_work.h -generic-y += kmap_types.h -generic-y += local.h generic-y += local64.h generic-y += mcs_spinlock.h -generic-y += mm-arch-hooks.h -generic-y += mmiowb.h -generic-y += trace_clock.h -generic-y += unaligned.h -generic-y += word-at-a-time.h --- a/arch/sh/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/sh/include/asm/Kbuild @@ -1,22 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 generated-y += syscall_table.h -generic-y += compat.h -generic-y += current.h -generic-y += delay.h -generic-y += div64.h -generic-y += dma-mapping.h -generic-y += emergency-restart.h -generic-y += exec.h -generic-y += irq_regs.h -generic-y += irq_work.h generic-y += kvm_para.h -generic-y += local.h generic-y += local64.h generic-y += mcs_spinlock.h -generic-y += mm-arch-hooks.h generic-y += parport.h -generic-y += percpu.h -generic-y += preempt.h -generic-y += serial.h -generic-y += trace_clock.h -generic-y += xor.h --- a/arch/sparc/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/sparc/include/asm/Kbuild @@ -4,21 +4,7 @@ generated-y += syscall_table_32.h generated-y += syscall_table_64.h generated-y += syscall_table_c32.h -generic-y += div64.h -generic-y += emergency-restart.h -generic-y += exec.h generic-y += export.h -generic-y += irq_regs.h -generic-y += irq_work.h generic-y += kvm_para.h -generic-y += linkage.h -generic-y += local.h generic-y += local64.h generic-y += mcs_spinlock.h -generic-y += mm-arch-hooks.h -generic-y += mmiowb.h -generic-y += module.h -generic-y += preempt.h -generic-y += serial.h -generic-y += trace_clock.h -generic-y += word-at-a-time.h --- a/arch/unicore32/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/unicore32/include/asm/Kbuild @@ -1,41 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 -generic-y += atomic.h -generic-y += bugs.h -generic-y += compat.h -generic-y += current.h -generic-y += device.h -generic-y += div64.h -generic-y += dma-mapping.h -generic-y += emergency-restart.h -generic-y += exec.h generic-y += extable.h -generic-y += fb.h -generic-y += ftrace.h -generic-y += futex.h -generic-y += hardirq.h -generic-y += hw_irq.h -generic-y += irq_regs.h -generic-y += irq_work.h -generic-y += kdebug.h -generic-y += kmap_types.h -generic-y += kprobes.h generic-y += kvm_para.h -generic-y += local.h generic-y += mcs_spinlock.h -generic-y += mm-arch-hooks.h -generic-y += mmiowb.h -generic-y += module.h generic-y += parport.h -generic-y += percpu.h -generic-y += preempt.h -generic-y += sections.h -generic-y += serial.h -generic-y += shmparam.h generic-y += syscalls.h -generic-y += topology.h -generic-y += trace_clock.h -generic-y += unaligned.h generic-y += user.h -generic-y += vga.h -generic-y += word-at-a-time.h -generic-y += xor.h --- a/arch/x86/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/x86/include/asm/Kbuild @@ -10,5 +10,3 @@ generated-y += xen-hypercalls.h generic-y += early_ioremap.h generic-y += export.h generic-y += mcs_spinlock.h -generic-y += mm-arch-hooks.h -generic-y += mmiowb.h --- a/arch/xtensa/include/asm/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/arch/xtensa/include/asm/Kbuild @@ -1,36 +1,10 @@ # SPDX-License-Identifier: GPL-2.0 generated-y += syscall_table.h -generic-y += bug.h -generic-y += compat.h -generic-y += device.h -generic-y += div64.h -generic-y += dma-mapping.h -generic-y += emergency-restart.h -generic-y += exec.h generic-y += extable.h -generic-y += fb.h -generic-y += hardirq.h -generic-y += hw_irq.h -generic-y += irq_regs.h -generic-y += irq_work.h -generic-y += kdebug.h -generic-y += kmap_types.h -generic-y += kprobes.h generic-y += kvm_para.h -generic-y += local.h generic-y += local64.h generic-y += mcs_spinlock.h -generic-y += mm-arch-hooks.h -generic-y += mmiowb.h generic-y += param.h -generic-y += percpu.h -generic-y += preempt.h generic-y += qrwlock.h generic-y += qspinlock.h -generic-y += sections.h -generic-y += topology.h -generic-y += trace_clock.h generic-y += user.h -generic-y += vga.h -generic-y += word-at-a-time.h -generic-y += xor.h --- a/include/asm-generic/Kbuild~asm-generic-make-more-kernel-space-headers-mandatory +++ a/include/asm-generic/Kbuild @@ -4,6 +4,58 @@ # (This file is not included when SRCARCH=um since UML borrows several # asm headers from the host architecutre.) +mandatory-y += atomic.h +mandatory-y += barrier.h +mandatory-y += bitops.h +mandatory-y += bug.h +mandatory-y += bugs.h +mandatory-y += cacheflush.h +mandatory-y += checksum.h +mandatory-y += compat.h +mandatory-y += current.h +mandatory-y += delay.h +mandatory-y += device.h +mandatory-y += div64.h mandatory-y += dma-contiguous.h +mandatory-y += dma-mapping.h +mandatory-y += dma.h +mandatory-y += emergency-restart.h +mandatory-y += exec.h +mandatory-y += fb.h +mandatory-y += ftrace.h +mandatory-y += futex.h +mandatory-y += hardirq.h +mandatory-y += hw_irq.h +mandatory-y += io.h +mandatory-y += irq.h +mandatory-y += irq_regs.h +mandatory-y += irq_work.h +mandatory-y += kdebug.h +mandatory-y += kmap_types.h +mandatory-y += kprobes.h +mandatory-y += linkage.h +mandatory-y += local.h +mandatory-y += mm-arch-hooks.h +mandatory-y += mmiowb.h +mandatory-y += mmu.h +mandatory-y += mmu_context.h +mandatory-y += module.h mandatory-y += msi.h +mandatory-y += pci.h +mandatory-y += percpu.h +mandatory-y += pgalloc.h +mandatory-y += preempt.h +mandatory-y += sections.h +mandatory-y += serial.h +mandatory-y += shmparam.h mandatory-y += simd.h +mandatory-y += switch_to.h +mandatory-y += timex.h +mandatory-y += tlbflush.h +mandatory-y += topology.h +mandatory-y += trace_clock.h +mandatory-y += uaccess.h +mandatory-y += unaligned.h +mandatory-y += vga.h +mandatory-y += word-at-a-time.h +mandatory-y += xor.h _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 004/155] scripts/spelling.txt: add syfs/sysfs pattern 2020-04-02 4:01 incoming Andrew Morton ` (2 preceding siblings ...) 2020-04-02 4:03 ` [patch 003/155] asm-generic: make more kernel-space headers mandatory Andrew Morton @ 2020-04-02 4:03 ` Andrew Morton 2020-04-02 4:03 ` [patch 005/155] scripts/spelling.txt: add more spellings to spelling.txt Andrew Morton ` (150 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:03 UTC (permalink / raw) To: akpm, chris.paterson2, colin.king, j.neuschaefer, linux-mm, luca, mm-commits, paul.walmsley, sboyd, torvalds, xndchn From: Jonathan Neuschäfer <j.neuschaefer@gmx.net> Subject: scripts/spelling.txt: add syfs/sysfs pattern There are a few cases in the tree where "sysfs" is misspelled as "syfs". Link: http://lkml.kernel.org/r/20200218152010.27349-1-j.neuschaefer@gmx.net Signed-off-by: Jonathan Neuschäfer <j.neuschaefer@gmx.ne> Cc: Colin Ian King <colin.king@canonical.com> Cc: Xiong <xndchn@gmail.com> Cc: Stephen Boyd <sboyd@kernel.org> Cc: Paul Walmsley <paul.walmsley@sifive.com> Cc: Chris Paterson <chris.paterson2@renesas.com> Cc: Luca Ceresoli <luca@lucaceresoli.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- scripts/spelling.txt | 1 + 1 file changed, 1 insertion(+) --- a/scripts/spelling.txt~scripts-spellingtxt-add-syfs-sysfs-pattern +++ a/scripts/spelling.txt @@ -1328,6 +1328,7 @@ swithcing||switching swithed||switched swithing||switching swtich||switch +syfs||sysfs symetric||symmetric synax||syntax synchonized||synchronized _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 005/155] scripts/spelling.txt: add more spellings to spelling.txt 2020-04-02 4:01 incoming Andrew Morton ` (3 preceding siblings ...) 2020-04-02 4:03 ` [patch 004/155] scripts/spelling.txt: add syfs/sysfs pattern Andrew Morton @ 2020-04-02 4:03 ` Andrew Morton 2020-04-02 4:03 ` [patch 006/155] ocfs2: remove FS_OCFS2_NM Andrew Morton ` (149 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:03 UTC (permalink / raw) To: akpm, colin.king, joe, linux-mm, mm-commits, torvalds From: Colin Ian King <colin.king@canonical.com> Subject: scripts/spelling.txt: add more spellings to spelling.txt Here are some of the more common spelling mistakes and typos that I've found while fixing up spelling mistakes in the kernel since November 2019 Link: http://lkml.kernel.org/r/20200313174946.228216-1-colin.king@canonical.com Signed-off-by: Colin Ian King <colin.king@canonical.com> Cc: Joe Perches <joe@perches.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- scripts/spelling.txt | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) --- a/scripts/spelling.txt~scripts-spellingtxt-add-more-spellings-to-spellingtxt +++ a/scripts/spelling.txt @@ -177,7 +177,9 @@ atomatically||automatically atomicly||atomically atempt||attempt attachement||attachment +attatch||attach attched||attached +attemp||attempt attemps||attempts attemping||attempting attepmpt||attempt @@ -235,11 +237,13 @@ brievely||briefly brigde||bridge broadcase||broadcast broadcat||broadcast +bufer||buffer bufufer||buffer cacluated||calculated caculate||calculate caculation||calculation cadidate||candidate +cahces||caches calender||calendar calescing||coalescing calle||called @@ -338,7 +342,6 @@ conditon||condition condtion||condition conected||connected conector||connector -connecetd||connected configration||configuration configuartion||configuration configuation||configuration @@ -349,7 +352,9 @@ configuretion||configuration configutation||configuration conider||consider conjuction||conjunction +connecetd||connected connectinos||connections +connetor||connector connnection||connection connnections||connections consistancy||consistency @@ -469,6 +474,7 @@ difinition||definition digial||digital dimention||dimension dimesions||dimensions +disgest||digest dispalying||displaying diplay||display directon||direction @@ -553,6 +559,7 @@ etsablishment||establishment etsbalishment||establishment excecutable||executable exceded||exceeded +exceeed||exceed excellant||excellent execeeded||exceeded execeeds||exceeds @@ -742,6 +749,7 @@ initialzing||initializing initilization||initialization initilize||initialize initliaze||initialize +initilized||initialized inofficial||unofficial inrerface||interface insititute||institute @@ -802,6 +810,7 @@ irrelevent||irrelevant isnt||isn't isssue||issue issus||issues +iteraions||iterations iternations||iterations itertation||iteration itslef||itself @@ -828,6 +837,7 @@ libary||library librairies||libraries libraris||libraries licenceing||licencing +limted||limited logaritmic||logarithmic loggging||logging loggin||login @@ -924,6 +934,7 @@ nerver||never nescessary||necessary nessessary||necessary noticable||noticeable +notication||notification notications||notifications notifcations||notifications notifed||notified @@ -1007,6 +1018,7 @@ pendantic||pedantic peprocessor||preprocessor perfoming||performing perfomring||performing +periperal||peripheral peripherial||peripheral permissons||permissions peroid||period @@ -1043,6 +1055,7 @@ prefferably||preferably premption||preemption prepaired||prepared preperation||preparation +preprare||prepare pressre||pressure primative||primitive princliple||principle @@ -1064,6 +1077,7 @@ processsed||processed processsing||processing procteted||protected prodecure||procedure +progamming||programming progams||programs progess||progress programers||programmers @@ -1151,12 +1165,14 @@ replys||replies reponse||response representaion||representation reqeust||request +reqister||register requestied||requested requiere||require requirment||requirement requred||required requried||required requst||request +requsted||requested reregisteration||reregistration reseting||resetting reseved||reserved @@ -1227,10 +1243,12 @@ seqeuncer||sequencer seqeuencer||sequencer sequece||sequence sequencial||sequential +serivce||service serveral||several servive||service setts||sets settting||setting +shapshot||snapshot shotdown||shutdown shoud||should shouldnt||shouldn't _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 006/155] ocfs2: remove FS_OCFS2_NM 2020-04-02 4:01 incoming Andrew Morton ` (4 preceding siblings ...) 2020-04-02 4:03 ` [patch 005/155] scripts/spelling.txt: add more spellings to spelling.txt Andrew Morton @ 2020-04-02 4:03 ` Andrew Morton 2020-04-02 4:03 ` [patch 007/155] ocfs2: remove unused macros Andrew Morton ` (148 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:03 UTC (permalink / raw) To: akpm, alex.shi, gechangwei, ghe, jlbec, joseph.qi, junxiao.bi, linux-mm, mark, mm-commits, piaojun, torvalds From: Alex Shi <alex.shi@linux.alibaba.com> Subject: ocfs2: remove FS_OCFS2_NM This macro is unused since commit ab09203e302b ("sysctl fs: Remove dead binary sysctl support"). Link: http://lkml.kernel.org/r/1579577812-251572-1-git-send-email-alex.shi@linux.alibaba.com Signed-off-by: Alex Shi <alex.shi@linux.alibaba.com> Acked-by: Joseph Qi <joseph.qi@linux.alibaba.com> Cc: Mark Fasheh <mark@fasheh.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Junxiao Bi <junxiao.bi@oracle.com> Cc: Changwei Ge <gechangwei@live.cn> Cc: Gang He <ghe@suse.com> Cc: Jun Piao <piaojun@huawei.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/ocfs2/stackglue.c | 2 -- 1 file changed, 2 deletions(-) --- a/fs/ocfs2/stackglue.c~ocfs2-remove-fs_ocfs2_nm +++ a/fs/ocfs2/stackglue.c @@ -656,8 +656,6 @@ error: * and easier to preserve the name. */ -#define FS_OCFS2_NM 1 - static struct ctl_table ocfs2_nm_table[] = { { .procname = "hb_ctl_path", _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 007/155] ocfs2: remove unused macros 2020-04-02 4:01 incoming Andrew Morton ` (5 preceding siblings ...) 2020-04-02 4:03 ` [patch 006/155] ocfs2: remove FS_OCFS2_NM Andrew Morton @ 2020-04-02 4:03 ` Andrew Morton 2020-04-02 4:03 ` [patch 008/155] ocfs2: use OCFS2_SEC_BITS in macro Andrew Morton ` (147 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:03 UTC (permalink / raw) To: akpm, alex.shi, cg.chen, gechangwei, ghe, gregkh, jiangqi903, jlbec, junxiao.bi, linux-mm, mark, mm-commits, piaojun, rfontana, tglx, torvalds From: Alex Shi <alex.shi@linux.alibaba.com> Subject: ocfs2: remove unused macros O2HB_DEFAULT_BLOCK_BITS/DLM_THREAD_MAX_ASTS/DLM_MIGRATION_RETRY_MS and OCFS2_MAX_RESV_WINDOW_BITS/OCFS2_MIN_RESV_WINDOW_BITS have been unused since commit 66effd3c6812 ("ocfs2/dlm: Do not migrate resource to a node that is leaving the domain"). Link: http://lkml.kernel.org/r/1579577827-251796-1-git-send-email-alex.shi@linux.alibaba.com Signed-off-by: Alex Shi <alex.shi@linux.alibaba.com> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: ChenGang <cg.chen@huawei.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Richard Fontana <rfontana@redhat.com> Cc: Mark Fasheh <mark@fasheh.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Junxiao Bi <junxiao.bi@oracle.com> Cc: Joseph Qi <jiangqi903@gmail.com> Cc: Changwei Ge <gechangwei@live.cn> Cc: Gang He <ghe@suse.com> Cc: Jun Piao <piaojun@huawei.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/ocfs2/cluster/heartbeat.c | 2 -- fs/ocfs2/dlm/dlmmaster.c | 2 -- fs/ocfs2/dlm/dlmthread.c | 1 - fs/ocfs2/reservations.c | 3 --- 4 files changed, 8 deletions(-) --- a/fs/ocfs2/cluster/heartbeat.c~ocfs2-remove-unused-macros +++ a/fs/ocfs2/cluster/heartbeat.c @@ -101,8 +101,6 @@ static struct o2hb_callback { static struct o2hb_callback *hbcall_from_type(enum o2hb_callback_type type); -#define O2HB_DEFAULT_BLOCK_BITS 9 - enum o2hb_heartbeat_modes { O2HB_HEARTBEAT_LOCAL = 0, O2HB_HEARTBEAT_GLOBAL, --- a/fs/ocfs2/dlm/dlmmaster.c~ocfs2-remove-unused-macros +++ a/fs/ocfs2/dlm/dlmmaster.c @@ -2749,8 +2749,6 @@ leave: return ret; } -#define DLM_MIGRATION_RETRY_MS 100 - /* * Should be called only after beginning the domain leave process. * There should not be any remaining locks on nonlocal lock resources, --- a/fs/ocfs2/dlm/dlmthread.c~ocfs2-remove-unused-macros +++ a/fs/ocfs2/dlm/dlmthread.c @@ -680,7 +680,6 @@ static void dlm_flush_asts(struct dlm_ct #define DLM_THREAD_TIMEOUT_MS (4 * 1000) #define DLM_THREAD_MAX_DIRTY 100 -#define DLM_THREAD_MAX_ASTS 10 static int dlm_thread(void *data) { --- a/fs/ocfs2/reservations.c~ocfs2-remove-unused-macros +++ a/fs/ocfs2/reservations.c @@ -33,9 +33,6 @@ static DEFINE_SPINLOCK(resv_lock); -#define OCFS2_MIN_RESV_WINDOW_BITS 8 -#define OCFS2_MAX_RESV_WINDOW_BITS 1024 - int ocfs2_dir_resv_allowed(struct ocfs2_super *osb) { return (osb->osb_resv_level && osb->osb_dir_resv_level); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 008/155] ocfs2: use OCFS2_SEC_BITS in macro 2020-04-02 4:01 incoming Andrew Morton ` (6 preceding siblings ...) 2020-04-02 4:03 ` [patch 007/155] ocfs2: remove unused macros Andrew Morton @ 2020-04-02 4:03 ` Andrew Morton 2020-04-02 4:03 ` [patch 009/155] ocfs2: remove dlm_lock_is_remote Andrew Morton ` (146 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:03 UTC (permalink / raw) To: akpm, alex.shi, gechangwei, ghe, jlbec, joseph.qi, junxiao.bi, linux-mm, mark, mm-commits, piaojun, torvalds From: Alex Shi <alex.shi@linux.alibaba.com> Subject: ocfs2: use OCFS2_SEC_BITS in macro This macro should be used. Link: http://lkml.kernel.org/r/1579577840-251956-1-git-send-email-alex.shi@linux.alibaba.com Signed-off-by: Alex Shi <alex.shi@linux.alibaba.com> Acked-by: Joseph Qi <joseph.qi@linux.alibaba.com> Cc: Mark Fasheh <mark@fasheh.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Junxiao Bi <junxiao.bi@oracle.com> Cc: Changwei Ge <gechangwei@live.cn> Cc: Gang He <ghe@suse.com> Cc: Jun Piao <piaojun@huawei.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/ocfs2/dlmglue.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/fs/ocfs2/dlmglue.c~ocfs2-use-ocfs2_sec_bits-in-macro +++ a/fs/ocfs2/dlmglue.c @@ -2133,7 +2133,7 @@ static void ocfs2_downconvert_on_unlock( } #define OCFS2_SEC_BITS 34 -#define OCFS2_SEC_SHIFT (64 - 34) +#define OCFS2_SEC_SHIFT (64 - OCFS2_SEC_BITS) #define OCFS2_NSEC_MASK ((1ULL << OCFS2_SEC_SHIFT) - 1) /* LVB only has room for 64 bits of time here so we pack it for _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 009/155] ocfs2: remove dlm_lock_is_remote 2020-04-02 4:01 incoming Andrew Morton ` (7 preceding siblings ...) 2020-04-02 4:03 ` [patch 008/155] ocfs2: use OCFS2_SEC_BITS in macro Andrew Morton @ 2020-04-02 4:03 ` Andrew Morton 2020-04-02 4:03 ` [patch 010/155] ocfs2: there is no need to log twice in several functions Andrew Morton ` (145 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:03 UTC (permalink / raw) To: akpm, alex.shi, gechangwei, ghe, jlbec, joseph.qi, junxiao.bi, linux-mm, mark, mm-commits, piaojun, torvalds From: Alex Shi <alex.shi@linux.alibaba.com> Subject: ocfs2: remove dlm_lock_is_remote This macro has been unused since it was introduced. Link: http://lkml.kernel.org/r/1579578203-254451-1-git-send-email-alex.shi@linux.alibaba.com Signed-off-by: Alex Shi <alex.shi@linux.alibaba.com> Acked-by: Joseph Qi <joseph.qi@linux.alibaba.com> Cc: Mark Fasheh <mark@fasheh.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Junxiao Bi <junxiao.bi@oracle.com> Cc: Changwei Ge <gechangwei@live.cn> Cc: Gang He <ghe@suse.com> Cc: Jun Piao <piaojun@huawei.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/ocfs2/dlm/dlmthread.c | 2 -- 1 file changed, 2 deletions(-) --- a/fs/ocfs2/dlm/dlmthread.c~ocfs2-remove-dlm_lock_is_remote +++ a/fs/ocfs2/dlm/dlmthread.c @@ -39,8 +39,6 @@ static int dlm_thread(void *data); static void dlm_flush_asts(struct dlm_ctxt *dlm); -#define dlm_lock_is_remote(dlm, lock) ((lock)->ml.node != (dlm)->node_num) - /* will exit holding res->spinlock, but may drop in function */ /* waits until flags are cleared on res->state */ void __dlm_wait_on_lockres_flags(struct dlm_lock_resource *res, int flags) _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 010/155] ocfs2: there is no need to log twice in several functions 2020-04-02 4:01 incoming Andrew Morton ` (8 preceding siblings ...) 2020-04-02 4:03 ` [patch 009/155] ocfs2: remove dlm_lock_is_remote Andrew Morton @ 2020-04-02 4:03 ` Andrew Morton 2020-04-02 4:03 ` [patch 011/155] ocfs2: correct annotation from "l_next_rec" to "l_next_free_rec" Andrew Morton ` (144 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:03 UTC (permalink / raw) To: akpm, gechangwei, ghe, jlbec, joseph.qi, junxiao.bi, linux-mm, mark, mm-commits, piaojun, torvalds, wangyan122 From: wangyan <wangyan122@huawei.com> Subject: ocfs2: there is no need to log twice in several functions There is no need to log twice in several functions. Link: http://lkml.kernel.org/r/77eec86a-f634-5b98-4f7d-0cd15185a37b@huawei.com Signed-off-by: Yan Wang <wangyan122@huawei.com> Reviewed-by: Jun Piao <piaojun@huawei.com> Acked-by: Joseph Qi <joseph.qi@linux.alibaba.com> Cc: Mark Fasheh <mark@fasheh.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Junxiao Bi <junxiao.bi@oracle.com> Cc: Changwei Ge <gechangwei@live.cn> Cc: Gang He <ghe@suse.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/ocfs2/alloc.c | 1 - fs/ocfs2/suballoc.c | 5 ----- 2 files changed, 6 deletions(-) --- a/fs/ocfs2/alloc.c~ocfs2-there-is-no-need-to-log-twice-in-several-functions +++ a/fs/ocfs2/alloc.c @@ -1060,7 +1060,6 @@ bail: brelse(bhs[i]); bhs[i] = NULL; } - mlog_errno(status); } return status; } --- a/fs/ocfs2/suballoc.c~ocfs2-there-is-no-need-to-log-twice-in-several-functions +++ a/fs/ocfs2/suballoc.c @@ -2509,9 +2509,6 @@ static int _ocfs2_free_suballoc_bits(han bail: brelse(group_bh); - - if (status) - mlog_errno(status); return status; } @@ -2582,8 +2579,6 @@ static int _ocfs2_free_clusters(handle_t num_clusters); out: - if (status) - mlog_errno(status); return status; } _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 011/155] ocfs2: correct annotation from "l_next_rec" to "l_next_free_rec" 2020-04-02 4:01 incoming Andrew Morton ` (9 preceding siblings ...) 2020-04-02 4:03 ` [patch 010/155] ocfs2: there is no need to log twice in several functions Andrew Morton @ 2020-04-02 4:03 ` Andrew Morton 2020-04-02 4:03 ` [patch 012/155] ocfs2: remove useless err Andrew Morton ` (143 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:03 UTC (permalink / raw) To: akpm, gechangwei, ghe, jlbec, joseph.qi, junxiao.bi, linux-mm, mark, mm-commits, piaojun, torvalds, wangyan122 From: wangyan <wangyan122@huawei.com> Subject: ocfs2: correct annotation from "l_next_rec" to "l_next_free_rec" Correct annotation from "l_next_rec" to "l_next_free_rec" Link: http://lkml.kernel.org/r/5e76c953-3479-1280-023c-ad05e4c75608@huawei.com Signed-off-by: Yan Wang <wangyan122@huawei.com> Reviewed-by: Jun Piao <piaojun@huawei.com> Acked-by: Joseph Qi <joseph.qi@linux.alibaba.com> Cc: Mark Fasheh <mark@fasheh.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Junxiao Bi <junxiao.bi@oracle.com> Cc: Changwei Ge <gechangwei@live.cn> Cc: Gang He <ghe@suse.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/ocfs2/alloc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/fs/ocfs2/alloc.c~ocfs2-correct-annotation-from-l_next_rec-to-l_next_free_rec +++ a/fs/ocfs2/alloc.c @@ -3941,7 +3941,7 @@ rotate: * above. * * This leaf needs to have space, either by the empty 1st - * extent record, or by virtue of an l_next_rec < l_count. + * extent record, or by virtue of an l_next_free_rec < l_count. */ ocfs2_rotate_leaf(el, insert_rec); } _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 012/155] ocfs2: remove useless err 2020-04-02 4:01 incoming Andrew Morton ` (10 preceding siblings ...) 2020-04-02 4:03 ` [patch 011/155] ocfs2: correct annotation from "l_next_rec" to "l_next_free_rec" Andrew Morton @ 2020-04-02 4:03 ` Andrew Morton 2020-04-02 4:03 ` [patch 013/155] ocfs2: add missing annotations for ocfs2_refcount_cache_lock() and ocfs2_refcount_cache_unlock() Andrew Morton ` (142 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:03 UTC (permalink / raw) To: akpm, alex.shi, cg.chen, gregkh, jlbec, joseph.qi, kstewart, linux-mm, mark, mm-commits, rfontana, tglx, torvalds From: Alex Shi <alex.shi@linux.alibaba.com> Subject: ocfs2: remove useless err We don't need 'err' in these 2 places, better to remove them. Link: http://lkml.kernel.org/r/1579577836-251879-1-git-send-email-alex.shi@linux.alibaba.com Signed-off-by: Alex Shi <alex.shi@linux.alibaba.com> Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com> Cc: Mark Fasheh <mark@fasheh.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Kate Stewart <kstewart@linuxfoundation.org> Cc: ChenGang <cg.chen@huawei.com> Cc: Richard Fontana <rfontana@redhat.com> Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/ocfs2/cluster/tcp.c | 3 +-- fs/ocfs2/dir.c | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) --- a/fs/ocfs2/cluster/tcp.c~ocfs2-remove-useless-err +++ a/fs/ocfs2/cluster/tcp.c @@ -1948,7 +1948,6 @@ static void o2net_accept_many(struct wor { struct socket *sock = o2net_listen_sock; int more; - int err; /* * It is critical to note that due to interrupt moderation @@ -1963,7 +1962,7 @@ static void o2net_accept_many(struct wor */ for (;;) { - err = o2net_accept_one(sock, &more); + o2net_accept_one(sock, &more); if (!more) break; cond_resched(); --- a/fs/ocfs2/dir.c~ocfs2-remove-useless-err +++ a/fs/ocfs2/dir.c @@ -676,7 +676,7 @@ static struct buffer_head *ocfs2_find_en int ra_ptr = 0; /* Current index into readahead buffer */ int num = 0; - int nblocks, i, err; + int nblocks, i; sb = dir->i_sb; @@ -708,7 +708,7 @@ restart: num++; bh = NULL; - err = ocfs2_read_dir_block(dir, b++, &bh, + ocfs2_read_dir_block(dir, b++, &bh, OCFS2_BH_READAHEAD); bh_use[ra_max] = bh; } _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 013/155] ocfs2: add missing annotations for ocfs2_refcount_cache_lock() and ocfs2_refcount_cache_unlock() 2020-04-02 4:01 incoming Andrew Morton ` (11 preceding siblings ...) 2020-04-02 4:03 ` [patch 012/155] ocfs2: remove useless err Andrew Morton @ 2020-04-02 4:03 ` Andrew Morton 2020-04-02 4:03 ` [patch 014/155] ocfs2: replace zero-length array with flexible-array member Andrew Morton ` (141 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:03 UTC (permalink / raw) To: akpm, gechangwei, ghe, jbi.octave, jlbec, joseph.qi, junxiao.bi, linux-mm, mark, mm-commits, piaojun, torvalds From: Jules Irenge <jbi.octave@gmail.com> Subject: ocfs2: add missing annotations for ocfs2_refcount_cache_lock() and ocfs2_refcount_cache_unlock() Sparse reports warnings at ocfs2_refcount_cache_lock() and ocfs2_refcount_cache_unlock() warning: context imbalance in ocfs2_refcount_cache_lock() - wrong count at exit warning: context imbalance in ocfs2_refcount_cache_unlock() - unexpected unlock The root cause is the missing annotation at ocfs2_refcount_cache_lock() and at ocfs2_refcount_cache_unlock() Add the missing __acquires(&rf->rf_lock) annotation to ocfs2_refcount_cache_lock() Add the missing __releases(&rf->rf_lock) annotation to ocfs2_refcount_cache_unlock() Signed-off-by: Jules Irenge <jbi.octave@gmail.com> Link: http://lkml.kernel.org/r/20200224204130.18178-1-jbi.octave@gmail.com Acked-by: Joseph Qi <joseph.qi@linux.alibaba.com> Cc: Mark Fasheh <mark@fasheh.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Junxiao Bi <junxiao.bi@oracle.com> Cc: Changwei Ge <gechangwei@live.cn> Cc: Gang He <ghe@suse.com> Cc: Jun Piao <piaojun@huawei.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/ocfs2/refcounttree.c | 2 ++ 1 file changed, 2 insertions(+) --- a/fs/ocfs2/refcounttree.c~ocfs2-add-missing-annotations-for-ocfs2_refcount_cache_lock-and-ocfs2_refcount_cache_unlock +++ a/fs/ocfs2/refcounttree.c @@ -154,6 +154,7 @@ ocfs2_refcount_cache_get_super(struct oc } static void ocfs2_refcount_cache_lock(struct ocfs2_caching_info *ci) +__acquires(&rf->rf_lock) { struct ocfs2_refcount_tree *rf = cache_info_to_refcount(ci); @@ -161,6 +162,7 @@ static void ocfs2_refcount_cache_lock(st } static void ocfs2_refcount_cache_unlock(struct ocfs2_caching_info *ci) +__releases(&rf->rf_lock) { struct ocfs2_refcount_tree *rf = cache_info_to_refcount(ci); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 014/155] ocfs2: replace zero-length array with flexible-array member 2020-04-02 4:01 incoming Andrew Morton ` (12 preceding siblings ...) 2020-04-02 4:03 ` [patch 013/155] ocfs2: add missing annotations for ocfs2_refcount_cache_lock() and ocfs2_refcount_cache_unlock() Andrew Morton @ 2020-04-02 4:03 ` Andrew Morton 2020-04-02 4:03 ` [patch 015/155] ocfs2: cluster: " Andrew Morton ` (140 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:03 UTC (permalink / raw) To: akpm, gechangwei, ghe, gustavo, jlbec, joseph.qi, junxiao.bi, linux-mm, mark, mm-commits, piaojun, torvalds From: "Gustavo A. R. Silva" <gustavo@embeddedor.com> Subject: ocfs2: replace zero-length array with flexible-array member The current codebase makes use of the zero-length array language extension to the C90 standard, but the preferred mechanism to declare variable-length types such as these ones is a flexible array member[1][2], introduced in C99: struct foo { int stuff; struct boo array[]; }; By making use of the mechanism above, we will get a compiler warning in case the flexible array does not occur last in the structure, which will help us prevent some kind of undefined behavior bugs from being inadvertently introduced[3] to the codebase from now on. Also, notice that, dynamic memory allocations won't be affected by this change: "Flexible array members have incomplete type, and so the sizeof operator may not be applied. As a quirk of the original implementation of zero-length arrays, sizeof evaluates to zero."[1] This issue was found with the help of Coccinelle. [1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html [2] https://github.com/KSPP/linux/issues/21 [3] commit 76497732932f ("cxgb3/l2t: Fix undefined behaviour") Link: http://lkml.kernel.org/r/20200213160244.GA6088@embeddedor Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com> Acked-by: Joseph Qi <joseph.qi@linux.alibaba.com> Cc: Mark Fasheh <mark@fasheh.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Junxiao Bi <junxiao.bi@oracle.com> Cc: Changwei Ge <gechangwei@live.cn> Cc: Gang He <ghe@suse.com> Cc: Jun Piao <piaojun@huawei.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/ocfs2/journal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/fs/ocfs2/journal.c~ocfs2-replace-zero-length-array-with-flexible-array-member +++ a/fs/ocfs2/journal.c @@ -91,7 +91,7 @@ enum ocfs2_replay_state { struct ocfs2_replay_map { unsigned int rm_slots; enum ocfs2_replay_state rm_state; - unsigned char rm_replay_slots[0]; + unsigned char rm_replay_slots[]; }; static void ocfs2_replay_map_set_state(struct ocfs2_super *osb, int state) _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 015/155] ocfs2: cluster: replace zero-length array with flexible-array member 2020-04-02 4:01 incoming Andrew Morton ` (13 preceding siblings ...) 2020-04-02 4:03 ` [patch 014/155] ocfs2: replace zero-length array with flexible-array member Andrew Morton @ 2020-04-02 4:03 ` Andrew Morton 2020-04-02 4:03 ` [patch 016/155] ocfs2: dlm: " Andrew Morton ` (139 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:03 UTC (permalink / raw) To: akpm, gechangwei, ghe, gustavo, jlbec, joseph.qi, junxiao.bi, linux-mm, mark, mm-commits, piaojun, torvalds From: "Gustavo A. R. Silva" <gustavo@embeddedor.com> Subject: ocfs2: cluster: replace zero-length array with flexible-array member The current codebase makes use of the zero-length array language extension to the C90 standard, but the preferred mechanism to declare variable-length types such as these ones is a flexible array member[1][2], introduced in C99: struct foo { int stuff; struct boo array[]; }; By making use of the mechanism above, we will get a compiler warning in case the flexible array does not occur last in the structure, which will help us prevent some kind of undefined behavior bugs from being inadvertently introduced[3] to the codebase from now on. Also, notice that, dynamic memory allocations won't be affected by this change: "Flexible array members have incomplete type, and so the sizeof operator may not be applied. As a quirk of the original implementation of zero-length arrays, sizeof evaluates to zero."[1] This issue was found with the help of Coccinelle. [1] https://urldefense.com/v3/__https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html__;!!GqivPVa7Brio!NzMr-YRl2zy-K3lwLVVatz7x0uD2z7-ykQag4GrGigxmfWU8TWzDy6xrkTiW3hYl00czlw$ [2] https://urldefense.com/v3/__https://github.com/KSPP/linux/issues/21__;!!GqivPVa7Brio!NzMr-YRl2zy-K3lwLVVatz7x0uD2z7-ykQag4GrGigxmfWU8TWzDy6xrkTiW3hYHG1nAnw$ [3] commit 76497732932f ("cxgb3/l2t: Fix undefined behaviour") Link: http://lkml.kernel.org/r/20200309201907.GA8005@embeddedor Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com> Acked-by: Joseph Qi <joseph.qi@linux.alibaba.com> Cc: Mark Fasheh <mark@fasheh.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Junxiao Bi <junxiao.bi@oracle.com> Cc: Changwei Ge <gechangwei@live.cn> Cc: Gang He <ghe@suse.com> Cc: Jun Piao <piaojun@huawei.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/ocfs2/cluster/tcp.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/fs/ocfs2/cluster/tcp.h~ocfs2-cluster-replace-zero-length-array-with-flexible-array-member +++ a/fs/ocfs2/cluster/tcp.h @@ -32,7 +32,7 @@ struct o2net_msg __be32 status; __be32 key; __be32 msg_num; - __u8 buf[0]; + __u8 buf[]; }; typedef int (o2net_msg_handler_func)(struct o2net_msg *msg, u32 len, void *data, _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 016/155] ocfs2: dlm: replace zero-length array with flexible-array member 2020-04-02 4:01 incoming Andrew Morton ` (14 preceding siblings ...) 2020-04-02 4:03 ` [patch 015/155] ocfs2: cluster: " Andrew Morton @ 2020-04-02 4:03 ` Andrew Morton 2020-04-02 4:03 ` [patch 017/155] ocfs2: ocfs2_fs.h: " Andrew Morton ` (138 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:03 UTC (permalink / raw) To: akpm, gechangwei, ghe, gustavo, jlbec, joseph.qi, junxiao.bi, linux-mm, mark, mm-commits, piaojun, torvalds From: "Gustavo A. R. Silva" <gustavo@embeddedor.com> Subject: ocfs2: dlm: replace zero-length array with flexible-array member The current codebase makes use of the zero-length array language extension to the C90 standard, but the preferred mechanism to declare variable-length types such as these ones is a flexible array member[1][2], introduced in C99: struct foo { int stuff; struct boo array[]; }; By making use of the mechanism above, we will get a compiler warning in case the flexible array does not occur last in the structure, which will help us prevent some kind of undefined behavior bugs from being inadvertently introduced[3] to the codebase from now on. Also, notice that, dynamic memory allocations won't be affected by this change: "Flexible array members have incomplete type, and so the sizeof operator may not be applied. As a quirk of the original implementation of zero-length arrays, sizeof evaluates to zero."[1] This issue was found with the help of Coccinelle. [1] https://urldefense.com/v3/__https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html__;!!GqivPVa7Brio!OVOYL_CouISa5L1Lw-20EEFQntw6cKMx-j8UdY4z78uYgzKBUFcfpn50GaurvbV5v7YiUA$ [2] https://urldefense.com/v3/__https://github.com/KSPP/linux/issues/21__;!!GqivPVa7Brio!OVOYL_CouISa5L1Lw-20EEFQntw6cKMx-j8UdY4z78uYgzKBUFcfpn50GaurvbXs8Eh8eg$ [3] commit 76497732932f ("cxgb3/l2t: Fix undefined behaviour") Link: http://lkml.kernel.org/r/20200309202016.GA8210@embeddedor Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com> Acked-by: Joseph Qi <joseph.qi@linux.alibaba.com> Cc: Mark Fasheh <mark@fasheh.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Junxiao Bi <junxiao.bi@oracle.com> Cc: Changwei Ge <gechangwei@live.cn> Cc: Gang He <ghe@suse.com> Cc: Jun Piao <piaojun@huawei.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/ocfs2/dlm/dlmcommon.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) --- a/fs/ocfs2/dlm/dlmcommon.h~ocfs2-dlm-replace-zero-length-array-with-flexible-array-member +++ a/fs/ocfs2/dlm/dlmcommon.h @@ -564,7 +564,7 @@ struct dlm_migratable_lockres // 48 bytes u8 lvb[DLM_LVB_LEN]; // 112 bytes - struct dlm_migratable_lock ml[0]; // 16 bytes each, begins at byte 112 + struct dlm_migratable_lock ml[]; // 16 bytes each, begins at byte 112 }; #define DLM_MIG_LOCKRES_MAX_LEN \ (sizeof(struct dlm_migratable_lockres) + \ @@ -601,7 +601,7 @@ struct dlm_convert_lock u8 name[O2NM_MAX_NAME_LEN]; - s8 lvb[0]; + s8 lvb[]; }; #define DLM_CONVERT_LOCK_MAX_LEN (sizeof(struct dlm_convert_lock)+DLM_LVB_LEN) @@ -616,7 +616,7 @@ struct dlm_unlock_lock u8 name[O2NM_MAX_NAME_LEN]; - s8 lvb[0]; + s8 lvb[]; }; #define DLM_UNLOCK_LOCK_MAX_LEN (sizeof(struct dlm_unlock_lock)+DLM_LVB_LEN) @@ -632,7 +632,7 @@ struct dlm_proxy_ast u8 name[O2NM_MAX_NAME_LEN]; - s8 lvb[0]; + s8 lvb[]; }; #define DLM_PROXY_AST_MAX_LEN (sizeof(struct dlm_proxy_ast)+DLM_LVB_LEN) _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 017/155] ocfs2: ocfs2_fs.h: replace zero-length array with flexible-array member 2020-04-02 4:01 incoming Andrew Morton ` (15 preceding siblings ...) 2020-04-02 4:03 ` [patch 016/155] ocfs2: dlm: " Andrew Morton @ 2020-04-02 4:03 ` Andrew Morton 2020-04-02 4:04 ` [patch 018/155] ocfs2: roll back the reference count modification of the parent directory if an error occurs Andrew Morton ` (137 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:03 UTC (permalink / raw) To: akpm, gechangwei, ghe, gustavo, jlbec, joseph.qi, junxiao.bi, linux-mm, mark, mm-commits, piaojun, torvalds From: "Gustavo A. R. Silva" <gustavo@embeddedor.com> Subject: ocfs2: ocfs2_fs.h: replace zero-length array with flexible-array member The current codebase makes use of the zero-length array language extension to the C90 standard, but the preferred mechanism to declare variable-length types such as these ones is a flexible array member[1][2], introduced in C99: struct foo { int stuff; struct boo array[]; }; By making use of the mechanism above, we will get a compiler warning in case the flexible array does not occur last in the structure, which will help us prevent some kind of undefined behavior bugs from being inadvertently introduced[3] to the codebase from now on. Also, notice that, dynamic memory allocations won't be affected by this change: "Flexible array members have incomplete type, and so the sizeof operator may not be applied. As a quirk of the original implementation of zero-length arrays, sizeof evaluates to zero."[1] This issue was found with the help of Coccinelle. [1] https://urldefense.com/v3/__https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html__;!!GqivPVa7Brio!OKPotRhYhHbCG2kibo8Q6_6CuKaa28d_74h1svxyR6rbshrK2L_BdrQpNbvJWBWb40QCkg$ [2] https://urldefense.com/v3/__https://github.com/KSPP/linux/issues/21__;!!GqivPVa7Brio!OKPotRhYhHbCG2kibo8Q6_6CuKaa28d_74h1svxyR6rbshrK2L_BdrQpNbvJWBUhNn9M6g$ [3] commit 76497732932f ("cxgb3/l2t: Fix undefined behaviour") Link: http://lkml.kernel.org/r/20200309202155.GA8432@embeddedor Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com> Acked-by: Joseph Qi <joseph.qi@linux.alibaba.com> Cc: Mark Fasheh <mark@fasheh.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Junxiao Bi <junxiao.bi@oracle.com> Cc: Changwei Ge <gechangwei@live.cn> Cc: Gang He <ghe@suse.com> Cc: Jun Piao <piaojun@huawei.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/ocfs2/ocfs2_fs.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) --- a/fs/ocfs2/ocfs2_fs.h~ocfs2-ocfs2_fsh-replace-zero-length-array-with-flexible-array-member +++ a/fs/ocfs2/ocfs2_fs.h @@ -470,7 +470,7 @@ struct ocfs2_extent_list { __le16 l_reserved1; __le64 l_reserved2; /* Pad to sizeof(ocfs2_extent_rec) */ -/*10*/ struct ocfs2_extent_rec l_recs[0]; /* Extent records */ +/*10*/ struct ocfs2_extent_rec l_recs[]; /* Extent records */ }; /* @@ -484,7 +484,7 @@ struct ocfs2_chain_list { __le16 cl_count; /* Total chains in this list */ __le16 cl_next_free_rec; /* Next unused chain slot */ __le64 cl_reserved1; -/*10*/ struct ocfs2_chain_rec cl_recs[0]; /* Chain records */ +/*10*/ struct ocfs2_chain_rec cl_recs[]; /* Chain records */ }; /* @@ -496,7 +496,7 @@ struct ocfs2_truncate_log { /*00*/ __le16 tl_count; /* Total records in this log */ __le16 tl_used; /* Number of records in use */ __le32 tl_reserved1; -/*08*/ struct ocfs2_truncate_rec tl_recs[0]; /* Truncate records */ +/*08*/ struct ocfs2_truncate_rec tl_recs[]; /* Truncate records */ }; /* @@ -640,7 +640,7 @@ struct ocfs2_local_alloc __le16 la_size; /* Size of included bitmap, in bytes */ __le16 la_reserved1; __le64 la_reserved2; -/*10*/ __u8 la_bitmap[0]; +/*10*/ __u8 la_bitmap[]; }; /* @@ -653,7 +653,7 @@ struct ocfs2_inline_data * for data, starting at id_data */ __le16 id_reserved0; __le32 id_reserved1; - __u8 id_data[0]; /* Start of user data */ + __u8 id_data[]; /* Start of user data */ }; /* @@ -798,7 +798,7 @@ struct ocfs2_dx_entry_list { * possible in de_entries */ __le16 de_num_used; /* Current number of * de_entries entries */ - struct ocfs2_dx_entry de_entries[0]; /* Indexed dir entries + struct ocfs2_dx_entry de_entries[]; /* Indexed dir entries * in a packed array of * length de_num_used */ }; @@ -935,7 +935,7 @@ struct ocfs2_refcount_list { __le16 rl_used; /* Current number of used records */ __le32 rl_reserved2; __le64 rl_reserved1; /* Pad to sizeof(ocfs2_refcount_record) */ -/*10*/ struct ocfs2_refcount_rec rl_recs[0]; /* Refcount records */ +/*10*/ struct ocfs2_refcount_rec rl_recs[]; /* Refcount records */ }; @@ -1021,7 +1021,7 @@ struct ocfs2_xattr_header { buckets. A block uses xb_check and sets this field to zero.) */ - struct ocfs2_xattr_entry xh_entries[0]; /* xattr entry list. */ + struct ocfs2_xattr_entry xh_entries[]; /* xattr entry list. */ }; /* @@ -1207,7 +1207,7 @@ struct ocfs2_local_disk_dqinfo { /* Header of one chunk of a quota file */ struct ocfs2_local_disk_chunk { __le32 dqc_free; /* Number of free entries in the bitmap */ - __u8 dqc_bitmap[0]; /* Bitmap of entries in the corresponding + __u8 dqc_bitmap[]; /* Bitmap of entries in the corresponding * chunk of quota file */ }; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 018/155] ocfs2: roll back the reference count modification of the parent directory if an error occurs 2020-04-02 4:01 incoming Andrew Morton ` (16 preceding siblings ...) 2020-04-02 4:03 ` [patch 017/155] ocfs2: ocfs2_fs.h: " Andrew Morton @ 2020-04-02 4:04 ` Andrew Morton 2020-04-02 4:04 ` [patch 019/155] ocfs2: use scnprintf() for avoiding potential buffer overflow Andrew Morton ` (136 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:04 UTC (permalink / raw) To: akpm, gechangwei, ghe, jlbec, joseph.qi, junxiao.bi, linux-mm, mark, mm-commits, piaojun, torvalds, wangjian161 From: wangjian <wangjian161@huawei.com> Subject: ocfs2: roll back the reference count modification of the parent directory if an error occurs Under some conditions, the directory cannot be deleted. The specific scenarios are as follows: (for example, /mnt/ocfs2 is the mount point) 1. Create the /mnt/ocfs2/p_dir directory. At this time, the i_nlink corresponding to the inode of the /mnt/ocfs2/p_dir directory is equal to 2. 2. During the process of creating the /mnt/ocfs2/p_dir/s_dir directory, if the call to the inc_nlink function in ocfs2_mknod succeeds, the functions such as ocfs2_init_acl, ocfs2_init_security_set, and ocfs2_dentry_attach_lock fail. At this time, the i_nlink corresponding to the inode of the /mnt/ocfs2/p_dir directory is equal to 3, but /mnt/ocfs2/p_dir/s_dir is not added to the /mnt/ocfs2/p_dir directory entry. 3. Delete the /mnt/ocfs2/p_dir directory (rm -rf /mnt/ocfs2/p_dir). At this time, it is found that the i_nlink corresponding to the inode corresponding to the /mnt/ocfs2/p_dir directory is equal to 3. Therefore, the /mnt/ocfs2/p_dir directory cannot be deleted. Link: http://lkml.kernel.org/r/a44f6666-bbc4-405e-0e6c-0f4e922eeef6@huawei.com Signed-off-by: Jian wang <wangjian161@huawei.com> Reviewed-by: Jun Piao <piaojun@huawei.com> Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com> Cc: Mark Fasheh <mark@fasheh.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Junxiao Bi <junxiao.bi@oracle.com> Cc: Changwei Ge <gechangwei@live.cn> Cc: Gang He <ghe@suse.com> Cc: Jun Piao <piaojun@huawei.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/ocfs2/namei.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) --- a/fs/ocfs2/namei.c~ocfs2-roll-back-the-reference-count-modification-of-the-parent-directory-if-an-error-occurs +++ a/fs/ocfs2/namei.c @@ -406,7 +406,7 @@ static int ocfs2_mknod(struct inode *dir if (status < 0) { mlog_errno(status); - goto leave; + goto roll_back; } if (si.enable) { @@ -414,7 +414,7 @@ static int ocfs2_mknod(struct inode *dir meta_ac, data_ac); if (status < 0) { mlog_errno(status); - goto leave; + goto roll_back; } } @@ -427,7 +427,7 @@ static int ocfs2_mknod(struct inode *dir OCFS2_I(dir)->ip_blkno); if (status) { mlog_errno(status); - goto leave; + goto roll_back; } dl = dentry->d_fsdata; @@ -437,12 +437,19 @@ static int ocfs2_mknod(struct inode *dir &lookup); if (status < 0) { mlog_errno(status); - goto leave; + goto roll_back; } insert_inode_hash(inode); d_instantiate(dentry, inode); status = 0; + +roll_back: + if (status < 0 && S_ISDIR(mode)) { + ocfs2_add_links_count(dirfe, -1); + drop_nlink(dir); + } + leave: if (status < 0 && did_quota_inode) dquot_free_inode(inode); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 019/155] ocfs2: use scnprintf() for avoiding potential buffer overflow 2020-04-02 4:01 incoming Andrew Morton ` (17 preceding siblings ...) 2020-04-02 4:04 ` [patch 018/155] ocfs2: roll back the reference count modification of the parent directory if an error occurs Andrew Morton @ 2020-04-02 4:04 ` Andrew Morton 2020-04-02 4:04 ` [patch 020/155] ocfs2: use memalloc_nofs_save instead of memalloc_noio_save Andrew Morton ` (135 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:04 UTC (permalink / raw) To: akpm, gechangwei, ghe, jiangqi903, jlbec, joseph.qi, linux-mm, mark, mm-commits, piaojun, tiwai, torvalds From: Takashi Iwai <tiwai@suse.de> Subject: ocfs2: use scnprintf() for avoiding potential buffer overflow Since snprintf() returns the would-be-output size instead of the actual output size, the succeeding calls may go beyond the given buffer limit. Fix it by replacing with scnprintf(). Link: http://lkml.kernel.org/r/20200311093516.25300-1-tiwai@suse.de Signed-off-by: Takashi Iwai <tiwai@suse.de> Acked-by: Joseph Qi <joseph.qi@linux.alibaba.com> Cc: Mark Fasheh <mark@fasheh.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Joseph Qi <jiangqi903@gmail.com> Cc: Changwei Ge <gechangwei@live.cn> Cc: Gang He <ghe@suse.com> Cc: Jun Piao <piaojun@huawei.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/ocfs2/cluster/heartbeat.c | 10 +-- fs/ocfs2/cluster/netdebug.c | 4 - fs/ocfs2/dlm/dlmdebug.c | 100 ++++++++++++++++----------------- fs/ocfs2/super.c | 46 +++++++-------- 4 files changed, 80 insertions(+), 80 deletions(-) --- a/fs/ocfs2/cluster/heartbeat.c~ocfs2-use-scnprintf-for-avoiding-potential-buffer-overflow +++ a/fs/ocfs2/cluster/heartbeat.c @@ -1307,7 +1307,7 @@ static int o2hb_debug_open(struct inode case O2HB_DB_TYPE_REGION_NUMBER: reg = (struct o2hb_region *)db->db_data; - out += snprintf(buf + out, PAGE_SIZE - out, "%d\n", + out += scnprintf(buf + out, PAGE_SIZE - out, "%d\n", reg->hr_region_num); goto done; @@ -1317,12 +1317,12 @@ static int o2hb_debug_open(struct inode /* If 0, it has never been set before */ if (lts) lts = jiffies_to_msecs(jiffies - lts); - out += snprintf(buf + out, PAGE_SIZE - out, "%lu\n", lts); + out += scnprintf(buf + out, PAGE_SIZE - out, "%lu\n", lts); goto done; case O2HB_DB_TYPE_REGION_PINNED: reg = (struct o2hb_region *)db->db_data; - out += snprintf(buf + out, PAGE_SIZE - out, "%u\n", + out += scnprintf(buf + out, PAGE_SIZE - out, "%u\n", !!reg->hr_item_pinned); goto done; @@ -1331,8 +1331,8 @@ static int o2hb_debug_open(struct inode } while ((i = find_next_bit(map, db->db_len, i + 1)) < db->db_len) - out += snprintf(buf + out, PAGE_SIZE - out, "%d ", i); - out += snprintf(buf + out, PAGE_SIZE - out, "\n"); + out += scnprintf(buf + out, PAGE_SIZE - out, "%d ", i); + out += scnprintf(buf + out, PAGE_SIZE - out, "\n"); done: i_size_write(inode, out); --- a/fs/ocfs2/cluster/netdebug.c~ocfs2-use-scnprintf-for-avoiding-potential-buffer-overflow +++ a/fs/ocfs2/cluster/netdebug.c @@ -443,8 +443,8 @@ static int o2net_fill_bitmap(char *buf, o2net_fill_node_map(map, sizeof(map)); while ((i = find_next_bit(map, O2NM_MAX_NODES, i + 1)) < O2NM_MAX_NODES) - out += snprintf(buf + out, PAGE_SIZE - out, "%d ", i); - out += snprintf(buf + out, PAGE_SIZE - out, "\n"); + out += scnprintf(buf + out, PAGE_SIZE - out, "%d ", i); + out += scnprintf(buf + out, PAGE_SIZE - out, "\n"); return out; } --- a/fs/ocfs2/dlm/dlmdebug.c~ocfs2-use-scnprintf-for-avoiding-potential-buffer-overflow +++ a/fs/ocfs2/dlm/dlmdebug.c @@ -244,11 +244,11 @@ static int stringify_lockname(const char memcpy((__be64 *)&inode_blkno_be, (char *)&lockname[OCFS2_DENTRY_LOCK_INO_START], sizeof(__be64)); - out += snprintf(buf + out, len - out, "%.*s%08x", + out += scnprintf(buf + out, len - out, "%.*s%08x", OCFS2_DENTRY_LOCK_INO_START - 1, lockname, (unsigned int)be64_to_cpu(inode_blkno_be)); } else - out += snprintf(buf + out, len - out, "%.*s", + out += scnprintf(buf + out, len - out, "%.*s", locklen, lockname); return out; } @@ -260,7 +260,7 @@ static int stringify_nodemap(unsigned lo int i = -1; while ((i = find_next_bit(nodemap, maxnodes, i + 1)) < maxnodes) - out += snprintf(buf + out, len - out, "%d ", i); + out += scnprintf(buf + out, len - out, "%d ", i); return out; } @@ -278,34 +278,34 @@ static int dump_mle(struct dlm_master_li mle_type = "MIG"; out += stringify_lockname(mle->mname, mle->mnamelen, buf + out, len - out); - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "\t%3s\tmas=%3u\tnew=%3u\tevt=%1d\tuse=%1d\tref=%3d\n", mle_type, mle->master, mle->new_master, !list_empty(&mle->hb_events), !!mle->inuse, kref_read(&mle->mle_refs)); - out += snprintf(buf + out, len - out, "Maybe="); + out += scnprintf(buf + out, len - out, "Maybe="); out += stringify_nodemap(mle->maybe_map, O2NM_MAX_NODES, buf + out, len - out); - out += snprintf(buf + out, len - out, "\n"); + out += scnprintf(buf + out, len - out, "\n"); - out += snprintf(buf + out, len - out, "Vote="); + out += scnprintf(buf + out, len - out, "Vote="); out += stringify_nodemap(mle->vote_map, O2NM_MAX_NODES, buf + out, len - out); - out += snprintf(buf + out, len - out, "\n"); + out += scnprintf(buf + out, len - out, "\n"); - out += snprintf(buf + out, len - out, "Response="); + out += scnprintf(buf + out, len - out, "Response="); out += stringify_nodemap(mle->response_map, O2NM_MAX_NODES, buf + out, len - out); - out += snprintf(buf + out, len - out, "\n"); + out += scnprintf(buf + out, len - out, "\n"); - out += snprintf(buf + out, len - out, "Node="); + out += scnprintf(buf + out, len - out, "Node="); out += stringify_nodemap(mle->node_map, O2NM_MAX_NODES, buf + out, len - out); - out += snprintf(buf + out, len - out, "\n"); + out += scnprintf(buf + out, len - out, "\n"); - out += snprintf(buf + out, len - out, "\n"); + out += scnprintf(buf + out, len - out, "\n"); return out; } @@ -353,7 +353,7 @@ static int debug_purgelist_print(struct int out = 0; unsigned long total = 0; - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "Dumping Purgelist for Domain: %s\n", dlm->name); spin_lock(&dlm->spinlock); @@ -365,13 +365,13 @@ static int debug_purgelist_print(struct out += stringify_lockname(res->lockname.name, res->lockname.len, buf + out, len - out); - out += snprintf(buf + out, len - out, "\t%ld\n", + out += scnprintf(buf + out, len - out, "\t%ld\n", (jiffies - res->last_used)/HZ); spin_unlock(&res->spinlock); } spin_unlock(&dlm->spinlock); - out += snprintf(buf + out, len - out, "Total on list: %lu\n", total); + out += scnprintf(buf + out, len - out, "Total on list: %lu\n", total); return out; } @@ -410,7 +410,7 @@ static int debug_mle_print(struct dlm_ct int i, out = 0; unsigned long total = 0, longest = 0, bucket_count = 0; - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "Dumping MLEs for Domain: %s\n", dlm->name); spin_lock(&dlm->master_lock); @@ -428,7 +428,7 @@ static int debug_mle_print(struct dlm_ct } spin_unlock(&dlm->master_lock); - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "Total: %lu, Longest: %lu\n", total, longest); return out; } @@ -467,7 +467,7 @@ static int dump_lock(struct dlm_lock *lo #define DEBUG_LOCK_VERSION 1 spin_lock(&lock->spinlock); - out = snprintf(buf, len, "LOCK:%d,%d,%d,%d,%d,%d:%lld,%d,%d,%d,%d,%d," + out = scnprintf(buf, len, "LOCK:%d,%d,%d,%d,%d,%d:%lld,%d,%d,%d,%d,%d," "%d,%d,%d,%d\n", DEBUG_LOCK_VERSION, list_type, lock->ml.type, lock->ml.convert_type, @@ -491,13 +491,13 @@ static int dump_lockres(struct dlm_lock_ int i; int out = 0; - out += snprintf(buf + out, len - out, "NAME:"); + out += scnprintf(buf + out, len - out, "NAME:"); out += stringify_lockname(res->lockname.name, res->lockname.len, buf + out, len - out); - out += snprintf(buf + out, len - out, "\n"); + out += scnprintf(buf + out, len - out, "\n"); #define DEBUG_LRES_VERSION 1 - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "LRES:%d,%d,%d,%ld,%d,%d,%d,%d,%d,%d,%d\n", DEBUG_LRES_VERSION, res->owner, res->state, res->last_used, @@ -509,17 +509,17 @@ static int dump_lockres(struct dlm_lock_ kref_read(&res->refs)); /* refmap */ - out += snprintf(buf + out, len - out, "RMAP:"); + out += scnprintf(buf + out, len - out, "RMAP:"); out += stringify_nodemap(res->refmap, O2NM_MAX_NODES, buf + out, len - out); - out += snprintf(buf + out, len - out, "\n"); + out += scnprintf(buf + out, len - out, "\n"); /* lvb */ - out += snprintf(buf + out, len - out, "LVBX:"); + out += scnprintf(buf + out, len - out, "LVBX:"); for (i = 0; i < DLM_LVB_LEN; i++) - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "%02x", (unsigned char)res->lvb[i]); - out += snprintf(buf + out, len - out, "\n"); + out += scnprintf(buf + out, len - out, "\n"); /* granted */ list_for_each_entry(lock, &res->granted, list) @@ -533,7 +533,7 @@ static int dump_lockres(struct dlm_lock_ list_for_each_entry(lock, &res->blocked, list) out += dump_lock(lock, 2, buf + out, len - out); - out += snprintf(buf + out, len - out, "\n"); + out += scnprintf(buf + out, len - out, "\n"); return out; } @@ -683,41 +683,41 @@ static int debug_state_print(struct dlm_ } /* Domain: xxxxxxxxxx Key: 0xdfbac769 */ - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "Domain: %s Key: 0x%08x Protocol: %d.%d\n", dlm->name, dlm->key, dlm->dlm_locking_proto.pv_major, dlm->dlm_locking_proto.pv_minor); /* Thread Pid: xxx Node: xxx State: xxxxx */ - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "Thread Pid: %d Node: %d State: %s\n", task_pid_nr(dlm->dlm_thread_task), dlm->node_num, state); /* Number of Joins: xxx Joining Node: xxx */ - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "Number of Joins: %d Joining Node: %d\n", dlm->num_joins, dlm->joining_node); /* Domain Map: xx xx xx */ - out += snprintf(buf + out, len - out, "Domain Map: "); + out += scnprintf(buf + out, len - out, "Domain Map: "); out += stringify_nodemap(dlm->domain_map, O2NM_MAX_NODES, buf + out, len - out); - out += snprintf(buf + out, len - out, "\n"); + out += scnprintf(buf + out, len - out, "\n"); /* Exit Domain Map: xx xx xx */ - out += snprintf(buf + out, len - out, "Exit Domain Map: "); + out += scnprintf(buf + out, len - out, "Exit Domain Map: "); out += stringify_nodemap(dlm->exit_domain_map, O2NM_MAX_NODES, buf + out, len - out); - out += snprintf(buf + out, len - out, "\n"); + out += scnprintf(buf + out, len - out, "\n"); /* Live Map: xx xx xx */ - out += snprintf(buf + out, len - out, "Live Map: "); + out += scnprintf(buf + out, len - out, "Live Map: "); out += stringify_nodemap(dlm->live_nodes_map, O2NM_MAX_NODES, buf + out, len - out); - out += snprintf(buf + out, len - out, "\n"); + out += scnprintf(buf + out, len - out, "\n"); /* Lock Resources: xxx (xxx) */ - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "Lock Resources: %d (%d)\n", atomic_read(&dlm->res_cur_count), atomic_read(&dlm->res_tot_count)); @@ -729,29 +729,29 @@ static int debug_state_print(struct dlm_ cur_mles += atomic_read(&dlm->mle_cur_count[i]); /* MLEs: xxx (xxx) */ - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "MLEs: %d (%d)\n", cur_mles, tot_mles); /* Blocking: xxx (xxx) */ - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, " Blocking: %d (%d)\n", atomic_read(&dlm->mle_cur_count[DLM_MLE_BLOCK]), atomic_read(&dlm->mle_tot_count[DLM_MLE_BLOCK])); /* Mastery: xxx (xxx) */ - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, " Mastery: %d (%d)\n", atomic_read(&dlm->mle_cur_count[DLM_MLE_MASTER]), atomic_read(&dlm->mle_tot_count[DLM_MLE_MASTER])); /* Migration: xxx (xxx) */ - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, " Migration: %d (%d)\n", atomic_read(&dlm->mle_cur_count[DLM_MLE_MIGRATION]), atomic_read(&dlm->mle_tot_count[DLM_MLE_MIGRATION])); /* Lists: Dirty=Empty Purge=InUse PendingASTs=Empty ... */ - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "Lists: Dirty=%s Purge=%s PendingASTs=%s " "PendingBASTs=%s\n", (list_empty(&dlm->dirty_list) ? "Empty" : "InUse"), @@ -760,12 +760,12 @@ static int debug_state_print(struct dlm_ (list_empty(&dlm->pending_basts) ? "Empty" : "InUse")); /* Purge Count: xxx Refs: xxx */ - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "Purge Count: %d Refs: %d\n", dlm->purge_count, kref_read(&dlm->dlm_refs)); /* Dead Node: xxx */ - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "Dead Node: %d\n", dlm->reco.dead_node); /* What about DLM_RECO_STATE_FINALIZE? */ @@ -775,19 +775,19 @@ static int debug_state_print(struct dlm_ state = "INACTIVE"; /* Recovery Pid: xxxx Master: xxx State: xxxx */ - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "Recovery Pid: %d Master: %d State: %s\n", task_pid_nr(dlm->dlm_reco_thread_task), dlm->reco.new_master, state); /* Recovery Map: xx xx */ - out += snprintf(buf + out, len - out, "Recovery Map: "); + out += scnprintf(buf + out, len - out, "Recovery Map: "); out += stringify_nodemap(dlm->recovery_map, O2NM_MAX_NODES, buf + out, len - out); - out += snprintf(buf + out, len - out, "\n"); + out += scnprintf(buf + out, len - out, "\n"); /* Recovery Node State: */ - out += snprintf(buf + out, len - out, "Recovery Node State:\n"); + out += scnprintf(buf + out, len - out, "Recovery Node State:\n"); list_for_each_entry(node, &dlm->reco.node_data, list) { switch (node->state) { case DLM_RECO_NODE_DATA_INIT: @@ -815,7 +815,7 @@ static int debug_state_print(struct dlm_ state = "BAD"; break; } - out += snprintf(buf + out, len - out, "\t%u - %s\n", + out += scnprintf(buf + out, len - out, "\t%u - %s\n", node->node_num, state); } --- a/fs/ocfs2/super.c~ocfs2-use-scnprintf-for-avoiding-potential-buffer-overflow +++ a/fs/ocfs2/super.c @@ -220,31 +220,31 @@ static int ocfs2_osb_dump(struct ocfs2_s int i, out = 0; unsigned long flags; - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "%10s => Id: %-s Uuid: %-s Gen: 0x%X Label: %-s\n", "Device", osb->dev_str, osb->uuid_str, osb->fs_generation, osb->vol_label); - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "%10s => State: %d Flags: 0x%lX\n", "Volume", atomic_read(&osb->vol_state), osb->osb_flags); - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "%10s => Block: %lu Cluster: %d\n", "Sizes", osb->sb->s_blocksize, osb->s_clustersize); - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "%10s => Compat: 0x%X Incompat: 0x%X " "ROcompat: 0x%X\n", "Features", osb->s_feature_compat, osb->s_feature_incompat, osb->s_feature_ro_compat); - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "%10s => Opts: 0x%lX AtimeQuanta: %u\n", "Mount", osb->s_mount_opt, osb->s_atime_quantum); if (cconn) { - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "%10s => Stack: %s Name: %*s " "Version: %d.%d\n", "Cluster", (*osb->osb_cluster_stack == '\0' ? @@ -255,7 +255,7 @@ static int ocfs2_osb_dump(struct ocfs2_s } spin_lock_irqsave(&osb->dc_task_lock, flags); - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "%10s => Pid: %d Count: %lu WakeSeq: %lu " "WorkSeq: %lu\n", "DownCnvt", (osb->dc_task ? task_pid_nr(osb->dc_task) : -1), @@ -264,32 +264,32 @@ static int ocfs2_osb_dump(struct ocfs2_s spin_unlock_irqrestore(&osb->dc_task_lock, flags); spin_lock(&osb->osb_lock); - out += snprintf(buf + out, len - out, "%10s => Pid: %d Nodes:", + out += scnprintf(buf + out, len - out, "%10s => Pid: %d Nodes:", "Recovery", (osb->recovery_thread_task ? task_pid_nr(osb->recovery_thread_task) : -1)); if (rm->rm_used == 0) - out += snprintf(buf + out, len - out, " None\n"); + out += scnprintf(buf + out, len - out, " None\n"); else { for (i = 0; i < rm->rm_used; i++) - out += snprintf(buf + out, len - out, " %d", + out += scnprintf(buf + out, len - out, " %d", rm->rm_entries[i]); - out += snprintf(buf + out, len - out, "\n"); + out += scnprintf(buf + out, len - out, "\n"); } spin_unlock(&osb->osb_lock); - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "%10s => Pid: %d Interval: %lu\n", "Commit", (osb->commit_task ? task_pid_nr(osb->commit_task) : -1), osb->osb_commit_interval); - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "%10s => State: %d TxnId: %lu NumTxns: %d\n", "Journal", osb->journal->j_state, osb->journal->j_trans_id, atomic_read(&osb->journal->j_num_trans)); - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "%10s => GlobalAllocs: %d LocalAllocs: %d " "SubAllocs: %d LAWinMoves: %d SAExtends: %d\n", "Stats", @@ -299,7 +299,7 @@ static int ocfs2_osb_dump(struct ocfs2_s atomic_read(&osb->alloc_stats.moves), atomic_read(&osb->alloc_stats.bg_extends)); - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "%10s => State: %u Descriptor: %llu Size: %u bits " "Default: %u bits\n", "LocalAlloc", osb->local_alloc_state, @@ -307,7 +307,7 @@ static int ocfs2_osb_dump(struct ocfs2_s osb->local_alloc_bits, osb->local_alloc_default_bits); spin_lock(&osb->osb_lock); - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "%10s => InodeSlot: %d StolenInodes: %d, " "MetaSlot: %d StolenMeta: %d\n", "Steal", osb->s_inode_steal_slot, @@ -316,20 +316,20 @@ static int ocfs2_osb_dump(struct ocfs2_s atomic_read(&osb->s_num_meta_stolen)); spin_unlock(&osb->osb_lock); - out += snprintf(buf + out, len - out, "OrphanScan => "); - out += snprintf(buf + out, len - out, "Local: %u Global: %u ", + out += scnprintf(buf + out, len - out, "OrphanScan => "); + out += scnprintf(buf + out, len - out, "Local: %u Global: %u ", os->os_count, os->os_seqno); - out += snprintf(buf + out, len - out, " Last Scan: "); + out += scnprintf(buf + out, len - out, " Last Scan: "); if (atomic_read(&os->os_state) == ORPHAN_SCAN_INACTIVE) - out += snprintf(buf + out, len - out, "Disabled\n"); + out += scnprintf(buf + out, len - out, "Disabled\n"); else - out += snprintf(buf + out, len - out, "%lu seconds ago\n", + out += scnprintf(buf + out, len - out, "%lu seconds ago\n", (unsigned long)(ktime_get_seconds() - os->os_scantime)); - out += snprintf(buf + out, len - out, "%10s => %3s %10s\n", + out += scnprintf(buf + out, len - out, "%10s => %3s %10s\n", "Slots", "Num", "RecoGen"); for (i = 0; i < osb->max_slots; ++i) { - out += snprintf(buf + out, len - out, + out += scnprintf(buf + out, len - out, "%10s %c %3d %10d\n", " ", (i == osb->slot_num ? '*' : ' '), _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 020/155] ocfs2: use memalloc_nofs_save instead of memalloc_noio_save 2020-04-02 4:01 incoming Andrew Morton ` (18 preceding siblings ...) 2020-04-02 4:04 ` [patch 019/155] ocfs2: use scnprintf() for avoiding potential buffer overflow Andrew Morton @ 2020-04-02 4:04 ` Andrew Morton 2020-04-02 4:04 ` [patch 021/155] fs_parse: remove pr_notice() about each validation Andrew Morton ` (134 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:04 UTC (permalink / raw) To: akpm, gechangwei, ghe, jlbec, joseph.qi, junxiao.bi, linux-mm, mark, mm-commits, piaojun, torvalds, willy From: "Matthew Wilcox (Oracle)" <willy@infradead.org> Subject: ocfs2: use memalloc_nofs_save instead of memalloc_noio_save OCFS2 doesn't mind if memory reclaim makes I/Os happen; it just cares that it won't be reentered, so it can use memalloc_nofs_save() instead of memalloc_noio_save(). Link: http://lkml.kernel.org/r/20200326200214.1102-1-willy@infradead.org Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com> Cc: Mark Fasheh <mark@fasheh.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Junxiao Bi <junxiao.bi@oracle.com> Cc: Changwei Ge <gechangwei@live.cn> Cc: Gang He <ghe@suse.com> Cc: Jun Piao <piaojun@huawei.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/ocfs2/cluster/tcp.c | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) --- a/fs/ocfs2/cluster/tcp.c~ocfs2-use-memalloc_nofs_save-instead-of-memalloc_noio_save +++ a/fs/ocfs2/cluster/tcp.c @@ -1570,15 +1570,13 @@ static void o2net_start_connect(struct w struct sockaddr_in myaddr = {0, }, remoteaddr = {0, }; int ret = 0, stop; unsigned int timeout; - unsigned int noio_flag; + unsigned int nofs_flag; /* - * sock_create allocates the sock with GFP_KERNEL. We must set - * per-process flag PF_MEMALLOC_NOIO so that all allocations done - * by this process are done as if GFP_NOIO was specified. So we - * are not reentering filesystem while doing memory reclaim. + * sock_create allocates the sock with GFP_KERNEL. We must + * prevent the filesystem from being reentered by memory reclaim. */ - noio_flag = memalloc_noio_save(); + nofs_flag = memalloc_nofs_save(); /* if we're greater we initiate tx, otherwise we accept */ if (o2nm_this_node() <= o2net_num_from_nn(nn)) goto out; @@ -1683,7 +1681,7 @@ out: if (mynode) o2nm_node_put(mynode); - memalloc_noio_restore(noio_flag); + memalloc_nofs_restore(nofs_flag); return; } @@ -1810,15 +1808,13 @@ static int o2net_accept_one(struct socke struct o2nm_node *local_node = NULL; struct o2net_sock_container *sc = NULL; struct o2net_node *nn; - unsigned int noio_flag; + unsigned int nofs_flag; /* - * sock_create_lite allocates the sock with GFP_KERNEL. We must set - * per-process flag PF_MEMALLOC_NOIO so that all allocations done - * by this process are done as if GFP_NOIO was specified. So we - * are not reentering filesystem while doing memory reclaim. + * sock_create_lite allocates the sock with GFP_KERNEL. We must + * prevent the filesystem from being reentered by memory reclaim. */ - noio_flag = memalloc_noio_save(); + nofs_flag = memalloc_nofs_save(); BUG_ON(sock == NULL); *more = 0; @@ -1934,7 +1930,7 @@ out: if (sc) sc_put(sc); - memalloc_noio_restore(noio_flag); + memalloc_nofs_restore(nofs_flag); return ret; } _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 021/155] fs_parse: remove pr_notice() about each validation 2020-04-02 4:01 incoming Andrew Morton ` (19 preceding siblings ...) 2020-04-02 4:04 ` [patch 020/155] ocfs2: use memalloc_nofs_save instead of memalloc_noio_save Andrew Morton @ 2020-04-02 4:04 ` Andrew Morton 2020-04-02 4:04 ` [patch 022/155] mm/slub.c: replace cpu_slab->partial with wrapped APIs Andrew Morton ` (133 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:04 UTC (permalink / raw) To: akpm, keescook, linux-mm, mm-commits, seth.arnold, torvalds, viro From: Kees Cook <keescook@chromium.org> Subject: fs_parse: remove pr_notice() about each validation This notice fills my boot logs with scary-looking asterisks but doesn't really tell me anything. Let's just remove it; validation errors are already reported separately, so this is just a redundant list of filesystems. $ dmesg | grep VALIDATE [ 0.306256] *** VALIDATE tmpfs *** [ 0.307422] *** VALIDATE proc *** [ 0.308355] *** VALIDATE cgroup *** [ 0.308741] *** VALIDATE cgroup2 *** [ 0.813256] *** VALIDATE bpf *** [ 0.815272] *** VALIDATE ramfs *** [ 0.815665] *** VALIDATE hugetlbfs *** [ 0.876970] *** VALIDATE nfs *** [ 0.877383] *** VALIDATE nfs4 *** Link: http://lkml.kernel.org/r/202003061617.A8835CAAF@keescook Signed-off-by: Kees Cook <keescook@chromium.org> Cc: Alexander Viro <viro@zeniv.linux.org.uk> Reviewed-by: Seth Arnold <seth.arnold@canonical.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/fs_parser.c | 2 -- 1 file changed, 2 deletions(-) --- a/fs/fs_parser.c~fs_parse-remove-pr_notice-about-each-validation +++ a/fs/fs_parser.c @@ -368,8 +368,6 @@ bool fs_validate_description(const char const struct fs_parameter_spec *param, *p2; bool good = true; - pr_notice("*** VALIDATE %s ***\n", name); - for (param = desc; param->name; param++) { /* Check for duplicate parameter names */ for (p2 = desc; p2 < param; p2++) { _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 022/155] mm/slub.c: replace cpu_slab->partial with wrapped APIs 2020-04-02 4:01 incoming Andrew Morton ` (20 preceding siblings ...) 2020-04-02 4:04 ` [patch 021/155] fs_parse: remove pr_notice() about each validation Andrew Morton @ 2020-04-02 4:04 ` Andrew Morton 2020-04-02 4:04 ` [patch 023/155] mm/slub.c: replace kmem_cache->cpu_partial " Andrew Morton ` (132 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:04 UTC (permalink / raw) To: akpm, chenqiwu, cl, iamjoonsoo.kim, linux-mm, mm-commits, penberg, rientjes, torvalds From: chenqiwu <chenqiwu@xiaomi.com> Subject: mm/slub.c: replace cpu_slab->partial with wrapped APIs There are slub_percpu_partial() and slub_set_percpu_partial() APIs to wrap kmem_cache->cpu_partial. This patch will use the two to replace cpu_slab->partial in slub code. Link: http://lkml.kernel.org/r/1581951895-3038-1-git-send-email-qiwuchen55@gmail.com Signed-off-by: chenqiwu <chenqiwu@xiaomi.com> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Cc: Christoph Lameter <cl@linux.com> Cc: Pekka Enberg <penberg@kernel.org> Cc: David Rientjes <rientjes@google.com> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/slub.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- a/mm/slub.c~mm-slubc-replace-cpu_slab-partial-with-wrapped-apis +++ a/mm/slub.c @@ -2205,11 +2205,11 @@ static void unfreeze_partials(struct kme struct kmem_cache_node *n = NULL, *n2 = NULL; struct page *page, *discard_page = NULL; - while ((page = c->partial)) { + while ((page = slub_percpu_partial(c))) { struct page new; struct page old; - c->partial = page->next; + slub_set_percpu_partial(c, page); n2 = get_node(s, page_to_nid(page)); if (n != n2) { _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 023/155] mm/slub.c: replace kmem_cache->cpu_partial with wrapped APIs 2020-04-02 4:01 incoming Andrew Morton ` (21 preceding siblings ...) 2020-04-02 4:04 ` [patch 022/155] mm/slub.c: replace cpu_slab->partial with wrapped APIs Andrew Morton @ 2020-04-02 4:04 ` Andrew Morton 2020-04-02 4:04 ` [patch 024/155] slub: improve bit diffusion for freelist ptr obfuscation Andrew Morton ` (131 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:04 UTC (permalink / raw) To: akpm, chenqiwu, cl, iamjoonsoo.kim, linux-mm, mm-commits, penberg, rientjes, torvalds From: chenqiwu <chenqiwu@xiaomi.com> Subject: mm/slub.c: replace kmem_cache->cpu_partial with wrapped APIs There are slub_cpu_partial() and slub_set_cpu_partial() APIs to wrap kmem_cache->cpu_partial. This patch will use the two APIs to replace kmem_cache->cpu_partial in slub code. Link: http://lkml.kernel.org/r/1582079562-17980-1-git-send-email-qiwuchen55@gmail.com Signed-off-by: chenqiwu <chenqiwu@xiaomi.com> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Cc: Christoph Lameter <cl@linux.com> Cc: Pekka Enberg <penberg@kernel.org> Cc: David Rientjes <rientjes@google.com> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/slub.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) --- a/mm/slub.c~mm-slubc-replace-kmem_cache-cpu_partial-with-wrapped-apis +++ a/mm/slub.c @@ -2282,7 +2282,7 @@ static void put_cpu_partial(struct kmem_ if (oldpage) { pobjects = oldpage->pobjects; pages = oldpage->pages; - if (drain && pobjects > s->cpu_partial) { + if (drain && pobjects > slub_cpu_partial(s)) { unsigned long flags; /* * partial array is full. Move the existing @@ -2307,7 +2307,7 @@ static void put_cpu_partial(struct kmem_ } while (this_cpu_cmpxchg(s->cpu_slab->partial, oldpage, page) != oldpage); - if (unlikely(!s->cpu_partial)) { + if (unlikely(!slub_cpu_partial(s))) { unsigned long flags; local_irq_save(flags); @@ -3512,15 +3512,15 @@ static void set_cpu_partial(struct kmem_ * 50% to keep some capacity around for frees. */ if (!kmem_cache_has_cpu_partial(s)) - s->cpu_partial = 0; + slub_set_cpu_partial(s, 0); else if (s->size >= PAGE_SIZE) - s->cpu_partial = 2; + slub_set_cpu_partial(s, 2); else if (s->size >= 1024) - s->cpu_partial = 6; + slub_set_cpu_partial(s, 6); else if (s->size >= 256) - s->cpu_partial = 13; + slub_set_cpu_partial(s, 13); else - s->cpu_partial = 30; + slub_set_cpu_partial(s, 30); #endif } _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 024/155] slub: improve bit diffusion for freelist ptr obfuscation 2020-04-02 4:01 incoming Andrew Morton ` (22 preceding siblings ...) 2020-04-02 4:04 ` [patch 023/155] mm/slub.c: replace kmem_cache->cpu_partial " Andrew Morton @ 2020-04-02 4:04 ` Andrew Morton 2020-04-02 4:04 ` [patch 025/155] slub: relocate freelist pointer to middle of object Andrew Morton ` (130 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:04 UTC (permalink / raw) To: akpm, cl, iamjoonsoo.kim, keescook, linux-mm, mm-commits, penberg, rientjes, silvio.cesare, stable, torvalds From: Kees Cook <keescook@chromium.org> Subject: slub: improve bit diffusion for freelist ptr obfuscation Under CONFIG_SLAB_FREELIST_HARDENED=y, the obfuscation was relatively weak in that the ptr and ptr address were usually so close that the first XOR would result in an almost entirely 0-byte value[1], leaving most of the "secret" number ultimately being stored after the third XOR. A single blind memory content exposure of the freelist was generally sufficient to learn the secret. Add a swab() call to mix bits a little more. This is a cheap way (1 cycle) to make attacks need more than a single exposure to learn the secret (or to know _where_ the exposure is in memory). kmalloc-32 freelist walk, before: ptr ptr_addr stored value secret ffff90c22e019020@ffff90c22e019000 is 86528eb656b3b5bd (86528eb656b3b59d) ffff90c22e019040@ffff90c22e019020 is 86528eb656b3b5fd (86528eb656b3b59d) ffff90c22e019060@ffff90c22e019040 is 86528eb656b3b5bd (86528eb656b3b59d) ffff90c22e019080@ffff90c22e019060 is 86528eb656b3b57d (86528eb656b3b59d) ffff90c22e0190a0@ffff90c22e019080 is 86528eb656b3b5bd (86528eb656b3b59d) ... after: ptr ptr_addr stored value secret ffff9eed6e019020@ffff9eed6e019000 is 793d1135d52cda42 (86528eb656b3b59d) ffff9eed6e019040@ffff9eed6e019020 is 593d1135d52cda22 (86528eb656b3b59d) ffff9eed6e019060@ffff9eed6e019040 is 393d1135d52cda02 (86528eb656b3b59d) ffff9eed6e019080@ffff9eed6e019060 is 193d1135d52cdae2 (86528eb656b3b59d) ffff9eed6e0190a0@ffff9eed6e019080 is f93d1135d52cdac2 (86528eb656b3b59d) [1] https://blog.infosectcbr.com.au/2020/03/weaknesses-in-linux-kernel-heap.html Link: http://lkml.kernel.org/r/202003051623.AF4F8CB@keescook Fixes: 2482ddec670f ("mm: add SLUB free list pointer obfuscation") Reported-by: Silvio Cesare <silvio.cesare@gmail.com> Signed-off-by: Kees Cook <keescook@chromium.org> Cc: Christoph Lameter <cl@linux.com> Cc: Pekka Enberg <penberg@kernel.org> Cc: David Rientjes <rientjes@google.com> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/slub.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/mm/slub.c~slub-improve-bit-diffusion-for-freelist-ptr-obfuscation +++ a/mm/slub.c @@ -259,7 +259,7 @@ static inline void *freelist_ptr(const s * freepointer to be restored incorrectly. */ return (void *)((unsigned long)ptr ^ s->random ^ - (unsigned long)kasan_reset_tag((void *)ptr_addr)); + swab((unsigned long)kasan_reset_tag((void *)ptr_addr))); #else return ptr; #endif _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 025/155] slub: relocate freelist pointer to middle of object 2020-04-02 4:01 incoming Andrew Morton ` (23 preceding siblings ...) 2020-04-02 4:04 ` [patch 024/155] slub: improve bit diffusion for freelist ptr obfuscation Andrew Morton @ 2020-04-02 4:04 ` Andrew Morton 2020-04-15 16:47 ` Marco Elver 2020-04-02 4:04 ` [patch 026/155] revert "topology: add support for node_to_mem_node() to determine the fallback node" Andrew Morton ` (129 subsequent siblings) 154 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:04 UTC (permalink / raw) To: akpm, cl, iamjoonsoo.kim, keescook, linux-mm, mm-commits, penberg, rientjes, silvio.cesare, torvalds, vnik From: Kees Cook <keescook@chromium.org> Subject: slub: relocate freelist pointer to middle of object In a recent discussion[1] with Vitaly Nikolenko and Silvio Cesare, it became clear that moving the freelist pointer away from the edge of allocations would likely improve the overall defensive posture of the inline freelist pointer. My benchmarks show no meaningful change to performance (they seem to show it being faster), so this looks like a reasonable change to make. Instead of having the freelist pointer at the very beginning of an allocation (offset 0) or at the very end of an allocation (effectively offset -sizeof(void *) from the next allocation), move it away from the edges of the allocation and into the middle. This provides some protection against small-sized neighboring overflows (or underflows), for which the freelist pointer is commonly the target. (Large or well controlled overwrites are much more likely to attack live object contents, instead of attempting freelist corruption.) The vaunted kernel build benchmark, across 5 runs. Before: Mean: 250.05 Std Dev: 1.85 and after, which appears mysteriously faster: Mean: 247.13 Std Dev: 0.76 Attempts at running "sysbench --test=memory" show the change to be well in the noise (sysbench seems to be pretty unstable here -- it's not really measuring allocation). Hackbench is more allocation-heavy, and while the std dev is above the difference, it looks like may manifest as an improvement as well: 20 runs of "hackbench -g 20 -l 1000", before: Mean: 36.322 Std Dev: 0.577 and after: Mean: 36.056 Std Dev: 0.598 [1] https://twitter.com/vnik5287/status/1235113523098685440 Link: http://lkml.kernel.org/r/202003051624.AAAC9AECC@keescook Signed-off-by: Kees Cook <keescook@chromium.org> Acked-by: Christoph Lameter <cl@linux.com> Cc: Vitaly Nikolenko <vnik@duasynt.com> Cc: Silvio Cesare <silvio.cesare@gmail.com> Cc: Christoph Lameter <cl@linux.com>Cc: Pekka Enberg <penberg@kernel.org> Cc: David Rientjes <rientjes@google.com> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/slub.c | 7 +++++++ 1 file changed, 7 insertions(+) --- a/mm/slub.c~slub-relocate-freelist-pointer-to-middle-of-object +++ a/mm/slub.c @@ -3581,6 +3581,13 @@ static int calculate_sizes(struct kmem_c */ s->offset = size; size += sizeof(void *); + } else if (size > sizeof(void *)) { + /* + * Store freelist pointer near middle of object to keep + * it away from the edges of the object to avoid small + * sized over/underflows from neighboring allocations. + */ + s->offset = ALIGN(size / 2, sizeof(void *)); } #ifdef CONFIG_SLUB_DEBUG _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: [patch 025/155] slub: relocate freelist pointer to middle of object 2020-04-02 4:04 ` [patch 025/155] slub: relocate freelist pointer to middle of object Andrew Morton @ 2020-04-15 16:47 ` Marco Elver 2020-04-15 17:07 ` Kees Cook 2020-04-15 18:00 ` Kees Cook 0 siblings, 2 replies; 370+ messages in thread From: Marco Elver @ 2020-04-15 16:47 UTC (permalink / raw) To: Andrew Morton Cc: cl, iamjoonsoo.kim, keescook, linux-mm, mm-commits, penberg, rientjes, silvio.cesare, torvalds, vnik Hello, On Wed, 01 Apr 2020, Andrew Morton wrote: > From: Kees Cook <keescook@chromium.org> > Subject: slub: relocate freelist pointer to middle of object > > In a recent discussion[1] with Vitaly Nikolenko and Silvio Cesare, it > became clear that moving the freelist pointer away from the edge of > allocations would likely improve the overall defensive posture of the > inline freelist pointer. My benchmarks show no meaningful change to > performance (they seem to show it being faster), so this looks like a > reasonable change to make. > > Instead of having the freelist pointer at the very beginning of an > allocation (offset 0) or at the very end of an allocation (effectively > offset -sizeof(void *) from the next allocation), move it away from the > edges of the allocation and into the middle. This provides some > protection against small-sized neighboring overflows (or underflows), for > which the freelist pointer is commonly the target. (Large or well > controlled overwrites are much more likely to attack live object contents, > instead of attempting freelist corruption.) > > The vaunted kernel build benchmark, across 5 runs. Before: > > Mean: 250.05 > Std Dev: 1.85 > > and after, which appears mysteriously faster: > > Mean: 247.13 > Std Dev: 0.76 > > Attempts at running "sysbench --test=memory" show the change to be well in > the noise (sysbench seems to be pretty unstable here -- it's not really > measuring allocation). > > Hackbench is more allocation-heavy, and while the std dev is above the > difference, it looks like may manifest as an improvement as well: > > 20 runs of "hackbench -g 20 -l 1000", before: > > Mean: 36.322 > Std Dev: 0.577 > > and after: > > Mean: 36.056 > Std Dev: 0.598 > > [1] https://twitter.com/vnik5287/status/1235113523098685440 > > Link: http://lkml.kernel.org/r/202003051624.AAAC9AECC@keescook > Signed-off-by: Kees Cook <keescook@chromium.org> > Acked-by: Christoph Lameter <cl@linux.com> > Cc: Vitaly Nikolenko <vnik@duasynt.com> > Cc: Silvio Cesare <silvio.cesare@gmail.com> > Cc: Christoph Lameter <cl@linux.com>Cc: Pekka Enberg <penberg@kernel.org> > Cc: David Rientjes <rientjes@google.com> > Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> > Signed-off-by: Andrew Morton <akpm@linux-foundation.org> > --- > > mm/slub.c | 7 +++++++ > 1 file changed, 7 insertions(+) > With kernel v5.7-rc1 I am unable to boot when using the SLUB allocator and red zoning (slub_debug=Z), but otherwise a default config. Bisect points to this patch, and when reverting it, the kernel boots again. Splat: [...] [ 0.328713] rcu: Hierarchical RCU implementation. [ 0.329169] rcu: RCU event tracing is enabled. [ 0.329611] rcu: RCU restricting CPUs from NR_CPUS=64 to nr_cpu_ids=8. [ 0.330251] rcu: RCU calculated value of scheduler-enlistment delay is 100 jiffies. [ 0.330984] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=8 [ 0.332130] NR_IRQS: 4352, nr_irqs: 488, preallocated irqs: 16 [ 0.332713] general protection fault, probably for non-canonical address 0xccccccccccccccd4: 0000 [#1] SMP PTI [ 0.333680] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.7.0-rc1+ #3 [ 0.334280] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1 04/01/2014 [ 0.335079] RIP: 0010:deactivate_slab.isra.0+0x5b/0x460 [ 0.335582] Code: 48 8b b4 c7 e0 00 00 00 49 8b 44 24 20 31 ff 48 85 c0 40 0f 95 c7 83 c7 0f 89 7c 24 18 48 85 d2 0f 84 a0 00 00 00 41 8b 4e 20 <48> 8b 3c 0b 48 85 ff 0f 84 8c 00 00 00 49 8b 54 24 28 48 89 04 0b [ 0.337385] RSP: 0000:ffffffffb7e03c80 EFLAGS: 00010086 [ 0.337907] RAX: 0000000000000000 RBX: cccccccccccccccc RCX: 0000000000000008 [ 0.338688] RDX: cccccccccccccccc RSI: ffff91241c800f40 RDI: 000000000000000f [ 0.339473] RBP: ffffffffb7e03d20 R08: ffff91241fc2d230 R09: 0000000000000000 [ 0.340256] R10: ffff91241c89c010 R11: 0000000000000000 R12: ffffcf2f20722700 [ 0.341041] R13: cccccccccccccccc R14: ffff91241c802180 R15: ffffcf2f20722700 [ 0.341833] FS: 0000000000000000(0000) GS:ffff91241fc00000(0000) knlGS:0000000000000000 [ 0.342727] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 0.343359] CR2: ffff911e74e01000 CR3: 000000027460a001 CR4: 00000000000606b0 [ 0.344146] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 0.344929] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 0.345727] Call Trace: [ 0.345999] ? setup_object_debug.isra.0+0x1d/0x40 [ 0.346525] ? new_slab+0x195/0x340 [ 0.346909] ? init_object+0x2f/0x80 [ 0.347305] ___slab_alloc+0x526/0x570 [ 0.347717] ? kasprintf+0x4e/0x70 [ 0.348092] ? init_object+0x2f/0x80 [ 0.348488] ? string+0x42/0x50 [ 0.348834] ? kasprintf+0x4e/0x70 [ 0.349217] __kmalloc_track_caller+0x1d2/0x200 [ 0.349720] kvasprintf+0x64/0xc0 [ 0.350085] kasprintf+0x4e/0x70 [ 0.350442] ? kmem_cache_alloc_trace+0x188/0x1b0 [ 0.350962] __irq_domain_alloc_fwnode+0x8f/0xd0 [ 0.351474] arch_early_irq_init+0x16/0x90 [ 0.351923] start_kernel+0x2aa/0x4c2 [ 0.352325] secondary_startup_64+0xb6/0xc0 [ 0.352784] Modules linked in: [ 0.353124] random: get_random_bytes called from print_oops_end_marker+0x21/0x40 with crng_init=0 [ 0.353126] ---[ end trace 186486c23e10986d ]--- [ 0.354613] RIP: 0010:deactivate_slab.isra.0+0x5b/0x460 [ 0.355186] Code: 48 8b b4 c7 e0 00 00 00 49 8b 44 24 20 31 ff 48 85 c0 40 0f 95 c7 83 c7 0f 89 7c 24 18 48 85 d2 0f 84 a0 00 00 00 41 8b 4e 20 <48> 8b 3c 0b 48 85 ff 0f 84 8c 00 00 00 49 8b 54 24 28 48 89 04 0b [ 0.357255] RSP: 0000:ffffffffb7e03c80 EFLAGS: 00010086 [ 0.357829] RAX: 0000000000000000 RBX: cccccccccccccccc RCX: 0000000000000008 [ 0.358613] RDX: cccccccccccccccc RSI: ffff91241c800f40 RDI: 000000000000000f [ 0.359398] RBP: ffffffffb7e03d20 R08: ffff91241fc2d230 R09: 0000000000000000 [ 0.360181] R10: ffff91241c89c010 R11: 0000000000000000 R12: ffffcf2f20722700 [ 0.360965] R13: cccccccccccccccc R14: ffff91241c802180 R15: ffffcf2f20722700 [ 0.361755] FS: 0000000000000000(0000) GS:ffff91241fc00000(0000) knlGS:0000000000000000 [ 0.362645] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 0.363275] CR2: ffff911e74e01000 CR3: 000000027460a001 CR4: 00000000000606b0 [ 0.364060] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 0.364844] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 0.365636] Kernel panic - not syncing: Attempted to kill the idle task! [ 0.366393] ---[ end Kernel panic - not syncing: Attempted to kill the idle task! ]--- Can you reproduce this? Let me know if you need more information. Thanks, -- Marco > --- a/mm/slub.c~slub-relocate-freelist-pointer-to-middle-of-object > +++ a/mm/slub.c > @@ -3581,6 +3581,13 @@ static int calculate_sizes(struct kmem_c > */ > s->offset = size; > size += sizeof(void *); > + } else if (size > sizeof(void *)) { > + /* > + * Store freelist pointer near middle of object to keep > + * it away from the edges of the object to avoid small > + * sized over/underflows from neighboring allocations. > + */ > + s->offset = ALIGN(size / 2, sizeof(void *)); > } > > #ifdef CONFIG_SLUB_DEBUG > _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: [patch 025/155] slub: relocate freelist pointer to middle of object 2020-04-15 16:47 ` Marco Elver @ 2020-04-15 17:07 ` Kees Cook 2020-04-15 18:00 ` Kees Cook 1 sibling, 0 replies; 370+ messages in thread From: Kees Cook @ 2020-04-15 17:07 UTC (permalink / raw) To: Marco Elver Cc: Andrew Morton, cl, iamjoonsoo.kim, linux-mm, mm-commits, penberg, rientjes, silvio.cesare, torvalds, vnik On Wed, Apr 15, 2020 at 06:47:26PM +0200, Marco Elver wrote: > On Wed, 01 Apr 2020, Andrew Morton wrote: > > From: Kees Cook <keescook@chromium.org> > > Subject: slub: relocate freelist pointer to middle of object > > [...] > > With kernel v5.7-rc1 I am unable to boot when using the SLUB allocator > and red zoning (slub_debug=Z), but otherwise a default config. Bisect > points to this patch, and when reverting it, the kernel boots again. > > Splat: > [...] > [ 0.328713] rcu: Hierarchical RCU implementation. > [ 0.329169] rcu: RCU event tracing is enabled. > [ 0.329611] rcu: RCU restricting CPUs from NR_CPUS=64 to nr_cpu_ids=8. > [ 0.330251] rcu: RCU calculated value of scheduler-enlistment delay is 100 jiffies. > [ 0.330984] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=8 > [ 0.332130] NR_IRQS: 4352, nr_irqs: 488, preallocated irqs: 16 > [ 0.332713] general protection fault, probably for non-canonical address 0xccccccccccccccd4: 0000 [#1] SMP PTI > [ 0.333680] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.7.0-rc1+ #3 > [ 0.334280] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1 04/01/2014 > [ 0.335079] RIP: 0010:deactivate_slab.isra.0+0x5b/0x460 Thanks for the report! It seems something isn't using get_freepointer() (and is missing the s->offset calculation). I will try to track it down... > Can you reproduce this? Let me know if you need more information. Yup! I see a crash in the same place with slub_debug=Z. Since I'm building with CONFIG_SLAB_FREELIST_HARDENED=y, I see a random number instead of 0xccccccccccccccd4. I'll keep digging... -- Kees Cook ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: [patch 025/155] slub: relocate freelist pointer to middle of object 2020-04-15 16:47 ` Marco Elver 2020-04-15 17:07 ` Kees Cook @ 2020-04-15 18:00 ` Kees Cook 1 sibling, 0 replies; 370+ messages in thread From: Kees Cook @ 2020-04-15 18:00 UTC (permalink / raw) To: Marco Elver Cc: Andrew Morton, cl, iamjoonsoo.kim, linux-mm, mm-commits, penberg, rientjes, silvio.cesare, torvalds, vnik On Wed, Apr 15, 2020 at 06:47:26PM +0200, Marco Elver wrote: > With kernel v5.7-rc1 I am unable to boot when using the SLUB allocator > and red zoning (slub_debug=Z), but otherwise a default config. Bisect > points to this patch, and when reverting it, the kernel boots again. Okay, I believe this patch should fix the problem: https://lore.kernel.org/lkml/202004151054.BD695840@keescook -- Kees Cook ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 026/155] revert "topology: add support for node_to_mem_node() to determine the fallback node" 2020-04-02 4:01 incoming Andrew Morton ` (24 preceding siblings ...) 2020-04-02 4:04 ` [patch 025/155] slub: relocate freelist pointer to middle of object Andrew Morton @ 2020-04-02 4:04 ` Andrew Morton 2020-04-02 4:04 ` [patch 027/155] mm/kmemleak.c: use address-of operator on section symbols Andrew Morton ` (128 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:04 UTC (permalink / raw) To: akpm, bharata, cl, iamjoonsoo.kim, ktkhai, linux-mm, mgorman, mhocko, mm-commits, mpe, nathanl, penberg, puvichakravarthy, rientjes, sachinp, srikar, torvalds, vbabka From: Vlastimil Babka <vbabka@suse.cz> Subject: revert "topology: add support for node_to_mem_node() to determine the fallback node" This reverts commit ad2c8144418c6a81cefe65379fd47bbe8344cef2. The function node_to_mem_node() was introduced by that commit for use in SLUB on systems with memoryless nodes, but it turned out to be unreliable on some architectures/configurations and a simpler solution exists than fixing it up. Thus commit 0715e6c516f1 ("mm, slub: prevent kmalloc_node crashes and memory leaks") removed the only user of node_to_mem_node() and we can revert the commit that introduced the function. Link: http://lkml.kernel.org/r/20200320115533.9604-2-vbabka@suse.cz Signed-off-by: Vlastimil Babka <vbabka@suse.cz> Reviewed-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Cc: Bharata B Rao <bharata@linux.ibm.com> Cc: Christopher Lameter <cl@linux.com> Cc: David Rientjes <rientjes@google.com> Cc: Kirill Tkhai <ktkhai@virtuozzo.com> Cc: Mel Gorman <mgorman@techsingularity.net> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Michal Hocko <mhocko@kernel.org> Cc: Nathan Lynch <nathanl@linux.ibm.com> Cc: Pekka Enberg <penberg@kernel.org> Cc: PUVICHAKRAVARTHY RAMACHANDRAN <puvichakravarthy@in.ibm.com> Cc: Sachin Sant <sachinp@linux.vnet.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/topology.h | 17 ----------------- mm/page_alloc.c | 1 - 2 files changed, 18 deletions(-) --- a/include/linux/topology.h~revert-topology-add-support-for-node_to_mem_node-to-determine-the-fallback-node +++ a/include/linux/topology.h @@ -130,20 +130,11 @@ static inline int numa_node_id(void) * Use the accessor functions set_numa_mem(), numa_mem_id() and cpu_to_mem(). */ DECLARE_PER_CPU(int, _numa_mem_); -extern int _node_numa_mem_[MAX_NUMNODES]; #ifndef set_numa_mem static inline void set_numa_mem(int node) { this_cpu_write(_numa_mem_, node); - _node_numa_mem_[numa_node_id()] = node; -} -#endif - -#ifndef node_to_mem_node -static inline int node_to_mem_node(int node) -{ - return _node_numa_mem_[node]; } #endif @@ -166,7 +157,6 @@ static inline int cpu_to_mem(int cpu) static inline void set_cpu_numa_mem(int cpu, int node) { per_cpu(_numa_mem_, cpu) = node; - _node_numa_mem_[cpu_to_node(cpu)] = node; } #endif @@ -180,13 +170,6 @@ static inline int numa_mem_id(void) } #endif -#ifndef node_to_mem_node -static inline int node_to_mem_node(int node) -{ - return node; -} -#endif - #ifndef cpu_to_mem static inline int cpu_to_mem(int cpu) { --- a/mm/page_alloc.c~revert-topology-add-support-for-node_to_mem_node-to-determine-the-fallback-node +++ a/mm/page_alloc.c @@ -95,7 +95,6 @@ DEFINE_STATIC_KEY_TRUE(vm_numa_stat_key) */ DEFINE_PER_CPU(int, _numa_mem_); /* Kernel "local memory" node */ EXPORT_PER_CPU_SYMBOL(_numa_mem_); -int _node_numa_mem_[MAX_NUMNODES]; #endif /* work_structs for global per-cpu drains */ _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 027/155] mm/kmemleak.c: use address-of operator on section symbols 2020-04-02 4:01 incoming Andrew Morton ` (25 preceding siblings ...) 2020-04-02 4:04 ` [patch 026/155] revert "topology: add support for node_to_mem_node() to determine the fallback node" Andrew Morton @ 2020-04-02 4:04 ` Andrew Morton 2020-04-02 4:04 ` [patch 028/155] mm/Makefile: disable KCSAN for kmemleak Andrew Morton ` (127 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:04 UTC (permalink / raw) To: akpm, catalin.marinas, linux-mm, mm-commits, natechancellor, ndesaulniers, torvalds From: Nathan Chancellor <natechancellor@gmail.com> Subject: mm/kmemleak.c: use address-of operator on section symbols Clang warns: ../mm/kmemleak.c:1955:28: warning: array comparison always evaluates to a constant [-Wtautological-compare] if (__start_ro_after_init < _sdata || __end_ro_after_init > _edata) ^ ../mm/kmemleak.c:1955:60: warning: array comparison always evaluates to a constant [-Wtautological-compare] if (__start_ro_after_init < _sdata || __end_ro_after_init > _edata) These are not true arrays, they are linker defined symbols, which are just addresses. Using the address of operator silences the warning and does not change the resulting assembly with either clang/ld.lld or gcc/ld (tested with diff + objdump -Dr). Link: https://github.com/ClangBuiltLinux/linux/issues/895 Link: http://lkml.kernel.org/r/20200220051551.44000-1-natechancellor@gmail.com Suggested-by: Nick Desaulniers <ndesaulniers@google.com> Signed-off-by: Nathan Chancellor <natechancellor@gmail.com> Acked-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/kmemleak.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/mm/kmemleak.c~mm-kmemleak-use-address-of-operator-on-section-symbols +++ a/mm/kmemleak.c @@ -1947,7 +1947,7 @@ void __init kmemleak_init(void) create_object((unsigned long)__bss_start, __bss_stop - __bss_start, KMEMLEAK_GREY, GFP_ATOMIC); /* only register .data..ro_after_init if not within .data */ - if (__start_ro_after_init < _sdata || __end_ro_after_init > _edata) + if (&__start_ro_after_init < &_sdata || &__end_ro_after_init > &_edata) create_object((unsigned long)__start_ro_after_init, __end_ro_after_init - __start_ro_after_init, KMEMLEAK_GREY, GFP_ATOMIC); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 028/155] mm/Makefile: disable KCSAN for kmemleak 2020-04-02 4:01 incoming Andrew Morton ` (26 preceding siblings ...) 2020-04-02 4:04 ` [patch 027/155] mm/kmemleak.c: use address-of operator on section symbols Andrew Morton @ 2020-04-02 4:04 ` Andrew Morton 2020-04-02 4:04 ` [patch 029/155] mm/filemap.c: don't bother dropping mmap_sem for zero size readahead Andrew Morton ` (126 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:04 UTC (permalink / raw) To: akpm, cai, catalin.marinas, elver, linux-mm, mm-commits, torvalds From: Qian Cai <cai@lca.pw> Subject: mm/Makefile: disable KCSAN for kmemleak Kmemleak could scan task stacks while plain writes happens to those stack variables which could results in data races. For example, in sys_rt_sigaction and do_sigaction(), it could have plain writes in a 32-byte size. Since the kmemleak does not care about the actual values of a non-pointer and all do_sigaction() call sites only copy to stack variables, just disable KCSAN for kmemleak to avoid annotating anything outside Kmemleak just because Kmemleak scans everything. Link: http://lkml.kernel.org/r/1583263716-25150-1-git-send-email-cai@lca.pw Signed-off-by: Qian Cai <cai@lca.pw> Suggested-by: Marco Elver <elver@google.com> Acked-by: Marco Elver <elver@google.com> Acked-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/Makefile | 1 + 1 file changed, 1 insertion(+) --- a/mm/Makefile~mm-disable-kcsan-for-kmemleak +++ a/mm/Makefile @@ -6,6 +6,7 @@ KASAN_SANITIZE_slab_common.o := n KASAN_SANITIZE_slab.o := n KASAN_SANITIZE_slub.o := n +KCSAN_SANITIZE_kmemleak.o := n # These files are disabled because they produce non-interesting and/or # flaky coverage that is not a function of syscall inputs. E.g. slab is out of _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 029/155] mm/filemap.c: don't bother dropping mmap_sem for zero size readahead 2020-04-02 4:01 incoming Andrew Morton ` (27 preceding siblings ...) 2020-04-02 4:04 ` [patch 028/155] mm/Makefile: disable KCSAN for kmemleak Andrew Morton @ 2020-04-02 4:04 ` Andrew Morton 2020-04-02 4:04 ` [patch 030/155] mm/page-writeback.c: write_cache_pages(): deduplicate identical checks Andrew Morton ` (125 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:04 UTC (permalink / raw) To: akpm, jack, josef, linux-mm, minchan, mm-commits, snazy, torvalds From: Jan Kara <jack@suse.cz> Subject: mm/filemap.c: don't bother dropping mmap_sem for zero size readahead When handling a page fault, we drop mmap_sem to start async readahead so that we don't block on IO submission with mmap_sem held. However there's no point to drop mmap_sem in case readahead is disabled. Handle that case to avoid pointless dropping of mmap_sem and retrying the fault. This was actually reported to block mlockall(MCL_CURRENT) indefinitely. Link: http://lkml.kernel.org/r/20200212101356.30759-1-jack@suse.cz Fixes: 6b4c9f446981 ("filemap: drop the mmap_sem for all blocking operations") Signed-off-by: Jan Kara <jack@suse.cz> Reported-by: Minchan Kim <minchan@kernel.org> Reported-by: Robert Stupp <snazy@gmx.de> Reviewed-by: Josef Bacik <josef@toxicpanda.com> Reviewed-by: Minchan Kim <minchan@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/filemap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/mm/filemap.c~mm-dont-bother-dropping-mmap_sem-for-zero-size-readahead +++ a/mm/filemap.c @@ -2416,7 +2416,7 @@ static struct file *do_async_mmap_readah pgoff_t offset = vmf->pgoff; /* If we don't want any read-ahead, don't bother */ - if (vmf->vma->vm_flags & VM_RAND_READ) + if (vmf->vma->vm_flags & VM_RAND_READ || !ra->ra_pages) return fpin; if (ra->mmap_miss > 0) ra->mmap_miss--; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 030/155] mm/page-writeback.c: write_cache_pages(): deduplicate identical checks 2020-04-02 4:01 incoming Andrew Morton ` (28 preceding siblings ...) 2020-04-02 4:04 ` [patch 029/155] mm/filemap.c: don't bother dropping mmap_sem for zero size readahead Andrew Morton @ 2020-04-02 4:04 ` Andrew Morton 2020-04-02 4:04 ` [patch 031/155] mm/filemap.c: clear page error before actual read Andrew Morton ` (124 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:04 UTC (permalink / raw) To: akpm, ira.weiny, jack, linux-mm, mfo, mm-commits, torvalds From: Mauricio Faria de Oliveira <mfo@canonical.com> Subject: mm/page-writeback.c: write_cache_pages(): deduplicate identical checks There used to be a 'retry' label in between the two (identical) checks when first introduced in commit f446daaea9d4 ("mm: implement writeback livelock avoidance using page tagging"), and later modified/updated in commit 6e6938b6d313 ("writeback: introduce .tagged_writepages for the WB_SYNC_NONE sync stage"). The label has been removed in commit 64081362e8ff ("mm/page-writeback.c: fix range_cyclic writeback vs writepages deadlock"), and the (identical) checks are now present / performed immediately one after another. So, remove/deduplicate the latter check, moving tag_pages_for_writeback() into the former check before the 'tag' variable assignment, so it's clear that it's not used in this (similarly-named) function call but only later in pagevec_lookup_range_tag(). Link: http://lkml.kernel.org/r/20200218221716.1648-1-mfo@canonical.com Signed-off-by: Mauricio Faria de Oliveira <mfo@canonical.com> Reviewed-by: Ira Weiny <ira.weiny@intel.com> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Cc: Jan Kara <jack@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/page-writeback.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) --- a/mm/page-writeback.c~mm-page-writebackc-write_cache_pages-deduplicate-identical-checks +++ a/mm/page-writeback.c @@ -2182,12 +2182,12 @@ int write_cache_pages(struct address_spa if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) range_whole = 1; } - if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages) + if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages) { + tag_pages_for_writeback(mapping, index, end); tag = PAGECACHE_TAG_TOWRITE; - else + } else { tag = PAGECACHE_TAG_DIRTY; - if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages) - tag_pages_for_writeback(mapping, index, end); + } done_index = index; while (!done && (index <= end)) { int i; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 031/155] mm/filemap.c: clear page error before actual read 2020-04-02 4:01 incoming Andrew Morton ` (29 preceding siblings ...) 2020-04-02 4:04 ` [patch 030/155] mm/page-writeback.c: write_cache_pages(): deduplicate identical checks Andrew Morton @ 2020-04-02 4:04 ` Andrew Morton 2020-04-02 4:04 ` [patch 032/155] mm/filemap.c: remove unused argument from shrink_readahead_size_eio() Andrew Morton ` (123 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:04 UTC (permalink / raw) To: akpm, jack, linux-mm, mm-commits, torvalds, willy, xianting_tian, yubin From: Xianting Tian <xianting_tian@126.com> Subject: mm/filemap.c: clear page error before actual read Mount failure issue happens under the scenario: Application forked dozens of threads to mount the same number of cramfs images separately in docker, but several mounts failed with high probability. Mount failed due to the checking result of the page(read from the superblock of loop dev) is not uptodate after wait_on_page_locked(page) returned in function cramfs_read: wait_on_page_locked(page); if (!PageUptodate(page)) { ... } The reason of the checking result of the page not uptodate: systemd-udevd read the loopX dev before mount, because the status of loopX is Lo_unbound at this time, so loop_make_request directly trigger the calling of io_end handler end_buffer_async_read, which called SetPageError(page). So It caused the page can't be set to uptodate in function end_buffer_async_read: if(page_uptodate && !PageError(page)) { SetPageUptodate(page); } Then mount operation is performed, it used the same page which is just accessed by systemd-udevd above, Because this page is not uptodate, it will launch a actual read via submit_bh, then wait on this page by calling wait_on_page_locked(page). When the I/O of the page done, io_end handler end_buffer_async_read is called, because no one cleared the page error(during the whole read path of mount), which is caused by systemd-udevd reading, so this page is still in "PageError" status, which can't be set to uptodate in function end_buffer_async_read, then caused mount failure. But sometimes mount succeed even through systemd-udeved read loopX dev just before, The reason is systemd-udevd launched other loopX read just between step 3.1 and 3.2, the steps as below: 1, loopX dev default status is Lo_unbound; 2, systemd-udved read loopX dev (page is set to PageError); 3, mount operation 1) set loopX status to Lo_bound; ==>systemd-udevd read loopX dev<== 2) read loopX dev(page has no error) 3) mount succeed As the loopX dev status is set to Lo_bound after step 3.1, so the other loopX dev read by systemd-udevd will go through the whole I/O stack, part of the call trace as below: SYS_read vfs_read do_sync_read blkdev_aio_read generic_file_aio_read do_generic_file_read: ClearPageError(page); mapping->a_ops->readpage(filp, page); here, mapping->a_ops->readpage() is blkdev_readpage. In latest kernel, some function name changed, the call trace as below: blkdev_read_iter generic_file_read_iter generic_file_buffered_read: /* * A previous I/O error may have been due to temporary * failures, eg. mutipath errors. * Pg_error will be set again if readpage fails. */ ClearPageError(page); /* Start the actual read. The read will unlock the page*/ error=mapping->a_ops->readpage(flip, page); We can see ClearPageError(page) is called before the actual read, then the read in step 3.2 succeed. This patch is to add the calling of ClearPageError just before the actual read of read path of cramfs mount. Without the patch, the call trace as below when performing cramfs mount: do_mount cramfs_read cramfs_blkdev_read read_cache_page do_read_cache_page: filler(data, page); or mapping->a_ops->readpage(data, page); With the patch, the call trace as below when performing mount: do_mount cramfs_read cramfs_blkdev_read read_cache_page: do_read_cache_page: ClearPageError(page); <== new add filler(data, page); or mapping->a_ops->readpage(data, page); With the patch, mount operation trigger the calling of ClearPageError(page) before the actual read, the page has no error if no additional page error happen when I/O done. Link: http://lkml.kernel.org/r/1583318844-22971-1-git-send-email-xianting_tian@126.com Signed-off-by: Xianting Tian <xianting_tian@126.com> Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: Jan Kara <jack@suse.cz> Cc: <yubin@h3c.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/filemap.c | 8 ++++++++ 1 file changed, 8 insertions(+) --- a/mm/filemap.c~mm-filemapc-clear-page-error-before-actual-read +++ a/mm/filemap.c @@ -2823,6 +2823,14 @@ filler: unlock_page(page); goto out; } + + /* + * A previous I/O error may have been due to temporary + * failures. + * Clear page error before actual read, PG_error will be + * set again if read page fails. + */ + ClearPageError(page); goto filler; out: _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 032/155] mm/filemap.c: remove unused argument from shrink_readahead_size_eio() 2020-04-02 4:01 incoming Andrew Morton ` (30 preceding siblings ...) 2020-04-02 4:04 ` [patch 031/155] mm/filemap.c: clear page error before actual read Andrew Morton @ 2020-04-02 4:04 ` Andrew Morton 2020-04-02 4:04 ` [patch 033/155] mm/filemap.c: use vm_fault error code directly Andrew Morton ` (122 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:04 UTC (permalink / raw) To: akpm, jrdr.linux, linux-mm, mm-commits, torvalds From: Souptick Joarder <jrdr.linux@gmail.com> Subject: mm/filemap.c: remove unused argument from shrink_readahead_size_eio() The first argument of shrink_readahead_size_eio() is not used. Hence remove it from the function definition and from all the callers. Link: http://lkml.kernel.org/r/1583868093-24342-1-git-send-email-jrdr.linux@gmail.com Signed-off-by: Souptick Joarder <jrdr.linux@gmail.com> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/filemap.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) --- a/mm/filemap.c~mm-filemapc-remove-unused-argument-from-shrink_readahead_size_eio +++ a/mm/filemap.c @@ -1962,8 +1962,7 @@ EXPORT_SYMBOL(find_get_pages_range_tag); * * It is going insane. Fix it by quickly scaling down the readahead size. */ -static void shrink_readahead_size_eio(struct file *filp, - struct file_ra_state *ra) +static void shrink_readahead_size_eio(struct file_ra_state *ra) { ra->ra_pages /= 4; } @@ -2188,7 +2187,7 @@ readpage: goto find_page; } unlock_page(page); - shrink_readahead_size_eio(filp, ra); + shrink_readahead_size_eio(ra); error = -EIO; goto readpage_error; } @@ -2560,7 +2559,7 @@ page_not_uptodate: goto retry_find; /* Things didn't work out. Return zero to tell the mm layer so. */ - shrink_readahead_size_eio(file, ra); + shrink_readahead_size_eio(ra); return VM_FAULT_SIGBUS; out_retry: _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 033/155] mm/filemap.c: use vm_fault error code directly 2020-04-02 4:01 incoming Andrew Morton ` (31 preceding siblings ...) 2020-04-02 4:04 ` [patch 032/155] mm/filemap.c: remove unused argument from shrink_readahead_size_eio() Andrew Morton @ 2020-04-02 4:04 ` Andrew Morton 2020-04-02 4:04 ` [patch 034/155] include/linux/pagemap.h: rename arguments to find_subpage Andrew Morton ` (121 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:04 UTC (permalink / raw) To: akpm, aneesh.kumar, hch, kirill.shutemov, linux-mm, mm-commits, pankaj.gupta.linux, torvalds, willy From: "Matthew Wilcox (Oracle)" <willy@infradead.org> Subject: mm/filemap.c: use vm_fault error code directly Use VM_FAULT_OOM instead of indirecting through vmf_error(-ENOMEM). Link: http://lkml.kernel.org/r/20200318140253.6141-2-willy@infradead.org Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/filemap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/mm/filemap.c~mm-use-vm_fault-error-code-directly +++ a/mm/filemap.c @@ -2490,7 +2490,7 @@ retry_find: if (!page) { if (fpin) goto out_retry; - return vmf_error(-ENOMEM); + return VM_FAULT_OOM; } } _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 034/155] include/linux/pagemap.h: rename arguments to find_subpage 2020-04-02 4:01 incoming Andrew Morton ` (32 preceding siblings ...) 2020-04-02 4:04 ` [patch 033/155] mm/filemap.c: use vm_fault error code directly Andrew Morton @ 2020-04-02 4:04 ` Andrew Morton 2020-04-02 4:05 ` [patch 035/155] mm/page-writeback.c: use VM_BUG_ON_PAGE in clear_page_dirty_for_io Andrew Morton ` (120 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:04 UTC (permalink / raw) To: akpm, aneesh.kumar, hch, kirill.shutemov, linux-mm, mm-commits, pankaj.gupta.linux, torvalds, willy From: "Matthew Wilcox (Oracle)" <willy@infradead.org> Subject: include/linux/pagemap.h: rename arguments to find_subpage This isn't just a random struct page, it's known to be a head page, and calling it head makes the function better self-documenting. The pgoff_t is less confusing if it's named index instead of offset. Also add a couple of comments to explain why we're doing various things. Link: http://lkml.kernel.org/r/20200318140253.6141-3-willy@infradead.org Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Acked-by: Pankaj Gupta <pankaj.gupta.linux@gmail.com> Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/pagemap.h | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) --- a/include/linux/pagemap.h~mm-rename-arguments-to-find_subpage +++ a/include/linux/pagemap.h @@ -333,14 +333,19 @@ static inline struct page *grab_cache_pa mapping_gfp_mask(mapping)); } -static inline struct page *find_subpage(struct page *page, pgoff_t offset) +/* + * Given the page we found in the page cache, return the page corresponding + * to this index in the file + */ +static inline struct page *find_subpage(struct page *head, pgoff_t index) { - if (PageHuge(page)) - return page; + /* HugeTLBfs wants the head page regardless */ + if (PageHuge(head)) + return head; - VM_BUG_ON_PAGE(PageTail(page), page); + VM_BUG_ON_PAGE(PageTail(head), head); - return page + (offset & (compound_nr(page) - 1)); + return head + (index & (compound_nr(head) - 1)); } struct page *find_get_entry(struct address_space *mapping, pgoff_t offset); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 035/155] mm/page-writeback.c: use VM_BUG_ON_PAGE in clear_page_dirty_for_io 2020-04-02 4:01 incoming Andrew Morton ` (33 preceding siblings ...) 2020-04-02 4:04 ` [patch 034/155] include/linux/pagemap.h: rename arguments to find_subpage Andrew Morton @ 2020-04-02 4:05 ` Andrew Morton 2020-04-02 4:05 ` [patch 036/155] mm/filemap.c: unexport find_get_entry Andrew Morton ` (119 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:05 UTC (permalink / raw) To: akpm, aneesh.kumar, hch, kirill.shutemov, linux-mm, mm-commits, pankaj.gupta.linux, torvalds, willy From: "Matthew Wilcox (Oracle)" <willy@infradead.org> Subject: mm/page-writeback.c: use VM_BUG_ON_PAGE in clear_page_dirty_for_io Dumping the page information in this circumstance helps for debugging. Link: http://lkml.kernel.org/r/20200318140253.6141-7-willy@infradead.org Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/page-writeback.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/mm/page-writeback.c~mm-use-vm_bug_on_page-in-clear_page_dirty_for_io +++ a/mm/page-writeback.c @@ -2655,7 +2655,7 @@ int clear_page_dirty_for_io(struct page struct address_space *mapping = page_mapping(page); int ret = 0; - BUG_ON(!PageLocked(page)); + VM_BUG_ON_PAGE(!PageLocked(page), page); if (mapping && mapping_cap_account_dirty(mapping)) { struct inode *inode = mapping->host; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 036/155] mm/filemap.c: unexport find_get_entry 2020-04-02 4:01 incoming Andrew Morton ` (34 preceding siblings ...) 2020-04-02 4:05 ` [patch 035/155] mm/page-writeback.c: use VM_BUG_ON_PAGE in clear_page_dirty_for_io Andrew Morton @ 2020-04-02 4:05 ` Andrew Morton 2020-04-02 4:05 ` [patch 037/155] mm/filemap.c: rewrite pagecache_get_page documentation Andrew Morton ` (118 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:05 UTC (permalink / raw) To: akpm, aneesh.kumar, hch, kirill.shutemov, linux-mm, mm-commits, pankaj.gupta.linux, torvalds, willy From: "Matthew Wilcox (Oracle)" <willy@infradead.org> Subject: mm/filemap.c: unexport find_get_entry No in-tree users (proc, madvise, memcg, mincore) can be built as a module. Link: http://lkml.kernel.org/r/20200318140253.6141-8-willy@infradead.org Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/filemap.c | 1 - 1 file changed, 1 deletion(-) --- a/mm/filemap.c~mm-unexport-find_get_entry +++ a/mm/filemap.c @@ -1536,7 +1536,6 @@ out: return page; } -EXPORT_SYMBOL(find_get_entry); /** * find_lock_entry - locate, pin and lock a page cache entry _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 037/155] mm/filemap.c: rewrite pagecache_get_page documentation 2020-04-02 4:01 incoming Andrew Morton ` (35 preceding siblings ...) 2020-04-02 4:05 ` [patch 036/155] mm/filemap.c: unexport find_get_entry Andrew Morton @ 2020-04-02 4:05 ` Andrew Morton 2020-04-02 4:05 ` [patch 038/155] mm/gup: split get_user_pages_remote() into two routines Andrew Morton ` (117 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:05 UTC (permalink / raw) To: akpm, aneesh.kumar, hch, kirill.shutemov, linux-mm, mm-commits, pankaj.gupta.linux, torvalds, willy From: "Matthew Wilcox (Oracle)" <willy@infradead.org> Subject: mm/filemap.c: rewrite pagecache_get_page documentation - These were never called PCG flags; they've been called FGP flags since their introduction in 2014. - The FGP_FOR_MMAP flag was misleadingly documented as if it was an alternative to FGP_CREAT instead of an option to it. - Rename the 'offset' parameter to 'index'. - Capitalisation, formatting, rewording. Link: http://lkml.kernel.org/r/20200318140253.6141-9-willy@infradead.org Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/filemap.c | 55 +++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 29 deletions(-) --- a/mm/filemap.c~mm-rewrite-pagecache_get_page-documentation +++ a/mm/filemap.c @@ -1574,42 +1574,39 @@ repeat: EXPORT_SYMBOL(find_lock_entry); /** - * pagecache_get_page - find and get a page reference - * @mapping: the address_space to search - * @offset: the page index - * @fgp_flags: PCG flags - * @gfp_mask: gfp mask to use for the page cache data page allocation - * - * Looks up the page cache slot at @mapping & @offset. - * - * PCG flags modify how the page is returned. - * - * @fgp_flags can be: - * - * - FGP_ACCESSED: the page will be marked accessed - * - FGP_LOCK: Page is return locked - * - FGP_CREAT: If page is not present then a new page is allocated using - * @gfp_mask and added to the page cache and the VM's LRU - * list. The page is returned locked and with an increased - * refcount. - * - FGP_FOR_MMAP: Similar to FGP_CREAT, only we want to allow the caller to do - * its own locking dance if the page is already in cache, or unlock the page - * before returning if we had to add the page to pagecache. + * pagecache_get_page - Find and get a reference to a page. + * @mapping: The address_space to search. + * @index: The page index. + * @fgp_flags: %FGP flags modify how the page is returned. + * @gfp_mask: Memory allocation flags to use if %FGP_CREAT is specified. + * + * Looks up the page cache entry at @mapping & @index. + * + * @fgp_flags can be zero or more of these flags: + * + * * %FGP_ACCESSED - The page will be marked accessed. + * * %FGP_LOCK - The page is returned locked. + * * %FGP_CREAT - If no page is present then a new page is allocated using + * @gfp_mask and added to the page cache and the VM's LRU list. + * The page is returned locked and with an increased refcount. + * * %FGP_FOR_MMAP - The caller wants to do its own locking dance if the + * page is already in cache. If the page was allocated, unlock it before + * returning so the caller can do the same dance. * - * If FGP_LOCK or FGP_CREAT are specified then the function may sleep even - * if the GFP flags specified for FGP_CREAT are atomic. + * If %FGP_LOCK or %FGP_CREAT are specified then the function may sleep even + * if the %GFP flags specified for %FGP_CREAT are atomic. * * If there is a page cache page, it is returned with an increased refcount. * - * Return: the found page or %NULL otherwise. + * Return: The found page or %NULL otherwise. */ -struct page *pagecache_get_page(struct address_space *mapping, pgoff_t offset, - int fgp_flags, gfp_t gfp_mask) +struct page *pagecache_get_page(struct address_space *mapping, pgoff_t index, + int fgp_flags, gfp_t gfp_mask) { struct page *page; repeat: - page = find_get_entry(mapping, offset); + page = find_get_entry(mapping, index); if (xa_is_value(page)) page = NULL; if (!page) @@ -1631,7 +1628,7 @@ repeat: put_page(page); goto repeat; } - VM_BUG_ON_PAGE(page->index != offset, page); + VM_BUG_ON_PAGE(page->index != index, page); } if (fgp_flags & FGP_ACCESSED) @@ -1656,7 +1653,7 @@ no_page: if (fgp_flags & FGP_ACCESSED) __SetPageReferenced(page); - err = add_to_page_cache_lru(page, mapping, offset, gfp_mask); + err = add_to_page_cache_lru(page, mapping, index, gfp_mask); if (unlikely(err)) { put_page(page); page = NULL; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 038/155] mm/gup: split get_user_pages_remote() into two routines 2020-04-02 4:01 incoming Andrew Morton ` (36 preceding siblings ...) 2020-04-02 4:05 ` [patch 037/155] mm/filemap.c: rewrite pagecache_get_page documentation Andrew Morton @ 2020-04-02 4:05 ` Andrew Morton 2020-04-02 4:05 ` [patch 039/155] mm/gup: pass a flags arg to __gup_device_* functions Andrew Morton ` (116 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:05 UTC (permalink / raw) To: akpm, corbet, dan.j.williams, david, hch, ira.weiny, jack, jgg, jglisse, jhubbard, kirill.shutemov, linux-mm, mhocko, mike.kravetz, mm-commits, shuah, torvalds, vbabka, viro, willy From: John Hubbard <jhubbard@nvidia.com> Subject: mm/gup: split get_user_pages_remote() into two routines Patch series "mm/gup: track FOLL_PIN pages", v6. This activates tracking of FOLL_PIN pages. This is in support of fixing the get_user_pages()+DMA problem described in [1]-[4]. FOLL_PIN support is now in the main linux tree. However, the patch to use FOLL_PIN to track pages was *not* submitted, because Leon saw an RDMA test suite failure that involved (I think) page refcount overflows when huge pages were used. This patch definitively solves that kind of overflow problem, by adding an exact pincount, for compound pages (of order > 1), in the 3rd struct page of a compound page. If available, that form of pincounting is used, instead of the GUP_PIN_COUNTING_BIAS approach. Thanks again to Jan Kara for that idea. Other interesting changes: * dump_page(): added one, or two new things to report for compound pages: head refcount (for all compound pages), and map_pincount (for compound pages of order > 1). * Documentation/core-api/pin_user_pages.rst: removed the "TODO" for the huge page refcount upper limit problems, and added notes about how it works now. Also added a note about the dump_page() enhancements. * Added some comments in gup.c and mm.h, to explain that there are two ways to count pinned pages: exact (for compound pages of order > 1) and fuzzy (GUP_PIN_COUNTING_BIAS: for all other pages). ============================================================ General notes about the tracking patch: This is a prerequisite to solving the problem of proper interactions between file-backed pages, and [R]DMA activities, as discussed in [1], [2], [3], [4] and in a remarkable number of email threads since about 2017. :) In contrast to earlier approaches, the page tracking can be incrementally applied to the kernel call sites that, until now, have been simply calling get_user_pages() ("gup"). In other words, opt-in by changing from this: get_user_pages() (sets FOLL_GET) put_page() to this: pin_user_pages() (sets FOLL_PIN) unpin_user_page() ============================================================ Future steps: * Convert more subsystems from get_user_pages() to pin_user_pages(). The first probably needs to be bio/biovecs, because any filesystem testing is too difficult without those in place. * Change VFS and filesystems to respond appropriately when encountering dma-pinned pages. * Work with Ira and others to connect this all up with file system leases. [1] Some slow progress on get_user_pages() (Apr 2, 2019): https://lwn.net/Articles/784574/ [2] DMA and get_user_pages() (LPC: Dec 12, 2018): https://lwn.net/Articles/774411/ [3] The trouble with get_user_pages() (Apr 30, 2018): https://lwn.net/Articles/753027/ [4] LWN kernel index: get_user_pages() https://lwn.net/Kernel/Index/#Memory_management-get_user_pages This patch (of 12): An upcoming patch requires reusing the implementation of get_user_pages_remote(). Split up get_user_pages_remote() into an outer routine that checks flags, and an implementation routine that will be reused. This makes subsequent changes much easier to understand. There should be no change in behavior due to this patch. Link: http://lkml.kernel.org/r/20200211001536.1027652-2-jhubbard@nvidia.com Signed-off-by: John Hubbard <jhubbard@nvidia.com> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Reviewed-by: Jan Kara <jack@suse.cz> Cc: Ira Weiny <ira.weiny@intel.com> Cc: Jérôme Glisse <jglisse@redhat.com> Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Christoph Hellwig <hch@infradead.org> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Dave Chinner <david@fromorbit.com> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/gup.c | 56 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 23 deletions(-) --- a/mm/gup.c~mm-gup-split-get_user_pages_remote-into-two-routines +++ a/mm/gup.c @@ -1557,6 +1557,37 @@ static __always_inline long __gup_longte } #endif /* CONFIG_FS_DAX || CONFIG_CMA */ +#ifdef CONFIG_MMU +static long __get_user_pages_remote(struct task_struct *tsk, + struct mm_struct *mm, + unsigned long start, unsigned long nr_pages, + unsigned int gup_flags, struct page **pages, + struct vm_area_struct **vmas, int *locked) +{ + /* + * Parts of FOLL_LONGTERM behavior are incompatible with + * FAULT_FLAG_ALLOW_RETRY because of the FS DAX check requirement on + * vmas. However, this only comes up if locked is set, and there are + * callers that do request FOLL_LONGTERM, but do not set locked. So, + * allow what we can. + */ + if (gup_flags & FOLL_LONGTERM) { + if (WARN_ON_ONCE(locked)) + return -EINVAL; + /* + * This will check the vmas (even if our vmas arg is NULL) + * and return -ENOTSUPP if DAX isn't allowed in this case: + */ + return __gup_longterm_locked(tsk, mm, start, nr_pages, pages, + vmas, gup_flags | FOLL_TOUCH | + FOLL_REMOTE); + } + + return __get_user_pages_locked(tsk, mm, start, nr_pages, pages, vmas, + locked, + gup_flags | FOLL_TOUCH | FOLL_REMOTE); +} + /* * get_user_pages_remote() - pin user pages in memory * @tsk: the task_struct to use for page fault accounting, or @@ -1619,7 +1650,6 @@ static __always_inline long __gup_longte * should use get_user_pages because it cannot pass * FAULT_FLAG_ALLOW_RETRY to handle_mm_fault. */ -#ifdef CONFIG_MMU long get_user_pages_remote(struct task_struct *tsk, struct mm_struct *mm, unsigned long start, unsigned long nr_pages, unsigned int gup_flags, struct page **pages, @@ -1632,28 +1662,8 @@ long get_user_pages_remote(struct task_s if (WARN_ON_ONCE(gup_flags & FOLL_PIN)) return -EINVAL; - /* - * Parts of FOLL_LONGTERM behavior are incompatible with - * FAULT_FLAG_ALLOW_RETRY because of the FS DAX check requirement on - * vmas. However, this only comes up if locked is set, and there are - * callers that do request FOLL_LONGTERM, but do not set locked. So, - * allow what we can. - */ - if (gup_flags & FOLL_LONGTERM) { - if (WARN_ON_ONCE(locked)) - return -EINVAL; - /* - * This will check the vmas (even if our vmas arg is NULL) - * and return -ENOTSUPP if DAX isn't allowed in this case: - */ - return __gup_longterm_locked(tsk, mm, start, nr_pages, pages, - vmas, gup_flags | FOLL_TOUCH | - FOLL_REMOTE); - } - - return __get_user_pages_locked(tsk, mm, start, nr_pages, pages, vmas, - locked, - gup_flags | FOLL_TOUCH | FOLL_REMOTE); + return __get_user_pages_remote(tsk, mm, start, nr_pages, gup_flags, + pages, vmas, locked); } EXPORT_SYMBOL(get_user_pages_remote); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 039/155] mm/gup: pass a flags arg to __gup_device_* functions 2020-04-02 4:01 incoming Andrew Morton ` (37 preceding siblings ...) 2020-04-02 4:05 ` [patch 038/155] mm/gup: split get_user_pages_remote() into two routines Andrew Morton @ 2020-04-02 4:05 ` Andrew Morton 2020-04-02 4:05 ` [patch 040/155] mm: introduce page_ref_sub_return() Andrew Morton ` (115 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:05 UTC (permalink / raw) To: akpm, corbet, dan.j.williams, david, hch, ira.weiny, jack, jgg, jglisse, jhubbard, kirill.shutemov, linux-mm, mhocko, mike.kravetz, mm-commits, shuah, torvalds, vbabka, viro, willy From: John Hubbard <jhubbard@nvidia.com> Subject: mm/gup: pass a flags arg to __gup_device_* functions A subsequent patch requires access to gup flags, so pass the flags argument through to the __gup_device_* functions. Also placate checkpatch.pl by shortening a nearby line. Link: http://lkml.kernel.org/r/20200211001536.1027652-3-jhubbard@nvidia.com Signed-off-by: John Hubbard <jhubbard@nvidia.com> Reviewed-by: Jan Kara <jack@suse.cz> Reviewed-by: Jérôme Glisse <jglisse@redhat.com> Reviewed-by: Ira Weiny <ira.weiny@intel.com> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Christoph Hellwig <hch@infradead.org> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Dave Chinner <david@fromorbit.com> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/gup.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) --- a/mm/gup.c~mm-gup-pass-a-flags-arg-to-__gup_device_-functions +++ a/mm/gup.c @@ -1963,7 +1963,8 @@ static int gup_pte_range(pmd_t pmd, unsi #if defined(CONFIG_ARCH_HAS_PTE_DEVMAP) && defined(CONFIG_TRANSPARENT_HUGEPAGE) static int __gup_device_huge(unsigned long pfn, unsigned long addr, - unsigned long end, struct page **pages, int *nr) + unsigned long end, unsigned int flags, + struct page **pages, int *nr) { int nr_start = *nr; struct dev_pagemap *pgmap = NULL; @@ -1989,13 +1990,14 @@ static int __gup_device_huge(unsigned lo } static int __gup_device_huge_pmd(pmd_t orig, pmd_t *pmdp, unsigned long addr, - unsigned long end, struct page **pages, int *nr) + unsigned long end, unsigned int flags, + struct page **pages, int *nr) { unsigned long fault_pfn; int nr_start = *nr; fault_pfn = pmd_pfn(orig) + ((addr & ~PMD_MASK) >> PAGE_SHIFT); - if (!__gup_device_huge(fault_pfn, addr, end, pages, nr)) + if (!__gup_device_huge(fault_pfn, addr, end, flags, pages, nr)) return 0; if (unlikely(pmd_val(orig) != pmd_val(*pmdp))) { @@ -2006,13 +2008,14 @@ static int __gup_device_huge_pmd(pmd_t o } static int __gup_device_huge_pud(pud_t orig, pud_t *pudp, unsigned long addr, - unsigned long end, struct page **pages, int *nr) + unsigned long end, unsigned int flags, + struct page **pages, int *nr) { unsigned long fault_pfn; int nr_start = *nr; fault_pfn = pud_pfn(orig) + ((addr & ~PUD_MASK) >> PAGE_SHIFT); - if (!__gup_device_huge(fault_pfn, addr, end, pages, nr)) + if (!__gup_device_huge(fault_pfn, addr, end, flags, pages, nr)) return 0; if (unlikely(pud_val(orig) != pud_val(*pudp))) { @@ -2023,14 +2026,16 @@ static int __gup_device_huge_pud(pud_t o } #else static int __gup_device_huge_pmd(pmd_t orig, pmd_t *pmdp, unsigned long addr, - unsigned long end, struct page **pages, int *nr) + unsigned long end, unsigned int flags, + struct page **pages, int *nr) { BUILD_BUG(); return 0; } static int __gup_device_huge_pud(pud_t pud, pud_t *pudp, unsigned long addr, - unsigned long end, struct page **pages, int *nr) + unsigned long end, unsigned int flags, + struct page **pages, int *nr) { BUILD_BUG(); return 0; @@ -2146,7 +2151,8 @@ static int gup_huge_pmd(pmd_t orig, pmd_ if (pmd_devmap(orig)) { if (unlikely(flags & FOLL_LONGTERM)) return 0; - return __gup_device_huge_pmd(orig, pmdp, addr, end, pages, nr); + return __gup_device_huge_pmd(orig, pmdp, addr, end, flags, + pages, nr); } page = pmd_page(orig) + ((addr & ~PMD_MASK) >> PAGE_SHIFT); @@ -2167,7 +2173,8 @@ static int gup_huge_pmd(pmd_t orig, pmd_ } static int gup_huge_pud(pud_t orig, pud_t *pudp, unsigned long addr, - unsigned long end, unsigned int flags, struct page **pages, int *nr) + unsigned long end, unsigned int flags, + struct page **pages, int *nr) { struct page *head, *page; int refs; @@ -2178,7 +2185,8 @@ static int gup_huge_pud(pud_t orig, pud_ if (pud_devmap(orig)) { if (unlikely(flags & FOLL_LONGTERM)) return 0; - return __gup_device_huge_pud(orig, pudp, addr, end, pages, nr); + return __gup_device_huge_pud(orig, pudp, addr, end, flags, + pages, nr); } page = pud_page(orig) + ((addr & ~PUD_MASK) >> PAGE_SHIFT); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 040/155] mm: introduce page_ref_sub_return() 2020-04-02 4:01 incoming Andrew Morton ` (38 preceding siblings ...) 2020-04-02 4:05 ` [patch 039/155] mm/gup: pass a flags arg to __gup_device_* functions Andrew Morton @ 2020-04-02 4:05 ` Andrew Morton 2020-04-02 4:05 ` [patch 041/155] mm/gup: pass gup flags to two more routines Andrew Morton ` (114 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:05 UTC (permalink / raw) To: akpm, corbet, dan.j.williams, david, hch, ira.weiny, jack, jgg, jglisse, jhubbard, kirill.shutemov, linux-mm, mhocko, mike.kravetz, mm-commits, shuah, torvalds, vbabka, viro, willy From: John Hubbard <jhubbard@nvidia.com> Subject: mm: introduce page_ref_sub_return() An upcoming patch requires subtracting a large chunk of refcounts from a page, and checking what the resulting refcount is. This is a little different than the usual "check for zero refcount" that many of the page ref functions already do. However, it is similar to a few other routines that (like this one) are generally useful for things such as 1-based refcounting. Add page_ref_sub_return(), that subtracts a chunk of refcounts atomically, and returns an atomic snapshot of the result. Link: http://lkml.kernel.org/r/20200211001536.1027652-4-jhubbard@nvidia.com Signed-off-by: John Hubbard <jhubbard@nvidia.com> Reviewed-by: Jan Kara <jack@suse.cz> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Ira Weiny <ira.weiny@intel.com> Cc: Jérôme Glisse <jglisse@redhat.com> Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Christoph Hellwig <hch@infradead.org> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Dave Chinner <david@fromorbit.com> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/page_ref.h | 9 +++++++++ 1 file changed, 9 insertions(+) --- a/include/linux/page_ref.h~mm-introduce-page_ref_sub_return +++ a/include/linux/page_ref.h @@ -102,6 +102,15 @@ static inline void page_ref_sub(struct p __page_ref_mod(page, -nr); } +static inline int page_ref_sub_return(struct page *page, int nr) +{ + int ret = atomic_sub_return(nr, &page->_refcount); + + if (page_ref_tracepoint_active(__tracepoint_page_ref_mod_and_return)) + __page_ref_mod_and_return(page, -nr, ret); + return ret; +} + static inline void page_ref_inc(struct page *page) { atomic_inc(&page->_refcount); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 041/155] mm/gup: pass gup flags to two more routines 2020-04-02 4:01 incoming Andrew Morton ` (39 preceding siblings ...) 2020-04-02 4:05 ` [patch 040/155] mm: introduce page_ref_sub_return() Andrew Morton @ 2020-04-02 4:05 ` Andrew Morton 2020-04-02 4:05 ` [patch 042/155] mm/gup: require FOLL_GET for get_user_pages_fast() Andrew Morton ` (113 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:05 UTC (permalink / raw) To: akpm, corbet, dan.j.williams, david, hch, ira.weiny, jack, jgg, jglisse, jhubbard, kirill.shutemov, linux-mm, mhocko, mike.kravetz, mm-commits, shuah, torvalds, vbabka, viro, willy From: John Hubbard <jhubbard@nvidia.com> Subject: mm/gup: pass gup flags to two more routines In preparation for an upcoming patch, send gup flags args to two more routines: put_compound_head(), and undo_dev_pagemap(). Link: http://lkml.kernel.org/r/20200211001536.1027652-5-jhubbard@nvidia.com Signed-off-by: John Hubbard <jhubbard@nvidia.com> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Reviewed-by: Jan Kara <jack@suse.cz> Cc: Ira Weiny <ira.weiny@intel.com> Cc: Jérôme Glisse <jglisse@redhat.com> Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Christoph Hellwig <hch@infradead.org> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Dave Chinner <david@fromorbit.com> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/gup.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) --- a/mm/gup.c~mm-gup-pass-gup-flags-to-two-more-routines +++ a/mm/gup.c @@ -1870,6 +1870,7 @@ static inline pte_t gup_get_pte(pte_t *p #endif /* CONFIG_GUP_GET_PTE_LOW_HIGH */ static void __maybe_unused undo_dev_pagemap(int *nr, int nr_start, + unsigned int flags, struct page **pages) { while ((*nr) - nr_start) { @@ -1909,7 +1910,7 @@ static int gup_pte_range(pmd_t pmd, unsi pgmap = get_dev_pagemap(pte_pfn(pte), pgmap); if (unlikely(!pgmap)) { - undo_dev_pagemap(nr, nr_start, pages); + undo_dev_pagemap(nr, nr_start, flags, pages); goto pte_unmap; } } else if (pte_special(pte)) @@ -1974,7 +1975,7 @@ static int __gup_device_huge(unsigned lo pgmap = get_dev_pagemap(pfn, pgmap); if (unlikely(!pgmap)) { - undo_dev_pagemap(nr, nr_start, pages); + undo_dev_pagemap(nr, nr_start, flags, pages); return 0; } SetPageReferenced(page); @@ -2001,7 +2002,7 @@ static int __gup_device_huge_pmd(pmd_t o return 0; if (unlikely(pmd_val(orig) != pmd_val(*pmdp))) { - undo_dev_pagemap(nr, nr_start, pages); + undo_dev_pagemap(nr, nr_start, flags, pages); return 0; } return 1; @@ -2019,7 +2020,7 @@ static int __gup_device_huge_pud(pud_t o return 0; if (unlikely(pud_val(orig) != pud_val(*pudp))) { - undo_dev_pagemap(nr, nr_start, pages); + undo_dev_pagemap(nr, nr_start, flags, pages); return 0; } return 1; @@ -2053,7 +2054,7 @@ static int record_subpages(struct page * return nr; } -static void put_compound_head(struct page *page, int refs) +static void put_compound_head(struct page *page, int refs, unsigned int flags) { VM_BUG_ON_PAGE(page_ref_count(page) < refs, page); /* @@ -2103,7 +2104,7 @@ static int gup_hugepte(pte_t *ptep, unsi return 0; if (unlikely(pte_val(pte) != pte_val(*ptep))) { - put_compound_head(head, refs); + put_compound_head(head, refs, flags); return 0; } @@ -2163,7 +2164,7 @@ static int gup_huge_pmd(pmd_t orig, pmd_ return 0; if (unlikely(pmd_val(orig) != pmd_val(*pmdp))) { - put_compound_head(head, refs); + put_compound_head(head, refs, flags); return 0; } @@ -2197,7 +2198,7 @@ static int gup_huge_pud(pud_t orig, pud_ return 0; if (unlikely(pud_val(orig) != pud_val(*pudp))) { - put_compound_head(head, refs); + put_compound_head(head, refs, flags); return 0; } @@ -2226,7 +2227,7 @@ static int gup_huge_pgd(pgd_t orig, pgd_ return 0; if (unlikely(pgd_val(orig) != pgd_val(*pgdp))) { - put_compound_head(head, refs); + put_compound_head(head, refs, flags); return 0; } _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 042/155] mm/gup: require FOLL_GET for get_user_pages_fast() 2020-04-02 4:01 incoming Andrew Morton ` (40 preceding siblings ...) 2020-04-02 4:05 ` [patch 041/155] mm/gup: pass gup flags to two more routines Andrew Morton @ 2020-04-02 4:05 ` Andrew Morton 2020-04-02 4:05 ` [patch 043/155] mm/gup: track FOLL_PIN pages Andrew Morton ` (112 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:05 UTC (permalink / raw) To: akpm, corbet, dan.j.williams, david, hch, ira.weiny, jack, jgg, jglisse, jhubbard, kirill.shutemov, linux-mm, mhocko, mike.kravetz, mm-commits, shuah, torvalds, vbabka, viro, willy From: John Hubbard <jhubbard@nvidia.com> Subject: mm/gup: require FOLL_GET for get_user_pages_fast() Internal to mm/gup.c, require that get_user_pages_fast() and __get_user_pages_fast() identify themselves, by setting FOLL_GET. This is required in order to be able to make decisions based on "FOLL_PIN, or FOLL_GET, or both or neither are set", in upcoming patches. Link: http://lkml.kernel.org/r/20200211001536.1027652-6-jhubbard@nvidia.com Signed-off-by: John Hubbard <jhubbard@nvidia.com> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Reviewed-by: Jan Kara <jack@suse.cz> Cc: Ira Weiny <ira.weiny@intel.com> Cc: Jérôme Glisse <jglisse@redhat.com> Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Christoph Hellwig <hch@infradead.org> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Dave Chinner <david@fromorbit.com> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/gup.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) --- a/mm/gup.c~mm-gup-require-foll_get-for-get_user_pages_fast +++ a/mm/gup.c @@ -2390,6 +2390,14 @@ int __get_user_pages_fast(unsigned long unsigned long len, end; unsigned long flags; int nr = 0; + /* + * Internally (within mm/gup.c), gup fast variants must set FOLL_GET, + * because gup fast is always a "pin with a +1 page refcount" request. + */ + unsigned int gup_flags = FOLL_GET; + + if (write) + gup_flags |= FOLL_WRITE; start = untagged_addr(start) & PAGE_MASK; len = (unsigned long) nr_pages << PAGE_SHIFT; @@ -2415,7 +2423,7 @@ int __get_user_pages_fast(unsigned long if (IS_ENABLED(CONFIG_HAVE_FAST_GUP) && gup_fast_permitted(start, end)) { local_irq_save(flags); - gup_pgd_range(start, end, write ? FOLL_WRITE : 0, pages, &nr); + gup_pgd_range(start, end, gup_flags, pages, &nr); local_irq_restore(flags); } @@ -2454,7 +2462,7 @@ static int internal_get_user_pages_fast( int nr = 0, ret = 0; if (WARN_ON_ONCE(gup_flags & ~(FOLL_WRITE | FOLL_LONGTERM | - FOLL_FORCE | FOLL_PIN))) + FOLL_FORCE | FOLL_PIN | FOLL_GET))) return -EINVAL; start = untagged_addr(start) & PAGE_MASK; @@ -2521,6 +2529,13 @@ int get_user_pages_fast(unsigned long st if (WARN_ON_ONCE(gup_flags & FOLL_PIN)) return -EINVAL; + /* + * The caller may or may not have explicitly set FOLL_GET; either way is + * OK. However, internally (within mm/gup.c), gup fast variants must set + * FOLL_GET, because gup fast is always a "pin with a +1 page refcount" + * request. + */ + gup_flags |= FOLL_GET; return internal_get_user_pages_fast(start, nr_pages, gup_flags, pages); } EXPORT_SYMBOL_GPL(get_user_pages_fast); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 043/155] mm/gup: track FOLL_PIN pages 2020-04-02 4:01 incoming Andrew Morton ` (41 preceding siblings ...) 2020-04-02 4:05 ` [patch 042/155] mm/gup: require FOLL_GET for get_user_pages_fast() Andrew Morton @ 2020-04-02 4:05 ` Andrew Morton 2020-04-09 6:08 ` Tetsuo Handa 2020-04-02 4:05 ` [patch 044/155] mm/gup: page->hpage_pinned_refcount: exact pin counts for huge pages Andrew Morton ` (111 subsequent siblings) 154 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:05 UTC (permalink / raw) To: akpm, corbet, dan.j.williams, david, hch, imbrenda, ira.weiny, jack, jgg, jglisse, jhubbard, kirill.shutemov, linux-mm, mhocko, mike.kravetz, mm-commits, shuah, torvalds, vbabka, viro, willy From: John Hubbard <jhubbard@nvidia.com> Subject: mm/gup: track FOLL_PIN pages Add tracking of pages that were pinned via FOLL_PIN. This tracking is implemented via overloading of page->_refcount: pins are added by adding GUP_PIN_COUNTING_BIAS (1024) to the refcount. This provides a fuzzy indication of pinning, and it can have false positives (and that's OK). Please see the pre-existing Documentation/core-api/pin_user_pages.rst for details. As mentioned in pin_user_pages.rst, callers who effectively set FOLL_PIN (typically via pin_user_pages*()) are required to ultimately free such pages via unpin_user_page(). Please also note the limitation, discussed in pin_user_pages.rst under the "TODO: for 1GB and larger huge pages" section. (That limitation will be removed in a following patch.) The effect of a FOLL_PIN flag is similar to that of FOLL_GET, and may be thought of as "FOLL_GET for DIO and/or RDMA use". Pages that have been pinned via FOLL_PIN are identifiable via a new function call: bool page_maybe_dma_pinned(struct page *page); What to do in response to encountering such a page, is left to later patchsets. There is discussion about this in [1], [2], [3], and [4]. This also changes a BUG_ON(), to a WARN_ON(), in follow_page_mask(). [1] Some slow progress on get_user_pages() (Apr 2, 2019): https://lwn.net/Articles/784574/ [2] DMA and get_user_pages() (LPC: Dec 12, 2018): https://lwn.net/Articles/774411/ [3] The trouble with get_user_pages() (Apr 30, 2018): https://lwn.net/Articles/753027/ [4] LWN kernel index: get_user_pages(): https://lwn.net/Kernel/Index/#Memory_management-get_user_pages [jhubbard@nvidia.com: add kerneldoc] Link: http://lkml.kernel.org/r/20200307021157.235726-1-jhubbard@nvidia.com [imbrenda@linux.ibm.com: if pin fails, we need to unpin, a simple put_page will not be enough] Link: http://lkml.kernel.org/r/20200306132537.783769-2-imbrenda@linux.ibm.com [akpm@linux-foundation.org: fix put_compound_head defined but not used] Link: http://lkml.kernel.org/r/20200211001536.1027652-7-jhubbard@nvidia.com Signed-off-by: John Hubbard <jhubbard@nvidia.com> Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> Reviewed-by: Jan Kara <jack@suse.cz> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Suggested-by: Jan Kara <jack@suse.cz> Suggested-by: Jérôme Glisse <jglisse@redhat.com> Cc: Ira Weiny <ira.weiny@intel.com> Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Christoph Hellwig <hch@infradead.org> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Dave Chinner <david@fromorbit.com> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- Documentation/core-api/pin_user_pages.rst | 6 include/linux/mm.h | 84 ++++- mm/gup.c | 312 ++++++++++++++++---- mm/huge_memory.c | 29 + mm/hugetlb.c | 54 ++- 5 files changed, 380 insertions(+), 105 deletions(-) --- a/Documentation/core-api/pin_user_pages.rst~mm-gup-track-foll_pin-pages +++ a/Documentation/core-api/pin_user_pages.rst @@ -173,8 +173,8 @@ CASE 4: Pinning for struct page manipula ------------------------------------------------- Here, normal GUP calls are sufficient, so neither flag needs to be set. -page_dma_pinned(): the whole point of pinning -============================================= +page_maybe_dma_pinned(): the whole point of pinning +=================================================== The whole point of marking pages as "DMA-pinned" or "gup-pinned" is to be able to query, "is this page DMA-pinned?" That allows code such as page_mkclean() @@ -186,7 +186,7 @@ and debates (see the References at the e here: fill in the details once that's worked out. Meanwhile, it's safe to say that having this available: :: - static inline bool page_dma_pinned(struct page *page) + static inline bool page_maybe_dma_pinned(struct page *page) ...is a prerequisite to solving the long-running gup+DMA problem. --- a/include/linux/mm.h~mm-gup-track-foll_pin-pages +++ a/include/linux/mm.h @@ -1001,6 +1001,8 @@ static inline void get_page(struct page page_ref_inc(page); } +bool __must_check try_grab_page(struct page *page, unsigned int flags); + static inline __must_check bool try_get_page(struct page *page) { page = compound_head(page); @@ -1029,29 +1031,79 @@ static inline void put_page(struct page __put_page(page); } -/** - * unpin_user_page() - release a gup-pinned page - * @page: pointer to page to be released +/* + * GUP_PIN_COUNTING_BIAS, and the associated functions that use it, overload + * the page's refcount so that two separate items are tracked: the original page + * reference count, and also a new count of how many pin_user_pages() calls were + * made against the page. ("gup-pinned" is another term for the latter). + * + * With this scheme, pin_user_pages() becomes special: such pages are marked as + * distinct from normal pages. As such, the unpin_user_page() call (and its + * variants) must be used in order to release gup-pinned pages. + * + * Choice of value: + * + * By making GUP_PIN_COUNTING_BIAS a power of two, debugging of page reference + * counts with respect to pin_user_pages() and unpin_user_page() becomes + * simpler, due to the fact that adding an even power of two to the page + * refcount has the effect of using only the upper N bits, for the code that + * counts up using the bias value. This means that the lower bits are left for + * the exclusive use of the original code that increments and decrements by one + * (or at least, by much smaller values than the bias value). + * + * Of course, once the lower bits overflow into the upper bits (and this is + * OK, because subtraction recovers the original values), then visual inspection + * no longer suffices to directly view the separate counts. However, for normal + * applications that don't have huge page reference counts, this won't be an + * issue. * - * Pages that were pinned via pin_user_pages*() must be released via either - * unpin_user_page(), or one of the unpin_user_pages*() routines. This is so - * that eventually such pages can be separately tracked and uniquely handled. In - * particular, interactions with RDMA and filesystems need special handling. - * - * unpin_user_page() and put_page() are not interchangeable, despite this early - * implementation that makes them look the same. unpin_user_page() calls must - * be perfectly matched up with pin*() calls. + * Locking: the lockless algorithm described in page_cache_get_speculative() + * and page_cache_gup_pin_speculative() provides safe operation for + * get_user_pages and page_mkclean and other calls that race to set up page + * table entries. */ -static inline void unpin_user_page(struct page *page) -{ - put_page(page); -} +#define GUP_PIN_COUNTING_BIAS (1U << 10) +void unpin_user_page(struct page *page); void unpin_user_pages_dirty_lock(struct page **pages, unsigned long npages, bool make_dirty); - void unpin_user_pages(struct page **pages, unsigned long npages); +/** + * page_maybe_dma_pinned() - report if a page is pinned for DMA. + * + * This function checks if a page has been pinned via a call to + * pin_user_pages*(). + * + * For non-huge pages, the return value is partially fuzzy: false is not fuzzy, + * because it means "definitely not pinned for DMA", but true means "probably + * pinned for DMA, but possibly a false positive due to having at least + * GUP_PIN_COUNTING_BIAS worth of normal page references". + * + * False positives are OK, because: a) it's unlikely for a page to get that many + * refcounts, and b) all the callers of this routine are expected to be able to + * deal gracefully with a false positive. + * + * For more information, please see Documentation/vm/pin_user_pages.rst. + * + * @page: pointer to page to be queried. + * @Return: True, if it is likely that the page has been "dma-pinned". + * False, if the page is definitely not dma-pinned. + */ +static inline bool page_maybe_dma_pinned(struct page *page) +{ + /* + * page_ref_count() is signed. If that refcount overflows, then + * page_ref_count() returns a negative value, and callers will avoid + * further incrementing the refcount. + * + * Here, for that overflow case, use the signed bit to count a little + * bit higher via unsigned math, and thus still get an accurate result. + */ + return ((unsigned int)page_ref_count(compound_head(page))) >= + GUP_PIN_COUNTING_BIAS; +} + #if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP) #define SECTION_IN_PAGE_FLAGS #endif --- a/mm/gup.c~mm-gup-track-foll_pin-pages +++ a/mm/gup.c @@ -44,6 +44,135 @@ static inline struct page *try_get_compo return head; } +/* + * try_grab_compound_head() - attempt to elevate a page's refcount, by a + * flags-dependent amount. + * + * "grab" names in this file mean, "look at flags to decide whether to use + * FOLL_PIN or FOLL_GET behavior, when incrementing the page's refcount. + * + * Either FOLL_PIN or FOLL_GET (or neither) must be set, but not both at the + * same time. (That's true throughout the get_user_pages*() and + * pin_user_pages*() APIs.) Cases: + * + * FOLL_GET: page's refcount will be incremented by 1. + * FOLL_PIN: page's refcount will be incremented by GUP_PIN_COUNTING_BIAS. + * + * Return: head page (with refcount appropriately incremented) for success, or + * NULL upon failure. If neither FOLL_GET nor FOLL_PIN was set, that's + * considered failure, and furthermore, a likely bug in the caller, so a warning + * is also emitted. + */ +static __maybe_unused struct page *try_grab_compound_head(struct page *page, + int refs, + unsigned int flags) +{ + if (flags & FOLL_GET) + return try_get_compound_head(page, refs); + else if (flags & FOLL_PIN) { + refs *= GUP_PIN_COUNTING_BIAS; + return try_get_compound_head(page, refs); + } + + WARN_ON_ONCE(1); + return NULL; +} + +/** + * try_grab_page() - elevate a page's refcount by a flag-dependent amount + * + * This might not do anything at all, depending on the flags argument. + * + * "grab" names in this file mean, "look at flags to decide whether to use + * FOLL_PIN or FOLL_GET behavior, when incrementing the page's refcount. + * + * @page: pointer to page to be grabbed + * @flags: gup flags: these are the FOLL_* flag values. + * + * Either FOLL_PIN or FOLL_GET (or neither) may be set, but not both at the same + * time. Cases: + * + * FOLL_GET: page's refcount will be incremented by 1. + * FOLL_PIN: page's refcount will be incremented by GUP_PIN_COUNTING_BIAS. + * + * Return: true for success, or if no action was required (if neither FOLL_PIN + * nor FOLL_GET was set, nothing is done). False for failure: FOLL_GET or + * FOLL_PIN was set, but the page could not be grabbed. + */ +bool __must_check try_grab_page(struct page *page, unsigned int flags) +{ + WARN_ON_ONCE((flags & (FOLL_GET | FOLL_PIN)) == (FOLL_GET | FOLL_PIN)); + + if (flags & FOLL_GET) + return try_get_page(page); + else if (flags & FOLL_PIN) { + page = compound_head(page); + + if (WARN_ON_ONCE(page_ref_count(page) <= 0)) + return false; + + page_ref_add(page, GUP_PIN_COUNTING_BIAS); + } + + return true; +} + +#ifdef CONFIG_DEV_PAGEMAP_OPS +static bool __unpin_devmap_managed_user_page(struct page *page) +{ + int count; + + if (!page_is_devmap_managed(page)) + return false; + + count = page_ref_sub_return(page, GUP_PIN_COUNTING_BIAS); + + /* + * devmap page refcounts are 1-based, rather than 0-based: if + * refcount is 1, then the page is free and the refcount is + * stable because nobody holds a reference on the page. + */ + if (count == 1) + free_devmap_managed_page(page); + else if (!count) + __put_page(page); + + return true; +} +#else +static bool __unpin_devmap_managed_user_page(struct page *page) +{ + return false; +} +#endif /* CONFIG_DEV_PAGEMAP_OPS */ + +/** + * unpin_user_page() - release a dma-pinned page + * @page: pointer to page to be released + * + * Pages that were pinned via pin_user_pages*() must be released via either + * unpin_user_page(), or one of the unpin_user_pages*() routines. This is so + * that such pages can be separately tracked and uniquely handled. In + * particular, interactions with RDMA and filesystems need special handling. + */ +void unpin_user_page(struct page *page) +{ + page = compound_head(page); + + /* + * For devmap managed pages we need to catch refcount transition from + * GUP_PIN_COUNTING_BIAS to 1, when refcount reach one it means the + * page is free and we need to inform the device driver through + * callback. See include/linux/memremap.h and HMM for details. + */ + if (__unpin_devmap_managed_user_page(page)) + return; + + if (page_ref_sub_and_test(page, GUP_PIN_COUNTING_BIAS)) + __put_page(page); +} +EXPORT_SYMBOL(unpin_user_page); + /** * unpin_user_pages_dirty_lock() - release and optionally dirty gup-pinned pages * @pages: array of pages to be maybe marked dirty, and definitely released. @@ -230,10 +359,11 @@ retry: } page = vm_normal_page(vma, address, pte); - if (!page && pte_devmap(pte) && (flags & FOLL_GET)) { + if (!page && pte_devmap(pte) && (flags & (FOLL_GET | FOLL_PIN))) { /* - * Only return device mapping pages in the FOLL_GET case since - * they are only valid while holding the pgmap reference. + * Only return device mapping pages in the FOLL_GET or FOLL_PIN + * case since they are only valid while holding the pgmap + * reference. */ *pgmap = get_dev_pagemap(pte_pfn(pte), *pgmap); if (*pgmap) @@ -271,11 +401,10 @@ retry: goto retry; } - if (flags & FOLL_GET) { - if (unlikely(!try_get_page(page))) { - page = ERR_PTR(-ENOMEM); - goto out; - } + /* try_grab_page() does nothing unless FOLL_GET or FOLL_PIN is set. */ + if (unlikely(!try_grab_page(page, flags))) { + page = ERR_PTR(-ENOMEM); + goto out; } if (flags & FOLL_TOUCH) { if ((flags & FOLL_WRITE) && @@ -537,7 +666,7 @@ static struct page *follow_page_mask(str /* make this handle hugepd */ page = follow_huge_addr(mm, address, flags & FOLL_WRITE); if (!IS_ERR(page)) { - BUG_ON(flags & FOLL_GET); + WARN_ON_ONCE(flags & (FOLL_GET | FOLL_PIN)); return page; } @@ -1675,6 +1804,15 @@ long get_user_pages_remote(struct task_s { return 0; } + +static long __get_user_pages_remote(struct task_struct *tsk, + struct mm_struct *mm, + unsigned long start, unsigned long nr_pages, + unsigned int gup_flags, struct page **pages, + struct vm_area_struct **vmas, int *locked) +{ + return 0; +} #endif /* !CONFIG_MMU */ /* @@ -1814,7 +1952,24 @@ EXPORT_SYMBOL(get_user_pages_unlocked); * This code is based heavily on the PowerPC implementation by Nick Piggin. */ #ifdef CONFIG_HAVE_FAST_GUP + +static void put_compound_head(struct page *page, int refs, unsigned int flags) +{ + if (flags & FOLL_PIN) + refs *= GUP_PIN_COUNTING_BIAS; + + VM_BUG_ON_PAGE(page_ref_count(page) < refs, page); + /* + * Calling put_page() for each ref is unnecessarily slow. Only the last + * ref needs a put_page(). + */ + if (refs > 1) + page_ref_sub(page, refs - 1); + put_page(page); +} + #ifdef CONFIG_GUP_GET_PTE_LOW_HIGH + /* * WARNING: only to be used in the get_user_pages_fast() implementation. * @@ -1877,7 +2032,10 @@ static void __maybe_unused undo_dev_page struct page *page = pages[--(*nr)]; ClearPageReferenced(page); - put_page(page); + if (flags & FOLL_PIN) + unpin_user_page(page); + else + put_page(page); } } @@ -1919,12 +2077,12 @@ static int gup_pte_range(pmd_t pmd, unsi VM_BUG_ON(!pfn_valid(pte_pfn(pte))); page = pte_page(pte); - head = try_get_compound_head(page, 1); + head = try_grab_compound_head(page, 1, flags); if (!head) goto pte_unmap; if (unlikely(pte_val(pte) != pte_val(*ptep))) { - put_page(head); + put_compound_head(head, 1, flags); goto pte_unmap; } @@ -1980,7 +2138,10 @@ static int __gup_device_huge(unsigned lo } SetPageReferenced(page); pages[*nr] = page; - get_page(page); + if (unlikely(!try_grab_page(page, flags))) { + undo_dev_pagemap(nr, nr_start, flags, pages); + return 0; + } (*nr)++; pfn++; } while (addr += PAGE_SIZE, addr != end); @@ -2054,18 +2215,6 @@ static int record_subpages(struct page * return nr; } -static void put_compound_head(struct page *page, int refs, unsigned int flags) -{ - VM_BUG_ON_PAGE(page_ref_count(page) < refs, page); - /* - * Calling put_page() for each ref is unnecessarily slow. Only the last - * ref needs a put_page(). - */ - if (refs > 1) - page_ref_sub(page, refs - 1); - put_page(page); -} - #ifdef CONFIG_ARCH_HAS_HUGEPD static unsigned long hugepte_addr_end(unsigned long addr, unsigned long end, unsigned long sz) @@ -2099,7 +2248,7 @@ static int gup_hugepte(pte_t *ptep, unsi page = head + ((addr & (sz-1)) >> PAGE_SHIFT); refs = record_subpages(page, addr, end, pages + *nr); - head = try_get_compound_head(head, refs); + head = try_grab_compound_head(head, refs, flags); if (!head) return 0; @@ -2159,7 +2308,7 @@ static int gup_huge_pmd(pmd_t orig, pmd_ page = pmd_page(orig) + ((addr & ~PMD_MASK) >> PAGE_SHIFT); refs = record_subpages(page, addr, end, pages + *nr); - head = try_get_compound_head(pmd_page(orig), refs); + head = try_grab_compound_head(pmd_page(orig), refs, flags); if (!head) return 0; @@ -2193,7 +2342,7 @@ static int gup_huge_pud(pud_t orig, pud_ page = pud_page(orig) + ((addr & ~PUD_MASK) >> PAGE_SHIFT); refs = record_subpages(page, addr, end, pages + *nr); - head = try_get_compound_head(pud_page(orig), refs); + head = try_grab_compound_head(pud_page(orig), refs, flags); if (!head) return 0; @@ -2222,7 +2371,7 @@ static int gup_huge_pgd(pgd_t orig, pgd_ page = pgd_page(orig) + ((addr & ~PGDIR_MASK) >> PAGE_SHIFT); refs = record_subpages(page, addr, end, pages + *nr); - head = try_get_compound_head(pgd_page(orig), refs); + head = try_grab_compound_head(pgd_page(orig), refs, flags); if (!head) return 0; @@ -2505,11 +2654,11 @@ static int internal_get_user_pages_fast( /** * get_user_pages_fast() - pin user pages in memory - * @start: starting user address - * @nr_pages: number of pages from start to pin - * @gup_flags: flags modifying pin behaviour - * @pages: array that receives pointers to the pages pinned. - * Should be at least nr_pages long. + * @start: starting user address + * @nr_pages: number of pages from start to pin + * @gup_flags: flags modifying pin behaviour + * @pages: array that receives pointers to the pages pinned. + * Should be at least nr_pages long. * * Attempt to pin user pages in memory without taking mm->mmap_sem. * If not successful, it will fall back to taking the lock and @@ -2543,9 +2692,18 @@ EXPORT_SYMBOL_GPL(get_user_pages_fast); /** * pin_user_pages_fast() - pin user pages in memory without taking locks * - * For now, this is a placeholder function, until various call sites are - * converted to use the correct get_user_pages*() or pin_user_pages*() API. So, - * this is identical to get_user_pages_fast(). + * @start: starting user address + * @nr_pages: number of pages from start to pin + * @gup_flags: flags modifying pin behaviour + * @pages: array that receives pointers to the pages pinned. + * Should be at least nr_pages long. + * + * Nearly the same as get_user_pages_fast(), except that FOLL_PIN is set. See + * get_user_pages_fast() for documentation on the function arguments, because + * the arguments here are identical. + * + * FOLL_PIN means that the pages must be released via unpin_user_page(). Please + * see Documentation/vm/pin_user_pages.rst for further details. * * This is intended for Case 1 (DIO) in Documentation/vm/pin_user_pages.rst. It * is NOT intended for Case 2 (RDMA: long-term pins). @@ -2553,21 +2711,39 @@ EXPORT_SYMBOL_GPL(get_user_pages_fast); int pin_user_pages_fast(unsigned long start, int nr_pages, unsigned int gup_flags, struct page **pages) { - /* - * This is a placeholder, until the pin functionality is activated. - * Until then, just behave like the corresponding get_user_pages*() - * routine. - */ - return get_user_pages_fast(start, nr_pages, gup_flags, pages); + /* FOLL_GET and FOLL_PIN are mutually exclusive. */ + if (WARN_ON_ONCE(gup_flags & FOLL_GET)) + return -EINVAL; + + gup_flags |= FOLL_PIN; + return internal_get_user_pages_fast(start, nr_pages, gup_flags, pages); } EXPORT_SYMBOL_GPL(pin_user_pages_fast); /** * pin_user_pages_remote() - pin pages of a remote process (task != current) * - * For now, this is a placeholder function, until various call sites are - * converted to use the correct get_user_pages*() or pin_user_pages*() API. So, - * this is identical to get_user_pages_remote(). + * @tsk: the task_struct to use for page fault accounting, or + * NULL if faults are not to be recorded. + * @mm: mm_struct of target mm + * @start: starting user address + * @nr_pages: number of pages from start to pin + * @gup_flags: flags modifying lookup behaviour + * @pages: array that receives pointers to the pages pinned. + * Should be at least nr_pages long. Or NULL, if caller + * only intends to ensure the pages are faulted in. + * @vmas: array of pointers to vmas corresponding to each page. + * Or NULL if the caller does not require them. + * @locked: pointer to lock flag indicating whether lock is held and + * subsequently whether VM_FAULT_RETRY functionality can be + * utilised. Lock must initially be held. + * + * Nearly the same as get_user_pages_remote(), except that FOLL_PIN is set. See + * get_user_pages_remote() for documentation on the function arguments, because + * the arguments here are identical. + * + * FOLL_PIN means that the pages must be released via unpin_user_page(). Please + * see Documentation/vm/pin_user_pages.rst for details. * * This is intended for Case 1 (DIO) in Documentation/vm/pin_user_pages.rst. It * is NOT intended for Case 2 (RDMA: long-term pins). @@ -2577,22 +2753,33 @@ long pin_user_pages_remote(struct task_s unsigned int gup_flags, struct page **pages, struct vm_area_struct **vmas, int *locked) { - /* - * This is a placeholder, until the pin functionality is activated. - * Until then, just behave like the corresponding get_user_pages*() - * routine. - */ - return get_user_pages_remote(tsk, mm, start, nr_pages, gup_flags, pages, - vmas, locked); + /* FOLL_GET and FOLL_PIN are mutually exclusive. */ + if (WARN_ON_ONCE(gup_flags & FOLL_GET)) + return -EINVAL; + + gup_flags |= FOLL_PIN; + return __get_user_pages_remote(tsk, mm, start, nr_pages, gup_flags, + pages, vmas, locked); } EXPORT_SYMBOL(pin_user_pages_remote); /** * pin_user_pages() - pin user pages in memory for use by other devices * - * For now, this is a placeholder function, until various call sites are - * converted to use the correct get_user_pages*() or pin_user_pages*() API. So, - * this is identical to get_user_pages(). + * @start: starting user address + * @nr_pages: number of pages from start to pin + * @gup_flags: flags modifying lookup behaviour + * @pages: array that receives pointers to the pages pinned. + * Should be at least nr_pages long. Or NULL, if caller + * only intends to ensure the pages are faulted in. + * @vmas: array of pointers to vmas corresponding to each page. + * Or NULL if the caller does not require them. + * + * Nearly the same as get_user_pages(), except that FOLL_TOUCH is not set, and + * FOLL_PIN is set. + * + * FOLL_PIN means that the pages must be released via unpin_user_page(). Please + * see Documentation/vm/pin_user_pages.rst for details. * * This is intended for Case 1 (DIO) in Documentation/vm/pin_user_pages.rst. It * is NOT intended for Case 2 (RDMA: long-term pins). @@ -2601,11 +2788,12 @@ long pin_user_pages(unsigned long start, unsigned int gup_flags, struct page **pages, struct vm_area_struct **vmas) { - /* - * This is a placeholder, until the pin functionality is activated. - * Until then, just behave like the corresponding get_user_pages*() - * routine. - */ - return get_user_pages(start, nr_pages, gup_flags, pages, vmas); + /* FOLL_GET and FOLL_PIN are mutually exclusive. */ + if (WARN_ON_ONCE(gup_flags & FOLL_GET)) + return -EINVAL; + + gup_flags |= FOLL_PIN; + return __gup_longterm_locked(current, current->mm, start, nr_pages, + pages, vmas, gup_flags); } EXPORT_SYMBOL(pin_user_pages); --- a/mm/huge_memory.c~mm-gup-track-foll_pin-pages +++ a/mm/huge_memory.c @@ -958,6 +958,11 @@ struct page *follow_devmap_pmd(struct vm */ WARN_ONCE(flags & FOLL_COW, "mm: In follow_devmap_pmd with FOLL_COW set"); + /* FOLL_GET and FOLL_PIN are mutually exclusive. */ + if (WARN_ON_ONCE((flags & (FOLL_PIN | FOLL_GET)) == + (FOLL_PIN | FOLL_GET))) + return NULL; + if (flags & FOLL_WRITE && !pmd_write(*pmd)) return NULL; @@ -973,7 +978,7 @@ struct page *follow_devmap_pmd(struct vm * device mapped pages can only be returned if the * caller will manage the page reference count. */ - if (!(flags & FOLL_GET)) + if (!(flags & (FOLL_GET | FOLL_PIN))) return ERR_PTR(-EEXIST); pfn += (addr & ~PMD_MASK) >> PAGE_SHIFT; @@ -981,7 +986,8 @@ struct page *follow_devmap_pmd(struct vm if (!*pgmap) return ERR_PTR(-EFAULT); page = pfn_to_page(pfn); - get_page(page); + if (!try_grab_page(page, flags)) + page = ERR_PTR(-ENOMEM); return page; } @@ -1101,6 +1107,11 @@ struct page *follow_devmap_pud(struct vm if (flags & FOLL_WRITE && !pud_write(*pud)) return NULL; + /* FOLL_GET and FOLL_PIN are mutually exclusive. */ + if (WARN_ON_ONCE((flags & (FOLL_PIN | FOLL_GET)) == + (FOLL_PIN | FOLL_GET))) + return NULL; + if (pud_present(*pud) && pud_devmap(*pud)) /* pass */; else @@ -1112,8 +1123,10 @@ struct page *follow_devmap_pud(struct vm /* * device mapped pages can only be returned if the * caller will manage the page reference count. + * + * At least one of FOLL_GET | FOLL_PIN must be set, so assert that here: */ - if (!(flags & FOLL_GET)) + if (!(flags & (FOLL_GET | FOLL_PIN))) return ERR_PTR(-EEXIST); pfn += (addr & ~PUD_MASK) >> PAGE_SHIFT; @@ -1121,7 +1134,8 @@ struct page *follow_devmap_pud(struct vm if (!*pgmap) return ERR_PTR(-EFAULT); page = pfn_to_page(pfn); - get_page(page); + if (!try_grab_page(page, flags)) + page = ERR_PTR(-ENOMEM); return page; } @@ -1497,8 +1511,13 @@ struct page *follow_trans_huge_pmd(struc page = pmd_page(*pmd); VM_BUG_ON_PAGE(!PageHead(page) && !is_zone_device_page(page), page); + + if (!try_grab_page(page, flags)) + return ERR_PTR(-ENOMEM); + if (flags & FOLL_TOUCH) touch_pmd(vma, addr, pmd, flags); + if ((flags & FOLL_MLOCK) && (vma->vm_flags & VM_LOCKED)) { /* * We don't mlock() pte-mapped THPs. This way we can avoid @@ -1535,8 +1554,6 @@ struct page *follow_trans_huge_pmd(struc skip_mlock: page += (addr & ~HPAGE_PMD_MASK) >> PAGE_SHIFT; VM_BUG_ON_PAGE(!PageCompound(page) && !is_zone_device_page(page), page); - if (flags & FOLL_GET) - get_page(page); out: return page; --- a/mm/hugetlb.c~mm-gup-track-foll_pin-pages +++ a/mm/hugetlb.c @@ -4376,19 +4376,6 @@ long follow_hugetlb_page(struct mm_struc page = pte_page(huge_ptep_get(pte)); /* - * Instead of doing 'try_get_page()' below in the same_page - * loop, just check the count once here. - */ - if (unlikely(page_count(page) <= 0)) { - if (pages) { - spin_unlock(ptl); - remainder = 0; - err = -ENOMEM; - break; - } - } - - /* * If subpage information not requested, update counters * and skip the same_page loop below. */ @@ -4405,7 +4392,22 @@ long follow_hugetlb_page(struct mm_struc same_page: if (pages) { pages[i] = mem_map_offset(page, pfn_offset); - get_page(pages[i]); + /* + * try_grab_page() should always succeed here, because: + * a) we hold the ptl lock, and b) we've just checked + * that the huge page is present in the page tables. If + * the huge page is present, then the tail pages must + * also be present. The ptl prevents the head page and + * tail pages from being rearranged in any way. So this + * page must be available at this point, unless the page + * refcount overflowed: + */ + if (WARN_ON_ONCE(!try_grab_page(pages[i], flags))) { + spin_unlock(ptl); + remainder = 0; + err = -ENOMEM; + break; + } } if (vmas) @@ -4965,6 +4967,12 @@ follow_huge_pmd(struct mm_struct *mm, un struct page *page = NULL; spinlock_t *ptl; pte_t pte; + + /* FOLL_GET and FOLL_PIN are mutually exclusive. */ + if (WARN_ON_ONCE((flags & (FOLL_PIN | FOLL_GET)) == + (FOLL_PIN | FOLL_GET))) + return NULL; + retry: ptl = pmd_lockptr(mm, pmd); spin_lock(ptl); @@ -4977,8 +4985,18 @@ retry: pte = huge_ptep_get((pte_t *)pmd); if (pte_present(pte)) { page = pmd_page(*pmd) + ((address & ~PMD_MASK) >> PAGE_SHIFT); - if (flags & FOLL_GET) - get_page(page); + /* + * try_grab_page() should always succeed here, because: a) we + * hold the pmd (ptl) lock, and b) we've just checked that the + * huge pmd (head) page is present in the page tables. The ptl + * prevents the head page and tail pages from being rearranged + * in any way. So this page must be available at this point, + * unless the page refcount overflowed: + */ + if (WARN_ON_ONCE(!try_grab_page(page, flags))) { + page = NULL; + goto out; + } } else { if (is_hugetlb_entry_migration(pte)) { spin_unlock(ptl); @@ -4999,7 +5017,7 @@ struct page * __weak follow_huge_pud(struct mm_struct *mm, unsigned long address, pud_t *pud, int flags) { - if (flags & FOLL_GET) + if (flags & (FOLL_GET | FOLL_PIN)) return NULL; return pte_page(*(pte_t *)pud) + ((address & ~PUD_MASK) >> PAGE_SHIFT); @@ -5008,7 +5026,7 @@ follow_huge_pud(struct mm_struct *mm, un struct page * __weak follow_huge_pgd(struct mm_struct *mm, unsigned long address, pgd_t *pgd, int flags) { - if (flags & FOLL_GET) + if (flags & (FOLL_GET | FOLL_PIN)) return NULL; return pte_page(*(pte_t *)pgd) + ((address & ~PGDIR_MASK) >> PAGE_SHIFT); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: [patch 043/155] mm/gup: track FOLL_PIN pages 2020-04-02 4:05 ` [patch 043/155] mm/gup: track FOLL_PIN pages Andrew Morton @ 2020-04-09 6:08 ` Tetsuo Handa 2020-04-09 6:38 ` John Hubbard 0 siblings, 1 reply; 370+ messages in thread From: Tetsuo Handa @ 2020-04-09 6:08 UTC (permalink / raw) To: imbrenda, jack, jglisse, jhubbard Cc: Andrew Morton, corbet, dan.j.williams, david, hch, ira.weiny, jgg, kirill.shutemov, linux-mm, mhocko, mike.kravetz, shuah, torvalds, vbabka, viro, willy Hello. I'm hitting WARN_ON() at try_get_page() from try_grab_page() due to page_ref_count(page) == -1021 (which is "3 - GUP_PIN_COUNTING_BIAS") if I use loadable kernel module version of TOMOYO security module. Since I don't see recent changes in security/tomoyo regarding get_user_pages_remote(), I'm wondering what is happening. [ 10.427414][ T1] ------------[ cut here ]------------ [ 10.427425][ T1] WARNING: CPU: 3 PID: 1 at ./include/linux/mm.h:1009 try_grab_page+0x77/0x80 [ 10.427426][ T1] Modules linked in: caitsith(O) akari(O) xfs libcrc32c crc32c_generic sd_mod ata_generic pata_acpi mptspi scsi_transport_spi vmwgfx mptscsih drm_kms_helper mptbase cfbfillrect syscopyarea cfbimgblt sysfillrect sysimgblt fb_sys_fops cfbcopyarea fb ahci fbdev libahci ttm ata_piix nvme drm drm_panel_orientation_quirks libata nvme_core t10_pi agpgart e1000 i2c_core scsi_mod serio_raw atkbd libps2 i8042 serio unix [ 10.427451][ T1] CPU: 3 PID: 1 Comm: akari-init Tainted: G O 5.6.0-05654-g3faa52c03f44 #984 [ 10.427452][ T1] Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 07/29/2019 [ 10.427454][ T1] RIP: 0010:try_grab_page+0x77/0x80 [ 10.427456][ T1] Code: 34 85 c0 7e 25 f0 ff 47 34 b8 01 00 00 00 5d c3 0f 0b eb b1 48 8d 78 ff eb c6 0f 0b 31 c0 5d 0f 1f 40 00 c3 48 8d 78 ff eb d4 <0f> 0b 31 c0 5d c3 0f 1f 00 55 48 89 e5 41 57 49 89 cf 41 56 49 89 [ 10.427457][ T1] RSP: 0018:ffffa859c0013ac0 EFLAGS: 00010286 [ 10.427459][ T1] RAX: 00000000fffffc03 RBX: ffffcb6208c71dc0 RCX: 8000000231c77067 [ 10.427460][ T1] RDX: 8000000231c77067 RSI: 0000000000002016 RDI: ffffcb6208c71dc0 [ 10.427461][ T1] RBP: ffffa859c0013ac0 R08: 0000000000000001 R09: 0000000000000000 [ 10.427462][ T1] R10: 0000000000000001 R11: ffff95d91c615340 R12: 0000000000002016 [ 10.427463][ T1] R13: ffff95d91c615328 R14: 0000000000000ff0 R15: ffff95d91e0c0ff0 [ 10.427465][ T1] FS: 00007fbfc3772740(0000) GS:ffff95d927a00000(0000) knlGS:0000000000000000 [ 10.427479][ T1] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 10.427483][ T1] CR2: 0000000000ac5190 CR3: 000000022090a002 CR4: 00000000003606e0 [ 10.427491][ T1] Call Trace: [ 10.427494][ T1] follow_page_pte+0x329/0x443 [ 10.427503][ T1] follow_p4d_mask+0x756/0x7c1 [ 10.427511][ T1] follow_page_mask+0x6a/0x70 [ 10.427516][ T1] __get_user_pages+0x110/0x880 [ 10.427518][ T1] ? ___slab_alloc.constprop.95+0x929/0x980 [ 10.427532][ T1] __get_user_pages_remote+0xce/0x230 [ 10.427540][ T1] get_user_pages_remote+0x27/0x40 [ 10.427545][ T1] ccs_dump_page+0x6a/0x140 [akari] [ 10.427552][ T1] ccs_start_execve+0x28c/0x490 [akari] [ 10.427555][ T1] ? ccs_start_execve+0x90/0x490 [akari] [ 10.427561][ T1] ? ccs_load_policy+0xee/0x150 [akari] [ 10.427568][ T1] ccs_bprm_check_security+0x4e/0x70 [akari] [ 10.427572][ T1] security_bprm_check+0x26/0x40 [ 10.427576][ T1] search_binary_handler+0x22/0x1c0 [ 10.427580][ T1] __do_execve_file.isra.41+0x723/0xac0 [ 10.427581][ T1] ? __do_execve_file.isra.41+0x665/0xac0 [ 10.427590][ T1] __x64_sys_execve+0x44/0x50 [ 10.427614][ T1] do_syscall_64+0x4a/0x1e0 [ 10.427618][ T1] entry_SYSCALL_64_after_hwframe+0x49/0xb3 [ 10.427649][ T1] RIP: 0033:0x7fbfc2e36c37 [ 10.427651][ T1] Code: ff ff 76 df 89 c6 f7 de 64 41 89 32 eb d5 89 c6 f7 de 64 41 89 32 eb db 66 2e 0f 1f 84 00 00 00 00 00 90 b8 3b 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 02 f3 c3 48 8b 15 08 12 30 00 f7 d8 64 89 02 [ 10.427652][ T1] RSP: 002b:00007fff25f9c0f8 EFLAGS: 00000202 ORIG_RAX: 000000000000003b [ 10.427654][ T1] RAX: ffffffffffffffda RBX: 0000000000ac64f0 RCX: 00007fbfc2e36c37 [ 10.427672][ T1] RDX: 0000000000ac6be0 RSI: 0000000000ac6ac0 RDI: 0000000000ac64f0 [ 10.427673][ T1] RBP: 0000000000000000 R08: 00007fff25f9c0e0 R09: 0000000000000000 [ 10.427674][ T1] R10: 00007fff25f9bb60 R11: 0000000000000202 R12: 0000000000ac6be0 [ 10.427675][ T1] R13: 0000000000ac6ac0 R14: 0000000000ac6be0 R15: 0000000000ac6820 [ 10.427701][ T1] irq event stamp: 10135190 [ 10.427704][ T1] hardirqs last enabled at (10135189): [<ffffffffb223092a>] __slab_alloc.constprop.94+0x48/0x5e [ 10.427706][ T1] hardirqs last disabled at (10135190): [<ffffffffb2001eb7>] trace_hardirqs_off_thunk+0x1a/0x1c [ 10.427707][ T1] softirqs last enabled at (10135114): [<ffffffffb2a0032b>] __do_softirq+0x32b/0x455 [ 10.427710][ T1] softirqs last disabled at (10135107): [<ffffffffb2072985>] irq_exit+0xa5/0xb0 [ 10.427711][ T1] ---[ end trace 984e9bd0ce5a1e09 ]--- +bool __must_check try_grab_page(struct page *page, unsigned int flags) +{ + WARN_ON_ONCE((flags & (FOLL_GET | FOLL_PIN)) == (FOLL_GET | FOLL_PIN)); + + if (flags & FOLL_GET) + return try_get_page(page); + else if (flags & FOLL_PIN) { + page = compound_head(page); + + if (WARN_ON_ONCE(page_ref_count(page) <= 0)) + return false; + + page_ref_add(page, GUP_PIN_COUNTING_BIAS); + } + + return true; +} Bisection says 3faa52c03f440d1b ("mm/gup: track FOLL_PIN pages") is the bad commit. $ git bisect log # bad: [3faa52c03f440d1b9ddef18c4f189f4790d52d7e] mm/gup: track FOLL_PIN pages # good: [7111951b8d4973bda27ff663f2cf18b663d15b48] Linux 5.6 # good: [d5226fa6dbae0569ee43ecfc08bdcd6770fc4755] Linux 5.5 # good: [219d54332a09e8d8741c1e1982f5eae56099de85] Linux 5.4 # good: [4d856f72c10ecb060868ed10ff1b1453943fc6c8] Linux 5.3 # good: [0ecfebd2b52404ae0c54a878c872bb93363ada36] Linux 5.2 # good: [e93c9c99a629c61837d5a7fc2120cd2b6c70dbdd] Linux 5.1 # good: [1c163f4c7b3f621efff9b28a47abb36f7378d783] Linux 5.0 # good: [86dfbed49f88fd87ce8a12d2314b1f93266da7a7] mm/gup: pass a flags arg to __gup_device_* functions # good: [83daf837884cc44c3cc0e4f8a096c5d1461cbcc2] mm/filemap.c: unexport find_get_entry # good: [cc7b8f6245f0042a232c7f6807dc130d87233164] mm/page-writeback.c: write_cache_pages(): deduplicate identical checks # good: [29d9f30d4ce6c7a38745a54a8cddface10013490] Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next # good: [4afdb733b1606c6cb86e7833f9335f4870cf7ddd] io-uring: drop completion when removing file git bisect start '3faa52c03f440d1b9ddef18c4f189f4790d52d7e' 'v5.6' 'v5.5' 'v5.4' 'v5.3' 'v5.2' 'v5.1' 'v5.0' '86dfbed49f88fd87ce8a12d2314b1f93266da7a7' '83daf837884cc44c3cc0e4f8a096c5d1461cbcc2' 'cc7b8f6245f0042a232c7f6807dc130d87233164' '29d9f30d4ce6c7a38745a54a8cddface10013490' '4afdb733b1606c6cb86e7833f9335f4870cf7ddd' # good: [3b78d8347d31a050bb4f378a5f42cf495d873796] mm/gup: pass gup flags to two more routines git bisect good 3b78d8347d31a050bb4f378a5f42cf495d873796 # good: [94202f126f698691f8865906ad6a68203e5dde8c] mm/gup: require FOLL_GET for get_user_pages_fast() git bisect good 94202f126f698691f8865906ad6a68203e5dde8c # first bad commit: [3faa52c03f440d1b9ddef18c4f189f4790d52d7e] mm/gup: track FOLL_PIN pages ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: [patch 043/155] mm/gup: track FOLL_PIN pages 2020-04-09 6:08 ` Tetsuo Handa @ 2020-04-09 6:38 ` John Hubbard 2020-04-09 7:20 ` Tetsuo Handa 0 siblings, 1 reply; 370+ messages in thread From: John Hubbard @ 2020-04-09 6:38 UTC (permalink / raw) To: Tetsuo Handa, imbrenda, jack, jglisse Cc: Andrew Morton, corbet, dan.j.williams, david, hch, ira.weiny, jgg, kirill.shutemov, linux-mm, mhocko, mike.kravetz, shuah, torvalds, vbabka, viro, willy On 4/8/20 11:08 PM, Tetsuo Handa wrote: > Hello. > > I'm hitting WARN_ON() at try_get_page() from try_grab_page() due to page_ref_count(page) == -1021 > (which is "3 - GUP_PIN_COUNTING_BIAS") if I use loadable kernel module version of TOMOYO security > module. Since I don't see recent changes in security/tomoyo regarding get_user_pages_remote(), > I'm wondering what is happening. Hi Tetsuo, Yes, commit 3faa52c03f440d1b ("mm/gup: track FOLL_PIN pages") is the one that turns everything on, so if any problems with the whole FOLL_PIN scheme are to be found, it's natural that git bisect would point to that commit. Thanks for all the details here. One of the first questions I normally have is: is anything in the system even using FOLL_PIN? And the way to answer that is to monitor the two new *foll_pin* entries in /proc/vmstat, approximately like this: $ cat /proc/vmstat |grep foll_pin nr_foll_pin_acquired 0 nr_foll_pin_released 0 If you could do that before, during and after (ideally...or whatever you can get) the problem, I'd love to see that data. Also, if you happen to know if anything is calling pin_user_page*() and/or unpin_user_page*(), that is extra credit. :) I don't see anything here that jumps out at me, yet. The call stack below is as expected, and the WARN often picks up problems that happened in some other calling path (something else leaked a FOLL_PIN page for example, etc). quick question below: > > [ 10.427414][ T1] ------------[ cut here ]------------ > [ 10.427425][ T1] WARNING: CPU: 3 PID: 1 at ./include/linux/mm.h:1009 try_grab_page+0x77/0x80 > [ 10.427426][ T1] Modules linked in: caitsith(O) akari(O) xfs libcrc32c crc32c_generic sd_mod ata_generic pata_acpi mptspi scsi_transport_spi vmwgfx mptscsih drm_kms_helper mptbase cfbfillrect syscopyarea cfbimgblt sysfillrect sysimgblt fb_sys_fops cfbcopyarea fb ahci fbdev libahci ttm ata_piix nvme drm drm_panel_orientation_quirks libata nvme_core t10_pi agpgart e1000 i2c_core scsi_mod serio_raw atkbd libps2 i8042 serio unix > [ 10.427451][ T1] CPU: 3 PID: 1 Comm: akari-init Tainted: G O 5.6.0-05654-g3faa52c03f44 #984 > [ 10.427452][ T1] Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 07/29/2019 > [ 10.427454][ T1] RIP: 0010:try_grab_page+0x77/0x80 > [ 10.427456][ T1] Code: 34 85 c0 7e 25 f0 ff 47 34 b8 01 00 00 00 5d c3 0f 0b eb b1 48 8d 78 ff eb c6 0f 0b 31 c0 5d 0f 1f 40 00 c3 48 8d 78 ff eb d4 <0f> 0b 31 c0 5d c3 0f 1f 00 55 48 89 e5 41 57 49 89 cf 41 56 49 89 > [ 10.427457][ T1] RSP: 0018:ffffa859c0013ac0 EFLAGS: 00010286 > [ 10.427459][ T1] RAX: 00000000fffffc03 RBX: ffffcb6208c71dc0 RCX: 8000000231c77067 > [ 10.427460][ T1] RDX: 8000000231c77067 RSI: 0000000000002016 RDI: ffffcb6208c71dc0 > [ 10.427461][ T1] RBP: ffffa859c0013ac0 R08: 0000000000000001 R09: 0000000000000000 > [ 10.427462][ T1] R10: 0000000000000001 R11: ffff95d91c615340 R12: 0000000000002016 > [ 10.427463][ T1] R13: ffff95d91c615328 R14: 0000000000000ff0 R15: ffff95d91e0c0ff0 > [ 10.427465][ T1] FS: 00007fbfc3772740(0000) GS:ffff95d927a00000(0000) knlGS:0000000000000000 > [ 10.427479][ T1] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > [ 10.427483][ T1] CR2: 0000000000ac5190 CR3: 000000022090a002 CR4: 00000000003606e0 > [ 10.427491][ T1] Call Trace: > [ 10.427494][ T1] follow_page_pte+0x329/0x443 > [ 10.427503][ T1] follow_p4d_mask+0x756/0x7c1 > [ 10.427511][ T1] follow_page_mask+0x6a/0x70 > [ 10.427516][ T1] __get_user_pages+0x110/0x880 > [ 10.427518][ T1] ? ___slab_alloc.constprop.95+0x929/0x980 > [ 10.427532][ T1] __get_user_pages_remote+0xce/0x230 > [ 10.427540][ T1] get_user_pages_remote+0x27/0x40 > [ 10.427545][ T1] ccs_dump_page+0x6a/0x140 [akari] > [ 10.427552][ T1] ccs_start_execve+0x28c/0x490 [akari] > [ 10.427555][ T1] ? ccs_start_execve+0x90/0x490 [akari] > [ 10.427561][ T1] ? ccs_load_policy+0xee/0x150 [akari] > [ 10.427568][ T1] ccs_bprm_check_security+0x4e/0x70 [akari] ...say, I can't find the ccs_*() routines in my tree, can you point me to them? Probably not important but I'm curious now. thanks, -- John Hubbard NVIDIA > [ 10.427572][ T1] security_bprm_check+0x26/0x40 > [ 10.427576][ T1] search_binary_handler+0x22/0x1c0 > [ 10.427580][ T1] __do_execve_file.isra.41+0x723/0xac0 > [ 10.427581][ T1] ? __do_execve_file.isra.41+0x665/0xac0 > [ 10.427590][ T1] __x64_sys_execve+0x44/0x50 > [ 10.427614][ T1] do_syscall_64+0x4a/0x1e0 > [ 10.427618][ T1] entry_SYSCALL_64_after_hwframe+0x49/0xb3 > [ 10.427649][ T1] RIP: 0033:0x7fbfc2e36c37 > [ 10.427651][ T1] Code: ff ff 76 df 89 c6 f7 de 64 41 89 32 eb d5 89 c6 f7 de 64 41 89 32 eb db 66 2e 0f 1f 84 00 00 00 00 00 90 b8 3b 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 02 f3 c3 48 8b 15 08 12 30 00 f7 d8 64 89 02 > [ 10.427652][ T1] RSP: 002b:00007fff25f9c0f8 EFLAGS: 00000202 ORIG_RAX: 000000000000003b > [ 10.427654][ T1] RAX: ffffffffffffffda RBX: 0000000000ac64f0 RCX: 00007fbfc2e36c37 > [ 10.427672][ T1] RDX: 0000000000ac6be0 RSI: 0000000000ac6ac0 RDI: 0000000000ac64f0 > [ 10.427673][ T1] RBP: 0000000000000000 R08: 00007fff25f9c0e0 R09: 0000000000000000 > [ 10.427674][ T1] R10: 00007fff25f9bb60 R11: 0000000000000202 R12: 0000000000ac6be0 > [ 10.427675][ T1] R13: 0000000000ac6ac0 R14: 0000000000ac6be0 R15: 0000000000ac6820 > [ 10.427701][ T1] irq event stamp: 10135190 > [ 10.427704][ T1] hardirqs last enabled at (10135189): [<ffffffffb223092a>] __slab_alloc.constprop.94+0x48/0x5e > [ 10.427706][ T1] hardirqs last disabled at (10135190): [<ffffffffb2001eb7>] trace_hardirqs_off_thunk+0x1a/0x1c > [ 10.427707][ T1] softirqs last enabled at (10135114): [<ffffffffb2a0032b>] __do_softirq+0x32b/0x455 > [ 10.427710][ T1] softirqs last disabled at (10135107): [<ffffffffb2072985>] irq_exit+0xa5/0xb0 > [ 10.427711][ T1] ---[ end trace 984e9bd0ce5a1e09 ]--- > > +bool __must_check try_grab_page(struct page *page, unsigned int flags) > +{ > + WARN_ON_ONCE((flags & (FOLL_GET | FOLL_PIN)) == (FOLL_GET | FOLL_PIN)); > + > + if (flags & FOLL_GET) > + return try_get_page(page); > + else if (flags & FOLL_PIN) { > + page = compound_head(page); > + > + if (WARN_ON_ONCE(page_ref_count(page) <= 0)) > + return false; > + > + page_ref_add(page, GUP_PIN_COUNTING_BIAS); > + } > + > + return true; > +} > > Bisection says 3faa52c03f440d1b ("mm/gup: track FOLL_PIN pages") is the bad commit. > > $ git bisect log > # bad: [3faa52c03f440d1b9ddef18c4f189f4790d52d7e] mm/gup: track FOLL_PIN pages > # good: [7111951b8d4973bda27ff663f2cf18b663d15b48] Linux 5.6 > # good: [d5226fa6dbae0569ee43ecfc08bdcd6770fc4755] Linux 5.5 > # good: [219d54332a09e8d8741c1e1982f5eae56099de85] Linux 5.4 > # good: [4d856f72c10ecb060868ed10ff1b1453943fc6c8] Linux 5.3 > # good: [0ecfebd2b52404ae0c54a878c872bb93363ada36] Linux 5.2 > # good: [e93c9c99a629c61837d5a7fc2120cd2b6c70dbdd] Linux 5.1 > # good: [1c163f4c7b3f621efff9b28a47abb36f7378d783] Linux 5.0 > # good: [86dfbed49f88fd87ce8a12d2314b1f93266da7a7] mm/gup: pass a flags arg to __gup_device_* functions > # good: [83daf837884cc44c3cc0e4f8a096c5d1461cbcc2] mm/filemap.c: unexport find_get_entry > # good: [cc7b8f6245f0042a232c7f6807dc130d87233164] mm/page-writeback.c: write_cache_pages(): deduplicate identical checks > # good: [29d9f30d4ce6c7a38745a54a8cddface10013490] Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next > # good: [4afdb733b1606c6cb86e7833f9335f4870cf7ddd] io-uring: drop completion when removing file > git bisect start '3faa52c03f440d1b9ddef18c4f189f4790d52d7e' 'v5.6' 'v5.5' 'v5.4' 'v5.3' 'v5.2' 'v5.1' 'v5.0' '86dfbed49f88fd87ce8a12d2314b1f93266da7a7' '83daf837884cc44c3cc0e4f8a096c5d1461cbcc2' 'cc7b8f6245f0042a232c7f6807dc130d87233164' '29d9f30d4ce6c7a38745a54a8cddface10013490' '4afdb733b1606c6cb86e7833f9335f4870cf7ddd' > # good: [3b78d8347d31a050bb4f378a5f42cf495d873796] mm/gup: pass gup flags to two more routines > git bisect good 3b78d8347d31a050bb4f378a5f42cf495d873796 > # good: [94202f126f698691f8865906ad6a68203e5dde8c] mm/gup: require FOLL_GET for get_user_pages_fast() > git bisect good 94202f126f698691f8865906ad6a68203e5dde8c > # first bad commit: [3faa52c03f440d1b9ddef18c4f189f4790d52d7e] mm/gup: track FOLL_PIN pages > > ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: [patch 043/155] mm/gup: track FOLL_PIN pages 2020-04-09 6:38 ` John Hubbard @ 2020-04-09 7:20 ` Tetsuo Handa 2020-04-09 7:46 ` John Hubbard 0 siblings, 1 reply; 370+ messages in thread From: Tetsuo Handa @ 2020-04-09 7:20 UTC (permalink / raw) To: John Hubbard Cc: imbrenda, jack, jglisse, Andrew Morton, corbet, dan.j.williams, david, hch, ira.weiny, jgg, kirill.shutemov, linux-mm, mhocko, mike.kravetz, shuah, torvalds, vbabka, viro, willy Hello. On 2020/04/09 15:38, John Hubbard wrote: > Also, if you happen to know if anything is calling pin_user_page*() and/or unpin_user_page*(), that > is extra credit. :) Ah, I got it. I can see that only nr_foll_pin_released is increasing after I hit WARN_ON(), and indeed AKARI is calling unpin_user_page() when put_user() should be used. https://osdn.net/projects/akari/scm/svn/blobs/head/trunk/akari/permission.c line 1480 Sorry for the noise. Thank you. ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: [patch 043/155] mm/gup: track FOLL_PIN pages 2020-04-09 7:20 ` Tetsuo Handa @ 2020-04-09 7:46 ` John Hubbard 0 siblings, 0 replies; 370+ messages in thread From: John Hubbard @ 2020-04-09 7:46 UTC (permalink / raw) To: Tetsuo Handa Cc: imbrenda, jack, jglisse, Andrew Morton, corbet, dan.j.williams, david, hch, ira.weiny, jgg, kirill.shutemov, linux-mm, mhocko, mike.kravetz, shuah, torvalds, vbabka, viro, willy On 4/9/20 12:20 AM, Tetsuo Handa wrote: > Hello. > > On 2020/04/09 15:38, John Hubbard wrote: >> Also, if you happen to know if anything is calling pin_user_page*() and/or unpin_user_page*(), that >> is extra credit. :) > > Ah, I got it. I can see that only nr_foll_pin_released is increasing after I hit WARN_ON(), > and indeed AKARI is calling unpin_user_page() when put_user() should be used. > > https://osdn.net/projects/akari/scm/svn/blobs/head/trunk/akari/permission.c line 1480 > > Sorry for the noise. Thank you. > Thanks for the quick investigation, it's a relief to hear that. :) thanks, -- John Hubbard NVIDIA ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 044/155] mm/gup: page->hpage_pinned_refcount: exact pin counts for huge pages 2020-04-02 4:01 incoming Andrew Morton ` (42 preceding siblings ...) 2020-04-02 4:05 ` [patch 043/155] mm/gup: track FOLL_PIN pages Andrew Morton @ 2020-04-02 4:05 ` Andrew Morton 2020-04-02 4:05 ` [patch 045/155] mm/gup: /proc/vmstat: pin_user_pages (FOLL_PIN) reporting Andrew Morton ` (110 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:05 UTC (permalink / raw) To: akpm, corbet, dan.j.williams, david, hch, ira.weiny, jack, jgg, jglisse, jhubbard, kirill.shutemov, linux-mm, mhocko, mike.kravetz, mm-commits, shuah, torvalds, vbabka, viro, willy From: John Hubbard <jhubbard@nvidia.com> Subject: mm/gup: page->hpage_pinned_refcount: exact pin counts for huge pages For huge pages (and in fact, any compound page), the GUP_PIN_COUNTING_BIAS scheme tends to overflow too easily, each tail page increments the head page->_refcount by GUP_PIN_COUNTING_BIAS (1024). That limits the number of huge pages that can be pinned. This patch removes that limitation, by using an exact form of pin counting for compound pages of order > 1. The "order > 1" is required because this approach uses the 3rd struct page in the compound page, and order 1 compound pages only have two pages, so that won't work there. A new struct page field, hpage_pinned_refcount, has been added, replacing a padding field in the union (so no new space is used). This enhancement also has a useful side effect: huge pages and compound pages (of order > 1) do not suffer from the "potential false positives" problem that is discussed in the page_dma_pinned() comment block. That is because these compound pages have extra space for tracking things, so they get exact pin counts instead of overloading page->_refcount. Documentation/core-api/pin_user_pages.rst is updated accordingly. Link: http://lkml.kernel.org/r/20200211001536.1027652-8-jhubbard@nvidia.com Signed-off-by: John Hubbard <jhubbard@nvidia.com> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Reviewed-by: Jan Kara <jack@suse.cz> Suggested-by: Jan Kara <jack@suse.cz> Cc: Ira Weiny <ira.weiny@intel.com> Cc: Jérôme Glisse <jglisse@redhat.com> Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Christoph Hellwig <hch@infradead.org> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Dave Chinner <david@fromorbit.com> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- Documentation/core-api/pin_user_pages.rst | 40 ++++------ include/linux/mm.h | 26 ++++++ include/linux/mm_types.h | 7 + mm/gup.c | 78 +++++++++++++++++--- mm/hugetlb.c | 6 + mm/page_alloc.c | 2 mm/rmap.c | 6 + 7 files changed, 133 insertions(+), 32 deletions(-) --- a/Documentation/core-api/pin_user_pages.rst~mm-gup-page-hpage_pinned_refcount-exact-pin-counts-for-huge-pages +++ a/Documentation/core-api/pin_user_pages.rst @@ -52,8 +52,22 @@ Which flags are set by each wrapper For these pin_user_pages*() functions, FOLL_PIN is OR'd in with whatever gup flags the caller provides. The caller is required to pass in a non-null struct -pages* array, and the function then pin pages by incrementing each by a special -value. For now, that value is +1, just like get_user_pages*().:: +pages* array, and the function then pins pages by incrementing each by a special +value: GUP_PIN_COUNTING_BIAS. + +For huge pages (and in fact, any compound page of more than 2 pages), the +GUP_PIN_COUNTING_BIAS scheme is not used. Instead, an exact form of pin counting +is achieved, by using the 3rd struct page in the compound page. A new struct +page field, hpage_pinned_refcount, has been added in order to support this. + +This approach for compound pages avoids the counting upper limit problems that +are discussed below. Those limitations would have been aggravated severely by +huge pages, because each tail page adds a refcount to the head page. And in +fact, testing revealed that, without a separate hpage_pinned_refcount field, +page overflows were seen in some huge page stress tests. + +This also means that huge pages and compound pages (of order > 1) do not suffer +from the false positives problem that is mentioned below.:: Function -------- @@ -99,27 +113,6 @@ pages: This also leads to limitations: there are only 31-10==21 bits available for a counter that increments 10 bits at a time. -TODO: for 1GB and larger huge pages, this is cutting it close. That's because -when pin_user_pages() follows such pages, it increments the head page by "1" -(where "1" used to mean "+1" for get_user_pages(), but now means "+1024" for -pin_user_pages()) for each tail page. So if you have a 1GB huge page: - -* There are 256K (18 bits) worth of 4 KB tail pages. -* There are 21 bits available to count up via GUP_PIN_COUNTING_BIAS (that is, - 10 bits at a time) -* There are 21 - 18 == 3 bits available to count. Except that there aren't, - because you need to allow for a few normal get_page() calls on the head page, - as well. Fortunately, the approach of using addition, rather than "hard" - bitfields, within page->_refcount, allows for sharing these bits gracefully. - But we're still looking at about 8 references. - -This, however, is a missing feature more than anything else, because it's easily -solved by addressing an obvious inefficiency in the original get_user_pages() -approach of retrieving pages: stop treating all the pages as if they were -PAGE_SIZE. Retrieve huge pages as huge pages. The callers need to be aware of -this, so some work is required. Once that's in place, this limitation mostly -disappears from view, because there will be ample refcounting range available. - * Callers must specifically request "dma-pinned tracking of pages". In other words, just calling get_user_pages() will not suffice; a new set of functions, pin_user_page() and related, must be used. @@ -228,5 +221,6 @@ References * `Some slow progress on get_user_pages() (Apr 2, 2019) <https://lwn.net/Articles/784574/>`_ * `DMA and get_user_pages() (LPC: Dec 12, 2018) <https://lwn.net/Articles/774411/>`_ * `The trouble with get_user_pages() (Apr 30, 2018) <https://lwn.net/Articles/753027/>`_ +* `LWN kernel index: get_user_pages() <https://lwn.net/Kernel/Index/#Memory_management-get_user_pages>`_ John Hubbard, October, 2019 --- a/include/linux/mm.h~mm-gup-page-hpage_pinned_refcount-exact-pin-counts-for-huge-pages +++ a/include/linux/mm.h @@ -770,6 +770,24 @@ static inline unsigned int compound_orde return page[1].compound_order; } +static inline bool hpage_pincount_available(struct page *page) +{ + /* + * Can the page->hpage_pinned_refcount field be used? That field is in + * the 3rd page of the compound page, so the smallest (2-page) compound + * pages cannot support it. + */ + page = compound_head(page); + return PageCompound(page) && compound_order(page) > 1; +} + +static inline int compound_pincount(struct page *page) +{ + VM_BUG_ON_PAGE(!hpage_pincount_available(page), page); + page = compound_head(page); + return atomic_read(compound_pincount_ptr(page)); +} + static inline void set_compound_order(struct page *page, unsigned int order) { page[1].compound_order = order; @@ -1084,6 +1102,11 @@ void unpin_user_pages(struct page **page * refcounts, and b) all the callers of this routine are expected to be able to * deal gracefully with a false positive. * + * For huge pages, the result will be exactly correct. That's because we have + * more tracking data available: the 3rd struct page in the compound page is + * used to track the pincount (instead using of the GUP_PIN_COUNTING_BIAS + * scheme). + * * For more information, please see Documentation/vm/pin_user_pages.rst. * * @page: pointer to page to be queried. @@ -1092,6 +1115,9 @@ void unpin_user_pages(struct page **page */ static inline bool page_maybe_dma_pinned(struct page *page) { + if (hpage_pincount_available(page)) + return compound_pincount(page) > 0; + /* * page_ref_count() is signed. If that refcount overflows, then * page_ref_count() returns a negative value, and callers will avoid --- a/include/linux/mm_types.h~mm-gup-page-hpage_pinned_refcount-exact-pin-counts-for-huge-pages +++ a/include/linux/mm_types.h @@ -137,7 +137,7 @@ struct page { }; struct { /* Second tail page of compound page */ unsigned long _compound_pad_1; /* compound_head */ - unsigned long _compound_pad_2; + atomic_t hpage_pinned_refcount; /* For both global and memcg */ struct list_head deferred_list; }; @@ -226,6 +226,11 @@ static inline atomic_t *compound_mapcoun return &page[1].compound_mapcount; } +static inline atomic_t *compound_pincount_ptr(struct page *page) +{ + return &page[2].hpage_pinned_refcount; +} + /* * Used for sizing the vmemmap region on some architectures */ --- a/mm/gup.c~mm-gup-page-hpage_pinned_refcount-exact-pin-counts-for-huge-pages +++ a/mm/gup.c @@ -29,6 +29,22 @@ struct follow_page_context { unsigned int page_mask; }; +static void hpage_pincount_add(struct page *page, int refs) +{ + VM_BUG_ON_PAGE(!hpage_pincount_available(page), page); + VM_BUG_ON_PAGE(page != compound_head(page), page); + + atomic_add(refs, compound_pincount_ptr(page)); +} + +static void hpage_pincount_sub(struct page *page, int refs) +{ + VM_BUG_ON_PAGE(!hpage_pincount_available(page), page); + VM_BUG_ON_PAGE(page != compound_head(page), page); + + atomic_sub(refs, compound_pincount_ptr(page)); +} + /* * Return the compound head page with ref appropriately incremented, * or NULL if that failed. @@ -70,8 +86,25 @@ static __maybe_unused struct page *try_g if (flags & FOLL_GET) return try_get_compound_head(page, refs); else if (flags & FOLL_PIN) { - refs *= GUP_PIN_COUNTING_BIAS; - return try_get_compound_head(page, refs); + /* + * When pinning a compound page of order > 1 (which is what + * hpage_pincount_available() checks for), use an exact count to + * track it, via hpage_pincount_add/_sub(). + * + * However, be sure to *also* increment the normal page refcount + * field at least once, so that the page really is pinned. + */ + if (!hpage_pincount_available(page)) + refs *= GUP_PIN_COUNTING_BIAS; + + page = try_get_compound_head(page, refs); + if (!page) + return NULL; + + if (hpage_pincount_available(page)) + hpage_pincount_add(page, refs); + + return page; } WARN_ON_ONCE(1); @@ -106,12 +139,25 @@ bool __must_check try_grab_page(struct p if (flags & FOLL_GET) return try_get_page(page); else if (flags & FOLL_PIN) { + int refs = 1; + page = compound_head(page); if (WARN_ON_ONCE(page_ref_count(page) <= 0)) return false; - page_ref_add(page, GUP_PIN_COUNTING_BIAS); + if (hpage_pincount_available(page)) + hpage_pincount_add(page, 1); + else + refs = GUP_PIN_COUNTING_BIAS; + + /* + * Similar to try_grab_compound_head(): even if using the + * hpage_pincount_add/_sub() routines, be sure to + * *also* increment the normal page refcount field at least + * once, so that the page really is pinned. + */ + page_ref_add(page, refs); } return true; @@ -120,12 +166,17 @@ bool __must_check try_grab_page(struct p #ifdef CONFIG_DEV_PAGEMAP_OPS static bool __unpin_devmap_managed_user_page(struct page *page) { - int count; + int count, refs = 1; if (!page_is_devmap_managed(page)) return false; - count = page_ref_sub_return(page, GUP_PIN_COUNTING_BIAS); + if (hpage_pincount_available(page)) + hpage_pincount_sub(page, 1); + else + refs = GUP_PIN_COUNTING_BIAS; + + count = page_ref_sub_return(page, refs); /* * devmap page refcounts are 1-based, rather than 0-based: if @@ -157,6 +208,8 @@ static bool __unpin_devmap_managed_user_ */ void unpin_user_page(struct page *page) { + int refs = 1; + page = compound_head(page); /* @@ -168,7 +221,12 @@ void unpin_user_page(struct page *page) if (__unpin_devmap_managed_user_page(page)) return; - if (page_ref_sub_and_test(page, GUP_PIN_COUNTING_BIAS)) + if (hpage_pincount_available(page)) + hpage_pincount_sub(page, 1); + else + refs = GUP_PIN_COUNTING_BIAS; + + if (page_ref_sub_and_test(page, refs)) __put_page(page); } EXPORT_SYMBOL(unpin_user_page); @@ -1955,8 +2013,12 @@ EXPORT_SYMBOL(get_user_pages_unlocked); static void put_compound_head(struct page *page, int refs, unsigned int flags) { - if (flags & FOLL_PIN) - refs *= GUP_PIN_COUNTING_BIAS; + if (flags & FOLL_PIN) { + if (hpage_pincount_available(page)) + hpage_pincount_sub(page, refs); + else + refs *= GUP_PIN_COUNTING_BIAS; + } VM_BUG_ON_PAGE(page_ref_count(page) < refs, page); /* --- a/mm/hugetlb.c~mm-gup-page-hpage_pinned_refcount-exact-pin-counts-for-huge-pages +++ a/mm/hugetlb.c @@ -1009,6 +1009,9 @@ static void destroy_compound_gigantic_pa struct page *p = page + 1; atomic_set(compound_mapcount_ptr(page), 0); + if (hpage_pincount_available(page)) + atomic_set(compound_pincount_ptr(page), 0); + for (i = 1; i < nr_pages; i++, p = mem_map_next(p, page, i)) { clear_compound_head(p); set_page_refcounted(p); @@ -1287,6 +1290,9 @@ static void prep_compound_gigantic_page( set_compound_head(p, page); } atomic_set(compound_mapcount_ptr(page), -1); + + if (hpage_pincount_available(page)) + atomic_set(compound_pincount_ptr(page), 0); } /* --- a/mm/page_alloc.c~mm-gup-page-hpage_pinned_refcount-exact-pin-counts-for-huge-pages +++ a/mm/page_alloc.c @@ -688,6 +688,8 @@ void prep_compound_page(struct page *pag set_compound_head(p, page); } atomic_set(compound_mapcount_ptr(page), -1); + if (hpage_pincount_available(page)) + atomic_set(compound_pincount_ptr(page), 0); } #ifdef CONFIG_DEBUG_PAGEALLOC --- a/mm/rmap.c~mm-gup-page-hpage_pinned_refcount-exact-pin-counts-for-huge-pages +++ a/mm/rmap.c @@ -1178,6 +1178,9 @@ void page_add_new_anon_rmap(struct page VM_BUG_ON_PAGE(!PageTransHuge(page), page); /* increment count (starts at -1) */ atomic_set(compound_mapcount_ptr(page), 0); + if (hpage_pincount_available(page)) + atomic_set(compound_pincount_ptr(page), 0); + __inc_node_page_state(page, NR_ANON_THPS); } else { /* Anon THP always mapped first with PMD */ @@ -1974,6 +1977,9 @@ void hugepage_add_new_anon_rmap(struct p { BUG_ON(address < vma->vm_start || address >= vma->vm_end); atomic_set(compound_mapcount_ptr(page), 0); + if (hpage_pincount_available(page)) + atomic_set(compound_pincount_ptr(page), 0); + __page_set_anon_rmap(page, vma, address, 1); } #endif /* CONFIG_HUGETLB_PAGE */ _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 045/155] mm/gup: /proc/vmstat: pin_user_pages (FOLL_PIN) reporting 2020-04-02 4:01 incoming Andrew Morton ` (43 preceding siblings ...) 2020-04-02 4:05 ` [patch 044/155] mm/gup: page->hpage_pinned_refcount: exact pin counts for huge pages Andrew Morton @ 2020-04-02 4:05 ` Andrew Morton 2020-04-02 4:05 ` [patch 046/155] mm/gup_benchmark: support pin_user_pages() and related calls Andrew Morton ` (109 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:05 UTC (permalink / raw) To: akpm, corbet, dan.j.williams, david, hch, ira.weiny, jack, jgg, jglisse, jhubbard, kirill.shutemov, linux-mm, mhocko, mike.kravetz, mm-commits, shuah, torvalds, vbabka, viro, willy From: John Hubbard <jhubbard@nvidia.com> Subject: mm/gup: /proc/vmstat: pin_user_pages (FOLL_PIN) reporting Now that pages are "DMA-pinned" via pin_user_page*(), and unpinned via unpin_user_pages*(), we need some visibility into whether all of this is working correctly. Add two new fields to /proc/vmstat: nr_foll_pin_acquired nr_foll_pin_released These are documented in Documentation/core-api/pin_user_pages.rst. They represent the number of pages (since boot time) that have been pinned ("nr_foll_pin_acquired") and unpinned ("nr_foll_pin_released"), via pin_user_pages*() and unpin_user_pages*(). In the absence of long-running DMA or RDMA operations that hold pages pinned, the above two fields will normally be equal to each other. Also: update Documentation/core-api/pin_user_pages.rst, to remove an earlier (now confirmed untrue) claim about a performance problem with /proc/vmstat. Also: update Documentation/core-api/pin_user_pages.rst to rename the new /proc/vmstat entries, to the names listed here. Link: http://lkml.kernel.org/r/20200211001536.1027652-9-jhubbard@nvidia.com Signed-off-by: John Hubbard <jhubbard@nvidia.com> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Reviewed-by: Jan Kara <jack@suse.cz> Cc: Ira Weiny <ira.weiny@intel.com> Cc: Jérôme Glisse <jglisse@redhat.com> Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Christoph Hellwig <hch@infradead.org> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Dave Chinner <david@fromorbit.com> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- Documentation/core-api/pin_user_pages.rst | 33 ++++++++++++++++---- include/linux/mmzone.h | 2 + mm/gup.c | 13 +++++++ mm/vmstat.c | 2 + 4 files changed, 45 insertions(+), 5 deletions(-) --- a/Documentation/core-api/pin_user_pages.rst~mm-gup-proc-vmstat-pin_user_pages-foll_pin-reporting +++ a/Documentation/core-api/pin_user_pages.rst @@ -208,12 +208,35 @@ has the following new calls to exercise You can monitor how many total dma-pinned pages have been acquired and released since the system was booted, via two new /proc/vmstat entries: :: - /proc/vmstat/nr_foll_pin_requested - /proc/vmstat/nr_foll_pin_requested + /proc/vmstat/nr_foll_pin_acquired + /proc/vmstat/nr_foll_pin_released -Those are both going to show zero, unless CONFIG_DEBUG_VM is set. This is -because there is a noticeable performance drop in unpin_user_page(), when they -are activated. +Under normal conditions, these two values will be equal unless there are any +long-term [R]DMA pins in place, or during pin/unpin transitions. + +* nr_foll_pin_acquired: This is the number of logical pins that have been + acquired since the system was powered on. For huge pages, the head page is + pinned once for each page (head page and each tail page) within the huge page. + This follows the same sort of behavior that get_user_pages() uses for huge + pages: the head page is refcounted once for each tail or head page in the huge + page, when get_user_pages() is applied to a huge page. + +* nr_foll_pin_released: The number of logical pins that have been released since + the system was powered on. Note that pages are released (unpinned) on a + PAGE_SIZE granularity, even if the original pin was applied to a huge page. + Becaused of the pin count behavior described above in "nr_foll_pin_acquired", + the accounting balances out, so that after doing this:: + + pin_user_pages(huge_page); + for (each page in huge_page) + unpin_user_page(page); + +...the following is expected:: + + nr_foll_pin_released == nr_foll_pin_acquired + +(...unless it was already out of balance due to a long-term RDMA pin being in +place.) References ========== --- a/include/linux/mmzone.h~mm-gup-proc-vmstat-pin_user_pages-foll_pin-reporting +++ a/include/linux/mmzone.h @@ -243,6 +243,8 @@ enum node_stat_item { NR_DIRTIED, /* page dirtyings since bootup */ NR_WRITTEN, /* page writings since bootup */ NR_KERNEL_MISC_RECLAIMABLE, /* reclaimable non-slab kernel pages */ + NR_FOLL_PIN_ACQUIRED, /* via: pin_user_page(), gup flag: FOLL_PIN */ + NR_FOLL_PIN_RELEASED, /* pages returned via unpin_user_page() */ NR_VM_NODE_STAT_ITEMS }; --- a/mm/gup.c~mm-gup-proc-vmstat-pin_user_pages-foll_pin-reporting +++ a/mm/gup.c @@ -86,6 +86,8 @@ static __maybe_unused struct page *try_g if (flags & FOLL_GET) return try_get_compound_head(page, refs); else if (flags & FOLL_PIN) { + int orig_refs = refs; + /* * When pinning a compound page of order > 1 (which is what * hpage_pincount_available() checks for), use an exact count to @@ -104,6 +106,9 @@ static __maybe_unused struct page *try_g if (hpage_pincount_available(page)) hpage_pincount_add(page, refs); + mod_node_page_state(page_pgdat(page), NR_FOLL_PIN_ACQUIRED, + orig_refs); + return page; } @@ -158,6 +163,8 @@ bool __must_check try_grab_page(struct p * once, so that the page really is pinned. */ page_ref_add(page, refs); + + mod_node_page_state(page_pgdat(page), NR_FOLL_PIN_ACQUIRED, 1); } return true; @@ -178,6 +185,7 @@ static bool __unpin_devmap_managed_user_ count = page_ref_sub_return(page, refs); + mod_node_page_state(page_pgdat(page), NR_FOLL_PIN_RELEASED, 1); /* * devmap page refcounts are 1-based, rather than 0-based: if * refcount is 1, then the page is free and the refcount is @@ -228,6 +236,8 @@ void unpin_user_page(struct page *page) if (page_ref_sub_and_test(page, refs)) __put_page(page); + + mod_node_page_state(page_pgdat(page), NR_FOLL_PIN_RELEASED, 1); } EXPORT_SYMBOL(unpin_user_page); @@ -2014,6 +2024,9 @@ EXPORT_SYMBOL(get_user_pages_unlocked); static void put_compound_head(struct page *page, int refs, unsigned int flags) { if (flags & FOLL_PIN) { + mod_node_page_state(page_pgdat(page), NR_FOLL_PIN_RELEASED, + refs); + if (hpage_pincount_available(page)) hpage_pincount_sub(page, refs); else --- a/mm/vmstat.c~mm-gup-proc-vmstat-pin_user_pages-foll_pin-reporting +++ a/mm/vmstat.c @@ -1168,6 +1168,8 @@ const char * const vmstat_text[] = { "nr_dirtied", "nr_written", "nr_kernel_misc_reclaimable", + "nr_foll_pin_acquired", + "nr_foll_pin_released", /* enum writeback_stat_item counters */ "nr_dirty_threshold", _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 046/155] mm/gup_benchmark: support pin_user_pages() and related calls 2020-04-02 4:01 incoming Andrew Morton ` (44 preceding siblings ...) 2020-04-02 4:05 ` [patch 045/155] mm/gup: /proc/vmstat: pin_user_pages (FOLL_PIN) reporting Andrew Morton @ 2020-04-02 4:05 ` Andrew Morton 2020-04-02 4:05 ` [patch 047/155] selftests/vm: run_vmtests: invoke gup_benchmark with basic FOLL_PIN coverage Andrew Morton ` (108 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:05 UTC (permalink / raw) To: akpm, corbet, dan.j.williams, david, hch, ira.weiny, jack, jgg, jglisse, jhubbard, kirill.shutemov, linux-mm, mhocko, mike.kravetz, mm-commits, shuah, torvalds, vbabka, viro, willy From: John Hubbard <jhubbard@nvidia.com> Subject: mm/gup_benchmark: support pin_user_pages() and related calls Up until now, gup_benchmark supported testing of the following kernel functions: * get_user_pages(): via the '-U' command line option * get_user_pages_longterm(): via the '-L' command line option * get_user_pages_fast(): as the default (no options required) Add test coverage for the new corresponding pin_*() functions: * pin_user_pages_fast(): via the '-a' command line option * pin_user_pages(): via the '-b' command line option Also, add an option for clarity: '-u' for what is now (still) the default choice: get_user_pages_fast(). Also, for the commands that set FOLL_PIN, verify that the pages really are dma-pinned, via the new is_dma_pinned() routine. Those commands are: PIN_FAST_BENCHMARK : calls pin_user_pages_fast() PIN_BENCHMARK : calls pin_user_pages() In between the calls to pin_*() and unpin_user_pages(), check each page: if page_maybe_dma_pinned() returns false, then WARN and return. Do this outside of the benchmark timestamps, so that it doesn't affect reported times. Link: http://lkml.kernel.org/r/20200211001536.1027652-10-jhubbard@nvidia.com Signed-off-by: John Hubbard <jhubbard@nvidia.com> Reviewed-by: Ira Weiny <ira.weiny@intel.com> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Jan Kara <jack@suse.cz> Cc: Jérôme Glisse <jglisse@redhat.com> Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Christoph Hellwig <hch@infradead.org> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Dave Chinner <david@fromorbit.com> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/gup_benchmark.c | 71 +++++++++++++++++-- tools/testing/selftests/vm/gup_benchmark.c | 15 +++- 2 files changed, 80 insertions(+), 6 deletions(-) --- a/mm/gup_benchmark.c~mm-gup_benchmark-support-pin_user_pages-and-related-calls +++ a/mm/gup_benchmark.c @@ -8,6 +8,8 @@ #define GUP_FAST_BENCHMARK _IOWR('g', 1, struct gup_benchmark) #define GUP_LONGTERM_BENCHMARK _IOWR('g', 2, struct gup_benchmark) #define GUP_BENCHMARK _IOWR('g', 3, struct gup_benchmark) +#define PIN_FAST_BENCHMARK _IOWR('g', 4, struct gup_benchmark) +#define PIN_BENCHMARK _IOWR('g', 5, struct gup_benchmark) struct gup_benchmark { __u64 get_delta_usec; @@ -19,6 +21,48 @@ struct gup_benchmark { __u64 expansion[10]; /* For future use */ }; +static void put_back_pages(unsigned int cmd, struct page **pages, + unsigned long nr_pages) +{ + unsigned long i; + + switch (cmd) { + case GUP_FAST_BENCHMARK: + case GUP_LONGTERM_BENCHMARK: + case GUP_BENCHMARK: + for (i = 0; i < nr_pages; i++) + put_page(pages[i]); + break; + + case PIN_FAST_BENCHMARK: + case PIN_BENCHMARK: + unpin_user_pages(pages, nr_pages); + break; + } +} + +static void verify_dma_pinned(unsigned int cmd, struct page **pages, + unsigned long nr_pages) +{ + unsigned long i; + struct page *page; + + switch (cmd) { + case PIN_FAST_BENCHMARK: + case PIN_BENCHMARK: + for (i = 0; i < nr_pages; i++) { + page = pages[i]; + if (WARN(!page_maybe_dma_pinned(page), + "pages[%lu] is NOT dma-pinned\n", i)) { + + dump_page(page, "gup_benchmark failure"); + break; + } + } + break; + } +} + static int __gup_benchmark_ioctl(unsigned int cmd, struct gup_benchmark *gup) { @@ -66,6 +110,14 @@ static int __gup_benchmark_ioctl(unsigne nr = get_user_pages(addr, nr, gup->flags, pages + i, NULL); break; + case PIN_FAST_BENCHMARK: + nr = pin_user_pages_fast(addr, nr, gup->flags, + pages + i); + break; + case PIN_BENCHMARK: + nr = pin_user_pages(addr, nr, gup->flags, pages + i, + NULL); + break; default: kvfree(pages); ret = -EINVAL; @@ -78,15 +130,22 @@ static int __gup_benchmark_ioctl(unsigne } end_time = ktime_get(); + /* Shifting the meaning of nr_pages: now it is actual number pinned: */ + nr_pages = i; + gup->get_delta_usec = ktime_us_delta(end_time, start_time); gup->size = addr - gup->addr; + /* + * Take an un-benchmark-timed moment to verify DMA pinned + * state: print a warning if any non-dma-pinned pages are found: + */ + verify_dma_pinned(cmd, pages, nr_pages); + start_time = ktime_get(); - for (i = 0; i < nr_pages; i++) { - if (!pages[i]) - break; - put_page(pages[i]); - } + + put_back_pages(cmd, pages, nr_pages); + end_time = ktime_get(); gup->put_delta_usec = ktime_us_delta(end_time, start_time); @@ -105,6 +164,8 @@ static long gup_benchmark_ioctl(struct f case GUP_FAST_BENCHMARK: case GUP_LONGTERM_BENCHMARK: case GUP_BENCHMARK: + case PIN_FAST_BENCHMARK: + case PIN_BENCHMARK: break; default: return -EINVAL; --- a/tools/testing/selftests/vm/gup_benchmark.c~mm-gup_benchmark-support-pin_user_pages-and-related-calls +++ a/tools/testing/selftests/vm/gup_benchmark.c @@ -18,6 +18,10 @@ #define GUP_LONGTERM_BENCHMARK _IOWR('g', 2, struct gup_benchmark) #define GUP_BENCHMARK _IOWR('g', 3, struct gup_benchmark) +/* Similar to above, but use FOLL_PIN instead of FOLL_GET. */ +#define PIN_FAST_BENCHMARK _IOWR('g', 4, struct gup_benchmark) +#define PIN_BENCHMARK _IOWR('g', 5, struct gup_benchmark) + /* Just the flags we need, copied from mm.h: */ #define FOLL_WRITE 0x01 /* check pte is writable */ @@ -40,8 +44,14 @@ int main(int argc, char **argv) char *file = "/dev/zero"; char *p; - while ((opt = getopt(argc, argv, "m:r:n:f:tTLUwSH")) != -1) { + while ((opt = getopt(argc, argv, "m:r:n:f:abtTLUuwSH")) != -1) { switch (opt) { + case 'a': + cmd = PIN_FAST_BENCHMARK; + break; + case 'b': + cmd = PIN_BENCHMARK; + break; case 'm': size = atoi(optarg) * MB; break; @@ -63,6 +73,9 @@ int main(int argc, char **argv) case 'U': cmd = GUP_BENCHMARK; break; + case 'u': + cmd = GUP_FAST_BENCHMARK; + break; case 'w': write = 1; break; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 047/155] selftests/vm: run_vmtests: invoke gup_benchmark with basic FOLL_PIN coverage 2020-04-02 4:01 incoming Andrew Morton ` (45 preceding siblings ...) 2020-04-02 4:05 ` [patch 046/155] mm/gup_benchmark: support pin_user_pages() and related calls Andrew Morton @ 2020-04-02 4:05 ` Andrew Morton 2020-04-02 4:05 ` [patch 048/155] mm: improve dump_page() for compound pages Andrew Morton ` (107 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:05 UTC (permalink / raw) To: akpm, corbet, dan.j.williams, david, hch, ira.weiny, jack, jgg, jglisse, jhubbard, kirill.shutemov, linux-mm, mhocko, mike.kravetz, mm-commits, shuah, torvalds, vbabka, viro, willy From: John Hubbard <jhubbard@nvidia.com> Subject: selftests/vm: run_vmtests: invoke gup_benchmark with basic FOLL_PIN coverage It's good to have basic unit test coverage of the new FOLL_PIN behavior. Fortunately, the gup_benchmark unit test is extremely fast (a few milliseconds), so adding it the the run_vmtests suite is going to cause no noticeable change in running time. So, add two new invocations to run_vmtests: 1) Run gup_benchmark with normal get_user_pages(). 2) Run gup_benchmark with pin_user_pages(). This is much like the first call, except that it sets FOLL_PIN. Running these two in quick succession also provide a visual comparison of the running times, which is convenient. The new invocations are fairly early in the run_vmtests script, because with test suites, it's usually preferable to put the shorter, faster tests first, all other things being equal. Link: http://lkml.kernel.org/r/20200211001536.1027652-11-jhubbard@nvidia.com Signed-off-by: John Hubbard <jhubbard@nvidia.com> Reviewed-by: Ira Weiny <ira.weiny@intel.com> Cc: Jan Kara <jack@suse.cz> Cc: Jérôme Glisse <jglisse@redhat.com> Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Christoph Hellwig <hch@infradead.org> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Dave Chinner <david@fromorbit.com> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- tools/testing/selftests/vm/run_vmtests | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) --- a/tools/testing/selftests/vm/run_vmtests~selftests-vm-run_vmtests-invoke-gup_benchmark-with-basic-foll_pin-coverage +++ a/tools/testing/selftests/vm/run_vmtests @@ -123,6 +123,28 @@ else echo "[PASS]" fi +echo "--------------------------------------------" +echo "running 'gup_benchmark -U' (normal/slow gup)" +echo "--------------------------------------------" +./gup_benchmark -U +if [ $? -ne 0 ]; then + echo "[FAIL]" + exitcode=1 +else + echo "[PASS]" +fi + +echo "------------------------------------------" +echo "running gup_benchmark -b (pin_user_pages)" +echo "------------------------------------------" +./gup_benchmark -b +if [ $? -ne 0 ]; then + echo "[FAIL]" + exitcode=1 +else + echo "[PASS]" +fi + echo "-------------------" echo "running userfaultfd" echo "-------------------" _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 048/155] mm: improve dump_page() for compound pages 2020-04-02 4:01 incoming Andrew Morton ` (46 preceding siblings ...) 2020-04-02 4:05 ` [patch 047/155] selftests/vm: run_vmtests: invoke gup_benchmark with basic FOLL_PIN coverage Andrew Morton @ 2020-04-02 4:05 ` Andrew Morton 2020-04-02 4:05 ` [patch 049/155] mm: dump_page(): additional diagnostics for huge pinned pages Andrew Morton ` (106 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:05 UTC (permalink / raw) To: akpm, corbet, dan.j.williams, david, hch, ira.weiny, jack, jgg, jglisse, jhubbard, kirill.shutemov, linux-mm, mhocko, mike.kravetz, mm-commits, shuah, torvalds, vbabka, viro, willy From: "Matthew Wilcox (Oracle)" <willy@infradead.org> Subject: mm: improve dump_page() for compound pages There was no protection against a corrupted struct page having an implausible compound_head(). Sanity check that a compound page has a head within reach of the maximum allocatable page (this will need to be adjusted if one of the plans to allocate 1GB pages comes to fruition). In addition, - Print the mapping pointer using %p insted of %px. The actual value of the pointer can be read out of the raw page dump and using %p gives a chance to correlate it with an earlier printk of the mapping pointer - Print the mapping pointer from the head page, not the tail page (the tail ->mapping pointer may be in use for other purposes, eg part of a list_head) - Print the order of the page for compound pages - Dump the raw head page as well as the raw page - Print the refcount from the head page, not the tail page Link: http://lkml.kernel.org/r/20200211001536.1027652-12-jhubbard@nvidia.com Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Signed-off-by: John Hubbard <jhubbard@nvidia.com> Co-developed-by: John Hubbard <jhubbard@nvidia.com> Suggested-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Ira Weiny <ira.weiny@intel.com> Cc: Jan Kara <jack@suse.cz> Cc: Jérôme Glisse <jglisse@redhat.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Christoph Hellwig <hch@infradead.org> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Dave Chinner <david@fromorbit.com> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/debug.c | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) --- a/mm/debug.c~mm-improve-dump_page-for-compound-pages +++ a/mm/debug.c @@ -44,8 +44,10 @@ const struct trace_print_flags vmaflag_n void __dump_page(struct page *page, const char *reason) { + struct page *head = compound_head(page); struct address_space *mapping; bool page_poisoned = PagePoisoned(page); + bool compound = PageCompound(page); /* * Accessing the pageblock without the zone lock. It could change to * "isolate" again in the meantime, but since we are just dumping the @@ -66,25 +68,32 @@ void __dump_page(struct page *page, cons goto hex_only; } - mapping = page_mapping(page); + if (page < head || (page >= head + MAX_ORDER_NR_PAGES)) { + /* Corrupt page, cannot call page_mapping */ + mapping = page->mapping; + head = page; + compound = false; + } else { + mapping = page_mapping(page); + } /* * Avoid VM_BUG_ON() in page_mapcount(). * page->_mapcount space in struct page is used by sl[aou]b pages to * encode own info. */ - mapcount = PageSlab(page) ? 0 : page_mapcount(page); + mapcount = PageSlab(head) ? 0 : page_mapcount(page); - if (PageCompound(page)) - pr_warn("page:%px refcount:%d mapcount:%d mapping:%px " - "index:%#lx compound_mapcount: %d\n", - page, page_ref_count(page), mapcount, - page->mapping, page_to_pgoff(page), - compound_mapcount(page)); + if (compound) + pr_warn("page:%px refcount:%d mapcount:%d mapping:%p " + "index:%#lx head:%px order:%u compound_mapcount:%d\n", + page, page_ref_count(head), mapcount, + mapping, page_to_pgoff(page), head, + compound_order(head), compound_mapcount(page)); else - pr_warn("page:%px refcount:%d mapcount:%d mapping:%px index:%#lx\n", + pr_warn("page:%px refcount:%d mapcount:%d mapping:%p index:%#lx\n", page, page_ref_count(page), mapcount, - page->mapping, page_to_pgoff(page)); + mapping, page_to_pgoff(page)); if (PageKsm(page)) type = "ksm "; else if (PageAnon(page)) @@ -106,6 +115,10 @@ hex_only: print_hex_dump(KERN_WARNING, "raw: ", DUMP_PREFIX_NONE, 32, sizeof(unsigned long), page, sizeof(struct page), false); + if (head != page) + print_hex_dump(KERN_WARNING, "head: ", DUMP_PREFIX_NONE, 32, + sizeof(unsigned long), head, + sizeof(struct page), false); if (reason) pr_warn("page dumped because: %s\n", reason); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 049/155] mm: dump_page(): additional diagnostics for huge pinned pages 2020-04-02 4:01 incoming Andrew Morton ` (47 preceding siblings ...) 2020-04-02 4:05 ` [patch 048/155] mm: improve dump_page() for compound pages Andrew Morton @ 2020-04-02 4:05 ` Andrew Morton 2020-04-02 4:05 ` [patch 050/155] mm/gup/writeback: add callbacks for inaccessible pages Andrew Morton ` (105 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:05 UTC (permalink / raw) To: akpm, corbet, dan.j.williams, david, hch, ira.weiny, jack, jgg, jglisse, jhubbard, kirill.shutemov, linux-mm, mhocko, mike.kravetz, mm-commits, shuah, torvalds, vbabka, viro, willy From: John Hubbard <jhubbard@nvidia.com> Subject: mm: dump_page(): additional diagnostics for huge pinned pages As part of pin_user_pages() and related API calls, pages are "dma-pinned". For the case of compound pages of order > 1, the per-page accounting of dma pins is accomplished via the 3rd struct page in the compound page. In order to support debugging of any pin_user_pages()- related problems, enhance dump_page() so as to report the pin count in that case. Documentation/core-api/pin_user_pages.rst is also updated accordingly. Link: http://lkml.kernel.org/r/20200211001536.1027652-13-jhubbard@nvidia.com Signed-off-by: John Hubbard <jhubbard@nvidia.com> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Jan Kara <jack@suse.cz> Cc: Matthew Wilcox <willy@infradead.org> Cc: Ira Weiny <ira.weiny@intel.com> Cc: Jérôme Glisse <jglisse@redhat.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Christoph Hellwig <hch@infradead.org> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Dave Chinner <david@fromorbit.com> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- Documentation/core-api/pin_user_pages.rst | 7 ++++++ mm/debug.c | 21 +++++++++++++++----- 2 files changed, 23 insertions(+), 5 deletions(-) --- a/Documentation/core-api/pin_user_pages.rst~mm-dump_page-additional-diagnostics-for-huge-pinned-pages +++ a/Documentation/core-api/pin_user_pages.rst @@ -238,6 +238,13 @@ long-term [R]DMA pins in place, or durin (...unless it was already out of balance due to a long-term RDMA pin being in place.) +Other diagnostics +================= + +dump_page() has been enhanced slightly, to handle these new counting fields, and +to better report on compound pages in general. Specifically, for compound pages +with order > 1, the exact (hpage_pinned_refcount) pincount is reported. + References ========== --- a/mm/debug.c~mm-dump_page-additional-diagnostics-for-huge-pinned-pages +++ a/mm/debug.c @@ -85,11 +85,22 @@ void __dump_page(struct page *page, cons mapcount = PageSlab(head) ? 0 : page_mapcount(page); if (compound) - pr_warn("page:%px refcount:%d mapcount:%d mapping:%p " - "index:%#lx head:%px order:%u compound_mapcount:%d\n", - page, page_ref_count(head), mapcount, - mapping, page_to_pgoff(page), head, - compound_order(head), compound_mapcount(page)); + if (hpage_pincount_available(page)) { + pr_warn("page:%px refcount:%d mapcount:%d mapping:%p " + "index:%#lx head:%px order:%u " + "compound_mapcount:%d compound_pincount:%d\n", + page, page_ref_count(head), mapcount, + mapping, page_to_pgoff(page), head, + compound_order(head), compound_mapcount(page), + compound_pincount(page)); + } else { + pr_warn("page:%px refcount:%d mapcount:%d mapping:%p " + "index:%#lx head:%px order:%u " + "compound_mapcount:%d\n", + page, page_ref_count(head), mapcount, + mapping, page_to_pgoff(page), head, + compound_order(head), compound_mapcount(page)); + } else pr_warn("page:%px refcount:%d mapcount:%d mapping:%p index:%#lx\n", page, page_ref_count(page), mapcount, _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 050/155] mm/gup/writeback: add callbacks for inaccessible pages 2020-04-02 4:01 incoming Andrew Morton ` (48 preceding siblings ...) 2020-04-02 4:05 ` [patch 049/155] mm: dump_page(): additional diagnostics for huge pinned pages Andrew Morton @ 2020-04-02 4:05 ` Andrew Morton 2020-04-02 4:06 ` [patch 051/155] mm/gup: rename nr as nr_pinned in get_user_pages_fast() Andrew Morton ` (104 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:05 UTC (permalink / raw) To: akpm, borntraeger, corbet, dan.j.williams, david, david, hch, imbrenda, ira.weiny, jack, jgg, jglisse, jhubbard, linux-mm, mhocko, mike.kravetz, mm-commits, shuah, torvalds, vbabka, viro, will, willy From: Claudio Imbrenda <imbrenda@linux.ibm.com> Subject: mm/gup/writeback: add callbacks for inaccessible pages With the introduction of protected KVM guests on s390 there is now a concept of inaccessible pages. These pages need to be made accessible before the host can access them. While cpu accesses will trigger a fault that can be resolved, I/O accesses will just fail. We need to add a callback into architecture code for places that will do I/O, namely when writeback is started or when a page reference is taken. This is not only to enable paging, file backing etc, it is also necessary to protect the host against a malicious user space. For example a bad QEMU could simply start direct I/O on such protected memory. We do not want userspace to be able to trigger I/O errors and thus the logic is "whenever somebody accesses that page (gup) or does I/O, make sure that this page can be accessed". When the guest tries to access that page we will wait in the page fault handler for writeback to have finished and for the page_ref to be the expected value. On s390x the function is not supposed to fail, so it is ok to use a WARN_ON on failure. If we ever need some more finegrained handling we can tackle this when we know the details. Link: http://lkml.kernel.org/r/20200306132537.783769-3-imbrenda@linux.ibm.com Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> Acked-by: Will Deacon <will@kernel.org> Reviewed-by: David Hildenbrand <david@redhat.com> Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com> Reviewed-by: John Hubbard <jhubbard@nvidia.com> Cc: Jan Kara <jack@suse.cz> Cc: Matthew Wilcox <willy@infradead.org> Cc: Ira Weiny <ira.weiny@intel.com> Cc: Jérôme Glisse <jglisse@redhat.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Christoph Hellwig <hch@infradead.org> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Dave Chinner <david@fromorbit.com> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/gfp.h | 6 ++++++ mm/gup.c | 30 +++++++++++++++++++++++++++--- mm/page-writeback.c | 9 ++++++++- 3 files changed, 41 insertions(+), 4 deletions(-) --- a/include/linux/gfp.h~mm-gup-writeback-add-callbacks-for-inaccessible-pages +++ a/include/linux/gfp.h @@ -485,6 +485,12 @@ static inline void arch_free_page(struct #ifndef HAVE_ARCH_ALLOC_PAGE static inline void arch_alloc_page(struct page *page, int order) { } #endif +#ifndef HAVE_ARCH_MAKE_PAGE_ACCESSIBLE +static inline int arch_make_page_accessible(struct page *page) +{ + return 0; +} +#endif struct page * __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, int preferred_nid, --- a/mm/gup.c~mm-gup-writeback-add-callbacks-for-inaccessible-pages +++ a/mm/gup.c @@ -390,6 +390,7 @@ static struct page *follow_page_pte(stru struct page *page; spinlock_t *ptl; pte_t *ptep, pte; + int ret; /* FOLL_GET and FOLL_PIN are mutually exclusive. */ if (WARN_ON_ONCE((flags & (FOLL_PIN | FOLL_GET)) == @@ -448,8 +449,6 @@ retry: if (is_zero_pfn(pte_pfn(pte))) { page = pte_page(pte); } else { - int ret; - ret = follow_pfn_pte(vma, address, ptep, flags); page = ERR_PTR(ret); goto out; @@ -457,7 +456,6 @@ retry: } if (flags & FOLL_SPLIT && PageTransCompound(page)) { - int ret; get_page(page); pte_unmap_unlock(ptep, ptl); lock_page(page); @@ -474,6 +472,19 @@ retry: page = ERR_PTR(-ENOMEM); goto out; } + /* + * We need to make the page accessible if and only if we are going + * to access its content (the FOLL_PIN case). Please see + * Documentation/core-api/pin_user_pages.rst for details. + */ + if (flags & FOLL_PIN) { + ret = arch_make_page_accessible(page); + if (ret) { + unpin_user_page(page); + page = ERR_PTR(ret); + goto out; + } + } if (flags & FOLL_TOUCH) { if ((flags & FOLL_WRITE) && !pte_dirty(pte) && !PageDirty(page)) @@ -2163,6 +2174,19 @@ static int gup_pte_range(pmd_t pmd, unsi VM_BUG_ON_PAGE(compound_head(page) != head, page); + /* + * We need to make the page accessible if and only if we are + * going to access its content (the FOLL_PIN case). Please + * see Documentation/core-api/pin_user_pages.rst for + * details. + */ + if (flags & FOLL_PIN) { + ret = arch_make_page_accessible(page); + if (ret) { + unpin_user_page(page); + goto pte_unmap; + } + } SetPageReferenced(page); pages[*nr] = page; (*nr)++; --- a/mm/page-writeback.c~mm-gup-writeback-add-callbacks-for-inaccessible-pages +++ a/mm/page-writeback.c @@ -2764,7 +2764,7 @@ int test_clear_page_writeback(struct pag int __test_set_page_writeback(struct page *page, bool keep_write) { struct address_space *mapping = page_mapping(page); - int ret; + int ret, access_ret; lock_page_memcg(page); if (mapping && mapping_use_writeback_tags(mapping)) { @@ -2807,6 +2807,13 @@ int __test_set_page_writeback(struct pag inc_zone_page_state(page, NR_ZONE_WRITE_PENDING); } unlock_page_memcg(page); + access_ret = arch_make_page_accessible(page); + /* + * If writeback has been triggered on a page that cannot be made + * accessible, it is too late to recover here. + */ + VM_BUG_ON_PAGE(access_ret != 0, page); + return ret; } _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 051/155] mm/gup: rename nr as nr_pinned in get_user_pages_fast() 2020-04-02 4:01 incoming Andrew Morton ` (49 preceding siblings ...) 2020-04-02 4:05 ` [patch 050/155] mm/gup/writeback: add callbacks for inaccessible pages Andrew Morton @ 2020-04-02 4:06 ` Andrew Morton 2020-04-02 4:06 ` [patch 052/155] mm/gup: fix omission of check on FOLL_LONGTERM in gup fast path Andrew Morton ` (103 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:06 UTC (permalink / raw) To: akpm, aneesh.kumar, dan.j.williams, hch, ira.weiny, jgg, jhubbard, kernelfans, linux-mm, mm-commits, rppt, shuah, torvalds, willy From: Pingfan Liu <kernelfans@gmail.com> Subject: mm/gup: rename nr as nr_pinned in get_user_pages_fast() To better reflect the held state of pages and make code self-explaining, rename nr as nr_pinned. Link: http://lkml.kernel.org/r/1584876733-17405-2-git-send-email-kernelfans@gmail.com Signed-off-by: Pingfan Liu <kernelfans@gmail.com> Reviewed-by: John Hubbard <jhubbard@nvidia.com> Cc: Ira Weiny <ira.weiny@intel.com> Cc: Mike Rapoport <rppt@linux.ibm.com> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Matthew Wilcox <willy@infradead.org> Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com> Cc: Christoph Hellwig <hch@infradead.org> Cc: Shuah Khan <shuah@kernel.org> Cc: Jason Gunthorpe <jgg@ziepe.ca> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/gup.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) --- a/mm/gup.c~mm-gup-rename-nr-as-nr_pinned-in-get_user_pages_fast +++ a/mm/gup.c @@ -2637,7 +2637,7 @@ int __get_user_pages_fast(unsigned long { unsigned long len, end; unsigned long flags; - int nr = 0; + int nr_pinned = 0; /* * Internally (within mm/gup.c), gup fast variants must set FOLL_GET, * because gup fast is always a "pin with a +1 page refcount" request. @@ -2671,11 +2671,11 @@ int __get_user_pages_fast(unsigned long if (IS_ENABLED(CONFIG_HAVE_FAST_GUP) && gup_fast_permitted(start, end)) { local_irq_save(flags); - gup_pgd_range(start, end, gup_flags, pages, &nr); + gup_pgd_range(start, end, gup_flags, pages, &nr_pinned); local_irq_restore(flags); } - return nr; + return nr_pinned; } EXPORT_SYMBOL_GPL(__get_user_pages_fast); @@ -2707,7 +2707,7 @@ static int internal_get_user_pages_fast( struct page **pages) { unsigned long addr, len, end; - int nr = 0, ret = 0; + int nr_pinned = 0, ret = 0; if (WARN_ON_ONCE(gup_flags & ~(FOLL_WRITE | FOLL_LONGTERM | FOLL_FORCE | FOLL_PIN | FOLL_GET))) @@ -2726,25 +2726,25 @@ static int internal_get_user_pages_fast( if (IS_ENABLED(CONFIG_HAVE_FAST_GUP) && gup_fast_permitted(start, end)) { local_irq_disable(); - gup_pgd_range(addr, end, gup_flags, pages, &nr); + gup_pgd_range(addr, end, gup_flags, pages, &nr_pinned); local_irq_enable(); - ret = nr; + ret = nr_pinned; } - if (nr < nr_pages) { + if (nr_pinned < nr_pages) { /* Try to get the remaining pages with get_user_pages */ - start += nr << PAGE_SHIFT; - pages += nr; + start += nr_pinned << PAGE_SHIFT; + pages += nr_pinned; - ret = __gup_longterm_unlocked(start, nr_pages - nr, + ret = __gup_longterm_unlocked(start, nr_pages - nr_pinned, gup_flags, pages); /* Have to be a bit careful with return values */ - if (nr > 0) { + if (nr_pinned > 0) { if (ret < 0) - ret = nr; + ret = nr_pinned; else - ret += nr; + ret += nr_pinned; } } _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 052/155] mm/gup: fix omission of check on FOLL_LONGTERM in gup fast path 2020-04-02 4:01 incoming Andrew Morton ` (50 preceding siblings ...) 2020-04-02 4:06 ` [patch 051/155] mm/gup: rename nr as nr_pinned in get_user_pages_fast() Andrew Morton @ 2020-04-02 4:06 ` Andrew Morton 2020-04-02 4:06 ` [patch 053/155] mm/swapfile.c: fix comments for swapcache_prepare Andrew Morton ` (102 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:06 UTC (permalink / raw) To: akpm, aneesh.kumar, dan.j.williams, hch, hch, ira.weiny, jgg, jgg, jhubbard, kernelfans, linux-mm, mm-commits, rppt, shuah, torvalds, willy From: Pingfan Liu <kernelfans@gmail.com> Subject: mm/gup: fix omission of check on FOLL_LONGTERM in gup fast path FOLL_LONGTERM is a special case of FOLL_PIN. It suggests a pin which is going to be given to hardware and can't move. It would truncate CMA permanently and should be excluded. In gup slow path, where __gup_longterm_locked->check_and_migrate_cma_pages() handles FOLL_LONGTERM, but in fast path, there lacks such a check, which means a possible leak of CMA page to longterm pinned. Place a check in try_grab_compound_head() in the fast path to fix the leak, and if FOLL_LONGTERM happens on CMA, it will fall back to slow path to migrate the page. Some note about the check: Huge page's subpages have the same migrate type due to either allocation from a free_list[] or alloc_contig_range() with param MIGRATE_MOVABLE. So it is enough to check on a single subpage by is_migrate_cma_page(subpage) Link: http://lkml.kernel.org/r/1584876733-17405-3-git-send-email-kernelfans@gmail.com Signed-off-by: Pingfan Liu <kernelfans@gmail.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Jason Gunthorpe <jgg@mellanox.com> Cc: Ira Weiny <ira.weiny@intel.com> Cc: Mike Rapoport <rppt@linux.ibm.com> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Matthew Wilcox <willy@infradead.org> Cc: John Hubbard <jhubbard@nvidia.com> Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com> Cc: Christoph Hellwig <hch@infradead.org> Cc: Shuah Khan <shuah@kernel.org> Cc: Jason Gunthorpe <jgg@ziepe.ca> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/gup.c | 8 ++++++++ 1 file changed, 8 insertions(+) --- a/mm/gup.c~mm-gup-fix-omission-of-check-on-foll_longterm-in-gup-fast-path +++ a/mm/gup.c @@ -89,6 +89,14 @@ static __maybe_unused struct page *try_g int orig_refs = refs; /* + * Can't do FOLL_LONGTERM + FOLL_PIN with CMA in the gup fast + * path, so fail and let the caller fall back to the slow path. + */ + if (unlikely(flags & FOLL_LONGTERM) && + is_migrate_cma_page(page)) + return NULL; + + /* * When pinning a compound page of order > 1 (which is what * hpage_pincount_available() checks for), use an exact count to * track it, via hpage_pincount_add/_sub(). _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 053/155] mm/swapfile.c: fix comments for swapcache_prepare 2020-04-02 4:01 incoming Andrew Morton ` (51 preceding siblings ...) 2020-04-02 4:06 ` [patch 052/155] mm/gup: fix omission of check on FOLL_LONGTERM in gup fast path Andrew Morton @ 2020-04-02 4:06 ` Andrew Morton 2020-04-02 4:06 ` [patch 054/155] mm/swap.c: not necessary to export __pagevec_lru_add() Andrew Morton ` (101 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:06 UTC (permalink / raw) To: akpm, chenwandun, linux-mm, mm-commits, torvalds From: Chen Wandun <chenwandun@huawei.com> Subject: mm/swapfile.c: fix comments for swapcache_prepare The -EEXIST returned by __swap_duplicate means there is a swap cache instead -EBUSY Link: http://lkml.kernel.org/r/20200212145754.27123-1-chenwandun@huawei.com Signed-off-by: Chen Wandun <chenwandun@huawei.com> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/swapfile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/mm/swapfile.c~mm-swapfilec-fix-comments-for-swapcache_prepare +++ a/mm/swapfile.c @@ -3475,7 +3475,7 @@ int swap_duplicate(swp_entry_t entry) * * Called when allocating swap cache for existing swap entry, * This can return error codes. Returns 0 at success. - * -EBUSY means there is a swap cache. + * -EEXIST means there is a swap cache. * Note: return code is different from swap_duplicate(). */ int swapcache_prepare(swp_entry_t entry) _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 054/155] mm/swap.c: not necessary to export __pagevec_lru_add() 2020-04-02 4:01 incoming Andrew Morton ` (52 preceding siblings ...) 2020-04-02 4:06 ` [patch 053/155] mm/swapfile.c: fix comments for swapcache_prepare Andrew Morton @ 2020-04-02 4:06 ` Andrew Morton 2020-04-02 4:06 ` [patch 055/155] mm/swapfile: fix data races in try_to_unuse() Andrew Morton ` (100 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:06 UTC (permalink / raw) To: akpm, linux-mm, mm-commits, richardw.yang, torvalds From: Wei Yang <richardw.yang@linux.intel.com> Subject: mm/swap.c: not necessary to export __pagevec_lru_add() __pagevec_lru_add() is only used in mm directory now. Remove the export symbol. Link: http://lkml.kernel.org/r/20200126011436.22979-1-richardw.yang@linux.intel.com Signed-off-by: Wei Yang <richardw.yang@linux.intel.com> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/swap.c | 1 - 1 file changed, 1 deletion(-) --- a/mm/swap.c~mm-swapc-not-necessary-to-export-__pagevec_lru_add +++ a/mm/swap.c @@ -986,7 +986,6 @@ void __pagevec_lru_add(struct pagevec *p { pagevec_lru_move_fn(pvec, __pagevec_lru_add_fn, NULL); } -EXPORT_SYMBOL(__pagevec_lru_add); /** * pagevec_lookup_entries - gang pagecache lookup _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 055/155] mm/swapfile: fix data races in try_to_unuse() 2020-04-02 4:01 incoming Andrew Morton ` (53 preceding siblings ...) 2020-04-02 4:06 ` [patch 054/155] mm/swap.c: not necessary to export __pagevec_lru_add() Andrew Morton @ 2020-04-02 4:06 ` Andrew Morton 2020-04-02 4:06 ` [patch 056/155] mm/swap_slots.c: assign|reset cache slot by value directly Andrew Morton ` (99 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:06 UTC (permalink / raw) To: akpm, cai, elver, hughd, linux-mm, mm-commits, torvalds From: Qian Cai <cai@lca.pw> Subject: mm/swapfile: fix data races in try_to_unuse() si->inuse_pages could be accessed concurrently as noticed by KCSAN, write to 0xffff98b00ebd04dc of 4 bytes by task 82262 on cpu 92: swap_range_free+0xbe/0x230 swap_range_free at mm/swapfile.c:719 swapcache_free_entries+0x1be/0x250 free_swap_slot+0x1c8/0x220 __swap_entry_free.constprop.19+0xa3/0xb0 free_swap_and_cache+0x53/0xa0 unmap_page_range+0x7e0/0x1ce0 unmap_single_vma+0xcd/0x170 unmap_vmas+0x18b/0x220 exit_mmap+0xee/0x220 mmput+0xe7/0x240 do_exit+0x598/0xfd0 do_group_exit+0x8b/0x180 get_signal+0x293/0x13d0 do_signal+0x37/0x5d0 prepare_exit_to_usermode+0x1b7/0x2c0 ret_from_intr+0x32/0x42 read to 0xffff98b00ebd04dc of 4 bytes by task 82499 on cpu 46: try_to_unuse+0x86b/0xc80 try_to_unuse at mm/swapfile.c:2185 __x64_sys_swapoff+0x372/0xd40 do_syscall_64+0x91/0xb05 entry_SYSCALL_64_after_hwframe+0x49/0xbe The plain reads in try_to_unuse() are outside si->lock critical section which result in data races that could be dangerous to be used in a loop. Fix them by adding READ_ONCE(). Link: http://lkml.kernel.org/r/1582578903-29294-1-git-send-email-cai@lca.pw Signed-off-by: Qian Cai <cai@lca.pw> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Cc: Marco Elver <elver@google.com> Cc: Hugh Dickins <hughd@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/swapfile.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) --- a/mm/swapfile.c~mm-swapfile-fix-data-races-in-try_to_unuse +++ a/mm/swapfile.c @@ -2132,7 +2132,7 @@ int try_to_unuse(unsigned int type, bool swp_entry_t entry; unsigned int i; - if (!si->inuse_pages) + if (!READ_ONCE(si->inuse_pages)) return 0; if (!frontswap) @@ -2148,7 +2148,7 @@ retry: spin_lock(&mmlist_lock); p = &init_mm.mmlist; - while (si->inuse_pages && + while (READ_ONCE(si->inuse_pages) && !signal_pending(current) && (p = p->next) != &init_mm.mmlist) { @@ -2177,7 +2177,7 @@ retry: mmput(prev_mm); i = 0; - while (si->inuse_pages && + while (READ_ONCE(si->inuse_pages) && !signal_pending(current) && (i = find_next_to_unuse(si, i, frontswap)) != 0) { @@ -2219,7 +2219,7 @@ retry: * been preempted after get_swap_page(), temporarily hiding that swap. * It's easy and robust (though cpu-intensive) just to keep retrying. */ - if (si->inuse_pages) { + if (READ_ONCE(si->inuse_pages)) { if (!signal_pending(current)) goto retry; retval = -EINTR; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 056/155] mm/swap_slots.c: assign|reset cache slot by value directly 2020-04-02 4:01 incoming Andrew Morton ` (54 preceding siblings ...) 2020-04-02 4:06 ` [patch 055/155] mm/swapfile: fix data races in try_to_unuse() Andrew Morton @ 2020-04-02 4:06 ` Andrew Morton 2020-04-02 4:06 ` [patch 057/155] mm: swap: make page_evictable() inline Andrew Morton ` (98 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:06 UTC (permalink / raw) To: akpm, linux-mm, mm-commits, richard.weiyang, tim.c.chen, torvalds From: Wei Yang <richard.weiyang@linux.alibaba.com> Subject: mm/swap_slots.c: assign|reset cache slot by value directly Currently we use a tmp pointer, pentry, to transfer and reset swap cache slot, which is a little redundant. Swap cache slot stores the entry value directly, assign and reset it by value would be straight forward. Also this patch merges the else and if, since this is the only case we refill and repeat swap cache. Link: http://lkml.kernel.org/r/20200311055352.50574-1-richard.weiyang@linux.alibaba.com Signed-off-by: Wei Yang <richard.weiyang@linux.alibaba.com> Acked-by: Tim Chen <tim.c.chen@linux.intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/swap_slots.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) --- a/mm/swap_slots.c~mm-swap_slotsc-assignreset-cache-slot-by-value-directly +++ a/mm/swap_slots.c @@ -309,7 +309,7 @@ direct_free: swp_entry_t get_swap_page(struct page *page) { - swp_entry_t entry, *pentry; + swp_entry_t entry; struct swap_slots_cache *cache; entry.val = 0; @@ -336,13 +336,11 @@ swp_entry_t get_swap_page(struct page *p if (cache->slots) { repeat: if (cache->nr) { - pentry = &cache->slots[cache->cur++]; - entry = *pentry; - pentry->val = 0; + entry = cache->slots[cache->cur]; + cache->slots[cache->cur++].val = 0; cache->nr--; - } else { - if (refill_swap_slots_cache(cache)) - goto repeat; + } else if (refill_swap_slots_cache(cache)) { + goto repeat; } } mutex_unlock(&cache->alloc_lock); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 057/155] mm: swap: make page_evictable() inline 2020-04-02 4:01 incoming Andrew Morton ` (55 preceding siblings ...) 2020-04-02 4:06 ` [patch 056/155] mm/swap_slots.c: assign|reset cache slot by value directly Andrew Morton @ 2020-04-02 4:06 ` Andrew Morton 2020-04-02 4:06 ` [patch 058/155] mm: swap: use smp_mb__after_atomic() to order LRU bit set Andrew Morton ` (97 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:06 UTC (permalink / raw) To: akpm, hannes, linux-mm, mm-commits, shakeelb, torvalds, vbabka, willy, yang.shi From: Yang Shi <yang.shi@linux.alibaba.com> Subject: mm: swap: make page_evictable() inline When backporting commit 9c4e6b1a7027 ("mm, mlock, vmscan: no more skipping pagevecs") to our 4.9 kernel, our test bench noticed around 10% down with a couple of vm-scalability's test cases (lru-file-readonce, lru-file-readtwice and lru-file-mmap-read). I didn't see that much down on my VM (32c-64g-2nodes). It might be caused by the test configuration, which is 32c-256g with NUMA disabled and the tests were run in root memcg, so the tests actually stress only one inactive and active lru. It sounds not very usual in mordern production environment. That commit did two major changes: 1. Call page_evictable() 2. Use smp_mb to force the PG_lru set visible It looks they contribute the most overhead. The page_evictable() is a function which does function prologue and epilogue, and that was used by page reclaim path only. However, lru add is a very hot path, so it sounds better to make it inline. However, it calls page_mapping() which is not inlined either, but the disassemble shows it doesn't do push and pop operations and it sounds not very straightforward to inline it. Other than this, it sounds smp_mb() is not necessary for x86 since SetPageLRU is atomic which enforces memory barrier already, replace it with smp_mb__after_atomic() in the following patch. With the two fixes applied, the tests can get back around 5% on that test bench and get back normal on my VM. Since the test bench configuration is not that usual and I also saw around 6% up on the latest upstream, so it sounds good enough IMHO. The below is test data (lru-file-readtwice throughput) against the v5.6-rc4: mainline w/ inline fix 150MB 154MB With this patch the throughput gets 2.67% up. The data with using smp_mb__after_atomic() is showed in the following patch. Shakeel Butt did the below test: On a real machine with limiting the 'dd' on a single node and reading 100 GiB sparse file (less than a single node). Just ran a single instance to not cause the lru lock contention. The cmdline used is "dd if=file-100GiB of=/dev/null bs=4k". Ran the cmd 10 times with drop_caches in between and measured the time it took. Without patch: 56.64143 +- 0.672 sec With patches: 56.10 +- 0.21 sec [akpm@linux-foundation.org: move page_evictable() to internal.h] Link: http://lkml.kernel.org/r/1584500541-46817-1-git-send-email-yang.shi@linux.alibaba.com Fixes: 9c4e6b1a7027 ("mm, mlock, vmscan: no more skipping pagevecs") Signed-off-by: Yang Shi <yang.shi@linux.alibaba.com> Reviewed-by: Shakeel Butt <shakeelb@google.com> Tested-by: Shakeel Butt <shakeelb@google.com> Acked-by: Vlastimil Babka <vbabka@suse.cz> Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/pagemap.h | 6 ++---- include/linux/swap.h | 1 - mm/internal.h | 23 +++++++++++++++++++++++ mm/vmscan.c | 23 ----------------------- 4 files changed, 25 insertions(+), 28 deletions(-) --- a/include/linux/pagemap.h~mm-swap-make-page_evictable-inline +++ a/include/linux/pagemap.h @@ -70,11 +70,9 @@ static inline void mapping_clear_unevict clear_bit(AS_UNEVICTABLE, &mapping->flags); } -static inline int mapping_unevictable(struct address_space *mapping) +static inline bool mapping_unevictable(struct address_space *mapping) { - if (mapping) - return test_bit(AS_UNEVICTABLE, &mapping->flags); - return !!mapping; + return mapping && test_bit(AS_UNEVICTABLE, &mapping->flags); } static inline void mapping_set_exiting(struct address_space *mapping) --- a/include/linux/swap.h~mm-swap-make-page_evictable-inline +++ a/include/linux/swap.h @@ -374,7 +374,6 @@ extern int sysctl_min_slab_ratio; #define node_reclaim_mode 0 #endif -extern int page_evictable(struct page *page); extern void check_move_unevictable_pages(struct pagevec *pvec); extern int kswapd_run(int nid); --- a/mm/internal.h~mm-swap-make-page_evictable-inline +++ a/mm/internal.h @@ -63,6 +63,29 @@ static inline unsigned long ra_submit(st ra->start, ra->size, ra->async_size); } +/** + * page_evictable - test whether a page is evictable + * @page: the page to test + * + * Test whether page is evictable--i.e., should be placed on active/inactive + * lists vs unevictable list. + * + * Reasons page might not be evictable: + * (1) page's mapping marked unevictable + * (2) page is part of an mlocked VMA + * + */ +static inline bool page_evictable(struct page *page) +{ + bool ret; + + /* Prevent address_space of inode and swap cache from being freed */ + rcu_read_lock(); + ret = !mapping_unevictable(page_mapping(page)) && !PageMlocked(page); + rcu_read_unlock(); + return ret; +} + /* * Turn a non-refcounted page (->_refcount == 0) into refcounted with * a count of one. --- a/mm/vmscan.c~mm-swap-make-page_evictable-inline +++ a/mm/vmscan.c @@ -4277,29 +4277,6 @@ int node_reclaim(struct pglist_data *pgd } #endif -/* - * page_evictable - test whether a page is evictable - * @page: the page to test - * - * Test whether page is evictable--i.e., should be placed on active/inactive - * lists vs unevictable list. - * - * Reasons page might not be evictable: - * (1) page's mapping marked unevictable - * (2) page is part of an mlocked VMA - * - */ -int page_evictable(struct page *page) -{ - int ret; - - /* Prevent address_space of inode and swap cache from being freed */ - rcu_read_lock(); - ret = !mapping_unevictable(page_mapping(page)) && !PageMlocked(page); - rcu_read_unlock(); - return ret; -} - /** * check_move_unevictable_pages - check pages for evictability and move to * appropriate zone lru list _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 058/155] mm: swap: use smp_mb__after_atomic() to order LRU bit set 2020-04-02 4:01 incoming Andrew Morton ` (56 preceding siblings ...) 2020-04-02 4:06 ` [patch 057/155] mm: swap: make page_evictable() inline Andrew Morton @ 2020-04-02 4:06 ` Andrew Morton 2020-04-02 4:06 ` [patch 059/155] mm/swap_state.c: use the same way to count page in [add_to|delete_from]_swap_cache Andrew Morton ` (96 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:06 UTC (permalink / raw) To: akpm, hannes, linux-mm, mm-commits, shakeelb, torvalds, vbabka, willy, yang.shi From: Yang Shi <yang.shi@linux.alibaba.com> Subject: mm: swap: use smp_mb__after_atomic() to order LRU bit set Memory barrier is needed after setting LRU bit, but smp_mb() is too strong. Some architectures, i.e. x86, imply memory barrier with atomic operations, so replacing it with smp_mb__after_atomic() sounds better, which is nop on strong ordered machines, and full memory barriers on others. With this change the vm-scalability cases would perform better on x86, I saw total 6% improvement with this patch and previous inline fix. The test data (lru-file-readtwice throughput) against v5.6-rc4: mainline w/ inline fix w/ both (adding this) 150MB 154MB 159MB Link: http://lkml.kernel.org/r/1584500541-46817-2-git-send-email-yang.shi@linux.alibaba.com Fixes: 9c4e6b1a7027 ("mm, mlock, vmscan: no more skipping pagevecs") Signed-off-by: Yang Shi <yang.shi@linux.alibaba.com> Acked-by: Vlastimil Babka <vbabka@suse.cz> Reviewed-by: Shakeel Butt <shakeelb@google.com> Tested-by: Shakeel Butt <shakeelb@google.com> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/swap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- a/mm/swap.c~mm-swap-use-smp_mb__after_atomic-to-order-lru-bit-set +++ a/mm/swap.c @@ -931,7 +931,6 @@ static void __pagevec_lru_add_fn(struct VM_BUG_ON_PAGE(PageLRU(page), page); - SetPageLRU(page); /* * Page becomes evictable in two ways: * 1) Within LRU lock [munlock_vma_page() and __munlock_pagevec()]. @@ -958,7 +957,8 @@ static void __pagevec_lru_add_fn(struct * looking at the same page) and the evictable page will be stranded * in an unevictable LRU. */ - smp_mb(); + SetPageLRU(page); + smp_mb__after_atomic(); if (page_evictable(page)) { lru = page_lru(page); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 059/155] mm/swap_state.c: use the same way to count page in [add_to|delete_from]_swap_cache 2020-04-02 4:01 incoming Andrew Morton ` (57 preceding siblings ...) 2020-04-02 4:06 ` [patch 058/155] mm: swap: use smp_mb__after_atomic() to order LRU bit set Andrew Morton @ 2020-04-02 4:06 ` Andrew Morton 2020-04-02 4:06 ` [patch 060/155] mm, memcg: fix build error around the usage of kmem_caches Andrew Morton ` (95 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:06 UTC (permalink / raw) To: akpm, linux-mm, mm-commits, richard.weiyang, torvalds, willy From: Wei Yang <richard.weiyang@gmail.com> Subject: mm/swap_state.c: use the same way to count page in [add_to|delete_from]_swap_cache add_to_swap_cache() and delete_from_swap_cache() are counterparts, while currently they use different ways to count pages. It doesn't break anything because we only have two sizes for PageAnon, but this is confusing and not good practice. This patch corrects it by making both functions use hpage_nr_pages(). Link: http://lkml.kernel.org/r/20200315012920.2687-1-richard.weiyang@gmail.com Signed-off-by: Wei Yang <richard.weiyang@gmail.com> Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/swap_state.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/mm/swap_state.c~mm-swap_statec-use-the-same-way-to-count-page-in-_swap_cache +++ a/mm/swap_state.c @@ -116,7 +116,7 @@ int add_to_swap_cache(struct page *page, struct address_space *address_space = swap_address_space(entry); pgoff_t idx = swp_offset(entry); XA_STATE_ORDER(xas, &address_space->i_pages, idx, compound_order(page)); - unsigned long i, nr = compound_nr(page); + unsigned long i, nr = hpage_nr_pages(page); VM_BUG_ON_PAGE(!PageLocked(page), page); VM_BUG_ON_PAGE(PageSwapCache(page), page); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 060/155] mm, memcg: fix build error around the usage of kmem_caches 2020-04-02 4:01 incoming Andrew Morton ` (58 preceding siblings ...) 2020-04-02 4:06 ` [patch 059/155] mm/swap_state.c: use the same way to count page in [add_to|delete_from]_swap_cache Andrew Morton @ 2020-04-02 4:06 ` Andrew Morton 2020-04-02 4:06 ` [patch 061/155] mm/memcontrol.c: allocate shrinker_map on appropriate NUMA node Andrew Morton ` (94 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:06 UTC (permalink / raw) To: akpm, hannes, laoar.shao, linux-mm, mhocko, mm-commits, tj, torvalds, vdavydov.dev From: Yafang Shao <laoar.shao@gmail.com> Subject: mm, memcg: fix build error around the usage of kmem_caches When I manually set default n to MEMCG_KMEM in init/Kconfig, bellow error occurs, mm/slab_common.c: In function 'memcg_slab_start': mm/slab_common.c:1530:30: error: 'struct mem_cgroup' has no member named 'kmem_caches' return seq_list_start(&memcg->kmem_caches, *pos); ^ mm/slab_common.c: In function 'memcg_slab_next': mm/slab_common.c:1537:32: error: 'struct mem_cgroup' has no member named 'kmem_caches' return seq_list_next(p, &memcg->kmem_caches, pos); ^ mm/slab_common.c: In function 'memcg_slab_show': mm/slab_common.c:1551:16: error: 'struct mem_cgroup' has no member named 'kmem_caches' if (p == memcg->kmem_caches.next) ^ CC arch/x86/xen/smp.o mm/slab_common.c: In function 'memcg_slab_start': mm/slab_common.c:1531:1: warning: control reaches end of non-void function [-Wreturn-type] } ^ mm/slab_common.c: In function 'memcg_slab_next': mm/slab_common.c:1538:1: warning: control reaches end of non-void function [-Wreturn-type] } ^ That's because kmem_caches is defined only when CONFIG_MEMCG_KMEM is set, while memcg_slab_start() will use it no matter CONFIG_MEMCG_KMEM is defined or not. By the way, the reason I mannuly undefined CONFIG_MEMCG_KMEM is to verify whether my some other code change is still stable when CONFIG_MEMCG_KMEM is not set. Unfortunately, the existing code has been already unstable since v4.11. Link: http://lkml.kernel.org/r/1580970260-2045-1-git-send-email-laoar.shao@gmail.com Fixes: bc2791f857e1 ("slab: link memcg kmem_caches on their associated memory cgroup") Signed-off-by: Yafang Shao <laoar.shao@gmail.com> Acked-by: Andrew Morton <akpm@linux-foundation.org> Cc: Tejun Heo <tj@kernel.org> Cc: Vladimir Davydov <vdavydov.dev@gmail.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Michal Hocko <mhocko@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/memcontrol.c | 3 ++- mm/slab_common.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) --- a/mm/memcontrol.c~mm-memcg-fix-build-error-around-the-usage-of-kmem_caches +++ a/mm/memcontrol.c @@ -4792,7 +4792,8 @@ static struct cftype mem_cgroup_legacy_f .write = mem_cgroup_reset, .read_u64 = mem_cgroup_read_u64, }, -#if defined(CONFIG_SLAB) || defined(CONFIG_SLUB_DEBUG) +#if defined(CONFIG_MEMCG_KMEM) && \ + (defined(CONFIG_SLAB) || defined(CONFIG_SLUB_DEBUG)) { .name = "kmem.slabinfo", .seq_start = memcg_slab_start, --- a/mm/slab_common.c~mm-memcg-fix-build-error-around-the-usage-of-kmem_caches +++ a/mm/slab_common.c @@ -1521,7 +1521,7 @@ void dump_unreclaimable_slab(void) mutex_unlock(&slab_mutex); } -#if defined(CONFIG_MEMCG) +#if defined(CONFIG_MEMCG_KMEM) void *memcg_slab_start(struct seq_file *m, loff_t *pos) { struct mem_cgroup *memcg = mem_cgroup_from_seq(m); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 061/155] mm/memcontrol.c: allocate shrinker_map on appropriate NUMA node 2020-04-02 4:01 incoming Andrew Morton ` (59 preceding siblings ...) 2020-04-02 4:06 ` [patch 060/155] mm, memcg: fix build error around the usage of kmem_caches Andrew Morton @ 2020-04-02 4:06 ` Andrew Morton 2020-04-02 4:06 ` [patch 062/155] mm: memcg/slab: use mem_cgroup_from_obj() Andrew Morton ` (93 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:06 UTC (permalink / raw) To: akpm, david, guro, hannes, ktkhai, linux-mm, mhocko, mm-commits, shakeelb, torvalds, vdavydov.dev From: Kirill Tkhai <ktkhai@virtuozzo.com> Subject: mm/memcontrol.c: allocate shrinker_map on appropriate NUMA node The shrinker_map may be touched from any cpu (e.g., a bit there may be set by a task running everywhere) but kswapd is always bound to specific node. So allocate shrinker_map from the related NUMA node to respect its NUMA locality. Also, this follows generic way we use for allocation of memcg's per-node data. Link: http://lkml.kernel.org/r/fff0e636-4c36-ed10-281c-8cdb0687c839@virtuozzo.com Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com> Reviewed-by: David Hildenbrand <david@redhat.com> Reviewed-by: Shakeel Butt <shakeelb@google.com> Reviewed-by: Roman Gushchin <guro@fb.com> Acked-by: Michal Hocko <mhocko@suse.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Vladimir Davydov <vdavydov.dev@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/memcontrol.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- a/mm/memcontrol.c~mm-allocate-shrinker_map-on-appropriate-numa-node +++ a/mm/memcontrol.c @@ -334,7 +334,7 @@ static int memcg_expand_one_shrinker_map if (!old) return 0; - new = kvmalloc(sizeof(*new) + size, GFP_KERNEL); + new = kvmalloc_node(sizeof(*new) + size, GFP_KERNEL, nid); if (!new) return -ENOMEM; @@ -378,7 +378,7 @@ static int memcg_alloc_shrinker_maps(str mutex_lock(&memcg_shrinker_map_mutex); size = memcg_shrinker_map_size; for_each_node(nid) { - map = kvzalloc(sizeof(*map) + size, GFP_KERNEL); + map = kvzalloc_node(sizeof(*map) + size, GFP_KERNEL, nid); if (!map) { memcg_free_shrinker_maps(memcg); ret = -ENOMEM; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 062/155] mm: memcg/slab: use mem_cgroup_from_obj() 2020-04-02 4:01 incoming Andrew Morton ` (60 preceding siblings ...) 2020-04-02 4:06 ` [patch 061/155] mm/memcontrol.c: allocate shrinker_map on appropriate NUMA node Andrew Morton @ 2020-04-02 4:06 ` Andrew Morton 2020-04-02 4:06 ` [patch 063/155] mm: kmem: cleanup (__)memcg_kmem_charge_memcg() arguments Andrew Morton ` (92 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:06 UTC (permalink / raw) To: akpm, guro, hannes, laoar.shao, linux-mm, mhocko, mm-commits, shakeelb, torvalds, vdavydov.dev From: Roman Gushchin <guro@fb.com> Subject: mm: memcg/slab: use mem_cgroup_from_obj() Sometimes we need to get a memcg pointer from a charged kernel object. The right way to get it depends on whether it's a proper slab object or it's backed by raw pages (e.g. it's a vmalloc alloction). In the first case the kmem_cache->memcg_params.memcg indirection should be used; in other cases it's just page->mem_cgroup. To simplify this task and hide the implementation details let's use the mem_cgroup_from_obj() helper, which takes a pointer to any kernel object and returns a valid memcg pointer or NULL. Passing a kernel address rather than a pointer to a page will allow to use this helper for per-object (rather than per-page) tracked objects in the future. The caller is still responsible to ensure that the returned memcg isn't going away underneath: take the rcu read lock, cgroup mutex etc; depending on the context. mem_cgroup_from_kmem() defined in mm/list_lru.c is now obsolete and can be removed. Link: http://lkml.kernel.org/r/20200117203609.3146239-1-guro@fb.com Signed-off-by: Roman Gushchin <guro@fb.com> Acked-by: Yafang Shao <laoar.shao@gmail.com> Reviewed-by: Shakeel Butt <shakeelb@google.com> Cc: Michal Hocko <mhocko@kernel.org> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Vladimir Davydov <vdavydov.dev@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/list_lru.c | 12 +----------- mm/memcontrol.c | 5 ++--- 2 files changed, 3 insertions(+), 14 deletions(-) --- a/mm/list_lru.c~mm-memcg-slab-introduce-mem_cgroup_from_obj +++ a/mm/list_lru.c @@ -57,16 +57,6 @@ list_lru_from_memcg_idx(struct list_lru_ return &nlru->lru; } -static __always_inline struct mem_cgroup *mem_cgroup_from_kmem(void *ptr) -{ - struct page *page; - - if (!memcg_kmem_enabled()) - return NULL; - page = virt_to_head_page(ptr); - return memcg_from_slab_page(page); -} - static inline struct list_lru_one * list_lru_from_kmem(struct list_lru_node *nlru, void *ptr, struct mem_cgroup **memcg_ptr) @@ -77,7 +67,7 @@ list_lru_from_kmem(struct list_lru_node if (!nlru->memcg_lrus) goto out; - memcg = mem_cgroup_from_kmem(ptr); + memcg = mem_cgroup_from_obj(ptr); if (!memcg) goto out; --- a/mm/memcontrol.c~mm-memcg-slab-introduce-mem_cgroup_from_obj +++ a/mm/memcontrol.c @@ -759,13 +759,12 @@ void __mod_lruvec_state(struct lruvec *l void __mod_lruvec_slab_state(void *p, enum node_stat_item idx, int val) { - struct page *page = virt_to_head_page(p); - pg_data_t *pgdat = page_pgdat(page); + pg_data_t *pgdat = page_pgdat(virt_to_page(p)); struct mem_cgroup *memcg; struct lruvec *lruvec; rcu_read_lock(); - memcg = memcg_from_slab_page(page); + memcg = mem_cgroup_from_obj(p); /* Untracked pages have no memcg, no lruvec. Update only the node */ if (!memcg || memcg == root_mem_cgroup) { _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 063/155] mm: kmem: cleanup (__)memcg_kmem_charge_memcg() arguments 2020-04-02 4:01 incoming Andrew Morton ` (61 preceding siblings ...) 2020-04-02 4:06 ` [patch 062/155] mm: memcg/slab: use mem_cgroup_from_obj() Andrew Morton @ 2020-04-02 4:06 ` Andrew Morton 2020-04-02 4:06 ` [patch 064/155] mm: kmem: cleanup memcg_kmem_uncharge_memcg() arguments Andrew Morton ` (91 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:06 UTC (permalink / raw) To: akpm, guro, hannes, linux-mm, mhocko, mm-commits, shakeelb, torvalds, vdavydov.dev From: Roman Gushchin <guro@fb.com> Subject: mm: kmem: cleanup (__)memcg_kmem_charge_memcg() arguments Patch series "mm: memcg: kmem API cleanup", v2. This patchset aims to clean up the kernel memory charging API. It doesn't bring any functional changes, just removes unused arguments, renames some functions and fixes some comments. Currently it's not obvious which functions are most basic (memcg_kmem_(un)charge_memcg()) and which are based on them (memcg_kmem_(un)charge()). The patchset renames these functions and removes unused arguments: TL;DR: was: memcg_kmem_charge_memcg(page, gfp, order, memcg) memcg_kmem_uncharge_memcg(memcg, nr_pages) memcg_kmem_charge(page, gfp, order) memcg_kmem_uncharge(page, order) now: memcg_kmem_charge(memcg, gfp, nr_pages) memcg_kmem_uncharge(memcg, nr_pages) memcg_kmem_charge_page(page, gfp, order) memcg_kmem_uncharge_page(page, order) This patch (of 6): The first argument of memcg_kmem_charge_memcg() and __memcg_kmem_charge_memcg() is the page pointer and it's not used. Let's drop it. Memcg pointer is passed as the last argument. Move it to the first place for consistency with other memcg functions, e.g. __memcg_kmem_uncharge_memcg() or try_charge(). Link: http://lkml.kernel.org/r/20200109202659.752357-2-guro@fb.com Signed-off-by: Roman Gushchin <guro@fb.com> Reviewed-by: Shakeel Butt <shakeelb@google.com> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Cc: Michal Hocko <mhocko@kernel.org> Cc: Vladimir Davydov <vdavydov.dev@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/memcontrol.h | 9 ++++----- mm/memcontrol.c | 8 +++----- mm/slab.h | 2 +- 3 files changed, 8 insertions(+), 11 deletions(-) --- a/include/linux/memcontrol.h~mm-kmem-cleanup-__memcg_kmem_charge_memcg-arguments +++ a/include/linux/memcontrol.h @@ -1369,8 +1369,7 @@ void memcg_kmem_put_cache(struct kmem_ca #ifdef CONFIG_MEMCG_KMEM int __memcg_kmem_charge(struct page *page, gfp_t gfp, int order); void __memcg_kmem_uncharge(struct page *page, int order); -int __memcg_kmem_charge_memcg(struct page *page, gfp_t gfp, int order, - struct mem_cgroup *memcg); +int __memcg_kmem_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp, int order); void __memcg_kmem_uncharge_memcg(struct mem_cgroup *memcg, unsigned int nr_pages); @@ -1407,11 +1406,11 @@ static inline void memcg_kmem_uncharge(s __memcg_kmem_uncharge(page, order); } -static inline int memcg_kmem_charge_memcg(struct page *page, gfp_t gfp, - int order, struct mem_cgroup *memcg) +static inline int memcg_kmem_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp, + int order) { if (memcg_kmem_enabled()) - return __memcg_kmem_charge_memcg(page, gfp, order, memcg); + return __memcg_kmem_charge_memcg(memcg, gfp, order); return 0; } --- a/mm/memcontrol.c~mm-kmem-cleanup-__memcg_kmem_charge_memcg-arguments +++ a/mm/memcontrol.c @@ -2882,15 +2882,13 @@ void memcg_kmem_put_cache(struct kmem_ca /** * __memcg_kmem_charge_memcg: charge a kmem page - * @page: page to charge + * @memcg: memory cgroup to charge * @gfp: reclaim mode * @order: allocation order - * @memcg: memory cgroup to charge * * Returns 0 on success, an error code on failure. */ -int __memcg_kmem_charge_memcg(struct page *page, gfp_t gfp, int order, - struct mem_cgroup *memcg) +int __memcg_kmem_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp, int order) { unsigned int nr_pages = 1 << order; struct page_counter *counter; @@ -2936,7 +2934,7 @@ int __memcg_kmem_charge(struct page *pag memcg = get_mem_cgroup_from_current(); if (!mem_cgroup_is_root(memcg)) { - ret = __memcg_kmem_charge_memcg(page, gfp, order, memcg); + ret = __memcg_kmem_charge_memcg(memcg, gfp, order); if (!ret) { page->mem_cgroup = memcg; __SetPageKmemcg(page); --- a/mm/slab.h~mm-kmem-cleanup-__memcg_kmem_charge_memcg-arguments +++ a/mm/slab.h @@ -365,7 +365,7 @@ static __always_inline int memcg_charge_ return 0; } - ret = memcg_kmem_charge_memcg(page, gfp, order, memcg); + ret = memcg_kmem_charge_memcg(memcg, gfp, order); if (ret) goto out; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 064/155] mm: kmem: cleanup memcg_kmem_uncharge_memcg() arguments 2020-04-02 4:01 incoming Andrew Morton ` (62 preceding siblings ...) 2020-04-02 4:06 ` [patch 063/155] mm: kmem: cleanup (__)memcg_kmem_charge_memcg() arguments Andrew Morton @ 2020-04-02 4:06 ` Andrew Morton 2020-04-02 4:06 ` [patch 065/155] mm: kmem: rename memcg_kmem_(un)charge() into memcg_kmem_(un)charge_page() Andrew Morton ` (90 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:06 UTC (permalink / raw) To: akpm, guro, hannes, linux-mm, mhocko, mm-commits, shakeelb, torvalds, vdavydov.dev From: Roman Gushchin <guro@fb.com> Subject: mm: kmem: cleanup memcg_kmem_uncharge_memcg() arguments Drop the unused page argument and put the memcg pointer at the first place. This make the function consistent with its peers: __memcg_kmem_uncharge_memcg(), memcg_kmem_charge_memcg(), etc. Link: http://lkml.kernel.org/r/20200109202659.752357-3-guro@fb.com Signed-off-by: Roman Gushchin <guro@fb.com> Reviewed-by: Shakeel Butt <shakeelb@google.com> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Cc: Michal Hocko <mhocko@kernel.org> Cc: Vladimir Davydov <vdavydov.dev@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/memcontrol.h | 4 ++-- mm/slab.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) --- a/include/linux/memcontrol.h~mm-kmem-cleanup-memcg_kmem_uncharge_memcg-arguments +++ a/include/linux/memcontrol.h @@ -1414,8 +1414,8 @@ static inline int memcg_kmem_charge_memc return 0; } -static inline void memcg_kmem_uncharge_memcg(struct page *page, int order, - struct mem_cgroup *memcg) +static inline void memcg_kmem_uncharge_memcg(struct mem_cgroup *memcg, + int order) { if (memcg_kmem_enabled()) __memcg_kmem_uncharge_memcg(memcg, 1 << order); --- a/mm/slab.h~mm-kmem-cleanup-memcg_kmem_uncharge_memcg-arguments +++ a/mm/slab.h @@ -395,7 +395,7 @@ static __always_inline void memcg_unchar if (likely(!mem_cgroup_is_root(memcg))) { lruvec = mem_cgroup_lruvec(memcg, page_pgdat(page)); mod_lruvec_state(lruvec, cache_vmstat_idx(s), -(1 << order)); - memcg_kmem_uncharge_memcg(page, order, memcg); + memcg_kmem_uncharge_memcg(memcg, order); } else { mod_node_page_state(page_pgdat(page), cache_vmstat_idx(s), -(1 << order)); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 065/155] mm: kmem: rename memcg_kmem_(un)charge() into memcg_kmem_(un)charge_page() 2020-04-02 4:01 incoming Andrew Morton ` (63 preceding siblings ...) 2020-04-02 4:06 ` [patch 064/155] mm: kmem: cleanup memcg_kmem_uncharge_memcg() arguments Andrew Morton @ 2020-04-02 4:06 ` Andrew Morton 2020-04-02 4:06 ` [patch 066/155] mm: kmem: switch to nr_pages in (__)memcg_kmem_charge_memcg() Andrew Morton ` (89 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:06 UTC (permalink / raw) To: akpm, guro, hannes, linux-mm, mhocko, mm-commits, shakeelb, torvalds, vdavydov.dev From: Roman Gushchin <guro@fb.com> Subject: mm: kmem: rename memcg_kmem_(un)charge() into memcg_kmem_(un)charge_page() Rename (__)memcg_kmem_(un)charge() into (__)memcg_kmem_(un)charge_page() to better reflect what they are actually doing: 1) call __memcg_kmem_(un)charge_memcg() to actually charge or uncharge the current memcg 2) set or clear the PageKmemcg flag Link: http://lkml.kernel.org/r/20200109202659.752357-4-guro@fb.com Signed-off-by: Roman Gushchin <guro@fb.com> Reviewed-by: Shakeel Butt <shakeelb@google.com> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Cc: Michal Hocko <mhocko@kernel.org> Cc: Vladimir Davydov <vdavydov.dev@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/pipe.c | 2 +- include/linux/memcontrol.h | 23 +++++++++++++---------- kernel/fork.c | 9 +++++---- mm/memcontrol.c | 8 ++++---- mm/page_alloc.c | 4 ++-- 5 files changed, 25 insertions(+), 21 deletions(-) --- a/fs/pipe.c~mm-kmem-rename-memcg_kmem_uncharge-into-memcg_kmem_uncharge_page +++ a/fs/pipe.c @@ -146,7 +146,7 @@ static int anon_pipe_buf_steal(struct pi struct page *page = buf->page; if (page_count(page) == 1) { - memcg_kmem_uncharge(page, 0); + memcg_kmem_uncharge_page(page, 0); __SetPageLocked(page); return 0; } --- a/include/linux/memcontrol.h~mm-kmem-rename-memcg_kmem_uncharge-into-memcg_kmem_uncharge_page +++ a/include/linux/memcontrol.h @@ -1367,8 +1367,8 @@ struct kmem_cache *memcg_kmem_get_cache( void memcg_kmem_put_cache(struct kmem_cache *cachep); #ifdef CONFIG_MEMCG_KMEM -int __memcg_kmem_charge(struct page *page, gfp_t gfp, int order); -void __memcg_kmem_uncharge(struct page *page, int order); +int __memcg_kmem_charge_page(struct page *page, gfp_t gfp, int order); +void __memcg_kmem_uncharge_page(struct page *page, int order); int __memcg_kmem_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp, int order); void __memcg_kmem_uncharge_memcg(struct mem_cgroup *memcg, unsigned int nr_pages); @@ -1393,17 +1393,18 @@ static inline bool memcg_kmem_enabled(vo return static_branch_unlikely(&memcg_kmem_enabled_key); } -static inline int memcg_kmem_charge(struct page *page, gfp_t gfp, int order) +static inline int memcg_kmem_charge_page(struct page *page, gfp_t gfp, + int order) { if (memcg_kmem_enabled()) - return __memcg_kmem_charge(page, gfp, order); + return __memcg_kmem_charge_page(page, gfp, order); return 0; } -static inline void memcg_kmem_uncharge(struct page *page, int order) +static inline void memcg_kmem_uncharge_page(struct page *page, int order) { if (memcg_kmem_enabled()) - __memcg_kmem_uncharge(page, order); + __memcg_kmem_uncharge_page(page, order); } static inline int memcg_kmem_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp, @@ -1435,21 +1436,23 @@ struct mem_cgroup *mem_cgroup_from_obj(v #else -static inline int memcg_kmem_charge(struct page *page, gfp_t gfp, int order) +static inline int memcg_kmem_charge_page(struct page *page, gfp_t gfp, + int order) { return 0; } -static inline void memcg_kmem_uncharge(struct page *page, int order) +static inline void memcg_kmem_uncharge_page(struct page *page, int order) { } -static inline int __memcg_kmem_charge(struct page *page, gfp_t gfp, int order) +static inline int __memcg_kmem_charge_page(struct page *page, gfp_t gfp, + int order) { return 0; } -static inline void __memcg_kmem_uncharge(struct page *page, int order) +static inline void __memcg_kmem_uncharge_page(struct page *page, int order) { } --- a/kernel/fork.c~mm-kmem-rename-memcg_kmem_uncharge-into-memcg_kmem_uncharge_page +++ a/kernel/fork.c @@ -281,7 +281,7 @@ static inline void free_thread_stack(str MEMCG_KERNEL_STACK_KB, -(int)(PAGE_SIZE / 1024)); - memcg_kmem_uncharge(vm->pages[i], 0); + memcg_kmem_uncharge_page(vm->pages[i], 0); } for (i = 0; i < NR_CACHED_STACKS; i++) { @@ -413,12 +413,13 @@ static int memcg_charge_kernel_stack(str for (i = 0; i < THREAD_SIZE / PAGE_SIZE; i++) { /* - * If memcg_kmem_charge() fails, page->mem_cgroup - * pointer is NULL, and both memcg_kmem_uncharge() + * If memcg_kmem_charge_page() fails, page->mem_cgroup + * pointer is NULL, and both memcg_kmem_uncharge_page() * and mod_memcg_page_state() in free_thread_stack() * will ignore this page. So it's safe. */ - ret = memcg_kmem_charge(vm->pages[i], GFP_KERNEL, 0); + ret = memcg_kmem_charge_page(vm->pages[i], GFP_KERNEL, + 0); if (ret) return ret; --- a/mm/memcontrol.c~mm-kmem-rename-memcg_kmem_uncharge-into-memcg_kmem_uncharge_page +++ a/mm/memcontrol.c @@ -2917,14 +2917,14 @@ int __memcg_kmem_charge_memcg(struct mem } /** - * __memcg_kmem_charge: charge a kmem page to the current memory cgroup + * __memcg_kmem_charge_page: charge a kmem page to the current memory cgroup * @page: page to charge * @gfp: reclaim mode * @order: allocation order * * Returns 0 on success, an error code on failure. */ -int __memcg_kmem_charge(struct page *page, gfp_t gfp, int order) +int __memcg_kmem_charge_page(struct page *page, gfp_t gfp, int order) { struct mem_cgroup *memcg; int ret = 0; @@ -2960,11 +2960,11 @@ void __memcg_kmem_uncharge_memcg(struct page_counter_uncharge(&memcg->memsw, nr_pages); } /** - * __memcg_kmem_uncharge: uncharge a kmem page + * __memcg_kmem_uncharge_page: uncharge a kmem page * @page: page to uncharge * @order: allocation order */ -void __memcg_kmem_uncharge(struct page *page, int order) +void __memcg_kmem_uncharge_page(struct page *page, int order) { struct mem_cgroup *memcg = page->mem_cgroup; unsigned int nr_pages = 1 << order; --- a/mm/page_alloc.c~mm-kmem-rename-memcg_kmem_uncharge-into-memcg_kmem_uncharge_page +++ a/mm/page_alloc.c @@ -1153,7 +1153,7 @@ static __always_inline bool free_pages_p if (PageMappingFlags(page)) page->mapping = NULL; if (memcg_kmem_enabled() && PageKmemcg(page)) - __memcg_kmem_uncharge(page, order); + __memcg_kmem_uncharge_page(page, order); if (check_free) bad += free_pages_check(page); if (bad) @@ -4753,7 +4753,7 @@ __alloc_pages_nodemask(gfp_t gfp_mask, u out: if (memcg_kmem_enabled() && (gfp_mask & __GFP_ACCOUNT) && page && - unlikely(__memcg_kmem_charge(page, gfp_mask, order) != 0)) { + unlikely(__memcg_kmem_charge_page(page, gfp_mask, order) != 0)) { __free_pages(page, order); page = NULL; } _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 066/155] mm: kmem: switch to nr_pages in (__)memcg_kmem_charge_memcg() 2020-04-02 4:01 incoming Andrew Morton ` (64 preceding siblings ...) 2020-04-02 4:06 ` [patch 065/155] mm: kmem: rename memcg_kmem_(un)charge() into memcg_kmem_(un)charge_page() Andrew Morton @ 2020-04-02 4:06 ` Andrew Morton 2020-04-02 4:06 ` [patch 067/155] mm: memcg/slab: cache page number in memcg_(un)charge_slab() Andrew Morton ` (88 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:06 UTC (permalink / raw) To: akpm, guro, hannes, linux-mm, mhocko, mm-commits, shakeelb, torvalds, vdavydov.dev From: Roman Gushchin <guro@fb.com> Subject: mm: kmem: switch to nr_pages in (__)memcg_kmem_charge_memcg() These functions are charging the given number of kernel pages to the given memory cgroup. The number doesn't have to be a power of two. Let's make them to take the unsigned int nr_pages as an argument instead of the page order. It makes them look consistent with the corresponding uncharge functions and functions like: mem_cgroup_charge_skmem(memcg, nr_pages). Link: http://lkml.kernel.org/r/20200109202659.752357-5-guro@fb.com Signed-off-by: Roman Gushchin <guro@fb.com> Reviewed-by: Shakeel Butt <shakeelb@google.com> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Cc: Michal Hocko <mhocko@kernel.org> Cc: Vladimir Davydov <vdavydov.dev@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/memcontrol.h | 11 ++++++----- mm/memcontrol.c | 8 ++++---- mm/slab.h | 2 +- 3 files changed, 11 insertions(+), 10 deletions(-) --- a/include/linux/memcontrol.h~mm-kmem-switch-to-nr_pages-in-__memcg_kmem_charge_memcg +++ a/include/linux/memcontrol.h @@ -1369,7 +1369,8 @@ void memcg_kmem_put_cache(struct kmem_ca #ifdef CONFIG_MEMCG_KMEM int __memcg_kmem_charge_page(struct page *page, gfp_t gfp, int order); void __memcg_kmem_uncharge_page(struct page *page, int order); -int __memcg_kmem_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp, int order); +int __memcg_kmem_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp, + unsigned int nr_pages); void __memcg_kmem_uncharge_memcg(struct mem_cgroup *memcg, unsigned int nr_pages); @@ -1408,18 +1409,18 @@ static inline void memcg_kmem_uncharge_p } static inline int memcg_kmem_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp, - int order) + unsigned int nr_pages) { if (memcg_kmem_enabled()) - return __memcg_kmem_charge_memcg(memcg, gfp, order); + return __memcg_kmem_charge_memcg(memcg, gfp, nr_pages); return 0; } static inline void memcg_kmem_uncharge_memcg(struct mem_cgroup *memcg, - int order) + unsigned int nr_pages) { if (memcg_kmem_enabled()) - __memcg_kmem_uncharge_memcg(memcg, 1 << order); + __memcg_kmem_uncharge_memcg(memcg, nr_pages); } /* --- a/mm/memcontrol.c~mm-kmem-switch-to-nr_pages-in-__memcg_kmem_charge_memcg +++ a/mm/memcontrol.c @@ -2884,13 +2884,13 @@ void memcg_kmem_put_cache(struct kmem_ca * __memcg_kmem_charge_memcg: charge a kmem page * @memcg: memory cgroup to charge * @gfp: reclaim mode - * @order: allocation order + * @nr_pages: number of pages to charge * * Returns 0 on success, an error code on failure. */ -int __memcg_kmem_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp, int order) +int __memcg_kmem_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp, + unsigned int nr_pages) { - unsigned int nr_pages = 1 << order; struct page_counter *counter; int ret; @@ -2934,7 +2934,7 @@ int __memcg_kmem_charge_page(struct page memcg = get_mem_cgroup_from_current(); if (!mem_cgroup_is_root(memcg)) { - ret = __memcg_kmem_charge_memcg(memcg, gfp, order); + ret = __memcg_kmem_charge_memcg(memcg, gfp, 1 << order); if (!ret) { page->mem_cgroup = memcg; __SetPageKmemcg(page); --- a/mm/slab.h~mm-kmem-switch-to-nr_pages-in-__memcg_kmem_charge_memcg +++ a/mm/slab.h @@ -365,7 +365,7 @@ static __always_inline int memcg_charge_ return 0; } - ret = memcg_kmem_charge_memcg(memcg, gfp, order); + ret = memcg_kmem_charge_memcg(memcg, gfp, 1 << order); if (ret) goto out; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 067/155] mm: memcg/slab: cache page number in memcg_(un)charge_slab() 2020-04-02 4:01 incoming Andrew Morton ` (65 preceding siblings ...) 2020-04-02 4:06 ` [patch 066/155] mm: kmem: switch to nr_pages in (__)memcg_kmem_charge_memcg() Andrew Morton @ 2020-04-02 4:06 ` Andrew Morton 2020-04-02 4:06 ` [patch 068/155] mm: kmem: rename (__)memcg_kmem_(un)charge_memcg() to __memcg_kmem_(un)charge() Andrew Morton ` (87 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:06 UTC (permalink / raw) To: akpm, guro, hannes, linux-mm, mhocko, mm-commits, shakeelb, torvalds, vdavydov.dev From: Roman Gushchin <guro@fb.com> Subject: mm: memcg/slab: cache page number in memcg_(un)charge_slab() There are many places in memcg_charge_slab() and memcg_uncharge_slab() which are calculating the number of pages to charge, css references to grab etc depending on the order of the slab page. Let's simplify the code by calculating it once and caching in the local variable. Link: http://lkml.kernel.org/r/20200109202659.752357-6-guro@fb.com Signed-off-by: Roman Gushchin <guro@fb.com> Reviewed-by: Shakeel Butt <shakeelb@google.com> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Cc: Michal Hocko <mhocko@kernel.org> Cc: Vladimir Davydov <vdavydov.dev@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/slab.h | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) --- a/mm/slab.h~mm-memcg-slab-cache-page-number-in-memcg_uncharge_slab +++ a/mm/slab.h @@ -348,6 +348,7 @@ static __always_inline int memcg_charge_ gfp_t gfp, int order, struct kmem_cache *s) { + unsigned int nr_pages = 1 << order; struct mem_cgroup *memcg; struct lruvec *lruvec; int ret; @@ -360,21 +361,21 @@ static __always_inline int memcg_charge_ if (unlikely(!memcg || mem_cgroup_is_root(memcg))) { mod_node_page_state(page_pgdat(page), cache_vmstat_idx(s), - (1 << order)); - percpu_ref_get_many(&s->memcg_params.refcnt, 1 << order); + nr_pages); + percpu_ref_get_many(&s->memcg_params.refcnt, nr_pages); return 0; } - ret = memcg_kmem_charge_memcg(memcg, gfp, 1 << order); + ret = memcg_kmem_charge_memcg(memcg, gfp, nr_pages); if (ret) goto out; lruvec = mem_cgroup_lruvec(memcg, page_pgdat(page)); - mod_lruvec_state(lruvec, cache_vmstat_idx(s), 1 << order); + mod_lruvec_state(lruvec, cache_vmstat_idx(s), nr_pages); /* transer try_charge() page references to kmem_cache */ - percpu_ref_get_many(&s->memcg_params.refcnt, 1 << order); - css_put_many(&memcg->css, 1 << order); + percpu_ref_get_many(&s->memcg_params.refcnt, nr_pages); + css_put_many(&memcg->css, nr_pages); out: css_put(&memcg->css); return ret; @@ -387,6 +388,7 @@ out: static __always_inline void memcg_uncharge_slab(struct page *page, int order, struct kmem_cache *s) { + unsigned int nr_pages = 1 << order; struct mem_cgroup *memcg; struct lruvec *lruvec; @@ -394,15 +396,15 @@ static __always_inline void memcg_unchar memcg = READ_ONCE(s->memcg_params.memcg); if (likely(!mem_cgroup_is_root(memcg))) { lruvec = mem_cgroup_lruvec(memcg, page_pgdat(page)); - mod_lruvec_state(lruvec, cache_vmstat_idx(s), -(1 << order)); - memcg_kmem_uncharge_memcg(memcg, order); + mod_lruvec_state(lruvec, cache_vmstat_idx(s), -nr_pages); + memcg_kmem_uncharge_memcg(memcg, nr_pages); } else { mod_node_page_state(page_pgdat(page), cache_vmstat_idx(s), - -(1 << order)); + -nr_pages); } rcu_read_unlock(); - percpu_ref_put_many(&s->memcg_params.refcnt, 1 << order); + percpu_ref_put_many(&s->memcg_params.refcnt, nr_pages); } extern void slab_init_memcg_params(struct kmem_cache *); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 068/155] mm: kmem: rename (__)memcg_kmem_(un)charge_memcg() to __memcg_kmem_(un)charge() 2020-04-02 4:01 incoming Andrew Morton ` (66 preceding siblings ...) 2020-04-02 4:06 ` [patch 067/155] mm: memcg/slab: cache page number in memcg_(un)charge_slab() Andrew Morton @ 2020-04-02 4:06 ` Andrew Morton 2020-04-02 4:07 ` [patch 069/155] mm: memcontrol: fix memory.low proportional distribution Andrew Morton ` (86 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:06 UTC (permalink / raw) To: akpm, guro, hannes, linux-mm, mhocko, mm-commits, shakeelb, torvalds, vdavydov.dev From: Roman Gushchin <guro@fb.com> Subject: mm: kmem: rename (__)memcg_kmem_(un)charge_memcg() to __memcg_kmem_(un)charge() Drop the _memcg suffix from (__)memcg_kmem_(un)charge functions. It's shorter and more obvious. These are the most basic functions which are just (un)charging the given cgroup with the given amount of pages. Also fix up the corresponding comments. Link: http://lkml.kernel.org/r/20200109202659.752357-7-guro@fb.com Signed-off-by: Roman Gushchin <guro@fb.com> Reviewed-by: Shakeel Butt <shakeelb@google.com> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Cc: Michal Hocko <mhocko@kernel.org> Cc: Vladimir Davydov <vdavydov.dev@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/memcontrol.h | 19 +++++++--------- mm/memcontrol.c | 40 +++++++++++++++++------------------ mm/slab.h | 4 +-- 3 files changed, 31 insertions(+), 32 deletions(-) --- a/include/linux/memcontrol.h~mm-kmem-rename-__memcg_kmem_uncharge_memcg-to-__memcg_kmem_uncharge +++ a/include/linux/memcontrol.h @@ -1367,12 +1367,11 @@ struct kmem_cache *memcg_kmem_get_cache( void memcg_kmem_put_cache(struct kmem_cache *cachep); #ifdef CONFIG_MEMCG_KMEM +int __memcg_kmem_charge(struct mem_cgroup *memcg, gfp_t gfp, + unsigned int nr_pages); +void __memcg_kmem_uncharge(struct mem_cgroup *memcg, unsigned int nr_pages); int __memcg_kmem_charge_page(struct page *page, gfp_t gfp, int order); void __memcg_kmem_uncharge_page(struct page *page, int order); -int __memcg_kmem_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp, - unsigned int nr_pages); -void __memcg_kmem_uncharge_memcg(struct mem_cgroup *memcg, - unsigned int nr_pages); extern struct static_key_false memcg_kmem_enabled_key; extern struct workqueue_struct *memcg_kmem_cache_wq; @@ -1408,19 +1407,19 @@ static inline void memcg_kmem_uncharge_p __memcg_kmem_uncharge_page(page, order); } -static inline int memcg_kmem_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp, - unsigned int nr_pages) +static inline int memcg_kmem_charge(struct mem_cgroup *memcg, gfp_t gfp, + unsigned int nr_pages) { if (memcg_kmem_enabled()) - return __memcg_kmem_charge_memcg(memcg, gfp, nr_pages); + return __memcg_kmem_charge(memcg, gfp, nr_pages); return 0; } -static inline void memcg_kmem_uncharge_memcg(struct mem_cgroup *memcg, - unsigned int nr_pages) +static inline void memcg_kmem_uncharge(struct mem_cgroup *memcg, + unsigned int nr_pages) { if (memcg_kmem_enabled()) - __memcg_kmem_uncharge_memcg(memcg, nr_pages); + __memcg_kmem_uncharge(memcg, nr_pages); } /* --- a/mm/memcontrol.c~mm-kmem-rename-__memcg_kmem_uncharge_memcg-to-__memcg_kmem_uncharge +++ a/mm/memcontrol.c @@ -2881,15 +2881,15 @@ void memcg_kmem_put_cache(struct kmem_ca } /** - * __memcg_kmem_charge_memcg: charge a kmem page + * __memcg_kmem_charge: charge a number of kernel pages to a memcg * @memcg: memory cgroup to charge * @gfp: reclaim mode * @nr_pages: number of pages to charge * * Returns 0 on success, an error code on failure. */ -int __memcg_kmem_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp, - unsigned int nr_pages) +int __memcg_kmem_charge(struct mem_cgroup *memcg, gfp_t gfp, + unsigned int nr_pages) { struct page_counter *counter; int ret; @@ -2917,6 +2917,21 @@ int __memcg_kmem_charge_memcg(struct mem } /** + * __memcg_kmem_uncharge: uncharge a number of kernel pages from a memcg + * @memcg: memcg to uncharge + * @nr_pages: number of pages to uncharge + */ +void __memcg_kmem_uncharge(struct mem_cgroup *memcg, unsigned int nr_pages) +{ + if (!cgroup_subsys_on_dfl(memory_cgrp_subsys)) + page_counter_uncharge(&memcg->kmem, nr_pages); + + page_counter_uncharge(&memcg->memory, nr_pages); + if (do_memsw_account()) + page_counter_uncharge(&memcg->memsw, nr_pages); +} + +/** * __memcg_kmem_charge_page: charge a kmem page to the current memory cgroup * @page: page to charge * @gfp: reclaim mode @@ -2934,7 +2949,7 @@ int __memcg_kmem_charge_page(struct page memcg = get_mem_cgroup_from_current(); if (!mem_cgroup_is_root(memcg)) { - ret = __memcg_kmem_charge_memcg(memcg, gfp, 1 << order); + ret = __memcg_kmem_charge(memcg, gfp, 1 << order); if (!ret) { page->mem_cgroup = memcg; __SetPageKmemcg(page); @@ -2945,21 +2960,6 @@ int __memcg_kmem_charge_page(struct page } /** - * __memcg_kmem_uncharge_memcg: uncharge a kmem page - * @memcg: memcg to uncharge - * @nr_pages: number of pages to uncharge - */ -void __memcg_kmem_uncharge_memcg(struct mem_cgroup *memcg, - unsigned int nr_pages) -{ - if (!cgroup_subsys_on_dfl(memory_cgrp_subsys)) - page_counter_uncharge(&memcg->kmem, nr_pages); - - page_counter_uncharge(&memcg->memory, nr_pages); - if (do_memsw_account()) - page_counter_uncharge(&memcg->memsw, nr_pages); -} -/** * __memcg_kmem_uncharge_page: uncharge a kmem page * @page: page to uncharge * @order: allocation order @@ -2973,7 +2973,7 @@ void __memcg_kmem_uncharge_page(struct p return; VM_BUG_ON_PAGE(mem_cgroup_is_root(memcg), page); - __memcg_kmem_uncharge_memcg(memcg, nr_pages); + __memcg_kmem_uncharge(memcg, nr_pages); page->mem_cgroup = NULL; /* slab pages do not have PageKmemcg flag set */ --- a/mm/slab.h~mm-kmem-rename-__memcg_kmem_uncharge_memcg-to-__memcg_kmem_uncharge +++ a/mm/slab.h @@ -366,7 +366,7 @@ static __always_inline int memcg_charge_ return 0; } - ret = memcg_kmem_charge_memcg(memcg, gfp, nr_pages); + ret = memcg_kmem_charge(memcg, gfp, nr_pages); if (ret) goto out; @@ -397,7 +397,7 @@ static __always_inline void memcg_unchar if (likely(!mem_cgroup_is_root(memcg))) { lruvec = mem_cgroup_lruvec(memcg, page_pgdat(page)); mod_lruvec_state(lruvec, cache_vmstat_idx(s), -nr_pages); - memcg_kmem_uncharge_memcg(memcg, nr_pages); + memcg_kmem_uncharge(memcg, nr_pages); } else { mod_node_page_state(page_pgdat(page), cache_vmstat_idx(s), -nr_pages); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 069/155] mm: memcontrol: fix memory.low proportional distribution 2020-04-02 4:01 incoming Andrew Morton ` (67 preceding siblings ...) 2020-04-02 4:06 ` [patch 068/155] mm: kmem: rename (__)memcg_kmem_(un)charge_memcg() to __memcg_kmem_(un)charge() Andrew Morton @ 2020-04-02 4:07 ` Andrew Morton 2020-04-02 4:07 ` [patch 070/155] mm: memcontrol: clean up and document effective low/min calculations Andrew Morton ` (85 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:07 UTC (permalink / raw) To: akpm, chris, guro, hannes, linux-mm, mhocko, mkoutny, mm-commits, tj, torvalds From: Johannes Weiner <hannes@cmpxchg.org> Subject: mm: memcontrol: fix memory.low proportional distribution Patch series "mm: memcontrol: recursive memory.low protection", v3. The current memory.low (and memory.min) semantics require protection to be assigned to a cgroup in an untinterrupted chain from the top-level cgroup all the way to the leaf. In practice, we want to protect entire cgroup subtrees from each other (system management software vs. workload), but we would like the VM to balance memory optimally *within* each subtree, without having to make explicit weight allocations among individual components. The current semantics make that impossible. They also introduce unmanageable complexity into more advanced resource trees. For example: host root `- system.slice `- rpm upgrades `- logging `- workload.slice `- a container `- system.slice `- workload.slice `- job A `- component 1 `- component 2 `- job B At a host-level perspective, we would like to protect the outer workload.slice subtree as a whole from rpm upgrades, logging etc. But for that to be effective, right now we'd have to propagate it down through the container, the inner workload.slice, into the job cgroup and ultimately the component cgroups where memory is actually, physically allocated. This may cross several tree delegation points and namespace boundaries, which make such a setup near impossible. CPU and IO on the other hand are already distributed recursively. The user would simply configure allowances at the host level, and they would apply to the entire subtree without any downward propagation. To enable the above-mentioned usecases and bring memory in line with other resource controllers, this patch series extends memory.low/min such that settings apply recursively to the entire subtree. Users can still assign explicit shares in subgroups, but if they don't, any ancestral protection will be distributed such that children compete freely amongst each other - as if no memory control were enabled inside the subtree - but enjoy protection from neighboring trees. In the above example, the user would then be able to configure shares of CPU, IO and memory at the host level to comprehensively protect and isolate the workload.slice as a whole from system.slice activity. Patch #1 fixes an existing bug that can give a cgroup tree more protection than it should receive as per ancestor configuration. Patch #2 simplifies and documents the existing code to make it easier to reason about the changes in the next patch. Patch #3 finally implements recursive memory protection semantics. Because of a risk of regressing legacy setups, the new semantics are hidden behind a cgroup2 mount option, 'memory_recursiveprot'. More details in patch #3. This patch (of 3): When memory.low is overcommitted - i.e. the children claim more protection than their shared ancestor grants them - the allowance is distributed in proportion to how much each sibling uses their own declared protection: low_usage = min(memory.low, memory.current) elow = parent_elow * (low_usage / siblings_low_usage) However, siblings_low_usage is not the sum of all low_usages. It sums up the usages of *only those cgroups that are within their memory.low* That means that low_usage can be *bigger* than siblings_low_usage, and consequently the total protection afforded to the children can be bigger than what the ancestor grants the subtree. Consider three groups where two are in excess of their protection: A/memory.low = 10G A/A1/memory.low = 10G, memory.current = 20G A/A2/memory.low = 10G, memory.current = 20G A/A3/memory.low = 10G, memory.current = 8G siblings_low_usage = 8G (only A3 contributes) A1/elow = parent_elow(10G) * low_usage(10G) / siblings_low_usage(8G) = 12.5G -> 10G A2/elow = parent_elow(10G) * low_usage(10G) / siblings_low_usage(8G) = 12.5G -> 10G A3/elow = parent_elow(10G) * low_usage(8G) / siblings_low_usage(8G) = 10.0G (the 12.5G are capped to the explicit memory.low setting of 10G) With that, the sum of all awarded protection below A is 30G, when A only grants 10G for the entire subtree. What does this mean in practice? A1 and A2 would still be in excess of their 10G allowance and would be reclaimed, whereas A3 would not. As they eventually drop below their protection setting, they would be counted in siblings_low_usage again and the error would right itself. When reclaim was applied in a binary fashion (cgroup is reclaimed when it's above its protection, otherwise it's skipped) this would actually work out just fine. However, since 1bc63fb1272b ("mm, memcg: make scan aggression always exclude protection"), reclaim pressure is scaled to how much a cgroup is above its protection. As a result this calculation error unduly skews pressure away from A1 and A2 toward the rest of the system. But why did we do it like this in the first place? The reasoning behind exempting groups in excess from siblings_low_usage was to go after them first during reclaim in an overcommitted subtree: A/memory.low = 2G, memory.current = 4G A/A1/memory.low = 3G, memory.current = 2G A/A2/memory.low = 1G, memory.current = 2G siblings_low_usage = 2G (only A1 contributes) A1/elow = parent_elow(2G) * low_usage(2G) / siblings_low_usage(2G) = 2G A2/elow = parent_elow(2G) * low_usage(1G) / siblings_low_usage(2G) = 1G While the children combined are overcomitting A and are technically both at fault, A2 is actively declaring unprotected memory and we would like to reclaim that first. However, while this sounds like a noble goal on the face of it, it doesn't make much difference in actual memory distribution: Because A is overcommitted, reclaim will not stop once A2 gets pushed back to within its allowance; we'll have to reclaim A1 either way. The end result is still that protection is distributed proportionally, with A1 getting 3/4 (1.5G) and A2 getting 1/4 (0.5G) of A's allowance. [ If A weren't overcommitted, it wouldn't make a difference since each cgroup would just get the protection it declares: A/memory.low = 2G, memory.current = 3G A/A1/memory.low = 1G, memory.current = 1G A/A2/memory.low = 1G, memory.current = 2G With the current calculation: siblings_low_usage = 1G (only A1 contributes) A1/elow = parent_elow(2G) * low_usage(1G) / siblings_low_usage(1G) = 2G -> 1G A2/elow = parent_elow(2G) * low_usage(1G) / siblings_low_usage(1G) = 2G -> 1G Including excess groups in siblings_low_usage: siblings_low_usage = 2G A1/elow = parent_elow(2G) * low_usage(1G) / siblings_low_usage(2G) = 1G -> 1G A2/elow = parent_elow(2G) * low_usage(1G) / siblings_low_usage(2G) = 1G -> 1G ] Simplify the calculation and fix the proportional reclaim bug by including excess cgroups in siblings_low_usage. After this patch, the effective memory.low distribution from the example above would be as follows: A/memory.low = 10G A/A1/memory.low = 10G, memory.current = 20G A/A2/memory.low = 10G, memory.current = 20G A/A3/memory.low = 10G, memory.current = 8G siblings_low_usage = 28G A1/elow = parent_elow(10G) * low_usage(10G) / siblings_low_usage(28G) = 3.5G A2/elow = parent_elow(10G) * low_usage(10G) / siblings_low_usage(28G) = 3.5G A3/elow = parent_elow(10G) * low_usage(8G) / siblings_low_usage(28G) = 2.8G Link: http://lkml.kernel.org/r/20200227195606.46212-2-hannes@cmpxchg.org Fixes: 1bc63fb1272b ("mm, memcg: make scan aggression always exclude protection") Fixes: 230671533d64 ("mm: memory.low hierarchical behavior") Signed-off-by: Johannes Weiner <hannes@cmpxchg.org> Acked-by: Tejun Heo <tj@kernel.org> Acked-by: Roman Gushchin <guro@fb.com> Acked-by: Chris Down <chris@chrisdown.name> Acked-by: Michal Hocko <mhocko@suse.com> Cc: Michal Koutný <mkoutny@suse.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/memcontrol.c | 4 +--- mm/page_counter.c | 12 ++---------- 2 files changed, 3 insertions(+), 13 deletions(-) --- a/mm/memcontrol.c~mm-memcontrol-fix-memorylow-proportional-distribution +++ a/mm/memcontrol.c @@ -6266,9 +6266,7 @@ struct cgroup_subsys memory_cgrp_subsys * elow = min( memory.low, parent->elow * ------------------ ), * siblings_low_usage * - * | memory.current, if memory.current < memory.low - * low_usage = | - * | 0, otherwise. + * low_usage = min(memory.low, memory.current) * * * Such definition of the effective memory.low provides the expected --- a/mm/page_counter.c~mm-memcontrol-fix-memorylow-proportional-distribution +++ a/mm/page_counter.c @@ -23,11 +23,7 @@ static void propagate_protected_usage(st return; if (c->min || atomic_long_read(&c->min_usage)) { - if (usage <= c->min) - protected = usage; - else - protected = 0; - + protected = min(usage, c->min); old_protected = atomic_long_xchg(&c->min_usage, protected); delta = protected - old_protected; if (delta) @@ -35,11 +31,7 @@ static void propagate_protected_usage(st } if (c->low || atomic_long_read(&c->low_usage)) { - if (usage <= c->low) - protected = usage; - else - protected = 0; - + protected = min(usage, c->low); old_protected = atomic_long_xchg(&c->low_usage, protected); delta = protected - old_protected; if (delta) _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 070/155] mm: memcontrol: clean up and document effective low/min calculations 2020-04-02 4:01 incoming Andrew Morton ` (68 preceding siblings ...) 2020-04-02 4:07 ` [patch 069/155] mm: memcontrol: fix memory.low proportional distribution Andrew Morton @ 2020-04-02 4:07 ` Andrew Morton 2020-04-02 4:07 ` [patch 071/155] mm: memcontrol: recursive memory.low protection Andrew Morton ` (84 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:07 UTC (permalink / raw) To: akpm, chris, guro, hannes, linux-mm, mhocko, mkoutny, mm-commits, tj, torvalds From: Johannes Weiner <hannes@cmpxchg.org> Subject: mm: memcontrol: clean up and document effective low/min calculations The effective protection of any given cgroup is a somewhat complicated construct that depends on the ancestor's configuration, siblings' configurations, as well as current memory utilization in all these groups. It's done this way to satisfy hierarchical delegation requirements while also making the configuration semantics flexible and expressive in complex real life scenarios. Unfortunately, all the rules and requirements are sparsely documented, and the code is a little too clever in merging different scenarios into a single min() expression. This makes it hard to reason about the implementation and avoid breaking semantics when making changes to it. This patch documents each semantic rule individually and splits out the handling of the overcommit case from the regular case. Michal Koutný also points out that the points of equilibrium as described in the existing example scenarios aren't actually accurate. Delete these examples for now to avoid confusion. Link: http://lkml.kernel.org/r/20200227195606.46212-3-hannes@cmpxchg.org Signed-off-by: Johannes Weiner <hannes@cmpxchg.org> Acked-by: Tejun Heo <tj@kernel.org> Acked-by: Roman Gushchin <guro@fb.com> Acked-by: Chris Down <chris@chrisdown.name> Acked-by: Michal Hocko <mhocko@suse.com> Cc: Michal Koutný <mkoutny@suse.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/memcontrol.c | 177 +++++++++++++++++++++------------------------- 1 file changed, 84 insertions(+), 93 deletions(-) --- a/mm/memcontrol.c~mm-memcontrol-clean-up-and-document-effective-low-min-calculations +++ a/mm/memcontrol.c @@ -6234,6 +6234,76 @@ struct cgroup_subsys memory_cgrp_subsys .early_init = 0, }; +/* + * This function calculates an individual cgroup's effective + * protection which is derived from its own memory.min/low, its + * parent's and siblings' settings, as well as the actual memory + * distribution in the tree. + * + * The following rules apply to the effective protection values: + * + * 1. At the first level of reclaim, effective protection is equal to + * the declared protection in memory.min and memory.low. + * + * 2. To enable safe delegation of the protection configuration, at + * subsequent levels the effective protection is capped to the + * parent's effective protection. + * + * 3. To make complex and dynamic subtrees easier to configure, the + * user is allowed to overcommit the declared protection at a given + * level. If that is the case, the parent's effective protection is + * distributed to the children in proportion to how much protection + * they have declared and how much of it they are utilizing. + * + * This makes distribution proportional, but also work-conserving: + * if one cgroup claims much more protection than it uses memory, + * the unused remainder is available to its siblings. + * + * 4. Conversely, when the declared protection is undercommitted at a + * given level, the distribution of the larger parental protection + * budget is NOT proportional. A cgroup's protection from a sibling + * is capped to its own memory.min/low setting. + * + */ +static unsigned long effective_protection(unsigned long usage, + unsigned long setting, + unsigned long parent_effective, + unsigned long siblings_protected) +{ + unsigned long protected; + + protected = min(usage, setting); + /* + * If all cgroups at this level combined claim and use more + * protection then what the parent affords them, distribute + * shares in proportion to utilization. + * + * We are using actual utilization rather than the statically + * claimed protection in order to be work-conserving: claimed + * but unused protection is available to siblings that would + * otherwise get a smaller chunk than what they claimed. + */ + if (siblings_protected > parent_effective) + return protected * parent_effective / siblings_protected; + + /* + * Ok, utilized protection of all children is within what the + * parent affords them, so we know whatever this child claims + * and utilizes is effectively protected. + * + * If there is unprotected usage beyond this value, reclaim + * will apply pressure in proportion to that amount. + * + * If there is unutilized protection, the cgroup will be fully + * shielded from reclaim, but we do return a smaller value for + * protection than what the group could enjoy in theory. This + * is okay. With the overcommit distribution above, effective + * protection is always dependent on how memory is actually + * consumed among the siblings anyway. + */ + return protected; +} + /** * mem_cgroup_protected - check if memory consumption is in the normal range * @root: the top ancestor of the sub-tree being checked @@ -6247,67 +6317,11 @@ struct cgroup_subsys memory_cgrp_subsys * MEMCG_PROT_LOW: cgroup memory is protected as long there is * an unprotected supply of reclaimable memory from other cgroups. * MEMCG_PROT_MIN: cgroup memory is protected - * - * @root is exclusive; it is never protected when looked at directly - * - * To provide a proper hierarchical behavior, effective memory.min/low values - * are used. Below is the description of how effective memory.low is calculated. - * Effective memory.min values is calculated in the same way. - * - * Effective memory.low is always equal or less than the original memory.low. - * If there is no memory.low overcommittment (which is always true for - * top-level memory cgroups), these two values are equal. - * Otherwise, it's a part of parent's effective memory.low, - * calculated as a cgroup's memory.low usage divided by sum of sibling's - * memory.low usages, where memory.low usage is the size of actually - * protected memory. - * - * low_usage - * elow = min( memory.low, parent->elow * ------------------ ), - * siblings_low_usage - * - * low_usage = min(memory.low, memory.current) - * - * - * Such definition of the effective memory.low provides the expected - * hierarchical behavior: parent's memory.low value is limiting - * children, unprotected memory is reclaimed first and cgroups, - * which are not using their guarantee do not affect actual memory - * distribution. - * - * For example, if there are memcgs A, A/B, A/C, A/D and A/E: - * - * A A/memory.low = 2G, A/memory.current = 6G - * //\\ - * BC DE B/memory.low = 3G B/memory.current = 2G - * C/memory.low = 1G C/memory.current = 2G - * D/memory.low = 0 D/memory.current = 2G - * E/memory.low = 10G E/memory.current = 0 - * - * and the memory pressure is applied, the following memory distribution - * is expected (approximately): - * - * A/memory.current = 2G - * - * B/memory.current = 1.3G - * C/memory.current = 0.6G - * D/memory.current = 0 - * E/memory.current = 0 - * - * These calculations require constant tracking of the actual low usages - * (see propagate_protected_usage()), as well as recursive calculation of - * effective memory.low values. But as we do call mem_cgroup_protected() - * path for each memory cgroup top-down from the reclaim, - * it's possible to optimize this part, and save calculated elow - * for next usage. This part is intentionally racy, but it's ok, - * as memory.low is a best-effort mechanism. */ enum mem_cgroup_protection mem_cgroup_protected(struct mem_cgroup *root, struct mem_cgroup *memcg) { struct mem_cgroup *parent; - unsigned long emin, parent_emin; - unsigned long elow, parent_elow; unsigned long usage; if (mem_cgroup_disabled()) @@ -6322,52 +6336,29 @@ enum mem_cgroup_protection mem_cgroup_pr if (!usage) return MEMCG_PROT_NONE; - emin = memcg->memory.min; - elow = memcg->memory.low; - parent = parent_mem_cgroup(memcg); /* No parent means a non-hierarchical mode on v1 memcg */ if (!parent) return MEMCG_PROT_NONE; - if (parent == root) - goto exit; - - parent_emin = READ_ONCE(parent->memory.emin); - emin = min(emin, parent_emin); - if (emin && parent_emin) { - unsigned long min_usage, siblings_min_usage; - - min_usage = min(usage, memcg->memory.min); - siblings_min_usage = atomic_long_read( - &parent->memory.children_min_usage); - - if (min_usage && siblings_min_usage) - emin = min(emin, parent_emin * min_usage / - siblings_min_usage); - } - - parent_elow = READ_ONCE(parent->memory.elow); - elow = min(elow, parent_elow); - if (elow && parent_elow) { - unsigned long low_usage, siblings_low_usage; - - low_usage = min(usage, memcg->memory.low); - siblings_low_usage = atomic_long_read( - &parent->memory.children_low_usage); - - if (low_usage && siblings_low_usage) - elow = min(elow, parent_elow * low_usage / - siblings_low_usage); + if (parent == root) { + memcg->memory.emin = memcg->memory.min; + memcg->memory.elow = memcg->memory.low; + goto out; } -exit: - memcg->memory.emin = emin; - memcg->memory.elow = elow; + memcg->memory.emin = effective_protection(usage, + memcg->memory.min, READ_ONCE(parent->memory.emin), + atomic_long_read(&parent->memory.children_min_usage)); + + memcg->memory.elow = effective_protection(usage, + memcg->memory.low, READ_ONCE(parent->memory.elow), + atomic_long_read(&parent->memory.children_low_usage)); - if (usage <= emin) +out: + if (usage <= memcg->memory.emin) return MEMCG_PROT_MIN; - else if (usage <= elow) + else if (usage <= memcg->memory.elow) return MEMCG_PROT_LOW; else return MEMCG_PROT_NONE; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 071/155] mm: memcontrol: recursive memory.low protection 2020-04-02 4:01 incoming Andrew Morton ` (69 preceding siblings ...) 2020-04-02 4:07 ` [patch 070/155] mm: memcontrol: clean up and document effective low/min calculations Andrew Morton @ 2020-04-02 4:07 ` Andrew Morton 2020-04-02 4:07 ` [patch 072/155] memcg: css_tryget_online cleanups Andrew Morton ` (83 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:07 UTC (permalink / raw) To: akpm, chris, guro, hannes, linux-mm, mhocko, mkoutny, mm-commits, tj, torvalds From: Johannes Weiner <hannes@cmpxchg.org> Subject: mm: memcontrol: recursive memory.low protection Right now, the effective protection of any given cgroup is capped by its own explicit memory.low setting, regardless of what the parent says. The reasons for this are mostly historical and ease of implementation: to make delegation of memory.low safe, effective protection is the min() of all memory.low up the tree. Unfortunately, this limitation makes it impossible to protect an entire subtree from another without forcing the user to make explicit protection allocations all the way to the leaf cgroups - something that is highly undesirable in real life scenarios. Consider memory in a data center host. At the cgroup top level, we have a distinction between system management software and the actual workload the system is executing. Both branches are further subdivided into individual services, job components etc. We want to protect the workload as a whole from the system management software, but that doesn't mean we want to protect and prioritize individual workload wrt each other. Their memory demand can vary over time, and we'd want the VM to simply cache the hottest data within the workload subtree. Yet, the current memory.low limitations force us to allocate a fixed amount of protection to each workload component in order to get protection from system management software in general. This results in very inefficient resource distribution. Another concern with mandating downward allocation is that, as the complexity of the cgroup tree grows, it gets harder for the lower levels to be informed about decisions made at the host-level. Consider a container inside a namespace that in turn creates its own nested tree of cgroups to run multiple workloads. It'd be extremely difficult to configure memory.low parameters in those leaf cgroups that on one hand balance pressure among siblings as the container desires, while also reflecting the host-level protection from e.g. rpm upgrades, that lie beyond one or more delegation and namespacing points in the tree. It's highly unusual from a cgroup interface POV that nested levels have to be aware of and reflect decisions made at higher levels for them to be effective. To enable such use cases and scale configurability for complex trees, this patch implements a resource inheritance model for memory that is similar to how the CPU and the IO controller implement work-conserving resource allocations: a share of a resource allocated to a subree always applies to the entire subtree recursively, while allowing, but not mandating, children to further specify distribution rules. That means that if protection is explicitly allocated among siblings, those configured shares are being followed during page reclaim just like they are now. However, if the memory.low set at a higher level is not fully claimed by the children in that subtree, the "floating" remainder is applied to each cgroup in the tree in proportion to its size. Since reclaim pressure is applied in proportion to size as well, each child in that tree gets the same boost, and the effect is neutral among siblings - with respect to each other, they behave as if no memory control was enabled at all, and the VM simply balances the memory demands optimally within the subtree. But collectively those cgroups enjoy a boost over the cgroups in neighboring trees. E.g. a leaf cgroup with a memory.low setting of 0 no longer means that it's not getting a share of the hierarchically assigned resource, just that it doesn't claim a fixed amount of it to protect from its siblings. This allows us to recursively protect one subtree (workload) from another (system management), while letting subgroups compete freely among each other - without having to assign fixed shares to each leaf, and without nested groups having to echo higher-level settings. The floating protection composes naturally with fixed protection. Consider the following example tree: A A: low = 2G / \ A1: low = 1G A1 A2 A2: low = 0G As outside pressure is applied to this tree, A1 will enjoy a fixed protection from A2 of 1G, but the remaining, unclaimed 1G from A is split evenly among A1 and A2, coming out to 1.5G and 0.5G. There is a slight risk of regressing theoretical setups where the top-level cgroups don't know about the true budgeting and set bogusly high "bypass" values that are meaningfully allocated down the tree. Such setups would rely on unclaimed protection to be discarded, and distributing it would change the intended behavior. Be safe and hide the new behavior behind a mount option, 'memory_recursiveprot'. Link: http://lkml.kernel.org/r/20200227195606.46212-4-hannes@cmpxchg.org Signed-off-by: Johannes Weiner <hannes@cmpxchg.org> Acked-by: Tejun Heo <tj@kernel.org> Acked-by: Roman Gushchin <guro@fb.com> Acked-by: Chris Down <chris@chrisdown.name> Cc: Michal Hocko <mhocko@suse.com> Cc: Michal Koutný <mkoutny@suse.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- Documentation/admin-guide/cgroup-v2.rst | 11 ++++ include/linux/cgroup-defs.h | 5 ++ kernel/cgroup/cgroup.c | 17 ++++++- mm/memcontrol.c | 51 ++++++++++++++++++++-- 4 files changed, 79 insertions(+), 5 deletions(-) --- a/Documentation/admin-guide/cgroup-v2.rst~mm-memcontrol-recursive-memorylow-protection +++ a/Documentation/admin-guide/cgroup-v2.rst @@ -188,6 +188,17 @@ cgroup v2 currently supports the followi modified through remount from the init namespace. The mount option is ignored on non-init namespace mounts. + memory_recursiveprot + + Recursively apply memory.min and memory.low protection to + entire subtrees, without requiring explicit downward + propagation into leaf cgroups. This allows protecting entire + subtrees from one another, while retaining free competition + within those subtrees. This should have been the default + behavior but is a mount-option to avoid regressing setups + relying on the original semantics (e.g. specifying bogusly + high 'bypass' protection values at higher tree levels). + Organizing Processes and Threads -------------------------------- --- a/include/linux/cgroup-defs.h~mm-memcontrol-recursive-memorylow-protection +++ a/include/linux/cgroup-defs.h @@ -94,6 +94,11 @@ enum { * Enable legacy local memory.events. */ CGRP_ROOT_MEMORY_LOCAL_EVENTS = (1 << 5), + + /* + * Enable recursive subtree protection + */ + CGRP_ROOT_MEMORY_RECURSIVE_PROT = (1 << 6), }; /* cftype->flags */ --- a/kernel/cgroup/cgroup.c~mm-memcontrol-recursive-memorylow-protection +++ a/kernel/cgroup/cgroup.c @@ -1813,12 +1813,14 @@ int cgroup_show_path(struct seq_file *sf enum cgroup2_param { Opt_nsdelegate, Opt_memory_localevents, + Opt_memory_recursiveprot, nr__cgroup2_params }; static const struct fs_parameter_spec cgroup2_fs_parameters[] = { fsparam_flag("nsdelegate", Opt_nsdelegate), fsparam_flag("memory_localevents", Opt_memory_localevents), + fsparam_flag("memory_recursiveprot", Opt_memory_recursiveprot), {} }; @@ -1839,6 +1841,9 @@ static int cgroup2_parse_param(struct fs case Opt_memory_localevents: ctx->flags |= CGRP_ROOT_MEMORY_LOCAL_EVENTS; return 0; + case Opt_memory_recursiveprot: + ctx->flags |= CGRP_ROOT_MEMORY_RECURSIVE_PROT; + return 0; } return -EINVAL; } @@ -1855,6 +1860,11 @@ static void apply_cgroup_root_flags(unsi cgrp_dfl_root.flags |= CGRP_ROOT_MEMORY_LOCAL_EVENTS; else cgrp_dfl_root.flags &= ~CGRP_ROOT_MEMORY_LOCAL_EVENTS; + + if (root_flags & CGRP_ROOT_MEMORY_RECURSIVE_PROT) + cgrp_dfl_root.flags |= CGRP_ROOT_MEMORY_RECURSIVE_PROT; + else + cgrp_dfl_root.flags &= ~CGRP_ROOT_MEMORY_RECURSIVE_PROT; } } @@ -1864,6 +1874,8 @@ static int cgroup_show_options(struct se seq_puts(seq, ",nsdelegate"); if (cgrp_dfl_root.flags & CGRP_ROOT_MEMORY_LOCAL_EVENTS) seq_puts(seq, ",memory_localevents"); + if (cgrp_dfl_root.flags & CGRP_ROOT_MEMORY_RECURSIVE_PROT) + seq_puts(seq, ",memory_recursiveprot"); return 0; } @@ -6412,7 +6424,10 @@ static struct kobj_attribute cgroup_dele static ssize_t features_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { - return snprintf(buf, PAGE_SIZE, "nsdelegate\nmemory_localevents\n"); + return snprintf(buf, PAGE_SIZE, + "nsdelegate\n" + "memory_localevents\n" + "memory_recursiveprot\n"); } static struct kobj_attribute cgroup_features_attr = __ATTR_RO(features); --- a/mm/memcontrol.c~mm-memcontrol-recursive-memorylow-protection +++ a/mm/memcontrol.c @@ -6264,13 +6264,27 @@ struct cgroup_subsys memory_cgrp_subsys * budget is NOT proportional. A cgroup's protection from a sibling * is capped to its own memory.min/low setting. * + * 5. However, to allow protecting recursive subtrees from each other + * without having to declare each individual cgroup's fixed share + * of the ancestor's claim to protection, any unutilized - + * "floating" - protection from up the tree is distributed in + * proportion to each cgroup's *usage*. This makes the protection + * neutral wrt sibling cgroups and lets them compete freely over + * the shared parental protection budget, but it protects the + * subtree as a whole from neighboring subtrees. + * + * Note that 4. and 5. are not in conflict: 4. is about protecting + * against immediate siblings whereas 5. is about protecting against + * neighboring subtrees. */ static unsigned long effective_protection(unsigned long usage, + unsigned long parent_usage, unsigned long setting, unsigned long parent_effective, unsigned long siblings_protected) { unsigned long protected; + unsigned long ep; protected = min(usage, setting); /* @@ -6301,7 +6315,34 @@ static unsigned long effective_protectio * protection is always dependent on how memory is actually * consumed among the siblings anyway. */ - return protected; + ep = protected; + + /* + * If the children aren't claiming (all of) the protection + * afforded to them by the parent, distribute the remainder in + * proportion to the (unprotected) memory of each cgroup. That + * way, cgroups that aren't explicitly prioritized wrt each + * other compete freely over the allowance, but they are + * collectively protected from neighboring trees. + * + * We're using unprotected memory for the weight so that if + * some cgroups DO claim explicit protection, we don't protect + * the same bytes twice. + */ + if (!(cgrp_dfl_root.flags & CGRP_ROOT_MEMORY_RECURSIVE_PROT)) + return ep; + + if (parent_effective > siblings_protected && usage > protected) { + unsigned long unclaimed; + + unclaimed = parent_effective - siblings_protected; + unclaimed *= usage - protected; + unclaimed /= parent_usage - siblings_protected; + + ep += unclaimed; + } + + return ep; } /** @@ -6321,8 +6362,8 @@ static unsigned long effective_protectio enum mem_cgroup_protection mem_cgroup_protected(struct mem_cgroup *root, struct mem_cgroup *memcg) { + unsigned long usage, parent_usage; struct mem_cgroup *parent; - unsigned long usage; if (mem_cgroup_disabled()) return MEMCG_PROT_NONE; @@ -6347,11 +6388,13 @@ enum mem_cgroup_protection mem_cgroup_pr goto out; } - memcg->memory.emin = effective_protection(usage, + parent_usage = page_counter_read(&parent->memory); + + memcg->memory.emin = effective_protection(usage, parent_usage, memcg->memory.min, READ_ONCE(parent->memory.emin), atomic_long_read(&parent->memory.children_min_usage)); - memcg->memory.elow = effective_protection(usage, + memcg->memory.elow = effective_protection(usage, parent_usage, memcg->memory.low, READ_ONCE(parent->memory.elow), atomic_long_read(&parent->memory.children_low_usage)); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 072/155] memcg: css_tryget_online cleanups 2020-04-02 4:01 incoming Andrew Morton ` (70 preceding siblings ...) 2020-04-02 4:07 ` [patch 071/155] mm: memcontrol: recursive memory.low protection Andrew Morton @ 2020-04-02 4:07 ` Andrew Morton 2020-04-02 4:07 ` [patch 073/155] mm/memcontrol.c: make mem_cgroup_id_get_many() __maybe_unused Andrew Morton ` (82 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:07 UTC (permalink / raw) To: akpm, guro, hannes, linux-mm, mhocko, mm-commits, shakeelb, torvalds, vdavydov.dev From: Shakeel Butt <shakeelb@google.com> Subject: memcg: css_tryget_online cleanups Currently multiple locations in memcg code, css_tryget_online() is being used. However it doesn't matter whether the cgroup is online for the callers. Online used to matter when we had reparenting on offlining and we needed a way to prevent new ones from showing up. The failure case for couple of these css_tryget_online usage is to fallback to root_mem_cgroup which kind of make bypassing the memcg limits possible for some workloads. For example creating an inotify group in a subcontainer and then deleting that container after moving the process to a different container will make all the event objects allocated for that group to the root_mem_cgroup. So, using css_tryget_online() is dangerous for such cases. Two locations still use the online version. The swapin of offlined memcg's pages and the memcg kmem cache creation. The kmem cache indeed needs the online version as the kernel does the reparenting of memcg kmem caches. For the swapin case, it has been left for later as the fallback is not really that concerning. With swap accounting enabled, if the memcg of the swapped out page is not online then the memcg extracted from the given 'mm' will be charged and if 'mm' is NULL then root memcg will be charged. However I could not find a code path where the given 'mm' will be NULL for swap-in case. Link: http://lkml.kernel.org/r/20200302203109.179417-1-shakeelb@google.com Signed-off-by: Shakeel Butt <shakeelb@google.com> Acked-by: Michal Hocko <mhocko@suse.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Vladimir Davydov <vdavydov.dev@gmail.com> Cc: Roman Gushchin <guro@fb.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/memcontrol.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) --- a/mm/memcontrol.c~memcg-css_tryget_online-cleanups +++ a/mm/memcontrol.c @@ -656,7 +656,7 @@ retry: */ __mem_cgroup_remove_exceeded(mz, mctz); if (!soft_limit_excess(mz->memcg) || - !css_tryget_online(&mz->memcg->css)) + !css_tryget(&mz->memcg->css)) goto retry; done: return mz; @@ -972,7 +972,8 @@ struct mem_cgroup *get_mem_cgroup_from_p return NULL; rcu_read_lock(); - if (!memcg || !css_tryget_online(&memcg->css)) + /* Page should not get uncharged and freed memcg under us. */ + if (!memcg || WARN_ON_ONCE(!css_tryget(&memcg->css))) memcg = root_mem_cgroup; rcu_read_unlock(); return memcg; @@ -985,10 +986,13 @@ EXPORT_SYMBOL(get_mem_cgroup_from_page); static __always_inline struct mem_cgroup *get_mem_cgroup_from_current(void) { if (unlikely(current->active_memcg)) { - struct mem_cgroup *memcg = root_mem_cgroup; + struct mem_cgroup *memcg; rcu_read_lock(); - if (css_tryget_online(¤t->active_memcg->css)) + /* current->active_memcg must hold a ref. */ + if (WARN_ON_ONCE(!css_tryget(¤t->active_memcg->css))) + memcg = root_mem_cgroup; + else memcg = current->active_memcg; rcu_read_unlock(); return memcg; @@ -6789,7 +6793,7 @@ void mem_cgroup_sk_alloc(struct sock *sk goto out; if (!cgroup_subsys_on_dfl(memory_cgrp_subsys) && !memcg->tcpmem_active) goto out; - if (css_tryget_online(&memcg->css)) + if (css_tryget(&memcg->css)) sk->sk_memcg = memcg; out: rcu_read_unlock(); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 073/155] mm/memcontrol.c: make mem_cgroup_id_get_many() __maybe_unused 2020-04-02 4:01 incoming Andrew Morton ` (71 preceding siblings ...) 2020-04-02 4:07 ` [patch 072/155] memcg: css_tryget_online cleanups Andrew Morton @ 2020-04-02 4:07 ` Andrew Morton 2020-04-02 4:07 ` [patch 074/155] mm, memcg: prevent memory.high load/store tearing Andrew Morton ` (81 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:07 UTC (permalink / raw) To: akpm, chris, hannes, linux-mm, mhocko, mm-commits, torvalds, vdavydov.dev, vincenzo.frascino From: Vincenzo Frascino <vincenzo.frascino@arm.com> Subject: mm/memcontrol.c: make mem_cgroup_id_get_many() __maybe_unused mem_cgroup_id_get_many() is currently used only when MMU or MEMCG_SWAP configuration options are enabled. Having them disabled triggers the following warning at compile time: linux/mm/memcontrol.c:4797:13: warning: `mem_cgroup_id_get_many' defined but not used [-Wunused-function] static void mem_cgroup_id_get_many(struct mem_cgroup *memcg, unsigned int n) Make mem_cgroup_id_get_many() __maybe_unused to address the issue. Link: http://lkml.kernel.org/r/20200305164354.48147-1-vincenzo.frascino@arm.com Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Acked-by: Chris Down <chris@chrisdown.name> Cc: Michal Hocko <mhocko@kernel.org> Cc: Vladimir Davydov <vdavydov.dev@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/memcontrol.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --- a/mm/memcontrol.c~mm-make-mem_cgroup_id_get_many-__maybe_unused +++ a/mm/memcontrol.c @@ -4863,7 +4863,8 @@ static void mem_cgroup_id_remove(struct } } -static void mem_cgroup_id_get_many(struct mem_cgroup *memcg, unsigned int n) +static void __maybe_unused mem_cgroup_id_get_many(struct mem_cgroup *memcg, + unsigned int n) { refcount_add(n, &memcg->id.ref); } _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 074/155] mm, memcg: prevent memory.high load/store tearing 2020-04-02 4:01 incoming Andrew Morton ` (72 preceding siblings ...) 2020-04-02 4:07 ` [patch 073/155] mm/memcontrol.c: make mem_cgroup_id_get_many() __maybe_unused Andrew Morton @ 2020-04-02 4:07 ` Andrew Morton 2020-04-02 4:07 ` [patch 075/155] mm, memcg: prevent memory.max load tearing Andrew Morton ` (80 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:07 UTC (permalink / raw) To: akpm, chris, guro, hannes, linux-mm, mhocko, mm-commits, tj, torvalds From: Chris Down <chris@chrisdown.name> Subject: mm, memcg: prevent memory.high load/store tearing A mem_cgroup's high attribute can be concurrently set at the same time as we are trying to read it -- for example, if we are in memory_high_write at the same time as we are trying to do high reclaim. Link: http://lkml.kernel.org/r/2f66f7038ed1d4688e59de72b627ae0ea52efa83.1584034301.git.chris@chrisdown.name Signed-off-by: Chris Down <chris@chrisdown.name> Acked-by: Michal Hocko <mhocko@suse.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Roman Gushchin <guro@fb.com> Cc: Tejun Heo <tj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/memcontrol.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) --- a/mm/memcontrol.c~mm-memcg-prevent-memoryhigh-load-store-tearing +++ a/mm/memcontrol.c @@ -2242,7 +2242,7 @@ static void reclaim_high(struct mem_cgro gfp_t gfp_mask) { do { - if (page_counter_read(&memcg->memory) <= memcg->high) + if (page_counter_read(&memcg->memory) <= READ_ONCE(memcg->high)) continue; memcg_memory_event(memcg, MEMCG_HIGH); try_to_free_mem_cgroup_pages(memcg, nr_pages, gfp_mask, true); @@ -2582,7 +2582,7 @@ done_restock: * reclaim, the cost of mismatch is negligible. */ do { - if (page_counter_read(&memcg->memory) > memcg->high) { + if (page_counter_read(&memcg->memory) > READ_ONCE(memcg->high)) { /* Don't bother a random interrupted task */ if (in_interrupt()) { schedule_work(&memcg->high_work); @@ -4325,7 +4325,8 @@ void mem_cgroup_wb_stats(struct bdi_writ *pheadroom = PAGE_COUNTER_MAX; while ((parent = parent_mem_cgroup(memcg))) { - unsigned long ceiling = min(memcg->memory.max, memcg->high); + unsigned long ceiling = min(memcg->memory.max, + READ_ONCE(memcg->high)); unsigned long used = page_counter_read(&memcg->memory); *pheadroom = min(*pheadroom, ceiling - min(ceiling, used)); @@ -5047,7 +5048,7 @@ mem_cgroup_css_alloc(struct cgroup_subsy if (!memcg) return ERR_PTR(error); - memcg->high = PAGE_COUNTER_MAX; + WRITE_ONCE(memcg->high, PAGE_COUNTER_MAX); memcg->soft_limit = PAGE_COUNTER_MAX; if (parent) { memcg->swappiness = mem_cgroup_swappiness(parent); @@ -5200,7 +5201,7 @@ static void mem_cgroup_css_reset(struct page_counter_set_max(&memcg->tcpmem, PAGE_COUNTER_MAX); page_counter_set_min(&memcg->memory, 0); page_counter_set_low(&memcg->memory, 0); - memcg->high = PAGE_COUNTER_MAX; + WRITE_ONCE(memcg->high, PAGE_COUNTER_MAX); memcg->soft_limit = PAGE_COUNTER_MAX; memcg_wb_domain_size_changed(memcg); } @@ -6016,7 +6017,7 @@ static ssize_t memory_high_write(struct if (err) return err; - memcg->high = high; + WRITE_ONCE(memcg->high, high); for (;;) { unsigned long nr_pages = page_counter_read(&memcg->memory); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 075/155] mm, memcg: prevent memory.max load tearing 2020-04-02 4:01 incoming Andrew Morton ` (73 preceding siblings ...) 2020-04-02 4:07 ` [patch 074/155] mm, memcg: prevent memory.high load/store tearing Andrew Morton @ 2020-04-02 4:07 ` Andrew Morton 2020-04-02 4:07 ` [patch 076/155] mm, memcg: prevent memory.low load/store tearing Andrew Morton ` (79 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:07 UTC (permalink / raw) To: akpm, chris, guro, hannes, linux-mm, mhocko, mm-commits, tj, torvalds From: Chris Down <chris@chrisdown.name> Subject: mm, memcg: prevent memory.max load tearing This one is a bit more nuanced because we have memcg_max_mutex, which is mostly just used for enforcing invariants, but we still need to READ_ONCE since (despite its name) it doesn't really protect memory.max access. On write (page_counter_set_max() and memory_max_write()) we use xchg(), which uses smp_mb(), so that's already fine. Link: http://lkml.kernel.org/r/50a31e5f39f8ae6c8fb73966ba1455f0924e8f44.1584034301.git.chris@chrisdown.name Signed-off-by: Chris Down <chris@chrisdown.name> Acked-by: Michal Hocko <mhocko@suse.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Roman Gushchin <guro@fb.com> Cc: Tejun Heo <tj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/memcontrol.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) --- a/mm/memcontrol.c~mm-memcg-prevent-memorymax-load-tearing +++ a/mm/memcontrol.c @@ -1521,7 +1521,7 @@ void mem_cgroup_print_oom_meminfo(struct pr_info("memory: usage %llukB, limit %llukB, failcnt %lu\n", K((u64)page_counter_read(&memcg->memory)), - K((u64)memcg->memory.max), memcg->memory.failcnt); + K((u64)READ_ONCE(memcg->memory.max)), memcg->memory.failcnt); if (cgroup_subsys_on_dfl(memory_cgrp_subsys)) pr_info("swap: usage %llukB, limit %llukB, failcnt %lu\n", K((u64)page_counter_read(&memcg->swap)), @@ -1552,7 +1552,7 @@ unsigned long mem_cgroup_get_max(struct { unsigned long max; - max = memcg->memory.max; + max = READ_ONCE(memcg->memory.max); if (mem_cgroup_swappiness(memcg)) { unsigned long memsw_max; unsigned long swap_max; @@ -3068,7 +3068,7 @@ static int mem_cgroup_resize_max(struct * Make sure that the new limit (memsw or memory limit) doesn't * break our basic invariant rule memory.max <= memsw.max. */ - limits_invariant = memsw ? max >= memcg->memory.max : + limits_invariant = memsw ? max >= READ_ONCE(memcg->memory.max) : max <= memcg->memsw.max; if (!limits_invariant) { mutex_unlock(&memcg_max_mutex); @@ -3815,8 +3815,8 @@ static int memcg_stat_show(struct seq_fi /* Hierarchical information */ memory = memsw = PAGE_COUNTER_MAX; for (mi = memcg; mi; mi = parent_mem_cgroup(mi)) { - memory = min(memory, mi->memory.max); - memsw = min(memsw, mi->memsw.max); + memory = min(memory, READ_ONCE(mi->memory.max)); + memsw = min(memsw, READ_ONCE(mi->memsw.max)); } seq_printf(m, "hierarchical_memory_limit %llu\n", (u64)memory * PAGE_SIZE); @@ -4325,7 +4325,7 @@ void mem_cgroup_wb_stats(struct bdi_writ *pheadroom = PAGE_COUNTER_MAX; while ((parent = parent_mem_cgroup(memcg))) { - unsigned long ceiling = min(memcg->memory.max, + unsigned long ceiling = min(READ_ONCE(memcg->memory.max), READ_ONCE(memcg->high)); unsigned long used = page_counter_read(&memcg->memory); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 076/155] mm, memcg: prevent memory.low load/store tearing 2020-04-02 4:01 incoming Andrew Morton ` (74 preceding siblings ...) 2020-04-02 4:07 ` [patch 075/155] mm, memcg: prevent memory.max load tearing Andrew Morton @ 2020-04-02 4:07 ` Andrew Morton 2020-04-02 4:07 ` [patch 077/155] mm, memcg: prevent memory.min " Andrew Morton ` (78 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:07 UTC (permalink / raw) To: akpm, chris, guro, hannes, linux-mm, mhocko, mm-commits, tj, torvalds From: Chris Down <chris@chrisdown.name> Subject: mm, memcg: prevent memory.low load/store tearing This can be set concurrently with reads, which may cause the wrong value to be propagated. Link: http://lkml.kernel.org/r/448206f44b0fa7be9dad2ca2601d2bcb2c0b7844.1584034301.git.chris@chrisdown.name Signed-off-by: Chris Down <chris@chrisdown.name> Acked-by: Michal Hocko <mhocko@suse.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Roman Gushchin <guro@fb.com> Cc: Tejun Heo <tj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/page_counter.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) --- a/mm/page_counter.c~mm-memcg-prevent-memorylow-load-store-tearing +++ a/mm/page_counter.c @@ -17,6 +17,7 @@ static void propagate_protected_usage(st unsigned long usage) { unsigned long protected, old_protected; + unsigned long low; long delta; if (!c->parent) @@ -30,8 +31,9 @@ static void propagate_protected_usage(st atomic_long_add(delta, &c->parent->children_min_usage); } - if (c->low || atomic_long_read(&c->low_usage)) { - protected = min(usage, c->low); + low = READ_ONCE(c->low); + if (low || atomic_long_read(&c->low_usage)) { + protected = min(usage, low); old_protected = atomic_long_xchg(&c->low_usage, protected); delta = protected - old_protected; if (delta) @@ -222,7 +224,7 @@ void page_counter_set_low(struct page_co { struct page_counter *c; - counter->low = nr_pages; + WRITE_ONCE(counter->low, nr_pages); for (c = counter; c; c = c->parent) propagate_protected_usage(c, atomic_long_read(&c->usage)); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 077/155] mm, memcg: prevent memory.min load/store tearing 2020-04-02 4:01 incoming Andrew Morton ` (75 preceding siblings ...) 2020-04-02 4:07 ` [patch 076/155] mm, memcg: prevent memory.low load/store tearing Andrew Morton @ 2020-04-02 4:07 ` Andrew Morton 2020-04-02 4:07 ` [patch 078/155] mm, memcg: prevent memory.swap.max load tearing Andrew Morton ` (77 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:07 UTC (permalink / raw) To: akpm, chris, guro, hannes, linux-mm, mhocko, mm-commits, tj, torvalds From: Chris Down <chris@chrisdown.name> Subject: mm, memcg: prevent memory.min load/store tearing This can be set concurrently with reads, which may cause the wrong value to be propagated. Link: http://lkml.kernel.org/r/e809b4e6b0c1626dac6945970de06409a180ee65.1584034301.git.chris@chrisdown.name Signed-off-by: Chris Down <chris@chrisdown.name> Acked-by: Michal Hocko <mhocko@suse.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Roman Gushchin <guro@fb.com> Cc: Tejun Heo <tj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/memcontrol.c | 5 +++-- mm/page_counter.c | 9 +++++---- 2 files changed, 8 insertions(+), 6 deletions(-) --- a/mm/memcontrol.c~mm-memcg-prevent-memorymin-load-store-tearing +++ a/mm/memcontrol.c @@ -6389,7 +6389,7 @@ enum mem_cgroup_protection mem_cgroup_pr return MEMCG_PROT_NONE; if (parent == root) { - memcg->memory.emin = memcg->memory.min; + memcg->memory.emin = READ_ONCE(memcg->memory.min); memcg->memory.elow = memcg->memory.low; goto out; } @@ -6397,7 +6397,8 @@ enum mem_cgroup_protection mem_cgroup_pr parent_usage = page_counter_read(&parent->memory); memcg->memory.emin = effective_protection(usage, parent_usage, - memcg->memory.min, READ_ONCE(parent->memory.emin), + READ_ONCE(memcg->memory.min), + READ_ONCE(parent->memory.emin), atomic_long_read(&parent->memory.children_min_usage)); memcg->memory.elow = effective_protection(usage, parent_usage, --- a/mm/page_counter.c~mm-memcg-prevent-memorymin-load-store-tearing +++ a/mm/page_counter.c @@ -17,14 +17,15 @@ static void propagate_protected_usage(st unsigned long usage) { unsigned long protected, old_protected; - unsigned long low; + unsigned long low, min; long delta; if (!c->parent) return; - if (c->min || atomic_long_read(&c->min_usage)) { - protected = min(usage, c->min); + min = READ_ONCE(c->min); + if (min || atomic_long_read(&c->min_usage)) { + protected = min(usage, min); old_protected = atomic_long_xchg(&c->min_usage, protected); delta = protected - old_protected; if (delta) @@ -207,7 +208,7 @@ void page_counter_set_min(struct page_co { struct page_counter *c; - counter->min = nr_pages; + WRITE_ONCE(counter->min, nr_pages); for (c = counter; c; c = c->parent) propagate_protected_usage(c, atomic_long_read(&c->usage)); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 078/155] mm, memcg: prevent memory.swap.max load tearing 2020-04-02 4:01 incoming Andrew Morton ` (76 preceding siblings ...) 2020-04-02 4:07 ` [patch 077/155] mm, memcg: prevent memory.min " Andrew Morton @ 2020-04-02 4:07 ` Andrew Morton 2020-04-02 4:07 ` [patch 079/155] mm, memcg: prevent mem_cgroup_protected store tearing Andrew Morton ` (76 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:07 UTC (permalink / raw) To: akpm, chris, guro, hannes, linux-mm, mhocko, mm-commits, tj, torvalds From: Chris Down <chris@chrisdown.name> Subject: mm, memcg: prevent memory.swap.max load tearing The write side of this is xchg()/smp_mb(), so that's all good. Just a few sites missing a READ_ONCE. Link: http://lkml.kernel.org/r/bbec2c3d822217334855c8877a9d28b2a6d395fb.1584034301.git.chris@chrisdown.name Signed-off-by: Chris Down <chris@chrisdown.name> Acked-by: Michal Hocko <mhocko@suse.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Roman Gushchin <guro@fb.com> Cc: Tejun Heo <tj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/memcontrol.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) --- a/mm/memcontrol.c~mm-memcg-prevent-memoryswapmax-load-tearing +++ a/mm/memcontrol.c @@ -1525,7 +1525,7 @@ void mem_cgroup_print_oom_meminfo(struct if (cgroup_subsys_on_dfl(memory_cgrp_subsys)) pr_info("swap: usage %llukB, limit %llukB, failcnt %lu\n", K((u64)page_counter_read(&memcg->swap)), - K((u64)memcg->swap.max), memcg->swap.failcnt); + K((u64)READ_ONCE(memcg->swap.max)), memcg->swap.failcnt); else { pr_info("memory+swap: usage %llukB, limit %llukB, failcnt %lu\n", K((u64)page_counter_read(&memcg->memsw)), @@ -1558,7 +1558,7 @@ unsigned long mem_cgroup_get_max(struct unsigned long swap_max; memsw_max = memcg->memsw.max; - swap_max = memcg->swap.max; + swap_max = READ_ONCE(memcg->swap.max); swap_max = min(swap_max, (unsigned long)total_swap_pages); max = min(max + swap_max, memsw_max); } @@ -7117,7 +7117,8 @@ bool mem_cgroup_swap_full(struct page *p return false; for (; memcg != root_mem_cgroup; memcg = parent_mem_cgroup(memcg)) - if (page_counter_read(&memcg->swap) * 2 >= memcg->swap.max) + if (page_counter_read(&memcg->swap) * 2 >= + READ_ONCE(memcg->swap.max)) return true; return false; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 079/155] mm, memcg: prevent mem_cgroup_protected store tearing 2020-04-02 4:01 incoming Andrew Morton ` (77 preceding siblings ...) 2020-04-02 4:07 ` [patch 078/155] mm, memcg: prevent memory.swap.max load tearing Andrew Morton @ 2020-04-02 4:07 ` Andrew Morton 2020-04-02 4:07 ` [patch 080/155] mm: memcg: make memory.oom.group tolerable to task migration Andrew Morton ` (75 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:07 UTC (permalink / raw) To: akpm, chris, guro, hannes, linux-mm, mhocko, mm-commits, tj, torvalds From: Chris Down <chris@chrisdown.name> Subject: mm, memcg: prevent mem_cgroup_protected store tearing The read side of this is all protected, but we can still tear if multiple iterations of mem_cgroup_protected are going at the same time. There's some intentional racing in mem_cgroup_protected which is ok, but load/store tearing should be avoided. Link: http://lkml.kernel.org/r/d1e9fbc0379fe8db475d82c8b6fbe048876e12ae.1584034301.git.chris@chrisdown.name Signed-off-by: Chris Down <chris@chrisdown.name> Acked-by: Michal Hocko <mhocko@suse.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Roman Gushchin <guro@fb.com> Cc: Tejun Heo <tj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/memcontrol.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) --- a/mm/memcontrol.c~mm-memcg-prevent-mem_cgroup_protected-store-tearing +++ a/mm/memcontrol.c @@ -6396,14 +6396,14 @@ enum mem_cgroup_protection mem_cgroup_pr parent_usage = page_counter_read(&parent->memory); - memcg->memory.emin = effective_protection(usage, parent_usage, + WRITE_ONCE(memcg->memory.emin, effective_protection(usage, parent_usage, READ_ONCE(memcg->memory.min), READ_ONCE(parent->memory.emin), - atomic_long_read(&parent->memory.children_min_usage)); + atomic_long_read(&parent->memory.children_min_usage))); - memcg->memory.elow = effective_protection(usage, parent_usage, + WRITE_ONCE(memcg->memory.elow, effective_protection(usage, parent_usage, memcg->memory.low, READ_ONCE(parent->memory.elow), - atomic_long_read(&parent->memory.children_low_usage)); + atomic_long_read(&parent->memory.children_low_usage))); out: if (usage <= memcg->memory.emin) _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 080/155] mm: memcg: make memory.oom.group tolerable to task migration 2020-04-02 4:01 incoming Andrew Morton ` (78 preceding siblings ...) 2020-04-02 4:07 ` [patch 079/155] mm, memcg: prevent mem_cgroup_protected store tearing Andrew Morton @ 2020-04-02 4:07 ` Andrew Morton 2020-04-02 4:07 ` [patch 081/155] mm/mapping_dirty_helpers: update huge page-table entry callbacks Andrew Morton ` (74 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:07 UTC (permalink / raw) To: akpm, dschatzberg, guro, hannes, linux-mm, mhocko, mm-commits, torvalds From: Roman Gushchin <guro@fb.com> Subject: mm: memcg: make memory.oom.group tolerable to task migration If a task is getting moved out of the OOMing cgroup, it might result in unexpected OOM killings if memory.oom.group is used anywhere in the cgroup tree. Imagine the following example: A (oom.group = 1) / \ (OOM) B C Let's say B's memory.max is exceeded and it's OOMing. The OOM killer selects a task in B as a victim, but someone asynchronously moves the task into C. mem_cgroup_get_oom_group() will iterate over all ancestors of C up to the root cgroup. In theory it had to stop at the oom_domain level - the memory cgroup which is OOMing. But because B is not an ancestor of C, it's not happening. Instead it chooses A (because it's oom.group is set), and kills all tasks in A. This behavior is wrong because the OOM happened in B, so there is no reason to kill anything outside. Fix this by checking it the memory cgroup to which the task belongs is a descendant of the oom_domain. If not, memory.oom.group should be ignored, and the OOM killer should kill only the victim task. Link: http://lkml.kernel.org/r/20200316223510.3176148-1-guro@fb.com Signed-off-by: Roman Gushchin <guro@fb.com> Reported-by: Dan Schatzberg <dschatzberg@fb.com> Acked-by: Michal Hocko <mhocko@suse.com> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/memcontrol.c | 8 ++++++++ 1 file changed, 8 insertions(+) --- a/mm/memcontrol.c~mm-memcg-make-memoryoomgroup-tolerable-to-task-migration +++ a/mm/memcontrol.c @@ -1931,6 +1931,14 @@ struct mem_cgroup *mem_cgroup_get_oom_gr goto out; /* + * If the victim task has been asynchronously moved to a different + * memory cgroup, we might end up killing tasks outside oom_domain. + * In this case it's better to ignore memory.group.oom. + */ + if (unlikely(!mem_cgroup_is_descendant(memcg, oom_domain))) + goto out; + + /* * Traverse the memory cgroup hierarchy from the victim task's * cgroup up to the OOMing cgroup (or root) to find the * highest-level memory cgroup with oom.group set. _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 081/155] mm/mapping_dirty_helpers: update huge page-table entry callbacks 2020-04-02 4:01 incoming Andrew Morton ` (79 preceding siblings ...) 2020-04-02 4:07 ` [patch 080/155] mm: memcg: make memory.oom.group tolerable to task migration Andrew Morton @ 2020-04-02 4:07 ` Andrew Morton 2020-04-02 4:07 ` [patch 082/155] mm/vma: move VM_NO_KHUGEPAGED into generic header Andrew Morton ` (73 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:07 UTC (permalink / raw) To: akpm, linux-mm, mm-commits, steven.price, thellstrom, torvalds From: Thomas Hellstrom <thellstrom@vmware.com> Subject: mm/mapping_dirty_helpers: update huge page-table entry callbacks Following the update of pagewalk code commit a07984d48146 ("mm: pagewalk: add p4d_entry() and pgd_entry()") we can modify the mapping_dirty_helpers' huge page-table entry callbacks to avoid splitting when a huge pud or -pmd is encountered. Link: http://lkml.kernel.org/r/20200203154305.15045-1-thomas_os@shipmail.org Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com> Reviewed-by: Steven Price <steven.price@arm.com> Cc: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/mapping_dirty_helpers.c | 42 +++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) --- a/mm/mapping_dirty_helpers.c~mm-mapping_dirty_helpers-update-huge-page-table-entry-callbacks +++ a/mm/mapping_dirty_helpers.c @@ -111,26 +111,60 @@ static int clean_record_pte(pte_t *pte, return 0; } -/* wp_clean_pmd_entry - The pagewalk pmd callback. */ +/* + * wp_clean_pmd_entry - The pagewalk pmd callback. + * + * Dirty-tracking should take place on the PTE level, so + * WARN() if encountering a dirty huge pmd. + * Furthermore, never split huge pmds, since that currently + * causes dirty info loss. The pagefault handler should do + * that if needed. + */ static int wp_clean_pmd_entry(pmd_t *pmd, unsigned long addr, unsigned long end, struct mm_walk *walk) { - /* Dirty-tracking should be handled on the pte level */ pmd_t pmdval = pmd_read_atomic(pmd); + if (!pmd_trans_unstable(&pmdval)) + return 0; + + if (pmd_none(pmdval)) { + walk->action = ACTION_AGAIN; + return 0; + } + + /* Huge pmd, present or migrated */ + walk->action = ACTION_CONTINUE; if (pmd_trans_huge(pmdval) || pmd_devmap(pmdval)) WARN_ON(pmd_write(pmdval) || pmd_dirty(pmdval)); return 0; } -/* wp_clean_pud_entry - The pagewalk pud callback. */ +/* + * wp_clean_pud_entry - The pagewalk pud callback. + * + * Dirty-tracking should take place on the PTE level, so + * WARN() if encountering a dirty huge puds. + * Furthermore, never split huge puds, since that currently + * causes dirty info loss. The pagefault handler should do + * that if needed. + */ static int wp_clean_pud_entry(pud_t *pud, unsigned long addr, unsigned long end, struct mm_walk *walk) { - /* Dirty-tracking should be handled on the pte level */ pud_t pudval = READ_ONCE(*pud); + if (!pud_trans_unstable(&pudval)) + return 0; + + if (pud_none(pudval)) { + walk->action = ACTION_AGAIN; + return 0; + } + + /* Huge pud */ + walk->action = ACTION_CONTINUE; if (pud_trans_huge(pudval) || pud_devmap(pudval)) WARN_ON(pud_write(pudval) || pud_dirty(pudval)); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 082/155] mm/vma: move VM_NO_KHUGEPAGED into generic header 2020-04-02 4:01 incoming Andrew Morton ` (80 preceding siblings ...) 2020-04-02 4:07 ` [patch 081/155] mm/mapping_dirty_helpers: update huge page-table entry callbacks Andrew Morton @ 2020-04-02 4:07 ` Andrew Morton 2020-04-02 4:07 ` [patch 083/155] mm/vma: make vma_is_foreign() available for general use Andrew Morton ` (72 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:07 UTC (permalink / raw) To: akpm, anshuman.khandual, linux-mm, mingo, mm-commits, mpe, paulus, tglx, torvalds, vbabka From: Anshuman Khandual <anshuman.khandual@arm.com> Subject: mm/vma: move VM_NO_KHUGEPAGED into generic header Patch series "mm/vma: some more minor changes", v2. The motivation here is to consolidate VMA flags and helpers in generic memory header and reduce code duplication when ever applicable. If there are other possible similar instances which might be missing here, please do let me me know. I will be happy to incorporate them. This patch (of 3): Move VM_NO_KHUGEPAGED into generic header (include/linux/mm.h). This just makes sure that no VMA flag is scattered in individual function files any longer. While at this, fix an old comment which is no longer valid. This should not cause any functional change. Link: http://lkml.kernel.org/r/1582782965-3274-2-git-send-email-anshuman.khandual@arm.com Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> Acked-by: Vlastimil Babka <vbabka@suse.cz> Cc: Ingo Molnar <mingo@redhat.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Paul Mackerras <paulus@samba.org> Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/mm.h | 4 +++- mm/khugepaged.c | 2 -- 2 files changed, 3 insertions(+), 3 deletions(-) --- a/include/linux/mm.h~mm-vma-move-vm_no_khugepaged-into-generic-header +++ a/include/linux/mm.h @@ -356,10 +356,12 @@ extern unsigned int kobjsize(const void /* * Special vmas that are non-mergable, non-mlock()able. - * Note: mm/huge_memory.c VM_NO_THP depends on this definition. */ #define VM_SPECIAL (VM_IO | VM_DONTEXPAND | VM_PFNMAP | VM_MIXEDMAP) +/* This mask prevents VMA from being scanned with khugepaged */ +#define VM_NO_KHUGEPAGED (VM_SPECIAL | VM_HUGETLB) + /* This mask defines which mm->def_flags a process can inherit its parent */ #define VM_INIT_DEF_MASK VM_NOHUGEPAGE --- a/mm/khugepaged.c~mm-vma-move-vm_no_khugepaged-into-generic-header +++ a/mm/khugepaged.c @@ -308,8 +308,6 @@ struct attribute_group khugepaged_attr_g }; #endif /* CONFIG_SYSFS */ -#define VM_NO_KHUGEPAGED (VM_SPECIAL | VM_HUGETLB) - int hugepage_madvise(struct vm_area_struct *vma, unsigned long *vm_flags, int advice) { _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 083/155] mm/vma: make vma_is_foreign() available for general use 2020-04-02 4:01 incoming Andrew Morton ` (81 preceding siblings ...) 2020-04-02 4:07 ` [patch 082/155] mm/vma: move VM_NO_KHUGEPAGED into generic header Andrew Morton @ 2020-04-02 4:07 ` Andrew Morton 2020-04-02 4:07 ` [patch 084/155] mm/vma: make is_vma_temporary_stack() " Andrew Morton ` (71 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:07 UTC (permalink / raw) To: akpm, anshuman.khandual, linux-mm, mingo, mm-commits, mpe, paulus, tglx, torvalds, vbabka From: Anshuman Khandual <anshuman.khandual@arm.com> Subject: mm/vma: make vma_is_foreign() available for general use Idea of a foreign VMA with respect to the present context is very generic. But currently there are two identical definitions for this in powerpc and x86 platforms. Lets consolidate those redundant definitions while making vma_is_foreign() available for general use later. This should not cause any functional change. Link: http://lkml.kernel.org/r/1582782965-3274-3-git-send-email-anshuman.khandual@arm.com Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> Acked-by: Vlastimil Babka <vbabka@suse.cz> Cc: Paul Mackerras <paulus@samba.org> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- arch/powerpc/mm/book3s64/pkeys.c | 12 ------------ arch/x86/include/asm/mmu_context.h | 15 --------------- include/linux/mm.h | 11 +++++++++++ 3 files changed, 11 insertions(+), 27 deletions(-) --- a/arch/powerpc/mm/book3s64/pkeys.c~mm-vma-make-vma_is_foreign-available-for-general-use +++ a/arch/powerpc/mm/book3s64/pkeys.c @@ -381,18 +381,6 @@ bool arch_pte_access_permitted(u64 pte, * So do not enforce things if the VMA is not from the current mm, or if we are * in a kernel thread. */ -static inline bool vma_is_foreign(struct vm_area_struct *vma) -{ - if (!current->mm) - return true; - - /* if it is not our ->mm, it has to be foreign */ - if (current->mm != vma->vm_mm) - return true; - - return false; -} - bool arch_vma_access_permitted(struct vm_area_struct *vma, bool write, bool execute, bool foreign) { --- a/arch/x86/include/asm/mmu_context.h~mm-vma-make-vma_is_foreign-available-for-general-use +++ a/arch/x86/include/asm/mmu_context.h @@ -213,21 +213,6 @@ static inline void arch_unmap(struct mm_ * So do not enforce things if the VMA is not from the current * mm, or if we are in a kernel thread. */ -static inline bool vma_is_foreign(struct vm_area_struct *vma) -{ - if (!current->mm) - return true; - /* - * Should PKRU be enforced on the access to this VMA? If - * the VMA is from another process, then PKRU has no - * relevance and should not be enforced. - */ - if (current->mm != vma->vm_mm) - return true; - - return false; -} - static inline bool arch_vma_access_permitted(struct vm_area_struct *vma, bool write, bool execute, bool foreign) { --- a/include/linux/mm.h~mm-vma-make-vma_is_foreign-available-for-general-use +++ a/include/linux/mm.h @@ -27,6 +27,7 @@ #include <linux/memremap.h> #include <linux/overflow.h> #include <linux/sizes.h> +#include <linux/sched.h> struct mempolicy; struct anon_vma; @@ -543,6 +544,16 @@ static inline bool vma_is_anonymous(stru return !vma->vm_ops; } +static inline bool vma_is_foreign(struct vm_area_struct *vma) +{ + if (!current->mm) + return true; + + if (current->mm != vma->vm_mm) + return true; + + return false; +} #ifdef CONFIG_SHMEM /* * The vma_is_shmem is not inline because it is used only by slow _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 084/155] mm/vma: make is_vma_temporary_stack() available for general use 2020-04-02 4:01 incoming Andrew Morton ` (82 preceding siblings ...) 2020-04-02 4:07 ` [patch 083/155] mm/vma: make vma_is_foreign() available for general use Andrew Morton @ 2020-04-02 4:07 ` Andrew Morton 2020-04-02 4:07 ` [patch 085/155] mm: add pagemap.h to the fine documentation Andrew Morton ` (70 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:07 UTC (permalink / raw) To: akpm, anshuman.khandual, linux-mm, mingo, mm-commits, mpe, paulus, tglx, torvalds, vbabka From: Anshuman Khandual <anshuman.khandual@arm.com> Subject: mm/vma: make is_vma_temporary_stack() available for general use Currently the declaration and definition for is_vma_temporary_stack() are scattered. Lets make is_vma_temporary_stack() helper available for general use and also drop the declaration from (include/linux/huge_mm.h) which is no longer required. While at this, rename this as vma_is_temporary_stack() in line with existing helpers. This should not cause any functional change. Link: http://lkml.kernel.org/r/1582782965-3274-4-git-send-email-anshuman.khandual@arm.com Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> Acked-by: Vlastimil Babka <vbabka@suse.cz> Cc: Ingo Molnar <mingo@redhat.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Paul Mackerras <paulus@samba.org> Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/huge_mm.h | 4 +--- include/linux/mm.h | 14 ++++++++++++++ mm/khugepaged.c | 2 +- mm/mremap.c | 2 +- mm/rmap.c | 16 +--------------- 5 files changed, 18 insertions(+), 20 deletions(-) --- a/include/linux/huge_mm.h~mm-vma-make-is_vma_temporary_stack-available-for-general-use +++ a/include/linux/huge_mm.h @@ -87,8 +87,6 @@ extern struct kobj_attribute shmem_enabl #define HPAGE_PUD_SIZE ((1UL) << HPAGE_PUD_SHIFT) #define HPAGE_PUD_MASK (~(HPAGE_PUD_SIZE - 1)) -extern bool is_vma_temporary_stack(struct vm_area_struct *vma); - extern unsigned long transparent_hugepage_flags; /* @@ -100,7 +98,7 @@ static inline bool __transparent_hugepag if (vma->vm_flags & VM_NOHUGEPAGE) return false; - if (is_vma_temporary_stack(vma)) + if (vma_is_temporary_stack(vma)) return false; if (test_bit(MMF_DISABLE_THP, &vma->vm_mm->flags)) --- a/include/linux/mm.h~mm-vma-make-is_vma_temporary_stack-available-for-general-use +++ a/include/linux/mm.h @@ -544,6 +544,20 @@ static inline bool vma_is_anonymous(stru return !vma->vm_ops; } +static inline bool vma_is_temporary_stack(struct vm_area_struct *vma) +{ + int maybe_stack = vma->vm_flags & (VM_GROWSDOWN | VM_GROWSUP); + + if (!maybe_stack) + return false; + + if ((vma->vm_flags & VM_STACK_INCOMPLETE_SETUP) == + VM_STACK_INCOMPLETE_SETUP) + return true; + + return false; +} + static inline bool vma_is_foreign(struct vm_area_struct *vma) { if (!current->mm) --- a/mm/khugepaged.c~mm-vma-make-is_vma_temporary_stack-available-for-general-use +++ a/mm/khugepaged.c @@ -421,7 +421,7 @@ static bool hugepage_vma_check(struct vm } if (!vma->anon_vma || vma->vm_ops) return false; - if (is_vma_temporary_stack(vma)) + if (vma_is_temporary_stack(vma)) return false; return !(vm_flags & VM_NO_KHUGEPAGED); } --- a/mm/mremap.c~mm-vma-make-is_vma_temporary_stack-available-for-general-use +++ a/mm/mremap.c @@ -133,7 +133,7 @@ static void move_ptes(struct vm_area_str * such races: * * - During exec() shift_arg_pages(), we use a specially tagged vma - * which rmap call sites look for using is_vma_temporary_stack(). + * which rmap call sites look for using vma_is_temporary_stack(). * * - During mremap(), new_vma is often known to be placed after vma * in rmap traversal order. This ensures rmap will always observe --- a/mm/rmap.c~mm-vma-make-is_vma_temporary_stack-available-for-general-use +++ a/mm/rmap.c @@ -1699,23 +1699,9 @@ discard: return ret; } -bool is_vma_temporary_stack(struct vm_area_struct *vma) -{ - int maybe_stack = vma->vm_flags & (VM_GROWSDOWN | VM_GROWSUP); - - if (!maybe_stack) - return false; - - if ((vma->vm_flags & VM_STACK_INCOMPLETE_SETUP) == - VM_STACK_INCOMPLETE_SETUP) - return true; - - return false; -} - static bool invalid_migration_vma(struct vm_area_struct *vma, void *arg) { - return is_vma_temporary_stack(vma); + return vma_is_temporary_stack(vma); } static int page_mapcount_is_zero(struct page *page) _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 085/155] mm: add pagemap.h to the fine documentation 2020-04-02 4:01 incoming Andrew Morton ` (83 preceding siblings ...) 2020-04-02 4:07 ` [patch 084/155] mm/vma: make is_vma_temporary_stack() " Andrew Morton @ 2020-04-02 4:07 ` Andrew Morton 2020-04-02 4:07 ` [patch 086/155] mm/gup: rename "nonblocking" to "locked" where proper Andrew Morton ` (69 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:07 UTC (permalink / raw) To: akpm, corbet, jhubbard, linux-mm, mm-commits, torvalds, willy, ziy From: "Matthew Wilcox (Oracle)" <willy@infradead.org> Subject: mm: add pagemap.h to the fine documentation The documentation currently does not include the deathless prose written to describe functions in pagemap.h because it's not included in any rst file. Fix up the mismatches between parameter names and the documentation and add the file to mm-api. Link: http://lkml.kernel.org/r/20200221220045.24989-1-willy@infradead.org Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Zi Yan <ziy@nvidia.com> Reviewed-by: John Hubbard <jhubbard@nvidia.com> Cc: Jonathan Corbet <corbet@lwn.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- Documentation/core-api/mm-api.rst | 3 +++ include/linux/pagemap.h | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) --- a/Documentation/core-api/mm-api.rst~mm-add-pagemaph-to-the-fine-documentation +++ a/Documentation/core-api/mm-api.rst @@ -73,6 +73,9 @@ File Mapping and Page Cache .. kernel-doc:: mm/truncate.c :export: +.. kernel-doc:: include/linux/pagemap.h + :internal: + Memory pools ============ --- a/include/linux/pagemap.h~mm-add-pagemaph-to-the-fine-documentation +++ a/include/linux/pagemap.h @@ -33,8 +33,8 @@ enum mapping_flags { /** * mapping_set_error - record a writeback error in the address_space - * @mapping - the mapping in which an error should be set - * @error - the error to set in the mapping + * @mapping: the mapping in which an error should be set + * @error: the error to set in the mapping * * When writeback fails in some way, we must record that error so that * userspace can be informed when fsync and the like are called. We endeavor @@ -303,9 +303,9 @@ static inline struct page *find_lock_pag * atomic allocation! */ static inline struct page *find_or_create_page(struct address_space *mapping, - pgoff_t offset, gfp_t gfp_mask) + pgoff_t index, gfp_t gfp_mask) { - return pagecache_get_page(mapping, offset, + return pagecache_get_page(mapping, index, FGP_LOCK|FGP_ACCESSED|FGP_CREAT, gfp_mask); } _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 086/155] mm/gup: rename "nonblocking" to "locked" where proper 2020-04-02 4:01 incoming Andrew Morton ` (84 preceding siblings ...) 2020-04-02 4:07 ` [patch 085/155] mm: add pagemap.h to the fine documentation Andrew Morton @ 2020-04-02 4:07 ` Andrew Morton 2020-04-02 4:08 ` [patch 087/155] mm/gup: fix __get_user_pages() on fault retry of hugetlb Andrew Morton ` (68 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:07 UTC (permalink / raw) To: aarcange, akpm, bgeffon, bobbypowers, cracauer, david, dgilbert, dplotnikov, gokhale2, hannes, hughd, jglisse, kirill, linux-mm, mcfadden8, mgorman, mike.kravetz, mm-commits, peterx, rppt, torvalds, willy, xemul From: Peter Xu <peterx@redhat.com> Subject: mm/gup: rename "nonblocking" to "locked" where proper Patch series "mm: Page fault enhancements", v6. This series contains cleanups 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). This patch (of 16): There's plenty of places around __get_user_pages() that has a parameter "nonblocking" which does not really mean that "it won't block" (because it can really block) but instead it shows whether the mmap_sem is released by up_read() during the page fault handling mostly when VM_FAULT_RETRY is returned. We have the correct naming in e.g. get_user_pages_locked() or get_user_pages_remote() as "locked", however there're still many places that are using the "nonblocking" as name. Renaming the places to "locked" where proper to better suite the functionality of the variable. While at it, fixing up some of the comments accordingly. Link: http://lkml.kernel.org/r/20200220155353.8676-2-peterx@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com> Reviewed-by: Mike Rapoport <rppt@linux.vnet.ibm.com> Reviewed-by: Jerome Glisse <jglisse@redhat.com> Reviewed-by: David Hildenbrand <david@redhat.com> Tested-by: Brian Geffon <bgeffon@google.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Martin Cracauer <cracauer@cons.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: "Kirill A . Shutemov" <kirill@shutemov.name> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: "Dr . David Alan Gilbert" <dgilbert@redhat.com> Cc: Bobby Powers <bobbypowers@gmail.com> Cc: Maya Gokhale <gokhale2@llnl.gov> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Matthew Wilcox <willy@infradead.org> Cc: Marty McFadden <mcfadden8@llnl.gov> Cc: Mel Gorman <mgorman@suse.de> Cc: Hugh Dickins <hughd@google.com> Cc: Denis Plotnikov <dplotnikov@virtuozzo.com> Cc: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/gup.c | 44 +++++++++++++++++++++----------------------- mm/hugetlb.c | 8 ++++---- 2 files changed, 25 insertions(+), 27 deletions(-) --- a/mm/gup.c~mm-gup-rename-nonblocking-to-locked-where-proper +++ a/mm/gup.c @@ -846,12 +846,12 @@ unmap: } /* - * mmap_sem must be held on entry. If @nonblocking != NULL and - * *@flags does not include FOLL_NOWAIT, the mmap_sem may be released. - * If it is, *@nonblocking will be set to 0 and -EBUSY returned. + * mmap_sem must be held on entry. If @locked != NULL and *@flags + * does not include FOLL_NOWAIT, the mmap_sem may be released. If it + * is, *@locked will be set to 0 and -EBUSY returned. */ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma, - unsigned long address, unsigned int *flags, int *nonblocking) + unsigned long address, unsigned int *flags, int *locked) { unsigned int fault_flags = 0; vm_fault_t ret; @@ -863,7 +863,7 @@ static int faultin_page(struct task_stru fault_flags |= FAULT_FLAG_WRITE; if (*flags & FOLL_REMOTE) fault_flags |= FAULT_FLAG_REMOTE; - if (nonblocking) + if (locked) fault_flags |= FAULT_FLAG_ALLOW_RETRY; if (*flags & FOLL_NOWAIT) fault_flags |= FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_RETRY_NOWAIT; @@ -889,8 +889,8 @@ static int faultin_page(struct task_stru } if (ret & VM_FAULT_RETRY) { - if (nonblocking && !(fault_flags & FAULT_FLAG_RETRY_NOWAIT)) - *nonblocking = 0; + if (locked && !(fault_flags & FAULT_FLAG_RETRY_NOWAIT)) + *locked = 0; return -EBUSY; } @@ -967,7 +967,7 @@ static int check_vma_flags(struct vm_are * only intends to ensure the pages are faulted in. * @vmas: array of pointers to vmas corresponding to each page. * Or NULL if the caller does not require them. - * @nonblocking: whether waiting for disk IO or mmap_sem contention + * @locked: whether we're still with the mmap_sem held * * Returns either number of pages pinned (which may be less than the * number requested), or an error. Details about the return value: @@ -1002,13 +1002,11 @@ static int check_vma_flags(struct vm_are * appropriate) must be called after the page is finished with, and * before put_page is called. * - * If @nonblocking != NULL, __get_user_pages will not wait for disk IO - * or mmap_sem contention, and if waiting is needed to pin all pages, - * *@nonblocking will be set to 0. Further, if @gup_flags does not - * include FOLL_NOWAIT, the mmap_sem will be released via up_read() in - * this case. + * If @locked != NULL, *@locked will be set to 0 when mmap_sem is + * released by an up_read(). That can happen if @gup_flags does not + * have FOLL_NOWAIT. * - * A caller using such a combination of @nonblocking and @gup_flags + * A caller using such a combination of @locked and @gup_flags * must therefore hold the mmap_sem for reading only, and recognize * when it's been released. Otherwise, it must be held for either * reading or writing and will not be released. @@ -1020,7 +1018,7 @@ static int check_vma_flags(struct vm_are static long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, unsigned long start, unsigned long nr_pages, unsigned int gup_flags, struct page **pages, - struct vm_area_struct **vmas, int *nonblocking) + struct vm_area_struct **vmas, int *locked) { long ret = 0, i = 0; struct vm_area_struct *vma = NULL; @@ -1066,7 +1064,7 @@ static long __get_user_pages(struct task if (is_vm_hugetlb_page(vma)) { i = follow_hugetlb_page(mm, vma, pages, vmas, &start, &nr_pages, i, - gup_flags, nonblocking); + gup_flags, locked); continue; } } @@ -1084,7 +1082,7 @@ retry: page = follow_page_mask(vma, start, foll_flags, &ctx); if (!page) { ret = faultin_page(tsk, vma, start, &foll_flags, - nonblocking); + locked); switch (ret) { case 0: goto retry; @@ -1345,7 +1343,7 @@ static __always_inline long __get_user_p * @vma: target vma * @start: start address * @end: end address - * @nonblocking: + * @locked: whether the mmap_sem is still held * * This takes care of mlocking the pages too if VM_LOCKED is set. * @@ -1353,14 +1351,14 @@ static __always_inline long __get_user_p * * vma->vm_mm->mmap_sem must be held. * - * If @nonblocking is NULL, it may be held for read or write and will + * If @locked is NULL, it may be held for read or write and will * be unperturbed. * - * If @nonblocking is non-NULL, it must held for read only and may be - * released. If it's released, *@nonblocking will be set to 0. + * If @locked is non-NULL, it must held for read only and may be + * released. If it's released, *@locked will be set to 0. */ long populate_vma_page_range(struct vm_area_struct *vma, - unsigned long start, unsigned long end, int *nonblocking) + unsigned long start, unsigned long end, int *locked) { struct mm_struct *mm = vma->vm_mm; unsigned long nr_pages = (end - start) / PAGE_SIZE; @@ -1395,7 +1393,7 @@ long populate_vma_page_range(struct vm_a * not result in a stack expansion that recurses back here. */ return __get_user_pages(current, mm, start, nr_pages, gup_flags, - NULL, NULL, nonblocking); + NULL, NULL, locked); } /* --- a/mm/hugetlb.c~mm-gup-rename-nonblocking-to-locked-where-proper +++ a/mm/hugetlb.c @@ -4272,7 +4272,7 @@ out_release_nounlock: long follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma, struct page **pages, struct vm_area_struct **vmas, unsigned long *position, unsigned long *nr_pages, - long i, unsigned int flags, int *nonblocking) + long i, unsigned int flags, int *locked) { unsigned long pfn_offset; unsigned long vaddr = *position; @@ -4343,7 +4343,7 @@ long follow_hugetlb_page(struct mm_struc spin_unlock(ptl); if (flags & FOLL_WRITE) fault_flags |= FAULT_FLAG_WRITE; - if (nonblocking) + if (locked) fault_flags |= FAULT_FLAG_ALLOW_RETRY; if (flags & FOLL_NOWAIT) fault_flags |= FAULT_FLAG_ALLOW_RETRY | @@ -4360,9 +4360,9 @@ long follow_hugetlb_page(struct mm_struc break; } if (ret & VM_FAULT_RETRY) { - if (nonblocking && + if (locked && !(fault_flags & FAULT_FLAG_RETRY_NOWAIT)) - *nonblocking = 0; + *locked = 0; *nr_pages = 0; /* * VM_FAULT_RETRY must not return an _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 087/155] mm/gup: fix __get_user_pages() on fault retry of hugetlb 2020-04-02 4:01 incoming Andrew Morton ` (85 preceding siblings ...) 2020-04-02 4:07 ` [patch 086/155] mm/gup: rename "nonblocking" to "locked" where proper Andrew Morton @ 2020-04-02 4:08 ` Andrew Morton 2020-04-02 4:08 ` [patch 088/155] mm: introduce fault_signal_pending() Andrew Morton ` (67 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:08 UTC (permalink / raw) To: aarcange, akpm, bgeffon, bobbypowers, cracauer, david, dgilbert, dplotnikov, gokhale2, hannes, hughd, jglisse, kirill, linux-mm, mcfadden8, mgorman, mike.kravetz, mm-commits, peterx, rppt, torvalds, willy, xemul From: Peter Xu <peterx@redhat.com> Subject: mm/gup: fix __get_user_pages() on fault retry of hugetlb When follow_hugetlb_page() returns with *locked==0, it means we've got a VM_FAULT_RETRY within the fauling process and we've released the mmap_sem. When that happens, we should stop and bail out. Link: http://lkml.kernel.org/r/20200220155353.8676-3-peterx@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com> Tested-by: Brian Geffon <bgeffon@google.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Bobby Powers <bobbypowers@gmail.com> Cc: David Hildenbrand <david@redhat.com> Cc: Denis Plotnikov <dplotnikov@virtuozzo.com> Cc: "Dr . David Alan Gilbert" <dgilbert@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Jerome Glisse <jglisse@redhat.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: "Kirill A . Shutemov" <kirill@shutemov.name> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Martin Cracauer <cracauer@cons.org> Cc: Marty McFadden <mcfadden8@llnl.gov> Cc: Matthew Wilcox <willy@infradead.org> Cc: Maya Gokhale <gokhale2@llnl.gov> Cc: Mel Gorman <mgorman@suse.de> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Mike Rapoport <rppt@linux.vnet.ibm.com> Cc: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/gup.c | 10 ++++++++++ 1 file changed, 10 insertions(+) --- a/mm/gup.c~mm-gup-fix-__get_user_pages-on-fault-retry-of-hugetlb +++ a/mm/gup.c @@ -1065,6 +1065,16 @@ static long __get_user_pages(struct task i = follow_hugetlb_page(mm, vma, pages, vmas, &start, &nr_pages, i, gup_flags, locked); + if (locked && *locked == 0) { + /* + * We've got a VM_FAULT_RETRY + * and we've lost mmap_sem. + * We must stop here. + */ + BUG_ON(gup_flags & FOLL_NOWAIT); + BUG_ON(ret != 0); + goto out; + } continue; } } _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 088/155] mm: introduce fault_signal_pending() 2020-04-02 4:01 incoming Andrew Morton ` (86 preceding siblings ...) 2020-04-02 4:08 ` [patch 087/155] mm/gup: fix __get_user_pages() on fault retry of hugetlb Andrew Morton @ 2020-04-02 4:08 ` Andrew Morton 2020-04-02 4:08 ` [patch 089/155] x86/mm: use helper fault_signal_pending() Andrew Morton ` (66 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:08 UTC (permalink / raw) To: aarcange, akpm, bgeffon, bobbypowers, cracauer, david, dgilbert, dplotnikov, gokhale2, hannes, hughd, jglisse, kirill, linux-mm, mcfadden8, mgorman, mike.kravetz, mm-commits, peterx, rppt, torvalds, willy, xemul From: Peter Xu <peterx@redhat.com> Subject: mm: introduce fault_signal_pending() For most architectures, we've got a quick path to detect fatal signal after a handle_mm_fault(). Introduce a helper for that quick path. It cleans the current codes a bit so we don't need to duplicate the same check across archs. More importantly, this will be an unified place that we handle the signal immediately right after an interrupted page fault, so it'll be much easier for us if we want to change the behavior of handling signals later on for all the archs. Note that currently only part of the archs are using this new helper, because some archs have their own way to handle signals. In the follow up patches, we'll try to apply this helper to all the rest of archs. Another note is that the "regs" parameter in the new helper is not used yet. It'll be used very soon. Now we kept it in this patch only to avoid touching all the archs again in the follow up patches. [peterx@redhat.com: fix sparse warnings] Link: http://lkml.kernel.org/r/20200311145921.GD479302@xz-x1 Link: http://lkml.kernel.org/r/20200220155353.8676-4-peterx@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com> Tested-by: Brian Geffon <bgeffon@google.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Bobby Powers <bobbypowers@gmail.com> Cc: David Hildenbrand <david@redhat.com> Cc: Denis Plotnikov <dplotnikov@virtuozzo.com> Cc: "Dr . David Alan Gilbert" <dgilbert@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Jerome Glisse <jglisse@redhat.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: "Kirill A . Shutemov" <kirill@shutemov.name> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Martin Cracauer <cracauer@cons.org> Cc: Marty McFadden <mcfadden8@llnl.gov> Cc: Matthew Wilcox <willy@infradead.org> Cc: Maya Gokhale <gokhale2@llnl.gov> Cc: Mel Gorman <mgorman@suse.de> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Mike Rapoport <rppt@linux.vnet.ibm.com> Cc: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- arch/alpha/mm/fault.c | 2 +- arch/arm/mm/fault.c | 2 +- arch/hexagon/mm/vm_fault.c | 2 +- arch/ia64/mm/fault.c | 2 +- arch/m68k/mm/fault.c | 2 +- arch/microblaze/mm/fault.c | 2 +- arch/mips/mm/fault.c | 2 +- arch/nds32/mm/fault.c | 2 +- arch/nios2/mm/fault.c | 2 +- arch/openrisc/mm/fault.c | 2 +- arch/parisc/mm/fault.c | 2 +- arch/riscv/mm/fault.c | 2 +- arch/s390/mm/fault.c | 3 +-- arch/sparc/mm/fault_32.c | 2 +- arch/sparc/mm/fault_64.c | 2 +- arch/unicore32/mm/fault.c | 2 +- arch/xtensa/mm/fault.c | 2 +- include/linux/sched/signal.h | 15 +++++++++++++++ 18 files changed, 32 insertions(+), 18 deletions(-) --- a/arch/alpha/mm/fault.c~mm-introduce-fault_signal_pending +++ a/arch/alpha/mm/fault.c @@ -150,7 +150,7 @@ retry: the fault. */ fault = handle_mm_fault(vma, address, flags); - if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) + if (fault_signal_pending(fault, regs)) return; if (unlikely(fault & VM_FAULT_ERROR)) { --- a/arch/arm/mm/fault.c~mm-introduce-fault_signal_pending +++ a/arch/arm/mm/fault.c @@ -295,7 +295,7 @@ retry: * signal first. We do not need to release the mmap_sem because * it would already be released in __lock_page_or_retry in * mm/filemap.c. */ - if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) { + if (fault_signal_pending(fault, regs)) { if (!user_mode(regs)) goto no_context; return 0; --- a/arch/hexagon/mm/vm_fault.c~mm-introduce-fault_signal_pending +++ a/arch/hexagon/mm/vm_fault.c @@ -91,7 +91,7 @@ good_area: fault = handle_mm_fault(vma, address, flags); - if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) + if (fault_signal_pending(fault, regs)) return; /* The most common case -- we are done. */ --- a/arch/ia64/mm/fault.c~mm-introduce-fault_signal_pending +++ a/arch/ia64/mm/fault.c @@ -141,7 +141,7 @@ retry: */ fault = handle_mm_fault(vma, address, flags); - if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) + if (fault_signal_pending(fault, regs)) return; if (unlikely(fault & VM_FAULT_ERROR)) { --- a/arch/m68k/mm/fault.c~mm-introduce-fault_signal_pending +++ a/arch/m68k/mm/fault.c @@ -138,7 +138,7 @@ good_area: fault = handle_mm_fault(vma, address, flags); pr_debug("handle_mm_fault returns %x\n", fault); - if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) + if (fault_signal_pending(fault, regs)) return 0; if (unlikely(fault & VM_FAULT_ERROR)) { --- a/arch/microblaze/mm/fault.c~mm-introduce-fault_signal_pending +++ a/arch/microblaze/mm/fault.c @@ -217,7 +217,7 @@ good_area: */ fault = handle_mm_fault(vma, address, flags); - if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) + if (fault_signal_pending(fault, regs)) return; if (unlikely(fault & VM_FAULT_ERROR)) { --- a/arch/mips/mm/fault.c~mm-introduce-fault_signal_pending +++ a/arch/mips/mm/fault.c @@ -154,7 +154,7 @@ good_area: */ fault = handle_mm_fault(vma, address, flags); - if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) + if (fault_signal_pending(fault, regs)) return; perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); --- a/arch/nds32/mm/fault.c~mm-introduce-fault_signal_pending +++ a/arch/nds32/mm/fault.c @@ -214,7 +214,7 @@ good_area: * signal first. We do not need to release the mmap_sem because it * would already be released in __lock_page_or_retry in mm/filemap.c. */ - if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) { + if (fault_signal_pending(fault, regs)) { if (!user_mode(regs)) goto no_context; return; --- a/arch/nios2/mm/fault.c~mm-introduce-fault_signal_pending +++ a/arch/nios2/mm/fault.c @@ -133,7 +133,7 @@ good_area: */ fault = handle_mm_fault(vma, address, flags); - if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) + if (fault_signal_pending(fault, regs)) return; if (unlikely(fault & VM_FAULT_ERROR)) { --- a/arch/openrisc/mm/fault.c~mm-introduce-fault_signal_pending +++ a/arch/openrisc/mm/fault.c @@ -161,7 +161,7 @@ good_area: fault = handle_mm_fault(vma, address, flags); - if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) + if (fault_signal_pending(fault, regs)) return; if (unlikely(fault & VM_FAULT_ERROR)) { --- a/arch/parisc/mm/fault.c~mm-introduce-fault_signal_pending +++ a/arch/parisc/mm/fault.c @@ -304,7 +304,7 @@ good_area: fault = handle_mm_fault(vma, address, flags); - if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) + if (fault_signal_pending(fault, regs)) return; if (unlikely(fault & VM_FAULT_ERROR)) { --- a/arch/riscv/mm/fault.c~mm-introduce-fault_signal_pending +++ a/arch/riscv/mm/fault.c @@ -117,7 +117,7 @@ good_area: * signal first. We do not need to release the mmap_sem because it * would already be released in __lock_page_or_retry in mm/filemap.c. */ - if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(tsk)) + if (fault_signal_pending(fault, regs)) return; if (unlikely(fault & VM_FAULT_ERROR)) { --- a/arch/s390/mm/fault.c~mm-introduce-fault_signal_pending +++ a/arch/s390/mm/fault.c @@ -480,8 +480,7 @@ retry: * the fault. */ fault = handle_mm_fault(vma, address, flags); - /* No reason to continue if interrupted by SIGKILL. */ - if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) { + if (fault_signal_pending(fault, regs)) { fault = VM_FAULT_SIGNAL; if (flags & FAULT_FLAG_RETRY_NOWAIT) goto out_up; --- a/arch/sparc/mm/fault_32.c~mm-introduce-fault_signal_pending +++ a/arch/sparc/mm/fault_32.c @@ -237,7 +237,7 @@ good_area: */ fault = handle_mm_fault(vma, address, flags); - if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) + if (fault_signal_pending(fault, regs)) return; if (unlikely(fault & VM_FAULT_ERROR)) { --- a/arch/sparc/mm/fault_64.c~mm-introduce-fault_signal_pending +++ a/arch/sparc/mm/fault_64.c @@ -425,7 +425,7 @@ good_area: fault = handle_mm_fault(vma, address, flags); - if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) + if (fault_signal_pending(fault, regs)) goto exit_exception; if (unlikely(fault & VM_FAULT_ERROR)) { --- a/arch/unicore32/mm/fault.c~mm-introduce-fault_signal_pending +++ a/arch/unicore32/mm/fault.c @@ -250,7 +250,7 @@ retry: * signal first. We do not need to release the mmap_sem because * it would already be released in __lock_page_or_retry in * mm/filemap.c. */ - if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) + if (fault_signal_pending(fault, regs)) return 0; if (!(fault & VM_FAULT_ERROR) && (flags & FAULT_FLAG_ALLOW_RETRY)) { --- a/arch/xtensa/mm/fault.c~mm-introduce-fault_signal_pending +++ a/arch/xtensa/mm/fault.c @@ -110,7 +110,7 @@ good_area: */ fault = handle_mm_fault(vma, address, flags); - if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) + if (fault_signal_pending(fault, regs)) return; if (unlikely(fault & VM_FAULT_ERROR)) { --- a/include/linux/sched/signal.h~mm-introduce-fault_signal_pending +++ a/include/linux/sched/signal.h @@ -10,6 +10,8 @@ #include <linux/cred.h> #include <linux/refcount.h> #include <linux/posix-timers.h> +#include <linux/mm_types.h> +#include <asm/ptrace.h> /* * Types defining task->signal and task->sighand and APIs using them: @@ -370,6 +372,19 @@ static inline int signal_pending_state(l } /* + * This should only be used in fault handlers to decide whether we + * should stop the current fault routine to handle the signals + * instead, especially with the case where we've got interrupted with + * a VM_FAULT_RETRY. + */ +static inline bool fault_signal_pending(vm_fault_t fault_flags, + struct pt_regs *regs) +{ + return unlikely((fault_flags & VM_FAULT_RETRY) && + fatal_signal_pending(current)); +} + +/* * Reevaluate whether the task has signals pending delivery. * Wake the task if so. * This is required every time the blocked sigset_t changes. _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 089/155] x86/mm: use helper fault_signal_pending() 2020-04-02 4:01 incoming Andrew Morton ` (87 preceding siblings ...) 2020-04-02 4:08 ` [patch 088/155] mm: introduce fault_signal_pending() Andrew Morton @ 2020-04-02 4:08 ` Andrew Morton 2020-04-02 4:08 ` [patch 090/155] arc/mm: " Andrew Morton ` (65 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:08 UTC (permalink / raw) To: aarcange, akpm, bgeffon, bobbypowers, cracauer, david, dgilbert, dplotnikov, gokhale2, hannes, hughd, jglisse, kirill, linux-mm, mcfadden8, mgorman, mike.kravetz, mm-commits, peterx, rppt, torvalds, willy, xemul From: Peter Xu <peterx@redhat.com> Subject: x86/mm: use helper fault_signal_pending() Let's move the fatal signal check even earlier so that we can directly use the new fault_signal_pending() in x86 mm code. Link: http://lkml.kernel.org/r/20200220155353.8676-5-peterx@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com> Tested-by: Brian Geffon <bgeffon@google.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Bobby Powers <bobbypowers@gmail.com> Cc: David Hildenbrand <david@redhat.com> Cc: Denis Plotnikov <dplotnikov@virtuozzo.com> Cc: "Dr . David Alan Gilbert" <dgilbert@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Jerome Glisse <jglisse@redhat.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: "Kirill A . Shutemov" <kirill@shutemov.name> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Martin Cracauer <cracauer@cons.org> Cc: Marty McFadden <mcfadden8@llnl.gov> Cc: Matthew Wilcox <willy@infradead.org> Cc: Maya Gokhale <gokhale2@llnl.gov> Cc: Mel Gorman <mgorman@suse.de> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Mike Rapoport <rppt@linux.vnet.ibm.com> Cc: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- arch/x86/mm/fault.c | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) --- a/arch/x86/mm/fault.c~x86-mm-use-helper-fault_signal_pending +++ a/arch/x86/mm/fault.c @@ -1464,27 +1464,25 @@ good_area: fault = handle_mm_fault(vma, address, flags); major |= fault & VM_FAULT_MAJOR; + /* Quick path to respond to signals */ + if (fault_signal_pending(fault, regs)) { + if (!user_mode(regs)) + no_context(regs, hw_error_code, address, SIGBUS, + BUS_ADRERR); + return; + } + /* * If we need to retry the mmap_sem has already been released, * and if there is a fatal signal pending there is no guarantee * that we made any progress. Handle this case first. */ - if (unlikely(fault & VM_FAULT_RETRY)) { + if (unlikely((fault & VM_FAULT_RETRY) && + (flags & FAULT_FLAG_ALLOW_RETRY))) { /* Retry at most once */ - if (flags & FAULT_FLAG_ALLOW_RETRY) { - flags &= ~FAULT_FLAG_ALLOW_RETRY; - flags |= FAULT_FLAG_TRIED; - if (!fatal_signal_pending(tsk)) - goto retry; - } - - /* User mode? Just return to handle the fatal exception */ - if (flags & FAULT_FLAG_USER) - return; - - /* Not returning to user mode? Handle exceptions or die: */ - no_context(regs, hw_error_code, address, SIGBUS, BUS_ADRERR); - return; + flags &= ~FAULT_FLAG_ALLOW_RETRY; + flags |= FAULT_FLAG_TRIED; + goto retry; } up_read(&mm->mmap_sem); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 090/155] arc/mm: use helper fault_signal_pending() 2020-04-02 4:01 incoming Andrew Morton ` (88 preceding siblings ...) 2020-04-02 4:08 ` [patch 089/155] x86/mm: use helper fault_signal_pending() Andrew Morton @ 2020-04-02 4:08 ` Andrew Morton 2020-04-02 4:08 ` [patch 091/155] arm64/mm: " Andrew Morton ` (64 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:08 UTC (permalink / raw) To: aarcange, akpm, bgeffon, bobbypowers, cracauer, david, dgilbert, dplotnikov, gokhale2, hannes, hughd, jglisse, kirill, linux-mm, mcfadden8, mgorman, mike.kravetz, mm-commits, peterx, rppt, torvalds, willy, xemul From: Peter Xu <peterx@redhat.com> Subject: arc/mm: use helper fault_signal_pending() Let ARC to use the new helper fault_signal_pending() by moving the signal check out of the retry logic as standalone. This should also helps to simplify the code a bit. Link: http://lkml.kernel.org/r/20200220155843.9172-1-peterx@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com> Tested-by: Brian Geffon <bgeffon@google.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Bobby Powers <bobbypowers@gmail.com> Cc: David Hildenbrand <david@redhat.com> Cc: Denis Plotnikov <dplotnikov@virtuozzo.com> Cc: "Dr . David Alan Gilbert" <dgilbert@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Jerome Glisse <jglisse@redhat.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: "Kirill A . Shutemov" <kirill@shutemov.name> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Martin Cracauer <cracauer@cons.org> Cc: Marty McFadden <mcfadden8@llnl.gov> Cc: Matthew Wilcox <willy@infradead.org> Cc: Maya Gokhale <gokhale2@llnl.gov> Cc: Mel Gorman <mgorman@suse.de> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Mike Rapoport <rppt@linux.vnet.ibm.com> Cc: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- arch/arc/mm/fault.c | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) --- a/arch/arc/mm/fault.c~arc-mm-use-helper-fault_signal_pending +++ a/arch/arc/mm/fault.c @@ -133,29 +133,21 @@ retry: fault = handle_mm_fault(vma, address, flags); + /* Quick path to respond to signals */ + if (fault_signal_pending(fault, regs)) { + if (!user_mode(regs)) + goto no_context; + return; + } + /* - * Fault retry nuances + * Fault retry nuances, mmap_sem already relinquished by core mm */ - if (unlikely(fault & VM_FAULT_RETRY)) { - - /* - * If fault needs to be retried, handle any pending signals - * first (by returning to user mode). - * mmap_sem already relinquished by core mm for RETRY case - */ - if (fatal_signal_pending(current)) { - if (!user_mode(regs)) - goto no_context; - return; - } - /* - * retry state machine - */ - if (flags & FAULT_FLAG_ALLOW_RETRY) { - flags &= ~FAULT_FLAG_ALLOW_RETRY; - flags |= FAULT_FLAG_TRIED; - goto retry; - } + if (unlikely((fault & VM_FAULT_RETRY) && + (flags & FAULT_FLAG_ALLOW_RETRY))) { + flags &= ~FAULT_FLAG_ALLOW_RETRY; + flags |= FAULT_FLAG_TRIED; + goto retry; } bad_area: _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 091/155] arm64/mm: use helper fault_signal_pending() 2020-04-02 4:01 incoming Andrew Morton ` (89 preceding siblings ...) 2020-04-02 4:08 ` [patch 090/155] arc/mm: " Andrew Morton @ 2020-04-02 4:08 ` Andrew Morton 2020-04-02 4:08 ` [patch 092/155] powerpc/mm: " Andrew Morton ` (63 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:08 UTC (permalink / raw) To: aarcange, akpm, bgeffon, bobbypowers, cracauer, david, dgilbert, dplotnikov, gokhale2, hannes, hughd, jglisse, kirill, linux-mm, mcfadden8, mgorman, mike.kravetz, mm-commits, peterx, rppt, torvalds, willy, xemul From: Peter Xu <peterx@redhat.com> Subject: arm64/mm: use helper fault_signal_pending() Let the arm64 fault handling to use the new fault_signal_pending() helper, by moving the signal handling out of the retry logic. Link: http://lkml.kernel.org/r/20200220155927.9264-1-peterx@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com> Tested-by: Brian Geffon <bgeffon@google.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Bobby Powers <bobbypowers@gmail.com> Cc: David Hildenbrand <david@redhat.com> Cc: Denis Plotnikov <dplotnikov@virtuozzo.com> Cc: "Dr . David Alan Gilbert" <dgilbert@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Jerome Glisse <jglisse@redhat.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: "Kirill A . Shutemov" <kirill@shutemov.name> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Martin Cracauer <cracauer@cons.org> Cc: Marty McFadden <mcfadden8@llnl.gov> Cc: Matthew Wilcox <willy@infradead.org> Cc: Maya Gokhale <gokhale2@llnl.gov> Cc: Mel Gorman <mgorman@suse.de> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Mike Rapoport <rppt@linux.vnet.ibm.com> Cc: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- arch/arm64/mm/fault.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) --- a/arch/arm64/mm/fault.c~arm64-mm-use-helper-fault_signal_pending +++ a/arch/arm64/mm/fault.c @@ -513,19 +513,14 @@ retry: fault = __do_page_fault(mm, addr, mm_flags, vm_flags); major |= fault & VM_FAULT_MAJOR; - if (fault & VM_FAULT_RETRY) { - /* - * If we need to retry but a fatal signal is pending, - * handle the signal first. We do not need to release - * the mmap_sem because it would already be released - * in __lock_page_or_retry in mm/filemap.c. - */ - if (fatal_signal_pending(current)) { - if (!user_mode(regs)) - goto no_context; - return 0; - } + /* Quick path to respond to signals */ + if (fault_signal_pending(fault, regs)) { + if (!user_mode(regs)) + goto no_context; + return 0; + } + if (fault & VM_FAULT_RETRY) { /* * Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk of * starvation. _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 092/155] powerpc/mm: use helper fault_signal_pending() 2020-04-02 4:01 incoming Andrew Morton ` (90 preceding siblings ...) 2020-04-02 4:08 ` [patch 091/155] arm64/mm: " Andrew Morton @ 2020-04-02 4:08 ` Andrew Morton 2020-04-02 4:08 ` [patch 093/155] sh/mm: " Andrew Morton ` (62 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:08 UTC (permalink / raw) To: aarcange, akpm, bgeffon, bobbypowers, cracauer, david, dgilbert, dplotnikov, gokhale2, hannes, hughd, jglisse, kirill, linux-mm, mcfadden8, mgorman, mike.kravetz, mm-commits, peterx, rppt, torvalds, willy, xemul From: Peter Xu <peterx@redhat.com> Subject: powerpc/mm: use helper fault_signal_pending() Let powerpc code to use the new helper, by moving the signal handling earlier before the retry logic. Link: http://lkml.kernel.org/r/20200220160222.9422-1-peterx@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com> Tested-by: Brian Geffon <bgeffon@google.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Bobby Powers <bobbypowers@gmail.com> Cc: David Hildenbrand <david@redhat.com> Cc: Denis Plotnikov <dplotnikov@virtuozzo.com> Cc: "Dr . David Alan Gilbert" <dgilbert@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Jerome Glisse <jglisse@redhat.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: "Kirill A . Shutemov" <kirill@shutemov.name> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Martin Cracauer <cracauer@cons.org> Cc: Marty McFadden <mcfadden8@llnl.gov> Cc: Matthew Wilcox <willy@infradead.org> Cc: Maya Gokhale <gokhale2@llnl.gov> Cc: Mel Gorman <mgorman@suse.de> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Mike Rapoport <rppt@linux.vnet.ibm.com> Cc: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- arch/powerpc/mm/fault.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) --- a/arch/powerpc/mm/fault.c~powerpc-mm-use-helper-fault_signal_pending +++ a/arch/powerpc/mm/fault.c @@ -582,6 +582,9 @@ good_area: major |= fault & VM_FAULT_MAJOR; + if (fault_signal_pending(fault, regs)) + return user_mode(regs) ? 0 : SIGBUS; + /* * Handle the retry right now, the mmap_sem has been released in that * case. @@ -595,15 +598,8 @@ good_area: */ flags &= ~FAULT_FLAG_ALLOW_RETRY; flags |= FAULT_FLAG_TRIED; - if (!fatal_signal_pending(current)) - goto retry; + goto retry; } - - /* - * User mode? Just return to handle the fatal exception otherwise - * return to bad_page_fault - */ - return is_user ? 0 : SIGBUS; } up_read(¤t->mm->mmap_sem); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 093/155] sh/mm: use helper fault_signal_pending() 2020-04-02 4:01 incoming Andrew Morton ` (91 preceding siblings ...) 2020-04-02 4:08 ` [patch 092/155] powerpc/mm: " Andrew Morton @ 2020-04-02 4:08 ` Andrew Morton 2020-04-02 4:08 ` [patch 094/155] mm: return faster for non-fatal signals in user mode faults Andrew Morton ` (61 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:08 UTC (permalink / raw) To: aarcange, akpm, bgeffon, bobbypowers, cracauer, david, dgilbert, dplotnikov, gokhale2, hannes, hughd, jglisse, kirill, linux-mm, mcfadden8, mgorman, mike.kravetz, mm-commits, peterx, rppt, torvalds, willy, xemul From: Peter Xu <peterx@redhat.com> Subject: sh/mm: use helper fault_signal_pending() Let SH to use the new fault_signal_pending() helper. Here we'll need to move the up_read() out because that's actually needed as long as !RETRY cases. At the meantime we can drop all the rest of up_read()s now (which seems to be cleaner). Link: http://lkml.kernel.org/r/20200220160226.9550-1-peterx@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com> Tested-by: Brian Geffon <bgeffon@google.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Bobby Powers <bobbypowers@gmail.com> Cc: David Hildenbrand <david@redhat.com> Cc: Denis Plotnikov <dplotnikov@virtuozzo.com> Cc: "Dr . David Alan Gilbert" <dgilbert@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Jerome Glisse <jglisse@redhat.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: "Kirill A . Shutemov" <kirill@shutemov.name> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Martin Cracauer <cracauer@cons.org> Cc: Marty McFadden <mcfadden8@llnl.gov> Cc: Matthew Wilcox <willy@infradead.org> Cc: Maya Gokhale <gokhale2@llnl.gov> Cc: Mel Gorman <mgorman@suse.de> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Mike Rapoport <rppt@linux.vnet.ibm.com> Cc: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- arch/sh/mm/fault.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) --- a/arch/sh/mm/fault.c~sh-mm-use-helper-fault_signal_pending +++ a/arch/sh/mm/fault.c @@ -302,25 +302,25 @@ mm_fault_error(struct pt_regs *regs, uns * Pagefault was interrupted by SIGKILL. We have no reason to * continue pagefault. */ - if (fatal_signal_pending(current)) { - if (!(fault & VM_FAULT_RETRY)) - up_read(¤t->mm->mmap_sem); + if (fault_signal_pending(fault, regs)) { if (!user_mode(regs)) no_context(regs, error_code, address); return 1; } + /* Release mmap_sem first if necessary */ + if (!(fault & VM_FAULT_RETRY)) + up_read(¤t->mm->mmap_sem); + if (!(fault & VM_FAULT_ERROR)) return 0; if (fault & VM_FAULT_OOM) { /* Kernel mode? Handle exceptions or die: */ if (!user_mode(regs)) { - up_read(¤t->mm->mmap_sem); no_context(regs, error_code, address); return 1; } - up_read(¤t->mm->mmap_sem); /* * We ran out of memory, call the OOM killer, and return the _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 094/155] mm: return faster for non-fatal signals in user mode faults 2020-04-02 4:01 incoming Andrew Morton ` (92 preceding siblings ...) 2020-04-02 4:08 ` [patch 093/155] sh/mm: " Andrew Morton @ 2020-04-02 4:08 ` Andrew Morton 2020-04-02 4:08 ` [patch 095/155] userfaultfd: don't retake mmap_sem to emulate NOPAGE Andrew Morton ` (60 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:08 UTC (permalink / raw) To: aarcange, akpm, bgeffon, bobbypowers, cracauer, david, dgilbert, dplotnikov, gokhale2, hannes, hughd, jglisse, kirill, linux-mm, mcfadden8, mgorman, mike.kravetz, mm-commits, peterx, rppt, torvalds, willy, xemul From: Peter Xu <peterx@redhat.com> Subject: mm: return faster for non-fatal signals in user mode faults The idea comes from the upstream discussion between Linus and Andrea: https://lore.kernel.org/lkml/20171102193644.GB22686@redhat.com/ A summary to the issue: there was a special path in handle_userfault() in the past that we'll return a VM_FAULT_NOPAGE when we detected non-fatal signals when waiting for userfault handling. We did that by reacquiring the mmap_sem before returning. However that brings a risk in that the vmas might have changed when we retake the mmap_sem and even we could be holding an invalid vma structure. This patch is a preparation of removing that special path by allowing the page fault to return even faster if we were interrupted by a non-fatal signal during a user-mode page fault handling routine. Link: http://lkml.kernel.org/r/20200220160230.9598-1-peterx@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com> Suggested-by: Linus Torvalds <torvalds@linux-foundation.org> Suggested-by: Andrea Arcangeli <aarcange@redhat.com> Tested-by: Brian Geffon <bgeffon@google.com> Cc: Bobby Powers <bobbypowers@gmail.com> Cc: David Hildenbrand <david@redhat.com> Cc: Denis Plotnikov <dplotnikov@virtuozzo.com> Cc: "Dr . David Alan Gilbert" <dgilbert@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Jerome Glisse <jglisse@redhat.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: "Kirill A . Shutemov" <kirill@shutemov.name> Cc: Martin Cracauer <cracauer@cons.org> Cc: Marty McFadden <mcfadden8@llnl.gov> Cc: Matthew Wilcox <willy@infradead.org> Cc: Maya Gokhale <gokhale2@llnl.gov> Cc: Mel Gorman <mgorman@suse.de> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Mike Rapoport <rppt@linux.vnet.ibm.com> Cc: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/sched/signal.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --- a/include/linux/sched/signal.h~mm-return-faster-for-non-fatal-signals-in-user-mode-faults +++ a/include/linux/sched/signal.h @@ -381,7 +381,8 @@ static inline bool fault_signal_pending( struct pt_regs *regs) { return unlikely((fault_flags & VM_FAULT_RETRY) && - fatal_signal_pending(current)); + (fatal_signal_pending(current) || + (user_mode(regs) && signal_pending(current)))); } /* _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 095/155] userfaultfd: don't retake mmap_sem to emulate NOPAGE 2020-04-02 4:01 incoming Andrew Morton ` (93 preceding siblings ...) 2020-04-02 4:08 ` [patch 094/155] mm: return faster for non-fatal signals in user mode faults Andrew Morton @ 2020-04-02 4:08 ` Andrew Morton 2020-04-02 4:08 ` [patch 096/155] mm: introduce FAULT_FLAG_DEFAULT Andrew Morton ` (59 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:08 UTC (permalink / raw) To: aarcange, akpm, bgeffon, bobbypowers, cracauer, david, dgilbert, dplotnikov, gokhale2, hannes, hughd, jglisse, kirill, linux-mm, mcfadden8, mgorman, mike.kravetz, mm-commits, peterx, rppt, torvalds, willy, xemul From: Peter Xu <peterx@redhat.com> Subject: userfaultfd: don't retake mmap_sem to emulate NOPAGE This patch removes the risk path in handle_userfault() then we will be sure that the callers of handle_mm_fault() will know that the VMAs might have changed. Meanwhile with previous patch we don't lose responsiveness as well since the core mm code now can handle the nonfatal userspace signals even if we return VM_FAULT_RETRY. Link: http://lkml.kernel.org/r/20200220160234.9646-1-peterx@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com> Suggested-by: Andrea Arcangeli <aarcange@redhat.com> Suggested-by: Linus Torvalds <torvalds@linux-foundation.org> Reviewed-by: Jerome Glisse <jglisse@redhat.com> Tested-by: Brian Geffon <bgeffon@google.com> Cc: Bobby Powers <bobbypowers@gmail.com> Cc: David Hildenbrand <david@redhat.com> Cc: Denis Plotnikov <dplotnikov@virtuozzo.com> Cc: "Dr . David Alan Gilbert" <dgilbert@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: "Kirill A . Shutemov" <kirill@shutemov.name> Cc: Martin Cracauer <cracauer@cons.org> Cc: Marty McFadden <mcfadden8@llnl.gov> Cc: Matthew Wilcox <willy@infradead.org> Cc: Maya Gokhale <gokhale2@llnl.gov> Cc: Mel Gorman <mgorman@suse.de> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Mike Rapoport <rppt@linux.vnet.ibm.com> Cc: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/userfaultfd.c | 24 ------------------------ 1 file changed, 24 deletions(-) --- a/fs/userfaultfd.c~userfaultfd-dont-retake-mmap_sem-to-emulate-nopage +++ a/fs/userfaultfd.c @@ -524,30 +524,6 @@ vm_fault_t handle_userfault(struct vm_fa __set_current_state(TASK_RUNNING); - if (return_to_userland) { - if (signal_pending(current) && - !fatal_signal_pending(current)) { - /* - * If we got a SIGSTOP or SIGCONT and this is - * a normal userland page fault, just let - * userland return so the signal will be - * handled and gdb debugging works. The page - * fault code immediately after we return from - * this function is going to release the - * mmap_sem and it's not depending on it - * (unlike gup would if we were not to return - * VM_FAULT_RETRY). - * - * If a fatal signal is pending we still take - * the streamlined VM_FAULT_RETRY failure path - * and there's no need to retake the mmap_sem - * in such case. - */ - down_read(&mm->mmap_sem); - ret = VM_FAULT_NOPAGE; - } - } - /* * Here we race with the list_del; list_add in * userfaultfd_ctx_read(), however because we don't ever run _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 096/155] mm: introduce FAULT_FLAG_DEFAULT 2020-04-02 4:01 incoming Andrew Morton ` (94 preceding siblings ...) 2020-04-02 4:08 ` [patch 095/155] userfaultfd: don't retake mmap_sem to emulate NOPAGE Andrew Morton @ 2020-04-02 4:08 ` Andrew Morton 2020-04-02 4:08 ` [patch 097/155] mm: introduce FAULT_FLAG_INTERRUPTIBLE Andrew Morton ` (58 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:08 UTC (permalink / raw) To: aarcange, akpm, bgeffon, bobbypowers, cracauer, david, dgilbert, dplotnikov, gokhale2, hannes, hughd, jglisse, kirill, linux-mm, mcfadden8, mgorman, mike.kravetz, mm-commits, peterx, rppt, torvalds, willy, xemul From: Peter Xu <peterx@redhat.com> Subject: mm: introduce FAULT_FLAG_DEFAULT Although there're tons of arch-specific page fault handlers, most of them are still sharing the same initial value of the page fault flags. Say, merely all of the page fault handlers would allow the fault to be retried, and they also allow the fault to respond to SIGKILL. Let's define a default value for the fault flags to replace those initial page fault flags that were copied over. With this, it'll be far easier to introduce new fault flag that can be used by all the architectures instead of touching all the archs. Link: http://lkml.kernel.org/r/20200220160238.9694-1-peterx@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com> Reviewed-by: David Hildenbrand <david@redhat.com> Tested-by: Brian Geffon <bgeffon@google.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Bobby Powers <bobbypowers@gmail.com> Cc: Denis Plotnikov <dplotnikov@virtuozzo.com> Cc: "Dr . David Alan Gilbert" <dgilbert@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Jerome Glisse <jglisse@redhat.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: "Kirill A . Shutemov" <kirill@shutemov.name> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Martin Cracauer <cracauer@cons.org> Cc: Marty McFadden <mcfadden8@llnl.gov> Cc: Matthew Wilcox <willy@infradead.org> Cc: Maya Gokhale <gokhale2@llnl.gov> Cc: Mel Gorman <mgorman@suse.de> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Mike Rapoport <rppt@linux.vnet.ibm.com> Cc: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- arch/alpha/mm/fault.c | 2 +- arch/arc/mm/fault.c | 2 +- arch/arm/mm/fault.c | 2 +- arch/arm64/mm/fault.c | 2 +- arch/hexagon/mm/vm_fault.c | 2 +- arch/ia64/mm/fault.c | 2 +- arch/m68k/mm/fault.c | 2 +- arch/microblaze/mm/fault.c | 2 +- arch/mips/mm/fault.c | 2 +- arch/nds32/mm/fault.c | 2 +- arch/nios2/mm/fault.c | 2 +- arch/openrisc/mm/fault.c | 2 +- arch/parisc/mm/fault.c | 2 +- arch/powerpc/mm/fault.c | 2 +- arch/riscv/mm/fault.c | 2 +- arch/s390/mm/fault.c | 2 +- arch/sh/mm/fault.c | 2 +- arch/sparc/mm/fault_32.c | 2 +- arch/sparc/mm/fault_64.c | 2 +- arch/um/kernel/trap.c | 2 +- arch/unicore32/mm/fault.c | 2 +- arch/x86/mm/fault.c | 2 +- arch/xtensa/mm/fault.c | 2 +- include/linux/mm.h | 7 +++++++ 24 files changed, 30 insertions(+), 23 deletions(-) --- a/arch/alpha/mm/fault.c~mm-introduce-fault_flag_default +++ a/arch/alpha/mm/fault.c @@ -89,7 +89,7 @@ do_page_fault(unsigned long address, uns const struct exception_table_entry *fixup; int si_code = SEGV_MAPERR; vm_fault_t fault; - unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + unsigned int flags = FAULT_FLAG_DEFAULT; /* As of EV6, a load into $31/$f31 is a prefetch, and never faults (or is suppressed by the PALcode). Support that for older CPUs --- a/arch/arc/mm/fault.c~mm-introduce-fault_flag_default +++ a/arch/arc/mm/fault.c @@ -100,7 +100,7 @@ void do_page_fault(unsigned long address (regs->ecr_cause == ECR_C_PROTV_INST_FETCH)) exec = 1; - flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + flags = FAULT_FLAG_DEFAULT; if (user_mode(regs)) flags |= FAULT_FLAG_USER; if (write) --- a/arch/arm64/mm/fault.c~mm-introduce-fault_flag_default +++ a/arch/arm64/mm/fault.c @@ -446,7 +446,7 @@ static int __kprobes do_page_fault(unsig struct mm_struct *mm = current->mm; vm_fault_t fault, major = 0; unsigned long vm_flags = VM_READ | VM_WRITE | VM_EXEC; - unsigned int mm_flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + unsigned int mm_flags = FAULT_FLAG_DEFAULT; if (kprobe_page_fault(regs, esr)) return 0; --- a/arch/arm/mm/fault.c~mm-introduce-fault_flag_default +++ a/arch/arm/mm/fault.c @@ -241,7 +241,7 @@ do_page_fault(unsigned long addr, unsign struct mm_struct *mm; int sig, code; vm_fault_t fault; - unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + unsigned int flags = FAULT_FLAG_DEFAULT; if (kprobe_page_fault(regs, fsr)) return 0; --- a/arch/hexagon/mm/vm_fault.c~mm-introduce-fault_flag_default +++ a/arch/hexagon/mm/vm_fault.c @@ -41,7 +41,7 @@ void do_page_fault(unsigned long address int si_code = SEGV_MAPERR; vm_fault_t fault; const struct exception_table_entry *fixup; - unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + unsigned int flags = FAULT_FLAG_DEFAULT; /* * If we're in an interrupt or have no user context, --- a/arch/ia64/mm/fault.c~mm-introduce-fault_flag_default +++ a/arch/ia64/mm/fault.c @@ -65,7 +65,7 @@ ia64_do_page_fault (unsigned long addres struct mm_struct *mm = current->mm; unsigned long mask; vm_fault_t fault; - unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + unsigned int flags = FAULT_FLAG_DEFAULT; mask = ((((isr >> IA64_ISR_X_BIT) & 1UL) << VM_EXEC_BIT) | (((isr >> IA64_ISR_W_BIT) & 1UL) << VM_WRITE_BIT)); --- a/arch/m68k/mm/fault.c~mm-introduce-fault_flag_default +++ a/arch/m68k/mm/fault.c @@ -71,7 +71,7 @@ int do_page_fault(struct pt_regs *regs, struct mm_struct *mm = current->mm; struct vm_area_struct * vma; vm_fault_t fault; - unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + unsigned int flags = FAULT_FLAG_DEFAULT; pr_debug("do page fault:\nregs->sr=%#x, regs->pc=%#lx, address=%#lx, %ld, %p\n", regs->sr, regs->pc, address, error_code, mm ? mm->pgd : NULL); --- a/arch/microblaze/mm/fault.c~mm-introduce-fault_flag_default +++ a/arch/microblaze/mm/fault.c @@ -91,7 +91,7 @@ void do_page_fault(struct pt_regs *regs, int code = SEGV_MAPERR; int is_write = error_code & ESR_S; vm_fault_t fault; - unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + unsigned int flags = FAULT_FLAG_DEFAULT; regs->ear = address; regs->esr = error_code; --- a/arch/mips/mm/fault.c~mm-introduce-fault_flag_default +++ a/arch/mips/mm/fault.c @@ -44,7 +44,7 @@ static void __kprobes __do_page_fault(st const int field = sizeof(unsigned long) * 2; int si_code; vm_fault_t fault; - unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + unsigned int flags = FAULT_FLAG_DEFAULT; static DEFINE_RATELIMIT_STATE(ratelimit_state, 5 * HZ, 10); --- a/arch/nds32/mm/fault.c~mm-introduce-fault_flag_default +++ a/arch/nds32/mm/fault.c @@ -80,7 +80,7 @@ void do_page_fault(unsigned long entry, int si_code; vm_fault_t fault; unsigned int mask = VM_READ | VM_WRITE | VM_EXEC; - unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + unsigned int flags = FAULT_FLAG_DEFAULT; error_code = error_code & (ITYPE_mskINST | ITYPE_mskETYPE); tsk = current; --- a/arch/nios2/mm/fault.c~mm-introduce-fault_flag_default +++ a/arch/nios2/mm/fault.c @@ -47,7 +47,7 @@ asmlinkage void do_page_fault(struct pt_ struct mm_struct *mm = tsk->mm; int code = SEGV_MAPERR; vm_fault_t fault; - unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + unsigned int flags = FAULT_FLAG_DEFAULT; cause >>= 2; --- a/arch/openrisc/mm/fault.c~mm-introduce-fault_flag_default +++ a/arch/openrisc/mm/fault.c @@ -50,7 +50,7 @@ asmlinkage void do_page_fault(struct pt_ struct vm_area_struct *vma; int si_code; vm_fault_t fault; - unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + unsigned int flags = FAULT_FLAG_DEFAULT; tsk = current; --- a/arch/parisc/mm/fault.c~mm-introduce-fault_flag_default +++ a/arch/parisc/mm/fault.c @@ -274,7 +274,7 @@ void do_page_fault(struct pt_regs *regs, if (!mm) goto no_context; - flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + flags = FAULT_FLAG_DEFAULT; if (user_mode(regs)) flags |= FAULT_FLAG_USER; --- a/arch/powerpc/mm/fault.c~mm-introduce-fault_flag_default +++ a/arch/powerpc/mm/fault.c @@ -434,7 +434,7 @@ static int __do_page_fault(struct pt_reg { struct vm_area_struct * vma; struct mm_struct *mm = current->mm; - unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + unsigned int flags = FAULT_FLAG_DEFAULT; int is_exec = TRAP(regs) == 0x400; int is_user = user_mode(regs); int is_write = page_fault_is_write(error_code); --- a/arch/riscv/mm/fault.c~mm-introduce-fault_flag_default +++ a/arch/riscv/mm/fault.c @@ -30,7 +30,7 @@ asmlinkage void do_page_fault(struct pt_ struct vm_area_struct *vma; struct mm_struct *mm; unsigned long addr, cause; - unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + unsigned int flags = FAULT_FLAG_DEFAULT; int code = SEGV_MAPERR; vm_fault_t fault; --- a/arch/s390/mm/fault.c~mm-introduce-fault_flag_default +++ a/arch/s390/mm/fault.c @@ -429,7 +429,7 @@ static inline vm_fault_t do_exception(st address = trans_exc_code & __FAIL_ADDR_MASK; perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); - flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + flags = FAULT_FLAG_DEFAULT; if (user_mode(regs)) flags |= FAULT_FLAG_USER; if (access == VM_WRITE || (trans_exc_code & store_indication) == 0x400) --- a/arch/sh/mm/fault.c~mm-introduce-fault_flag_default +++ a/arch/sh/mm/fault.c @@ -380,7 +380,7 @@ asmlinkage void __kprobes do_page_fault( struct mm_struct *mm; struct vm_area_struct * vma; vm_fault_t fault; - unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + unsigned int flags = FAULT_FLAG_DEFAULT; tsk = current; mm = tsk->mm; --- a/arch/sparc/mm/fault_32.c~mm-introduce-fault_flag_default +++ a/arch/sparc/mm/fault_32.c @@ -168,7 +168,7 @@ asmlinkage void do_sparc_fault(struct pt int from_user = !(regs->psr & PSR_PS); int code; vm_fault_t fault; - unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + unsigned int flags = FAULT_FLAG_DEFAULT; if (text_fault) address = regs->pc; --- a/arch/sparc/mm/fault_64.c~mm-introduce-fault_flag_default +++ a/arch/sparc/mm/fault_64.c @@ -271,7 +271,7 @@ asmlinkage void __kprobes do_sparc64_fau int si_code, fault_code; vm_fault_t fault; unsigned long address, mm_rss; - unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + unsigned int flags = FAULT_FLAG_DEFAULT; fault_code = get_thread_fault_code(); --- a/arch/um/kernel/trap.c~mm-introduce-fault_flag_default +++ a/arch/um/kernel/trap.c @@ -33,7 +33,7 @@ int handle_page_fault(unsigned long addr pmd_t *pmd; pte_t *pte; int err = -EFAULT; - unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + unsigned int flags = FAULT_FLAG_DEFAULT; *code_out = SEGV_MAPERR; --- a/arch/unicore32/mm/fault.c~mm-introduce-fault_flag_default +++ a/arch/unicore32/mm/fault.c @@ -202,7 +202,7 @@ static int do_pf(unsigned long addr, uns struct mm_struct *mm; int sig, code; vm_fault_t fault; - unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + unsigned int flags = FAULT_FLAG_DEFAULT; tsk = current; mm = tsk->mm; --- a/arch/x86/mm/fault.c~mm-introduce-fault_flag_default +++ a/arch/x86/mm/fault.c @@ -1310,7 +1310,7 @@ void do_user_addr_fault(struct pt_regs * struct task_struct *tsk; struct mm_struct *mm; vm_fault_t fault, major = 0; - unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + unsigned int flags = FAULT_FLAG_DEFAULT; tsk = current; mm = tsk->mm; --- a/arch/xtensa/mm/fault.c~mm-introduce-fault_flag_default +++ a/arch/xtensa/mm/fault.c @@ -43,7 +43,7 @@ void do_page_fault(struct pt_regs *regs) int is_write, is_exec; vm_fault_t fault; - unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + unsigned int flags = FAULT_FLAG_DEFAULT; code = SEGV_MAPERR; --- a/include/linux/mm.h~mm-introduce-fault_flag_default +++ a/include/linux/mm.h @@ -391,6 +391,13 @@ extern pgprot_t protection_map[16]; #define FAULT_FLAG_REMOTE 0x80 /* faulting for non current tsk/mm */ #define FAULT_FLAG_INSTRUCTION 0x100 /* The fault was during an instruction fetch */ +/* + * The default fault flags that should be used by most of the + * arch-specific page fault handlers. + */ +#define FAULT_FLAG_DEFAULT (FAULT_FLAG_ALLOW_RETRY | \ + FAULT_FLAG_KILLABLE) + #define FAULT_FLAG_TRACE \ { FAULT_FLAG_WRITE, "WRITE" }, \ { FAULT_FLAG_MKWRITE, "MKWRITE" }, \ _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 097/155] mm: introduce FAULT_FLAG_INTERRUPTIBLE 2020-04-02 4:01 incoming Andrew Morton ` (95 preceding siblings ...) 2020-04-02 4:08 ` [patch 096/155] mm: introduce FAULT_FLAG_DEFAULT Andrew Morton @ 2020-04-02 4:08 ` Andrew Morton 2020-04-02 4:08 ` [patch 098/155] mm: allow VM_FAULT_RETRY for multiple times Andrew Morton ` (57 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:08 UTC (permalink / raw) To: aarcange, akpm, bgeffon, bobbypowers, cracauer, david, dgilbert, dplotnikov, gokhale2, hannes, hughd, jglisse, kirill, linux-mm, mcfadden8, mgorman, mike.kravetz, mm-commits, peterx, rppt, torvalds, willy, xemul From: Peter Xu <peterx@redhat.com> Subject: mm: introduce FAULT_FLAG_INTERRUPTIBLE handle_userfaultfd() is currently the only one place in the kernel page fault procedures that can respond to non-fatal userspace signals. It was trying to detect such an allowance by checking against USER & KILLABLE flags, which was "un-official". In this patch, we introduced a new flag (FAULT_FLAG_INTERRUPTIBLE) to show that the fault handler allows the fault procedure to respond even to non-fatal signals. Meanwhile, add this new flag to the default fault flags so that all the page fault handlers can benefit from the new flag. With that, replacing the userfault check to this one. Since the line is getting even longer, clean up the fault flags a bit too to ease TTY users. Although we've got a new flag and applied it, we shouldn't have any functional change with this patch so far. Link: http://lkml.kernel.org/r/20200220195348.16302-1-peterx@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com> Suggested-by: Linus Torvalds <torvalds@linux-foundation.org> Reviewed-by: David Hildenbrand <david@redhat.com> Tested-by: Brian Geffon <bgeffon@google.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Bobby Powers <bobbypowers@gmail.com> Cc: Denis Plotnikov <dplotnikov@virtuozzo.com> Cc: "Dr . David Alan Gilbert" <dgilbert@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Jerome Glisse <jglisse@redhat.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: "Kirill A . Shutemov" <kirill@shutemov.name> Cc: Martin Cracauer <cracauer@cons.org> Cc: Marty McFadden <mcfadden8@llnl.gov> Cc: Matthew Wilcox <willy@infradead.org> Cc: Maya Gokhale <gokhale2@llnl.gov> Cc: Mel Gorman <mgorman@suse.de> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Mike Rapoport <rppt@linux.vnet.ibm.com> Cc: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/userfaultfd.c | 4 +--- include/linux/mm.h | 39 ++++++++++++++++++++++++++++----------- 2 files changed, 29 insertions(+), 14 deletions(-) --- a/fs/userfaultfd.c~mm-introduce-fault_flag_interruptible +++ a/fs/userfaultfd.c @@ -462,9 +462,7 @@ vm_fault_t handle_userfault(struct vm_fa uwq.ctx = ctx; uwq.waken = false; - return_to_userland = - (vmf->flags & (FAULT_FLAG_USER|FAULT_FLAG_KILLABLE)) == - (FAULT_FLAG_USER|FAULT_FLAG_KILLABLE); + return_to_userland = vmf->flags & FAULT_FLAG_INTERRUPTIBLE; blocking_state = return_to_userland ? TASK_INTERRUPTIBLE : TASK_KILLABLE; --- a/include/linux/mm.h~mm-introduce-fault_flag_interruptible +++ a/include/linux/mm.h @@ -381,22 +381,38 @@ extern unsigned int kobjsize(const void */ extern pgprot_t protection_map[16]; -#define FAULT_FLAG_WRITE 0x01 /* Fault was a write access */ -#define FAULT_FLAG_MKWRITE 0x02 /* Fault was mkwrite of existing pte */ -#define FAULT_FLAG_ALLOW_RETRY 0x04 /* Retry fault if blocking */ -#define FAULT_FLAG_RETRY_NOWAIT 0x08 /* Don't drop mmap_sem and wait when retrying */ -#define FAULT_FLAG_KILLABLE 0x10 /* The fault task is in SIGKILL killable region */ -#define FAULT_FLAG_TRIED 0x20 /* Second try */ -#define FAULT_FLAG_USER 0x40 /* The fault originated in userspace */ -#define FAULT_FLAG_REMOTE 0x80 /* faulting for non current tsk/mm */ -#define FAULT_FLAG_INSTRUCTION 0x100 /* The fault was during an instruction fetch */ +/** + * Fault flag definitions. + * + * @FAULT_FLAG_WRITE: Fault was a write fault. + * @FAULT_FLAG_MKWRITE: Fault was mkwrite of existing PTE. + * @FAULT_FLAG_ALLOW_RETRY: Allow to retry the fault if blocked. + * @FAULT_FLAG_RETRY_NOWAIT: Don't drop mmap_sem and wait when retrying. + * @FAULT_FLAG_KILLABLE: The fault task is in SIGKILL killable region. + * @FAULT_FLAG_TRIED: The fault has been tried once. + * @FAULT_FLAG_USER: The fault originated in userspace. + * @FAULT_FLAG_REMOTE: The fault is not for current task/mm. + * @FAULT_FLAG_INSTRUCTION: The fault was during an instruction fetch. + * @FAULT_FLAG_INTERRUPTIBLE: The fault can be interrupted by non-fatal signals. + */ +#define FAULT_FLAG_WRITE 0x01 +#define FAULT_FLAG_MKWRITE 0x02 +#define FAULT_FLAG_ALLOW_RETRY 0x04 +#define FAULT_FLAG_RETRY_NOWAIT 0x08 +#define FAULT_FLAG_KILLABLE 0x10 +#define FAULT_FLAG_TRIED 0x20 +#define FAULT_FLAG_USER 0x40 +#define FAULT_FLAG_REMOTE 0x80 +#define FAULT_FLAG_INSTRUCTION 0x100 +#define FAULT_FLAG_INTERRUPTIBLE 0x200 /* * The default fault flags that should be used by most of the * arch-specific page fault handlers. */ #define FAULT_FLAG_DEFAULT (FAULT_FLAG_ALLOW_RETRY | \ - FAULT_FLAG_KILLABLE) + FAULT_FLAG_KILLABLE | \ + FAULT_FLAG_INTERRUPTIBLE) #define FAULT_FLAG_TRACE \ { FAULT_FLAG_WRITE, "WRITE" }, \ @@ -407,7 +423,8 @@ extern pgprot_t protection_map[16]; { FAULT_FLAG_TRIED, "TRIED" }, \ { FAULT_FLAG_USER, "USER" }, \ { FAULT_FLAG_REMOTE, "REMOTE" }, \ - { FAULT_FLAG_INSTRUCTION, "INSTRUCTION" } + { FAULT_FLAG_INSTRUCTION, "INSTRUCTION" }, \ + { FAULT_FLAG_INTERRUPTIBLE, "INTERRUPTIBLE" } /* * vm_fault is filled by the the pagefault handler and passed to the vma's _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 098/155] mm: allow VM_FAULT_RETRY for multiple times 2020-04-02 4:01 incoming Andrew Morton ` (96 preceding siblings ...) 2020-04-02 4:08 ` [patch 097/155] mm: introduce FAULT_FLAG_INTERRUPTIBLE Andrew Morton @ 2020-04-02 4:08 ` Andrew Morton 2020-04-02 4:08 ` [patch 099/155] mm/gup: " Andrew Morton ` (56 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:08 UTC (permalink / raw) To: aarcange, akpm, bgeffon, bobbypowers, cracauer, david, dgilbert, dplotnikov, gokhale2, hannes, hughd, jglisse, kirill, linux-mm, mcfadden8, mgorman, mike.kravetz, mm-commits, peterx, rppt, torvalds, willy, xemul From: Peter Xu <peterx@redhat.com> Subject: mm: allow VM_FAULT_RETRY for multiple times The idea comes from a discussion between Linus and Andrea [1]. Before this patch we only allow a page fault to retry once. We achieved this by clearing the FAULT_FLAG_ALLOW_RETRY flag when doing handle_mm_fault() the second time. This was majorly used to avoid unexpected starvation of the system by looping over forever to handle the page fault on a single page. However that should hardly happen, and after all for each code path to return a VM_FAULT_RETRY we'll first wait for a condition (during which time we should possibly yield the cpu) to happen before VM_FAULT_RETRY is really returned. This patch removes the restriction by keeping the FAULT_FLAG_ALLOW_RETRY flag when we receive VM_FAULT_RETRY. It means that the page fault handler now can retry the page fault for multiple times if necessary without the need to generate another page fault event. Meanwhile we still keep the FAULT_FLAG_TRIED flag so page fault handler can still identify whether a page fault is the first attempt or not. Then we'll have these combinations of fault flags (only considering ALLOW_RETRY flag and TRIED flag): - ALLOW_RETRY and !TRIED: this means the page fault allows to retry, and this is the first try - ALLOW_RETRY and TRIED: this means the page fault allows to retry, and this is not the first try - !ALLOW_RETRY and !TRIED: this means the page fault does not allow to retry at all - !ALLOW_RETRY and TRIED: this is forbidden and should never be used In existing code we have multiple places that has taken special care of the first condition above by checking against (fault_flags & FAULT_FLAG_ALLOW_RETRY). This patch introduces a simple helper to detect the first retry of a page fault by checking against both (fault_flags & FAULT_FLAG_ALLOW_RETRY) and !(fault_flag & FAULT_FLAG_TRIED) because now even the 2nd try will have the ALLOW_RETRY set, then use that helper in all existing special paths. One example is in __lock_page_or_retry(), now we'll drop the mmap_sem only in the first attempt of page fault and we'll keep it in follow up retries, so old locking behavior will be retained. This will be a nice enhancement for current code [2] at the same time a supporting material for the future userfaultfd-writeprotect work, since in that work there will always be an explicit userfault writeprotect retry for protected pages, and if that cannot resolve the page fault (e.g., when userfaultfd-writeprotect is used in conjunction with swapped pages) then we'll possibly need a 3rd retry of the page fault. It might also benefit other potential users who will have similar requirement like userfault write-protection. GUP code is not touched yet and will be covered in follow up patch. Please read the thread below for more information. [1] https://lore.kernel.org/lkml/20171102193644.GB22686@redhat.com/ [2] https://lore.kernel.org/lkml/20181230154648.GB9832@redhat.com/ Link: http://lkml.kernel.org/r/20200220160246.9790-1-peterx@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com> Suggested-by: Linus Torvalds <torvalds@linux-foundation.org> Suggested-by: Andrea Arcangeli <aarcange@redhat.com> Tested-by: Brian Geffon <bgeffon@google.com> Cc: Bobby Powers <bobbypowers@gmail.com> Cc: David Hildenbrand <david@redhat.com> Cc: Denis Plotnikov <dplotnikov@virtuozzo.com> Cc: "Dr . David Alan Gilbert" <dgilbert@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Jerome Glisse <jglisse@redhat.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: "Kirill A . Shutemov" <kirill@shutemov.name> Cc: Martin Cracauer <cracauer@cons.org> Cc: Marty McFadden <mcfadden8@llnl.gov> Cc: Matthew Wilcox <willy@infradead.org> Cc: Maya Gokhale <gokhale2@llnl.gov> Cc: Mel Gorman <mgorman@suse.de> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Mike Rapoport <rppt@linux.vnet.ibm.com> Cc: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- arch/alpha/mm/fault.c | 2 - arch/arc/mm/fault.c | 1 arch/arm/mm/fault.c | 3 -- arch/arm64/mm/fault.c | 5 ---- arch/hexagon/mm/vm_fault.c | 1 arch/ia64/mm/fault.c | 1 arch/m68k/mm/fault.c | 3 -- arch/microblaze/mm/fault.c | 1 arch/mips/mm/fault.c | 1 arch/nds32/mm/fault.c | 1 arch/nios2/mm/fault.c | 3 -- arch/openrisc/mm/fault.c | 1 arch/parisc/mm/fault.c | 4 --- arch/powerpc/mm/fault.c | 6 ---- arch/riscv/mm/fault.c | 5 ---- arch/s390/mm/fault.c | 5 ---- arch/sh/mm/fault.c | 1 arch/sparc/mm/fault_32.c | 1 arch/sparc/mm/fault_64.c | 1 arch/um/kernel/trap.c | 1 arch/unicore32/mm/fault.c | 4 --- arch/x86/mm/fault.c | 2 - arch/xtensa/mm/fault.c | 1 drivers/gpu/drm/ttm/ttm_bo_vm.c | 12 +++++++-- include/linux/mm.h | 37 ++++++++++++++++++++++++++++++ mm/filemap.c | 2 - mm/internal.h | 6 ++-- 27 files changed, 54 insertions(+), 57 deletions(-) --- a/arch/alpha/mm/fault.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/alpha/mm/fault.c @@ -169,7 +169,7 @@ retry: else current->min_flt++; if (fault & VM_FAULT_RETRY) { - flags &= ~FAULT_FLAG_ALLOW_RETRY; + flags |= FAULT_FLAG_TRIED; /* No need to up_read(&mm->mmap_sem) as we would * have already released it in __lock_page_or_retry --- a/arch/arc/mm/fault.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/arc/mm/fault.c @@ -145,7 +145,6 @@ retry: */ if (unlikely((fault & VM_FAULT_RETRY) && (flags & FAULT_FLAG_ALLOW_RETRY))) { - flags &= ~FAULT_FLAG_ALLOW_RETRY; flags |= FAULT_FLAG_TRIED; goto retry; } --- a/arch/arm64/mm/fault.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/arm64/mm/fault.c @@ -521,12 +521,7 @@ retry: } if (fault & VM_FAULT_RETRY) { - /* - * Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk of - * starvation. - */ if (mm_flags & FAULT_FLAG_ALLOW_RETRY) { - mm_flags &= ~FAULT_FLAG_ALLOW_RETRY; mm_flags |= FAULT_FLAG_TRIED; goto retry; } --- a/arch/arm/mm/fault.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/arm/mm/fault.c @@ -319,9 +319,6 @@ retry: regs, addr); } if (fault & VM_FAULT_RETRY) { - /* Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk - * of starvation. */ - flags &= ~FAULT_FLAG_ALLOW_RETRY; flags |= FAULT_FLAG_TRIED; goto retry; } --- a/arch/hexagon/mm/vm_fault.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/hexagon/mm/vm_fault.c @@ -102,7 +102,6 @@ good_area: else current->min_flt++; if (fault & VM_FAULT_RETRY) { - flags &= ~FAULT_FLAG_ALLOW_RETRY; flags |= FAULT_FLAG_TRIED; goto retry; } --- a/arch/ia64/mm/fault.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/ia64/mm/fault.c @@ -167,7 +167,6 @@ retry: else current->min_flt++; if (fault & VM_FAULT_RETRY) { - flags &= ~FAULT_FLAG_ALLOW_RETRY; flags |= FAULT_FLAG_TRIED; /* No need to up_read(&mm->mmap_sem) as we would --- a/arch/m68k/mm/fault.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/m68k/mm/fault.c @@ -162,9 +162,6 @@ good_area: else current->min_flt++; if (fault & VM_FAULT_RETRY) { - /* Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk - * of starvation. */ - flags &= ~FAULT_FLAG_ALLOW_RETRY; flags |= FAULT_FLAG_TRIED; /* --- a/arch/microblaze/mm/fault.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/microblaze/mm/fault.c @@ -236,7 +236,6 @@ good_area: else current->min_flt++; if (fault & VM_FAULT_RETRY) { - flags &= ~FAULT_FLAG_ALLOW_RETRY; flags |= FAULT_FLAG_TRIED; /* --- a/arch/mips/mm/fault.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/mips/mm/fault.c @@ -178,7 +178,6 @@ good_area: tsk->min_flt++; } if (fault & VM_FAULT_RETRY) { - flags &= ~FAULT_FLAG_ALLOW_RETRY; flags |= FAULT_FLAG_TRIED; /* --- a/arch/nds32/mm/fault.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/nds32/mm/fault.c @@ -246,7 +246,6 @@ good_area: 1, regs, addr); } if (fault & VM_FAULT_RETRY) { - flags &= ~FAULT_FLAG_ALLOW_RETRY; flags |= FAULT_FLAG_TRIED; /* No need to up_read(&mm->mmap_sem) as we would --- a/arch/nios2/mm/fault.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/nios2/mm/fault.c @@ -157,9 +157,6 @@ good_area: else current->min_flt++; if (fault & VM_FAULT_RETRY) { - /* Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk - * of starvation. */ - flags &= ~FAULT_FLAG_ALLOW_RETRY; flags |= FAULT_FLAG_TRIED; /* --- a/arch/openrisc/mm/fault.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/openrisc/mm/fault.c @@ -181,7 +181,6 @@ good_area: else tsk->min_flt++; if (fault & VM_FAULT_RETRY) { - flags &= ~FAULT_FLAG_ALLOW_RETRY; flags |= FAULT_FLAG_TRIED; /* No need to up_read(&mm->mmap_sem) as we would --- a/arch/parisc/mm/fault.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/parisc/mm/fault.c @@ -328,14 +328,12 @@ good_area: else current->min_flt++; if (fault & VM_FAULT_RETRY) { - flags &= ~FAULT_FLAG_ALLOW_RETRY; - /* * No need to up_read(&mm->mmap_sem) as we would * have already released it in __lock_page_or_retry * in mm/filemap.c. */ - + flags |= FAULT_FLAG_TRIED; goto retry; } } --- a/arch/powerpc/mm/fault.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/powerpc/mm/fault.c @@ -590,13 +590,7 @@ good_area: * case. */ if (unlikely(fault & VM_FAULT_RETRY)) { - /* We retry only once */ if (flags & FAULT_FLAG_ALLOW_RETRY) { - /* - * Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk - * of starvation. - */ - flags &= ~FAULT_FLAG_ALLOW_RETRY; flags |= FAULT_FLAG_TRIED; goto retry; } --- a/arch/riscv/mm/fault.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/riscv/mm/fault.c @@ -144,11 +144,6 @@ good_area: 1, regs, addr); } if (fault & VM_FAULT_RETRY) { - /* - * Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk - * of starvation. - */ - flags &= ~(FAULT_FLAG_ALLOW_RETRY); flags |= FAULT_FLAG_TRIED; /* --- a/arch/s390/mm/fault.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/s390/mm/fault.c @@ -513,10 +513,7 @@ retry: fault = VM_FAULT_PFAULT; goto out_up; } - /* Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk - * of starvation. */ - flags &= ~(FAULT_FLAG_ALLOW_RETRY | - FAULT_FLAG_RETRY_NOWAIT); + flags &= ~FAULT_FLAG_RETRY_NOWAIT; flags |= FAULT_FLAG_TRIED; down_read(&mm->mmap_sem); goto retry; --- a/arch/sh/mm/fault.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/sh/mm/fault.c @@ -481,7 +481,6 @@ good_area: regs, address); } if (fault & VM_FAULT_RETRY) { - flags &= ~FAULT_FLAG_ALLOW_RETRY; flags |= FAULT_FLAG_TRIED; /* --- a/arch/sparc/mm/fault_32.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/sparc/mm/fault_32.c @@ -261,7 +261,6 @@ good_area: 1, regs, address); } if (fault & VM_FAULT_RETRY) { - flags &= ~FAULT_FLAG_ALLOW_RETRY; flags |= FAULT_FLAG_TRIED; /* No need to up_read(&mm->mmap_sem) as we would --- a/arch/sparc/mm/fault_64.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/sparc/mm/fault_64.c @@ -449,7 +449,6 @@ good_area: 1, regs, address); } if (fault & VM_FAULT_RETRY) { - flags &= ~FAULT_FLAG_ALLOW_RETRY; flags |= FAULT_FLAG_TRIED; /* No need to up_read(&mm->mmap_sem) as we would --- a/arch/um/kernel/trap.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/um/kernel/trap.c @@ -97,7 +97,6 @@ good_area: else current->min_flt++; if (fault & VM_FAULT_RETRY) { - flags &= ~FAULT_FLAG_ALLOW_RETRY; flags |= FAULT_FLAG_TRIED; goto retry; --- a/arch/unicore32/mm/fault.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/unicore32/mm/fault.c @@ -259,9 +259,7 @@ retry: else tsk->min_flt++; if (fault & VM_FAULT_RETRY) { - /* Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk - * of starvation. */ - flags &= ~FAULT_FLAG_ALLOW_RETRY; + flags |= FAULT_FLAG_TRIED; goto retry; } } --- a/arch/x86/mm/fault.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/x86/mm/fault.c @@ -1479,8 +1479,6 @@ good_area: */ if (unlikely((fault & VM_FAULT_RETRY) && (flags & FAULT_FLAG_ALLOW_RETRY))) { - /* Retry at most once */ - flags &= ~FAULT_FLAG_ALLOW_RETRY; flags |= FAULT_FLAG_TRIED; goto retry; } --- a/arch/xtensa/mm/fault.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/arch/xtensa/mm/fault.c @@ -128,7 +128,6 @@ good_area: else current->min_flt++; if (fault & VM_FAULT_RETRY) { - flags &= ~FAULT_FLAG_ALLOW_RETRY; flags |= FAULT_FLAG_TRIED; /* No need to up_read(&mm->mmap_sem) as we would --- a/drivers/gpu/drm/ttm/ttm_bo_vm.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/drivers/gpu/drm/ttm/ttm_bo_vm.c @@ -59,9 +59,10 @@ static vm_fault_t ttm_bo_vm_fault_idle(s /* * If possible, avoid waiting for GPU with mmap_sem - * held. + * held. We only do this if the fault allows retry and this + * is the first attempt. */ - if (vmf->flags & FAULT_FLAG_ALLOW_RETRY) { + if (fault_flag_allow_retry_first(vmf->flags)) { ret = VM_FAULT_RETRY; if (vmf->flags & FAULT_FLAG_RETRY_NOWAIT) goto out_unlock; @@ -135,7 +136,12 @@ vm_fault_t ttm_bo_vm_reserve(struct ttm_ * for the buffer to become unreserved. */ if (unlikely(!dma_resv_trylock(bo->base.resv))) { - if (vmf->flags & FAULT_FLAG_ALLOW_RETRY) { + /* + * If the fault allows retry and this is the first + * fault attempt, we try to release the mmap_sem + * before waiting + */ + if (fault_flag_allow_retry_first(vmf->flags)) { if (!(vmf->flags & FAULT_FLAG_RETRY_NOWAIT)) { ttm_bo_get(bo); up_read(&vmf->vma->vm_mm->mmap_sem); --- a/include/linux/mm.h~mm-allow-vm_fault_retry-for-multiple-times +++ a/include/linux/mm.h @@ -394,6 +394,25 @@ extern pgprot_t protection_map[16]; * @FAULT_FLAG_REMOTE: The fault is not for current task/mm. * @FAULT_FLAG_INSTRUCTION: The fault was during an instruction fetch. * @FAULT_FLAG_INTERRUPTIBLE: The fault can be interrupted by non-fatal signals. + * + * About @FAULT_FLAG_ALLOW_RETRY and @FAULT_FLAG_TRIED: we can specify + * whether we would allow page faults to retry by specifying these two + * fault flags correctly. Currently there can be three legal combinations: + * + * (a) ALLOW_RETRY and !TRIED: this means the page fault allows retry, and + * this is the first try + * + * (b) ALLOW_RETRY and TRIED: this means the page fault allows retry, and + * we've already tried at least once + * + * (c) !ALLOW_RETRY and !TRIED: this means the page fault does not allow retry + * + * The unlisted combination (!ALLOW_RETRY && TRIED) is illegal and should never + * be used. Note that page faults can be allowed to retry for multiple times, + * in which case we'll have an initial fault with flags (a) then later on + * continuous faults with flags (b). We should always try to detect pending + * signals before a retry to make sure the continuous page faults can still be + * interrupted if necessary. */ #define FAULT_FLAG_WRITE 0x01 #define FAULT_FLAG_MKWRITE 0x02 @@ -414,6 +433,24 @@ extern pgprot_t protection_map[16]; FAULT_FLAG_KILLABLE | \ FAULT_FLAG_INTERRUPTIBLE) +/** + * fault_flag_allow_retry_first - check ALLOW_RETRY the first time + * + * This is mostly used for places where we want to try to avoid taking + * the mmap_sem for too long a time when waiting for another condition + * to change, in which case we can try to be polite to release the + * mmap_sem in the first round to avoid potential starvation of other + * processes that would also want the mmap_sem. + * + * Return: true if the page fault allows retry and this is the first + * attempt of the fault handling; false otherwise. + */ +static inline bool fault_flag_allow_retry_first(unsigned int flags) +{ + return (flags & FAULT_FLAG_ALLOW_RETRY) && + (!(flags & FAULT_FLAG_TRIED)); +} + #define FAULT_FLAG_TRACE \ { FAULT_FLAG_WRITE, "WRITE" }, \ { FAULT_FLAG_MKWRITE, "MKWRITE" }, \ --- a/mm/filemap.c~mm-allow-vm_fault_retry-for-multiple-times +++ a/mm/filemap.c @@ -1386,7 +1386,7 @@ EXPORT_SYMBOL_GPL(__lock_page_killable); int __lock_page_or_retry(struct page *page, struct mm_struct *mm, unsigned int flags) { - if (flags & FAULT_FLAG_ALLOW_RETRY) { + if (fault_flag_allow_retry_first(flags)) { /* * CAUTION! In this case, mmap_sem is not released * even though return 0. --- a/mm/internal.h~mm-allow-vm_fault_retry-for-multiple-times +++ a/mm/internal.h @@ -400,10 +400,10 @@ static inline struct file *maybe_unlock_ /* * FAULT_FLAG_RETRY_NOWAIT means we don't want to wait on page locks or * anything, so we only pin the file and drop the mmap_sem if only - * FAULT_FLAG_ALLOW_RETRY is set. + * FAULT_FLAG_ALLOW_RETRY is set, while this is the first attempt. */ - if ((flags & (FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_RETRY_NOWAIT)) == - FAULT_FLAG_ALLOW_RETRY) { + if (fault_flag_allow_retry_first(flags) && + !(flags & FAULT_FLAG_RETRY_NOWAIT)) { fpin = get_file(vmf->vma->vm_file); up_read(&vmf->vma->vm_mm->mmap_sem); } _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 099/155] mm/gup: allow VM_FAULT_RETRY for multiple times 2020-04-02 4:01 incoming Andrew Morton ` (97 preceding siblings ...) 2020-04-02 4:08 ` [patch 098/155] mm: allow VM_FAULT_RETRY for multiple times Andrew Morton @ 2020-04-02 4:08 ` Andrew Morton 2020-04-02 4:08 ` [patch 100/155] mm/gup: allow to react to fatal signals Andrew Morton ` (55 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:08 UTC (permalink / raw) To: aarcange, akpm, bgeffon, bobbypowers, cracauer, david, dgilbert, dplotnikov, gokhale2, hannes, hughd, jglisse, kirill, linux-mm, mcfadden8, mgorman, mike.kravetz, mm-commits, peterx, rppt, torvalds, willy, xemul From: Peter Xu <peterx@redhat.com> Subject: mm/gup: allow VM_FAULT_RETRY for multiple times This is the gup counterpart of the change that allows the VM_FAULT_RETRY to happen for more than once. One thing to mention is that we must check the fatal signal here before retry because the GUP can be interrupted by that, otherwise we can loop forever. Link: http://lkml.kernel.org/r/20200220195357.16371-1-peterx@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com> Tested-by: Brian Geffon <bgeffon@google.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Bobby Powers <bobbypowers@gmail.com> Cc: David Hildenbrand <david@redhat.com> Cc: Denis Plotnikov <dplotnikov@virtuozzo.com> Cc: "Dr . David Alan Gilbert" <dgilbert@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Jerome Glisse <jglisse@redhat.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: "Kirill A . Shutemov" <kirill@shutemov.name> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Martin Cracauer <cracauer@cons.org> Cc: Marty McFadden <mcfadden8@llnl.gov> Cc: Matthew Wilcox <willy@infradead.org> Cc: Maya Gokhale <gokhale2@llnl.gov> Cc: Mel Gorman <mgorman@suse.de> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Mike Rapoport <rppt@linux.vnet.ibm.com> Cc: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/gup.c | 27 +++++++++++++++++++++------ mm/hugetlb.c | 6 ++++-- 2 files changed, 25 insertions(+), 8 deletions(-) --- a/mm/gup.c~mm-gup-allow-vm_fault_retry-for-multiple-times +++ a/mm/gup.c @@ -868,7 +868,10 @@ static int faultin_page(struct task_stru if (*flags & FOLL_NOWAIT) fault_flags |= FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_RETRY_NOWAIT; if (*flags & FOLL_TRIED) { - VM_WARN_ON_ONCE(fault_flags & FAULT_FLAG_ALLOW_RETRY); + /* + * Note: FAULT_FLAG_ALLOW_RETRY and FAULT_FLAG_TRIED + * can co-exist + */ fault_flags |= FAULT_FLAG_TRIED; } @@ -1228,7 +1231,6 @@ retry: down_read(&mm->mmap_sem); if (!(fault_flags & FAULT_FLAG_TRIED)) { *unlocked = true; - fault_flags &= ~FAULT_FLAG_ALLOW_RETRY; fault_flags |= FAULT_FLAG_TRIED; goto retry; } @@ -1312,17 +1314,30 @@ static __always_inline long __get_user_p if (likely(pages)) pages += ret; start += ret << PAGE_SHIFT; + lock_dropped = true; +retry: /* * Repeat on the address that fired VM_FAULT_RETRY - * without FAULT_FLAG_ALLOW_RETRY but with - * FAULT_FLAG_TRIED. + * with both FAULT_FLAG_ALLOW_RETRY and + * FAULT_FLAG_TRIED. Note that GUP can be interrupted + * by fatal signals, so we need to check it before we + * start trying again otherwise it can loop forever. */ + + if (fatal_signal_pending(current)) + break; + *locked = 1; - lock_dropped = true; down_read(&mm->mmap_sem); + ret = __get_user_pages(tsk, mm, start, 1, flags | FOLL_TRIED, - pages, NULL, NULL); + pages, NULL, locked); + if (!*locked) { + /* Continue to retry until we succeeded */ + BUG_ON(ret != 0); + goto retry; + } if (ret != 1) { BUG_ON(ret > 1); if (!pages_done) --- a/mm/hugetlb.c~mm-gup-allow-vm_fault_retry-for-multiple-times +++ a/mm/hugetlb.c @@ -4349,8 +4349,10 @@ long follow_hugetlb_page(struct mm_struc fault_flags |= FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_RETRY_NOWAIT; if (flags & FOLL_TRIED) { - VM_WARN_ON_ONCE(fault_flags & - FAULT_FLAG_ALLOW_RETRY); + /* + * Note: FAULT_FLAG_ALLOW_RETRY and + * FAULT_FLAG_TRIED can co-exist + */ fault_flags |= FAULT_FLAG_TRIED; } ret = hugetlb_fault(mm, vma, vaddr, fault_flags); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 100/155] mm/gup: allow to react to fatal signals 2020-04-02 4:01 incoming Andrew Morton ` (98 preceding siblings ...) 2020-04-02 4:08 ` [patch 099/155] mm/gup: " Andrew Morton @ 2020-04-02 4:08 ` Andrew Morton 2020-04-02 4:09 ` [patch 101/155] mm/userfaultfd: honor FAULT_FLAG_KILLABLE in fault path Andrew Morton ` (54 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:08 UTC (permalink / raw) To: aarcange, akpm, bgeffon, bobbypowers, cracauer, david, dgilbert, dplotnikov, gokhale2, hannes, hughd, jglisse, kirill, linux-mm, mcfadden8, mgorman, mike.kravetz, mm-commits, peterx, rppt, torvalds, willy, xemul From: Peter Xu <peterx@redhat.com> Subject: mm/gup: allow to react to fatal signals The existing gup code does not react to the fatal signals in many code paths. For example, in one retry path of gup we're still using down_read() rather than down_read_killable(). Also, when doing page faults we don't pass in FAULT_FLAG_KILLABLE as well, which means that within the faulting process we'll wait in non-killable way as well. These were spotted by Linus during the code review of some other patches. Let's allow the gup code to react to fatal signals to improve the responsiveness of threads when during gup and being killed. Link: http://lkml.kernel.org/r/20200220160256.9887-1-peterx@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com> Tested-by: Brian Geffon <bgeffon@google.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Bobby Powers <bobbypowers@gmail.com> Cc: David Hildenbrand <david@redhat.com> Cc: Denis Plotnikov <dplotnikov@virtuozzo.com> Cc: "Dr . David Alan Gilbert" <dgilbert@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Jerome Glisse <jglisse@redhat.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: "Kirill A . Shutemov" <kirill@shutemov.name> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Martin Cracauer <cracauer@cons.org> Cc: Marty McFadden <mcfadden8@llnl.gov> Cc: Matthew Wilcox <willy@infradead.org> Cc: Maya Gokhale <gokhale2@llnl.gov> Cc: Mel Gorman <mgorman@suse.de> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Mike Rapoport <rppt@linux.vnet.ibm.com> Cc: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/gup.c | 12 +++++++++--- mm/hugetlb.c | 3 ++- 2 files changed, 11 insertions(+), 4 deletions(-) --- a/mm/gup.c~mm-gup-allow-to-react-to-fatal-signals +++ a/mm/gup.c @@ -864,7 +864,7 @@ static int faultin_page(struct task_stru if (*flags & FOLL_REMOTE) fault_flags |= FAULT_FLAG_REMOTE; if (locked) - fault_flags |= FAULT_FLAG_ALLOW_RETRY; + fault_flags |= FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; if (*flags & FOLL_NOWAIT) fault_flags |= FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_RETRY_NOWAIT; if (*flags & FOLL_TRIED) { @@ -1207,7 +1207,7 @@ int fixup_user_fault(struct task_struct address = untagged_addr(address); if (unlocked) - fault_flags |= FAULT_FLAG_ALLOW_RETRY; + fault_flags |= FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; retry: vma = find_extend_vma(mm, address); @@ -1329,7 +1329,13 @@ retry: break; *locked = 1; - down_read(&mm->mmap_sem); + ret = down_read_killable(&mm->mmap_sem); + if (ret) { + BUG_ON(ret > 0); + if (!pages_done) + pages_done = ret; + break; + } ret = __get_user_pages(tsk, mm, start, 1, flags | FOLL_TRIED, pages, NULL, locked); --- a/mm/hugetlb.c~mm-gup-allow-to-react-to-fatal-signals +++ a/mm/hugetlb.c @@ -4344,7 +4344,8 @@ long follow_hugetlb_page(struct mm_struc if (flags & FOLL_WRITE) fault_flags |= FAULT_FLAG_WRITE; if (locked) - fault_flags |= FAULT_FLAG_ALLOW_RETRY; + fault_flags |= FAULT_FLAG_ALLOW_RETRY | + FAULT_FLAG_KILLABLE; if (flags & FOLL_NOWAIT) fault_flags |= FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_RETRY_NOWAIT; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 101/155] mm/userfaultfd: honor FAULT_FLAG_KILLABLE in fault path 2020-04-02 4:01 incoming Andrew Morton ` (99 preceding siblings ...) 2020-04-02 4:08 ` [patch 100/155] mm/gup: allow to react to fatal signals Andrew Morton @ 2020-04-02 4:09 ` Andrew Morton 2020-04-02 4:09 ` [patch 102/155] mm: clarify a confusing comment for remap_pfn_range() Andrew Morton ` (53 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:09 UTC (permalink / raw) To: aarcange, akpm, bgeffon, bobbypowers, cracauer, david, dgilbert, dplotnikov, gokhale2, hannes, hughd, jglisse, kirill, linux-mm, mcfadden8, mgorman, mike.kravetz, mm-commits, peterx, rppt, torvalds, willy, xemul From: Peter Xu <peterx@redhat.com> Subject: mm/userfaultfd: honor FAULT_FLAG_KILLABLE in fault path Userfaultfd fault path was by default killable even if the caller does not have FAULT_FLAG_KILLABLE. That makes sense before in that when with gup we don't have FAULT_FLAG_KILLABLE properly set before. Now after previous patch we've got FAULT_FLAG_KILLABLE applied even for gup code so it should also make sense to let userfaultfd to honor the FAULT_FLAG_KILLABLE. Because we're unconditionally setting FAULT_FLAG_KILLABLE in gup code right now, this patch should have no functional change. It also cleaned the code a little bit by introducing some helpers. Link: http://lkml.kernel.org/r/20200220160300.9941-1-peterx@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com> Tested-by: Brian Geffon <bgeffon@google.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Bobby Powers <bobbypowers@gmail.com> Cc: David Hildenbrand <david@redhat.com> Cc: Denis Plotnikov <dplotnikov@virtuozzo.com> Cc: "Dr . David Alan Gilbert" <dgilbert@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Jerome Glisse <jglisse@redhat.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: "Kirill A . Shutemov" <kirill@shutemov.name> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Martin Cracauer <cracauer@cons.org> Cc: Marty McFadden <mcfadden8@llnl.gov> Cc: Matthew Wilcox <willy@infradead.org> Cc: Maya Gokhale <gokhale2@llnl.gov> Cc: Mel Gorman <mgorman@suse.de> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Mike Rapoport <rppt@linux.vnet.ibm.com> Cc: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/userfaultfd.c | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) --- a/fs/userfaultfd.c~mm-userfaultfd-honor-fault_flag_killable-in-fault-path +++ a/fs/userfaultfd.c @@ -334,6 +334,30 @@ out: return ret; } +/* Should pair with userfaultfd_signal_pending() */ +static inline long userfaultfd_get_blocking_state(unsigned int flags) +{ + if (flags & FAULT_FLAG_INTERRUPTIBLE) + return TASK_INTERRUPTIBLE; + + if (flags & FAULT_FLAG_KILLABLE) + return TASK_KILLABLE; + + return TASK_UNINTERRUPTIBLE; +} + +/* Should pair with userfaultfd_get_blocking_state() */ +static inline bool userfaultfd_signal_pending(unsigned int flags) +{ + if (flags & FAULT_FLAG_INTERRUPTIBLE) + return signal_pending(current); + + if (flags & FAULT_FLAG_KILLABLE) + return fatal_signal_pending(current); + + return false; +} + /* * The locking rules involved in returning VM_FAULT_RETRY depending on * FAULT_FLAG_ALLOW_RETRY, FAULT_FLAG_RETRY_NOWAIT and @@ -355,7 +379,7 @@ vm_fault_t handle_userfault(struct vm_fa struct userfaultfd_ctx *ctx; struct userfaultfd_wait_queue uwq; vm_fault_t ret = VM_FAULT_SIGBUS; - bool must_wait, return_to_userland; + bool must_wait; long blocking_state; /* @@ -462,9 +486,7 @@ vm_fault_t handle_userfault(struct vm_fa uwq.ctx = ctx; uwq.waken = false; - return_to_userland = vmf->flags & FAULT_FLAG_INTERRUPTIBLE; - blocking_state = return_to_userland ? TASK_INTERRUPTIBLE : - TASK_KILLABLE; + blocking_state = userfaultfd_get_blocking_state(vmf->flags); spin_lock_irq(&ctx->fault_pending_wqh.lock); /* @@ -490,8 +512,7 @@ vm_fault_t handle_userfault(struct vm_fa up_read(&mm->mmap_sem); if (likely(must_wait && !READ_ONCE(ctx->released) && - (return_to_userland ? !signal_pending(current) : - !fatal_signal_pending(current)))) { + !userfaultfd_signal_pending(vmf->flags))) { wake_up_poll(&ctx->fd_wqh, EPOLLIN); schedule(); ret |= VM_FAULT_MAJOR; @@ -513,8 +534,7 @@ vm_fault_t handle_userfault(struct vm_fa set_current_state(blocking_state); if (READ_ONCE(uwq.waken) || READ_ONCE(ctx->released) || - (return_to_userland ? signal_pending(current) : - fatal_signal_pending(current))) + userfaultfd_signal_pending(vmf->flags)) break; schedule(); } _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 102/155] mm: clarify a confusing comment for remap_pfn_range() 2020-04-02 4:01 incoming Andrew Morton ` (100 preceding siblings ...) 2020-04-02 4:09 ` [patch 101/155] mm/userfaultfd: honor FAULT_FLAG_KILLABLE in fault path Andrew Morton @ 2020-04-02 4:09 ` Andrew Morton 2020-04-02 4:09 ` [patch 103/155] mm/memory.c: clarify a confusing comment for vm_iomap_memory Andrew Morton ` (52 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:09 UTC (permalink / raw) To: akpm, linux-mm, mm-commits, torvalds, wenhu.wang From: WANG Wenhu <wenhu.wang@vivo.com> Subject: mm: clarify a confusing comment for remap_pfn_range() It really made me scratch my head. Replace the comment with an accurate and consistent description. The parameter pfn actually refers to the page frame number which is right-shifted by PAGE_SHIFT from the physical address. Link: http://lkml.kernel.org/r/20200310073955.43415-1-wenhu.wang@vivo.com Signed-off-by: WANG Wenhu <wenhu.wang@vivo.com> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/memory.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/mm/memory.c~mm-clarify-a-confusing-comment-of-remap_pfn_range +++ a/mm/memory.c @@ -1939,7 +1939,7 @@ static inline int remap_p4d_range(struct * remap_pfn_range - remap kernel memory to userspace * @vma: user vma to map to * @addr: target user address to start at - * @pfn: physical address of kernel memory + * @pfn: page frame number of kernel physical memory address * @size: size of map area * @prot: page protection flags for this mapping * _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 103/155] mm/memory.c: clarify a confusing comment for vm_iomap_memory 2020-04-02 4:01 incoming Andrew Morton ` (101 preceding siblings ...) 2020-04-02 4:09 ` [patch 102/155] mm: clarify a confusing comment for remap_pfn_range() Andrew Morton @ 2020-04-02 4:09 ` Andrew Morton 2020-04-02 4:09 ` [patch 104/155] mmap: remove inline of vm_unmapped_area Andrew Morton ` (51 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:09 UTC (permalink / raw) To: akpm, linux-mm, mm-commits, torvalds, wenhu.wang From: Wang Wenhu <wenhu.wang@vivo.com> Subject: mm/memory.c: clarify a confusing comment for vm_iomap_memory The param "start" actually referes to the physical memory start, which is to be mapped into virtual area vma. And it is the field vma->vm_start which stands for the start of the area. Most of the time, we do not read through whole implementation of a function but only the definition and essential comments. Accurate comments are definitely the base stone. Link: http://lkml.kernel.org/r/20200318052206.105104-1-wenhu.wang@vivo.com Signed-off-by: Wang Wenhu <wenhu.wang@vivo.com> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/memory.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/mm/memory.c~mm-clarify-a-confusing-comment-for-vm_iomap_memory +++ a/mm/memory.c @@ -2009,7 +2009,7 @@ EXPORT_SYMBOL(remap_pfn_range); /** * vm_iomap_memory - remap memory to userspace * @vma: user vma to map to - * @start: start of area + * @start: start of the physical memory to be mapped * @len: size of area * * This is a simplified io_remap_pfn_range() for common driver use. The _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 104/155] mmap: remove inline of vm_unmapped_area 2020-04-02 4:01 incoming Andrew Morton ` (102 preceding siblings ...) 2020-04-02 4:09 ` [patch 103/155] mm/memory.c: clarify a confusing comment for vm_iomap_memory Andrew Morton @ 2020-04-02 4:09 ` Andrew Morton 2020-04-02 4:09 ` [patch 105/155] mm: mmap: add trace point " Andrew Morton ` (50 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:09 UTC (permalink / raw) To: akpm, bp, jaewon31.kim, linux-mm, mm-commits, torvalds, vbabka, walken, willy From: Jaewon Kim <jaewon31.kim@samsung.com> Subject: mmap: remove inline of vm_unmapped_area Patch series "mm: mmap: add mmap trace point", v3. Create mmap trace file and add trace point of vm_unmapped_area(). This patch (of 2): In preparation for next patch remove inline of vm_unmapped_area and move code to mmap.c. There is no logical change. Also remove unmapped_area[_topdown] out of mm.h, there is no code calling to them. Link: http://lkml.kernel.org/r/20200320055823.27089-2-jaewon31.kim@samsung.com Signed-off-by: Jaewon Kim <jaewon31.kim@samsung.com> Reviewed-by: Vlastimil Babka <vbabka@suse.cz> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: Michel Lespinasse <walken@google.com> Cc: Borislav Petkov <bp@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/mm.h | 21 +-------------------- mm/mmap.c | 20 ++++++++++++++++++-- 2 files changed, 19 insertions(+), 22 deletions(-) --- a/include/linux/mm.h~mmap-remove-inline-of-vm_unmapped_area +++ a/include/linux/mm.h @@ -2530,26 +2530,7 @@ struct vm_unmapped_area_info { unsigned long align_offset; }; -extern unsigned long unmapped_area(struct vm_unmapped_area_info *info); -extern unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info); - -/* - * Search for an unmapped address range. - * - * We are looking for a range that: - * - does not intersect with any VMA; - * - is contained within the [low_limit, high_limit) interval; - * - is at least the desired size. - * - satisfies (begin_addr & align_mask) == (align_offset & align_mask) - */ -static inline unsigned long -vm_unmapped_area(struct vm_unmapped_area_info *info) -{ - if (info->flags & VM_UNMAPPED_AREA_TOPDOWN) - return unmapped_area_topdown(info); - else - return unmapped_area(info); -} +extern unsigned long vm_unmapped_area(struct vm_unmapped_area_info *info); /* truncate.c */ extern void truncate_inode_pages(struct address_space *, loff_t); --- a/mm/mmap.c~mmap-remove-inline-of-vm_unmapped_area +++ a/mm/mmap.c @@ -1848,7 +1848,7 @@ unacct_error: return error; } -unsigned long unmapped_area(struct vm_unmapped_area_info *info) +static unsigned long unmapped_area(struct vm_unmapped_area_info *info) { /* * We implement the search by looking for an rbtree node that @@ -1951,7 +1951,7 @@ found: return gap_start; } -unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info) +static unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info) { struct mm_struct *mm = current->mm; struct vm_area_struct *vma; @@ -2050,6 +2050,22 @@ found_highest: return gap_end; } +/* + * Search for an unmapped address range. + * + * We are looking for a range that: + * - does not intersect with any VMA; + * - is contained within the [low_limit, high_limit) interval; + * - is at least the desired size. + * - satisfies (begin_addr & align_mask) == (align_offset & align_mask) + */ +unsigned long vm_unmapped_area(struct vm_unmapped_area_info *info) +{ + if (info->flags & VM_UNMAPPED_AREA_TOPDOWN) + return unmapped_area_topdown(info); + else + return unmapped_area(info); +} #ifndef arch_get_mmap_end #define arch_get_mmap_end(addr) (TASK_SIZE) _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 105/155] mm: mmap: add trace point of vm_unmapped_area 2020-04-02 4:01 incoming Andrew Morton ` (103 preceding siblings ...) 2020-04-02 4:09 ` [patch 104/155] mmap: remove inline of vm_unmapped_area Andrew Morton @ 2020-04-02 4:09 ` Andrew Morton 2020-04-02 4:09 ` [patch 106/155] mm/mremap: add MREMAP_DONTUNMAP to mremap() Andrew Morton ` (49 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:09 UTC (permalink / raw) To: akpm, bp, jaewon31.kim, linux-mm, mm-commits, torvalds, vbabka, walken, willy From: Jaewon Kim <jaewon31.kim@samsung.com> Subject: mm: mmap: add trace point of vm_unmapped_area Even on 64 bit kernel, the mmap failure can happen for a 32 bit task. Virtual memory space shortage of a task on mmap is reported to userspace as -ENOMEM. It can be confused as physical memory shortage of overall system. The vm_unmapped_area can be called to by some drivers or other kernel core system like filesystem. In my platform, GPU driver calls to vm_unmapped_area and the driver returns -ENOMEM even in GPU side shortage. It can be hard to distinguish which code layer returns the -ENOMEM. Create mmap trace file and add trace point of vm_unmapped_area. i.e.) 277.156599: vm_unmapped_area: addr=77e0d03000 err=0 total_vm=0x17014b flags=0x1 len=0x400000 lo=0x8000 hi=0x7878c27000 mask=0x0 ofs=0x1 342.838740: vm_unmapped_area: addr=0 err=-12 total_vm=0xffb08 flags=0x0 len=0x100000 lo=0x40000000 hi=0xfffff000 mask=0x0 ofs=0x22 [akpm@linux-foundation.org: prefix address printk with 0x, per Matthew] Link: http://lkml.kernel.org/r/20200320055823.27089-3-jaewon31.kim@samsung.com Signed-off-by: Jaewon Kim <jaewon31.kim@samsung.com> Cc: Borislav Petkov <bp@suse.de> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: Michel Lespinasse <walken@google.com> Cc: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/trace/events/mmap.h | 48 ++++++++++++++++++++++++++++++++++ mm/mmap.c | 12 +++++++- 2 files changed, 58 insertions(+), 2 deletions(-) --- /dev/null +++ a/include/trace/events/mmap.h @@ -0,0 +1,48 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM mmap + +#if !defined(_TRACE_MMAP_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_MMAP_H + +#include <linux/tracepoint.h> + +TRACE_EVENT(vm_unmapped_area, + + TP_PROTO(unsigned long addr, struct vm_unmapped_area_info *info), + + TP_ARGS(addr, info), + + TP_STRUCT__entry( + __field(unsigned long, addr) + __field(unsigned long, total_vm) + __field(unsigned long, flags) + __field(unsigned long, length) + __field(unsigned long, low_limit) + __field(unsigned long, high_limit) + __field(unsigned long, align_mask) + __field(unsigned long, align_offset) + ), + + TP_fast_assign( + __entry->addr = addr; + __entry->total_vm = current->mm->total_vm; + __entry->flags = info->flags; + __entry->length = info->length; + __entry->low_limit = info->low_limit; + __entry->high_limit = info->high_limit; + __entry->align_mask = info->align_mask; + __entry->align_offset = info->align_offset; + ), + + TP_printk("addr=0x%lx err=%ld total_vm=0x%lx flags=0x%lx len=0x%lx lo=0x%lx hi=0x%lx mask=0x%lx ofs=0x%lx\n", + IS_ERR_VALUE(__entry->addr) ? 0 : __entry->addr, + IS_ERR_VALUE(__entry->addr) ? __entry->addr : 0, + __entry->total_vm, __entry->flags, __entry->length, + __entry->low_limit, __entry->high_limit, __entry->align_mask, + __entry->align_offset) +); +#endif + +/* This part must be outside protection */ +#include <trace/define_trace.h> --- a/mm/mmap.c~mm-mmap-add-trace-point-of-vm_unmapped_area +++ a/mm/mmap.c @@ -53,6 +53,9 @@ #include <asm/tlb.h> #include <asm/mmu_context.h> +#define CREATE_TRACE_POINTS +#include <trace/events/mmap.h> + #include "internal.h" #ifndef arch_mmap_check @@ -2061,10 +2064,15 @@ found_highest: */ unsigned long vm_unmapped_area(struct vm_unmapped_area_info *info) { + unsigned long addr; + if (info->flags & VM_UNMAPPED_AREA_TOPDOWN) - return unmapped_area_topdown(info); + addr = unmapped_area_topdown(info); else - return unmapped_area(info); + addr = unmapped_area(info); + + trace_vm_unmapped_area(addr, info); + return addr; } #ifndef arch_get_mmap_end _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 106/155] mm/mremap: add MREMAP_DONTUNMAP to mremap() 2020-04-02 4:01 incoming Andrew Morton ` (104 preceding siblings ...) 2020-04-02 4:09 ` [patch 105/155] mm: mmap: add trace point " Andrew Morton @ 2020-04-02 4:09 ` Andrew Morton 2020-04-02 4:09 ` [patch 107/155] selftests: add MREMAP_DONTUNMAP selftest Andrew Morton ` (48 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:09 UTC (permalink / raw) To: aarcange, akpm, arnd, bgeffon, fweimer, joel, jsbarnes, kirill.shutemov, linux-mm, lokeshgidra, luto, minchan, mm-commits, mst, natechancellor, sonnyrao, torvalds, vbabka, will, yuzhao From: Brian Geffon <bgeffon@google.com> Subject: mm/mremap: add MREMAP_DONTUNMAP to mremap() When remapping an anonymous, private mapping, if MREMAP_DONTUNMAP is set, the source mapping will not be removed. The remap operation will be performed as it would have been normally by moving over the page tables to the new mapping. The old vma will have any locked flags cleared, have no pagetables, and any userfaultfds that were watching that range will continue watching it. For a mapping that is shared or not anonymous, MREMAP_DONTUNMAP will cause the mremap() call to fail. Because MREMAP_DONTUNMAP always results in moving a VMA you MUST use the MREMAP_MAYMOVE flag, it's not possible to resize a VMA while also moving with MREMAP_DONTUNMAP so old_len must always be equal to the new_len otherwise it will return -EINVAL. We hope to use this in Chrome OS where with userfaultfd we could write an anonymous mapping to disk without having to STOP the process or worry about VMA permission changes. This feature also has a use case in Android, Lokesh Gidra has said that "As part of using userfaultfd for GC, We'll have to move the physical pages of the java heap to a separate location. For this purpose mremap will be used. Without the MREMAP_DONTUNMAP flag, when I mremap the java heap, its virtual mapping will be removed as well. Therefore, we'll require performing mmap immediately after. This is not only time consuming but also opens a time window where a native thread may call mmap and reserve the java heap's address range for its own usage. This flag solves the problem." [bgeffon@google.com: v6] Link: http://lkml.kernel.org/r/20200218173221.237674-1-bgeffon@google.com [bgeffon@google.com: v7] Link: http://lkml.kernel.org/r/20200221174248.244748-1-bgeffon@google.com Link: http://lkml.kernel.org/r/20200207201856.46070-1-bgeffon@google.com Signed-off-by: Brian Geffon <bgeffon@google.com> Tested-by: Lokesh Gidra <lokeshgidra@google.com> Reviewed-by: Minchan Kim <minchan@kernel.org> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Acked-by: Vlastimil Babka <vbabka@suse.cz> Cc: "Michael S . Tsirkin" <mst@redhat.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Will Deacon <will@kernel.org> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Sonny Rao <sonnyrao@google.com> Cc: Minchan Kim <minchan@kernel.org> Cc: Joel Fernandes <joel@joelfernandes.org> Cc: Yu Zhao <yuzhao@google.com> Cc: Jesse Barnes <jsbarnes@google.com> Cc: Nathan Chancellor <natechancellor@gmail.com> Cc: Florian Weimer <fweimer@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/uapi/linux/mman.h | 5 +- mm/mremap.c | 90 +++++++++++++++++++++++++++--------- 2 files changed, 72 insertions(+), 23 deletions(-) --- a/include/uapi/linux/mman.h~mm-add-mremap_dontunmap-to-mremap +++ a/include/uapi/linux/mman.h @@ -5,8 +5,9 @@ #include <asm/mman.h> #include <asm-generic/hugetlb_encode.h> -#define MREMAP_MAYMOVE 1 -#define MREMAP_FIXED 2 +#define MREMAP_MAYMOVE 1 +#define MREMAP_FIXED 2 +#define MREMAP_DONTUNMAP 4 #define OVERCOMMIT_GUESS 0 #define OVERCOMMIT_ALWAYS 1 --- a/mm/mremap.c~mm-add-mremap_dontunmap-to-mremap +++ a/mm/mremap.c @@ -318,8 +318,8 @@ unsigned long move_page_tables(struct vm static unsigned long move_vma(struct vm_area_struct *vma, unsigned long old_addr, unsigned long old_len, unsigned long new_len, unsigned long new_addr, - bool *locked, struct vm_userfaultfd_ctx *uf, - struct list_head *uf_unmap) + bool *locked, unsigned long flags, + struct vm_userfaultfd_ctx *uf, struct list_head *uf_unmap) { struct mm_struct *mm = vma->vm_mm; struct vm_area_struct *new_vma; @@ -408,11 +408,32 @@ static unsigned long move_vma(struct vm_ if (unlikely(vma->vm_flags & VM_PFNMAP)) untrack_pfn_moved(vma); + if (unlikely(!err && (flags & MREMAP_DONTUNMAP))) { + if (vm_flags & VM_ACCOUNT) { + /* Always put back VM_ACCOUNT since we won't unmap */ + vma->vm_flags |= VM_ACCOUNT; + + vm_acct_memory(vma_pages(new_vma)); + } + + /* We always clear VM_LOCKED[ONFAULT] on the old vma */ + vma->vm_flags &= VM_LOCKED_CLEAR_MASK; + + /* Because we won't unmap we don't need to touch locked_vm */ + goto out; + } + if (do_munmap(mm, old_addr, old_len, uf_unmap) < 0) { /* OOM: unable to split vma, just get accounts right */ vm_unacct_memory(excess >> PAGE_SHIFT); excess = 0; } + + if (vm_flags & VM_LOCKED) { + mm->locked_vm += new_len >> PAGE_SHIFT; + *locked = true; + } +out: mm->hiwater_vm = hiwater_vm; /* Restore VM_ACCOUNT if one or two pieces of vma left */ @@ -422,16 +443,12 @@ static unsigned long move_vma(struct vm_ vma->vm_next->vm_flags |= VM_ACCOUNT; } - if (vm_flags & VM_LOCKED) { - mm->locked_vm += new_len >> PAGE_SHIFT; - *locked = true; - } - return new_addr; } static struct vm_area_struct *vma_to_resize(unsigned long addr, - unsigned long old_len, unsigned long new_len, unsigned long *p) + unsigned long old_len, unsigned long new_len, unsigned long flags, + unsigned long *p) { struct mm_struct *mm = current->mm; struct vm_area_struct *vma = find_vma(mm, addr); @@ -453,6 +470,10 @@ static struct vm_area_struct *vma_to_res return ERR_PTR(-EINVAL); } + if (flags & MREMAP_DONTUNMAP && (!vma_is_anonymous(vma) || + vma->vm_flags & VM_SHARED)) + return ERR_PTR(-EINVAL); + if (is_vm_hugetlb_page(vma)) return ERR_PTR(-EINVAL); @@ -497,7 +518,7 @@ static struct vm_area_struct *vma_to_res static unsigned long mremap_to(unsigned long addr, unsigned long old_len, unsigned long new_addr, unsigned long new_len, bool *locked, - struct vm_userfaultfd_ctx *uf, + unsigned long flags, struct vm_userfaultfd_ctx *uf, struct list_head *uf_unmap_early, struct list_head *uf_unmap) { @@ -505,7 +526,7 @@ static unsigned long mremap_to(unsigned struct vm_area_struct *vma; unsigned long ret = -EINVAL; unsigned long charged = 0; - unsigned long map_flags; + unsigned long map_flags = 0; if (offset_in_page(new_addr)) goto out; @@ -534,9 +555,11 @@ static unsigned long mremap_to(unsigned if ((mm->map_count + 2) >= sysctl_max_map_count - 3) return -ENOMEM; - ret = do_munmap(mm, new_addr, new_len, uf_unmap_early); - if (ret) - goto out; + if (flags & MREMAP_FIXED) { + ret = do_munmap(mm, new_addr, new_len, uf_unmap_early); + if (ret) + goto out; + } if (old_len >= new_len) { ret = do_munmap(mm, addr+new_len, old_len - new_len, uf_unmap); @@ -545,13 +568,22 @@ static unsigned long mremap_to(unsigned old_len = new_len; } - vma = vma_to_resize(addr, old_len, new_len, &charged); + vma = vma_to_resize(addr, old_len, new_len, flags, &charged); if (IS_ERR(vma)) { ret = PTR_ERR(vma); goto out; } - map_flags = MAP_FIXED; + /* MREMAP_DONTUNMAP expands by old_len since old_len == new_len */ + if (flags & MREMAP_DONTUNMAP && + !may_expand_vm(mm, vma->vm_flags, old_len >> PAGE_SHIFT)) { + ret = -ENOMEM; + goto out; + } + + if (flags & MREMAP_FIXED) + map_flags |= MAP_FIXED; + if (vma->vm_flags & VM_MAYSHARE) map_flags |= MAP_SHARED; @@ -561,10 +593,16 @@ static unsigned long mremap_to(unsigned if (IS_ERR_VALUE(ret)) goto out1; - ret = move_vma(vma, addr, old_len, new_len, new_addr, locked, uf, + /* We got a new mapping */ + if (!(flags & MREMAP_FIXED)) + new_addr = ret; + + ret = move_vma(vma, addr, old_len, new_len, new_addr, locked, flags, uf, uf_unmap); + if (!(offset_in_page(ret))) goto out; + out1: vm_unacct_memory(charged); @@ -618,12 +656,21 @@ SYSCALL_DEFINE5(mremap, unsigned long, a */ addr = untagged_addr(addr); - if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE)) + if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE | MREMAP_DONTUNMAP)) return ret; if (flags & MREMAP_FIXED && !(flags & MREMAP_MAYMOVE)) return ret; + /* + * MREMAP_DONTUNMAP is always a move and it does not allow resizing + * in the process. + */ + if (flags & MREMAP_DONTUNMAP && + (!(flags & MREMAP_MAYMOVE) || old_len != new_len)) + return ret; + + if (offset_in_page(addr)) return ret; @@ -641,9 +688,10 @@ SYSCALL_DEFINE5(mremap, unsigned long, a if (down_write_killable(¤t->mm->mmap_sem)) return -EINTR; - if (flags & MREMAP_FIXED) { + if (flags & (MREMAP_FIXED | MREMAP_DONTUNMAP)) { ret = mremap_to(addr, old_len, new_addr, new_len, - &locked, &uf, &uf_unmap_early, &uf_unmap); + &locked, flags, &uf, &uf_unmap_early, + &uf_unmap); goto out; } @@ -671,7 +719,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, a /* * Ok, we need to grow.. */ - vma = vma_to_resize(addr, old_len, new_len, &charged); + vma = vma_to_resize(addr, old_len, new_len, flags, &charged); if (IS_ERR(vma)) { ret = PTR_ERR(vma); goto out; @@ -721,7 +769,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, a } ret = move_vma(vma, addr, old_len, new_len, new_addr, - &locked, &uf, &uf_unmap); + &locked, flags, &uf, &uf_unmap); } out: if (offset_in_page(ret)) { _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 107/155] selftests: add MREMAP_DONTUNMAP selftest 2020-04-02 4:01 incoming Andrew Morton ` (105 preceding siblings ...) 2020-04-02 4:09 ` [patch 106/155] mm/mremap: add MREMAP_DONTUNMAP to mremap() Andrew Morton @ 2020-04-02 4:09 ` Andrew Morton 2020-04-02 4:09 ` [patch 108/155] mm/sparsemem: get address to page struct instead of address to pfn Andrew Morton ` (47 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:09 UTC (permalink / raw) To: aarcange, akpm, arnd, bgeffon, fweimer, joel, jsbarnes, kirill, linux-mm, lokeshgidra, luto, minchan, mm-commits, mst, natechancellor, sonnyrao, torvalds, vbabka, will, yuzhao From: Brian Geffon <bgeffon@google.com> Subject: selftests: add MREMAP_DONTUNMAP selftest Add a few simple self tests for the new flag MREMAP_DONTUNMAP, they are simple smoke tests which also demonstrate the behavior. [akpm@linux-foundation.org: convert eight-spaces to hard tabs] [bgeffon@google.com: v7] Link: http://lkml.kernel.org/r/20200221174248.244748-2-bgeffon@google.com [akpm@linux-foundation.org: coding style fixes] Link: http://lkml.kernel.org/r/20200218173221.237674-2-bgeffon@google.com Signed-off-by: Brian Geffon <bgeffon@google.com> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: "Michael S . Tsirkin" <mst@redhat.com> Cc: Brian Geffon <bgeffon@google.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Will Deacon <will@kernel.org> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Sonny Rao <sonnyrao@google.com> Cc: Minchan Kim <minchan@kernel.org> Cc: Joel Fernandes <joel@joelfernandes.org> Cc: Yu Zhao <yuzhao@google.com> Cc: Jesse Barnes <jsbarnes@google.com> Cc: Nathan Chancellor <natechancellor@gmail.com> Cc: Florian Weimer <fweimer@redhat.com> Cc: "Kirill A . Shutemov" <kirill@shutemov.name> Cc: Lokesh Gidra <lokeshgidra@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- tools/testing/selftests/vm/Makefile | 1 tools/testing/selftests/vm/mremap_dontunmap.c | 313 ++++++++++++++++ tools/testing/selftests/vm/run_vmtests | 15 3 files changed, 329 insertions(+) --- a/tools/testing/selftests/vm/Makefile~selftest-add-mremap_dontunmap-selftest +++ a/tools/testing/selftests/vm/Makefile @@ -14,6 +14,7 @@ TEST_GEN_FILES += map_fixed_noreplace TEST_GEN_FILES += map_populate TEST_GEN_FILES += mlock-random-test TEST_GEN_FILES += mlock2-tests +TEST_GEN_FILES += mremap_dontunmap TEST_GEN_FILES += on-fault-limit TEST_GEN_FILES += thuge-gen TEST_GEN_FILES += transhuge-stress --- /dev/null +++ a/tools/testing/selftests/vm/mremap_dontunmap.c @@ -0,0 +1,313 @@ +// SPDX-License-Identifier: GPL-2.0 + +/* + * Tests for mremap w/ MREMAP_DONTUNMAP. + * + * Copyright 2020, Brian Geffon <bgeffon@google.com> + */ +#define _GNU_SOURCE +#include <sys/mman.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <stdlib.h> +#include <unistd.h> + +#include "../kselftest.h" + +#ifndef MREMAP_DONTUNMAP +#define MREMAP_DONTUNMAP 4 +#endif + +unsigned long page_size; +char *page_buffer; + +static void dump_maps(void) +{ + char cmd[32]; + + snprintf(cmd, sizeof(cmd), "cat /proc/%d/maps", getpid()); + system(cmd); +} + +#define BUG_ON(condition, description) \ + do { \ + if (condition) { \ + fprintf(stderr, "[FAIL]\t%s():%d\t%s:%s\n", __func__, \ + __LINE__, (description), strerror(errno)); \ + dump_maps(); \ + exit(1); \ + } \ + } while (0) + +// Try a simple operation for to "test" for kernel support this prevents +// reporting tests as failed when it's run on an older kernel. +static int kernel_support_for_mremap_dontunmap() +{ + int ret = 0; + unsigned long num_pages = 1; + void *source_mapping = mmap(NULL, num_pages * page_size, PROT_NONE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + BUG_ON(source_mapping == MAP_FAILED, "mmap"); + + // This simple remap should only fail if MREMAP_DONTUNMAP isn't + // supported. + void *dest_mapping = + mremap(source_mapping, num_pages * page_size, num_pages * page_size, + MREMAP_DONTUNMAP | MREMAP_MAYMOVE, 0); + if (dest_mapping == MAP_FAILED) { + ret = errno; + } else { + BUG_ON(munmap(dest_mapping, num_pages * page_size) == -1, + "unable to unmap destination mapping"); + } + + BUG_ON(munmap(source_mapping, num_pages * page_size) == -1, + "unable to unmap source mapping"); + return ret; +} + +// This helper will just validate that an entire mapping contains the expected +// byte. +static int check_region_contains_byte(void *addr, unsigned long size, char byte) +{ + BUG_ON(size & (page_size - 1), + "check_region_contains_byte expects page multiples"); + BUG_ON((unsigned long)addr & (page_size - 1), + "check_region_contains_byte expects page alignment"); + + memset(page_buffer, byte, page_size); + + unsigned long num_pages = size / page_size; + unsigned long i; + + // Compare each page checking that it contains our expected byte. + for (i = 0; i < num_pages; ++i) { + int ret = + memcmp(addr + (i * page_size), page_buffer, page_size); + if (ret) { + return ret; + } + } + + return 0; +} + +// this test validates that MREMAP_DONTUNMAP moves the pagetables while leaving +// the source mapping mapped. +static void mremap_dontunmap_simple() +{ + unsigned long num_pages = 5; + + void *source_mapping = + mmap(NULL, num_pages * page_size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + BUG_ON(source_mapping == MAP_FAILED, "mmap"); + + memset(source_mapping, 'a', num_pages * page_size); + + // Try to just move the whole mapping anywhere (not fixed). + void *dest_mapping = + mremap(source_mapping, num_pages * page_size, num_pages * page_size, + MREMAP_DONTUNMAP | MREMAP_MAYMOVE, NULL); + BUG_ON(dest_mapping == MAP_FAILED, "mremap"); + + // Validate that the pages have been moved, we know they were moved if + // the dest_mapping contains a's. + BUG_ON(check_region_contains_byte + (dest_mapping, num_pages * page_size, 'a') != 0, + "pages did not migrate"); + BUG_ON(check_region_contains_byte + (source_mapping, num_pages * page_size, 0) != 0, + "source should have no ptes"); + + BUG_ON(munmap(dest_mapping, num_pages * page_size) == -1, + "unable to unmap destination mapping"); + BUG_ON(munmap(source_mapping, num_pages * page_size) == -1, + "unable to unmap source mapping"); +} + +// This test validates MREMAP_DONTUNMAP will move page tables to a specific +// destination using MREMAP_FIXED, also while validating that the source +// remains intact. +static void mremap_dontunmap_simple_fixed() +{ + unsigned long num_pages = 5; + + // Since we want to guarantee that we can remap to a point, we will + // create a mapping up front. + void *dest_mapping = + mmap(NULL, num_pages * page_size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + BUG_ON(dest_mapping == MAP_FAILED, "mmap"); + memset(dest_mapping, 'X', num_pages * page_size); + + void *source_mapping = + mmap(NULL, num_pages * page_size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + BUG_ON(source_mapping == MAP_FAILED, "mmap"); + memset(source_mapping, 'a', num_pages * page_size); + + void *remapped_mapping = + mremap(source_mapping, num_pages * page_size, num_pages * page_size, + MREMAP_FIXED | MREMAP_DONTUNMAP | MREMAP_MAYMOVE, + dest_mapping); + BUG_ON(remapped_mapping == MAP_FAILED, "mremap"); + BUG_ON(remapped_mapping != dest_mapping, + "mremap should have placed the remapped mapping at dest_mapping"); + + // The dest mapping will have been unmap by mremap so we expect the Xs + // to be gone and replaced with a's. + BUG_ON(check_region_contains_byte + (dest_mapping, num_pages * page_size, 'a') != 0, + "pages did not migrate"); + + // And the source mapping will have had its ptes dropped. + BUG_ON(check_region_contains_byte + (source_mapping, num_pages * page_size, 0) != 0, + "source should have no ptes"); + + BUG_ON(munmap(dest_mapping, num_pages * page_size) == -1, + "unable to unmap destination mapping"); + BUG_ON(munmap(source_mapping, num_pages * page_size) == -1, + "unable to unmap source mapping"); +} + +// This test validates that we can MREMAP_DONTUNMAP for a portion of an +// existing mapping. +static void mremap_dontunmap_partial_mapping() +{ + /* + * source mapping: + * -------------- + * | aaaaaaaaaa | + * -------------- + * to become: + * -------------- + * | aaaaa00000 | + * -------------- + * With the destination mapping containing 5 pages of As. + * --------- + * | aaaaa | + * --------- + */ + unsigned long num_pages = 10; + void *source_mapping = + mmap(NULL, num_pages * page_size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + BUG_ON(source_mapping == MAP_FAILED, "mmap"); + memset(source_mapping, 'a', num_pages * page_size); + + // We will grab the last 5 pages of the source and move them. + void *dest_mapping = + mremap(source_mapping + (5 * page_size), 5 * page_size, + 5 * page_size, + MREMAP_DONTUNMAP | MREMAP_MAYMOVE, NULL); + BUG_ON(dest_mapping == MAP_FAILED, "mremap"); + + // We expect the first 5 pages of the source to contain a's and the + // final 5 pages to contain zeros. + BUG_ON(check_region_contains_byte(source_mapping, 5 * page_size, 'a') != + 0, "first 5 pages of source should have original pages"); + BUG_ON(check_region_contains_byte + (source_mapping + (5 * page_size), 5 * page_size, 0) != 0, + "final 5 pages of source should have no ptes"); + + // Finally we expect the destination to have 5 pages worth of a's. + BUG_ON(check_region_contains_byte(dest_mapping, 5 * page_size, 'a') != + 0, "dest mapping should contain ptes from the source"); + + BUG_ON(munmap(dest_mapping, 5 * page_size) == -1, + "unable to unmap destination mapping"); + BUG_ON(munmap(source_mapping, num_pages * page_size) == -1, + "unable to unmap source mapping"); +} + +// This test validates that we can remap over only a portion of a mapping. +static void mremap_dontunmap_partial_mapping_overwrite(void) +{ + /* + * source mapping: + * --------- + * |aaaaa| + * --------- + * dest mapping initially: + * ----------- + * |XXXXXXXXXX| + * ------------ + * Source to become: + * --------- + * |00000| + * --------- + * With the destination mapping containing 5 pages of As. + * ------------ + * |aaaaaXXXXX| + * ------------ + */ + void *source_mapping = + mmap(NULL, 5 * page_size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + BUG_ON(source_mapping == MAP_FAILED, "mmap"); + memset(source_mapping, 'a', 5 * page_size); + + void *dest_mapping = + mmap(NULL, 10 * page_size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + BUG_ON(dest_mapping == MAP_FAILED, "mmap"); + memset(dest_mapping, 'X', 10 * page_size); + + // We will grab the last 5 pages of the source and move them. + void *remapped_mapping = + mremap(source_mapping, 5 * page_size, + 5 * page_size, + MREMAP_DONTUNMAP | MREMAP_MAYMOVE | MREMAP_FIXED, dest_mapping); + BUG_ON(dest_mapping == MAP_FAILED, "mremap"); + BUG_ON(dest_mapping != remapped_mapping, "expected to remap to dest_mapping"); + + BUG_ON(check_region_contains_byte(source_mapping, 5 * page_size, 0) != + 0, "first 5 pages of source should have no ptes"); + + // Finally we expect the destination to have 5 pages worth of a's. + BUG_ON(check_region_contains_byte(dest_mapping, 5 * page_size, 'a') != 0, + "dest mapping should contain ptes from the source"); + + // Finally the last 5 pages shouldn't have been touched. + BUG_ON(check_region_contains_byte(dest_mapping + (5 * page_size), + 5 * page_size, 'X') != 0, + "dest mapping should have retained the last 5 pages"); + + BUG_ON(munmap(dest_mapping, 10 * page_size) == -1, + "unable to unmap destination mapping"); + BUG_ON(munmap(source_mapping, 5 * page_size) == -1, + "unable to unmap source mapping"); +} + +int main(void) +{ + page_size = sysconf(_SC_PAGE_SIZE); + + // test for kernel support for MREMAP_DONTUNMAP skipping the test if + // not. + if (kernel_support_for_mremap_dontunmap() != 0) { + printf("No kernel support for MREMAP_DONTUNMAP\n"); + return KSFT_SKIP; + } + + // Keep a page sized buffer around for when we need it. + page_buffer = + mmap(NULL, page_size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + BUG_ON(page_buffer == MAP_FAILED, "unable to mmap a page."); + + mremap_dontunmap_simple(); + mremap_dontunmap_simple_fixed(); + mremap_dontunmap_partial_mapping(); + mremap_dontunmap_partial_mapping_overwrite(); + + BUG_ON(munmap(page_buffer, page_size) == -1, + "unable to unmap page buffer"); + + printf("OK\n"); + return 0; +} --- a/tools/testing/selftests/vm/run_vmtests~selftest-add-mremap_dontunmap-selftest +++ a/tools/testing/selftests/vm/run_vmtests @@ -292,4 +292,19 @@ else exitcode=1 fi +echo "------------------------------------" +echo "running MREMAP_DONTUNMAP smoke test" +echo "------------------------------------" +./mremap_dontunmap +ret_val=$? + +if [ $ret_val -eq 0 ]; then + echo "[PASS]" +elif [ $ret_val -eq $ksft_skip ]; then + echo "[SKIP]" + exitcode=$ksft_skip +else + echo "[FAIL]" + exitcode=1 +fi exit $exitcode _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 108/155] mm/sparsemem: get address to page struct instead of address to pfn 2020-04-02 4:01 incoming Andrew Morton ` (106 preceding siblings ...) 2020-04-02 4:09 ` [patch 107/155] selftests: add MREMAP_DONTUNMAP selftest Andrew Morton @ 2020-04-02 4:09 ` Andrew Morton 2020-04-02 4:09 ` [patch 109/155] mm/sparse: rename pfn_present() to pfn_in_present_section() Andrew Morton ` (46 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:09 UTC (permalink / raw) To: akpm, bhe, dan.j.williams, david, linux-mm, mm-commits, richardw.yang, torvalds From: Wei Yang <richardw.yang@linux.intel.com> Subject: mm/sparsemem: get address to page struct instead of address to pfn memmap should be the address to page struct instead of address to pfn. As mentioned by David, if system memory and devmem sit within a section, the mismatch address would lead kdump to dump unexpected memory. Since sub-section only works for SPARSEMEM_VMEMMAP, pfn_to_page() is valid to get the page struct address at this point. Link: http://lkml.kernel.org/r/20200210005048.10437-1-richardw.yang@linux.intel.com Fixes: ba72b4c8cf60 ("mm/sparsemem: support sub-section hotplug") Signed-off-by: Wei Yang <richardw.yang@linux.intel.com> Acked-by: David Hildenbrand <david@redhat.com> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Baoquan He <bhe@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/sparse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/mm/sparse.c~mm-sparsemem-get-address-to-page-struct-instead-of-address-to-pfn +++ a/mm/sparse.c @@ -894,7 +894,7 @@ int __meminit sparse_add_section(int nid /* Align memmap to section boundary in the subsection case */ if (section_nr_to_pfn(section_nr) != start_pfn) - memmap = pfn_to_kaddr(section_nr_to_pfn(section_nr)); + memmap = pfn_to_page(section_nr_to_pfn(section_nr)); sparse_init_one_section(ms, section_nr, memmap, ms->usage, 0); return 0; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 109/155] mm/sparse: rename pfn_present() to pfn_in_present_section() 2020-04-02 4:01 incoming Andrew Morton ` (107 preceding siblings ...) 2020-04-02 4:09 ` [patch 108/155] mm/sparsemem: get address to page struct instead of address to pfn Andrew Morton @ 2020-04-02 4:09 ` Andrew Morton 2020-04-02 4:09 ` [patch 110/155] mm/sparse.c: use kvmalloc/kvfree to alloc/free memmap for the classic sparse Andrew Morton ` (45 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:09 UTC (permalink / raw) To: akpm, benh, dan.j.williams, david, gregkh, kernelfans, leonardo, linux-mm, mhocko, mm-commits, mpe, nathanl, nfont, paulus, rafael, torvalds From: Pingfan Liu <kernelfans@gmail.com> Subject: mm/sparse: rename pfn_present() to pfn_in_present_section() After introducing mem sub section concept, pfn_present() loses its literal meaning, and will not be necessary a truth on partial populated mem section. Since all of the callers use it to judge an absent section, it is better to rename pfn_present() as pfn_in_present_section(). Link: http://lkml.kernel.org/r/1581919110-29575-1-git-send-email-kernelfans@gmail.com Signed-off-by: Pingfan Liu <kernelfans@gmail.com> Reviewed-by: David Hildenbrand <david@redhat.com> Acked-by: Michael Ellerman <mpe@ellerman.id.au> [powerpc] Cc: Dan Williams <dan.j.williams@intel.com> Cc: Michal Hocko <mhocko@kernel.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: "Rafael J. Wysocki" <rafael@kernel.org> Cc: Leonardo Bras <leonardo@linux.ibm.com> Cc: Nathan Fontenot <nfont@linux.vnet.ibm.com> Cc: Nathan Lynch <nathanl@linux.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- arch/powerpc/platforms/pseries/hotplug-memory.c | 2 +- drivers/base/node.c | 2 +- include/linux/mmzone.h | 4 ++-- mm/page_ext.c | 2 +- mm/shuffle.c | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) --- a/arch/powerpc/platforms/pseries/hotplug-memory.c~mm-sparse-rename-pfn_present-as-pfn_in_present_section +++ a/arch/powerpc/platforms/pseries/hotplug-memory.c @@ -360,7 +360,7 @@ static bool lmb_is_removable(struct drme for (i = 0; i < scns_per_block; i++) { pfn = PFN_DOWN(phys_addr); - if (!pfn_present(pfn)) { + if (!pfn_in_present_section(pfn)) { phys_addr += MIN_MEMORY_BLOCK_SIZE; continue; } --- a/drivers/base/node.c~mm-sparse-rename-pfn_present-as-pfn_in_present_section +++ a/drivers/base/node.c @@ -772,7 +772,7 @@ static int register_mem_sect_under_node( * memory block could have several absent sections from start. * skip pfn range from absent section */ - if (!pfn_present(pfn)) { + if (!pfn_in_present_section(pfn)) { pfn = round_down(pfn + PAGES_PER_SECTION, PAGES_PER_SECTION) - 1; continue; --- a/include/linux/mmzone.h~mm-sparse-rename-pfn_present-as-pfn_in_present_section +++ a/include/linux/mmzone.h @@ -1374,7 +1374,7 @@ static inline int pfn_valid(unsigned lon } #endif -static inline int pfn_present(unsigned long pfn) +static inline int pfn_in_present_section(unsigned long pfn) { if (pfn_to_section_nr(pfn) >= NR_MEM_SECTIONS) return 0; @@ -1411,7 +1411,7 @@ void sparse_init(void); #else #define sparse_init() do {} while (0) #define sparse_index_init(_sec, _nid) do {} while (0) -#define pfn_present pfn_valid +#define pfn_in_present_section pfn_valid #define subsection_map_init(_pfn, _nr_pages) do {} while (0) #endif /* CONFIG_SPARSEMEM */ --- a/mm/page_ext.c~mm-sparse-rename-pfn_present-as-pfn_in_present_section +++ a/mm/page_ext.c @@ -304,7 +304,7 @@ static int __meminit online_page_ext(uns } for (pfn = start; !fail && pfn < end; pfn += PAGES_PER_SECTION) { - if (!pfn_present(pfn)) + if (!pfn_in_present_section(pfn)) continue; fail = init_section_page_ext(pfn, nid); } --- a/mm/shuffle.c~mm-sparse-rename-pfn_present-as-pfn_in_present_section +++ a/mm/shuffle.c @@ -72,7 +72,7 @@ static struct page * __meminit shuffle_v return NULL; /* ...is the pfn in a present section or a hole? */ - if (!pfn_present(pfn)) + if (!pfn_in_present_section(pfn)) return NULL; /* ...is the page free and currently on a free_area list? */ _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 110/155] mm/sparse.c: use kvmalloc/kvfree to alloc/free memmap for the classic sparse 2020-04-02 4:01 incoming Andrew Morton ` (108 preceding siblings ...) 2020-04-02 4:09 ` [patch 109/155] mm/sparse: rename pfn_present() to pfn_in_present_section() Andrew Morton @ 2020-04-02 4:09 ` Andrew Morton 2020-04-02 4:09 ` [patch 111/155] mm/sparse.c: allocate memmap preferring the given node Andrew Morton ` (44 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:09 UTC (permalink / raw) To: akpm, bhe, david, linux-mm, mhocko, mhocko, mm-commits, pankaj.gupta.linux, richard.weiyang, torvalds, willy From: Baoquan He <bhe@redhat.com> Subject: mm/sparse.c: use kvmalloc/kvfree to alloc/free memmap for the classic sparse This change makes populate_section_memmap()/depopulate_section_memmap much simpler. Link: http://lkml.kernel.org/r/20200316125450.GG3486@MiWiFi-R3L-srv Signed-off-by: Baoquan He <bhe@redhat.com> Suggested-by: Michal Hocko <mhocko@kernel.org> Reviewed-by: David Hildenbrand <david@redhat.com> Acked-by: Michal Hocko <mhocko@suse.com> Reviewed-by: Pankaj Gupta <pankaj.gupta.linux@gmail.com> Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Wei Yang <richard.weiyang@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/sparse.c | 27 +++------------------------ 1 file changed, 3 insertions(+), 24 deletions(-) --- a/mm/sparse.c~mm-sparsec-use-kvmalloc-kvfree-to-alloc-free-memmap-for-the-classic-sparse +++ a/mm/sparse.c @@ -664,35 +664,14 @@ static void free_map_bootmem(struct page struct page * __meminit populate_section_memmap(unsigned long pfn, unsigned long nr_pages, int nid, struct vmem_altmap *altmap) { - struct page *page, *ret; - unsigned long memmap_size = sizeof(struct page) * PAGES_PER_SECTION; - - page = alloc_pages(GFP_KERNEL|__GFP_NOWARN, get_order(memmap_size)); - if (page) - goto got_map_page; - - ret = vmalloc(memmap_size); - if (ret) - goto got_map_ptr; - - return NULL; -got_map_page: - ret = (struct page *)pfn_to_kaddr(page_to_pfn(page)); -got_map_ptr: - - return ret; + return kvmalloc(array_size(sizeof(struct page), + PAGES_PER_SECTION), GFP_KERNEL); } static void depopulate_section_memmap(unsigned long pfn, unsigned long nr_pages, struct vmem_altmap *altmap) { - struct page *memmap = pfn_to_page(pfn); - - if (is_vmalloc_addr(memmap)) - vfree(memmap); - else - free_pages((unsigned long)memmap, - get_order(sizeof(struct page) * PAGES_PER_SECTION)); + kvfree(pfn_to_page(pfn)); } static void free_map_bootmem(struct page *memmap) _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 111/155] mm/sparse.c: allocate memmap preferring the given node 2020-04-02 4:01 incoming Andrew Morton ` (109 preceding siblings ...) 2020-04-02 4:09 ` [patch 110/155] mm/sparse.c: use kvmalloc/kvfree to alloc/free memmap for the classic sparse Andrew Morton @ 2020-04-02 4:09 ` Andrew Morton 2020-04-02 4:09 ` [patch 112/155] kasan: detect negative size in memory operation function Andrew Morton ` (43 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:09 UTC (permalink / raw) To: akpm, bhe, david, linux-mm, mhocko, mm-commits, pankaj.gupta.linux, richard.weiyang, torvalds, willy From: Baoquan He <bhe@redhat.com> Subject: mm/sparse.c: allocate memmap preferring the given node When allocating memmap for hot added memory with the classic sparse, the specified 'nid' is ignored in populate_section_memmap(). While in allocating memmap for the classic sparse during boot, the node given by 'nid' is preferred. And VMEMMAP prefers the node of 'nid' in both boot stage and memory hot adding. So seems no reason to not respect the node of 'nid' for the classic sparse when hot adding memory. Use kvmalloc_node instead to use the passed in 'nid'. Link: http://lkml.kernel.org/r/20200316125625.GH3486@MiWiFi-R3L-srv Signed-off-by: Baoquan He <bhe@redhat.com> Acked-by: Michal Hocko <mhocko@suse.com> Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org> Acked-by: Pankaj Gupta <pankaj.gupta.linux@gmail.com> Reviewed-by: David Hildenbrand <david@redhat.com> Reviewed-by: Wei Yang <richard.weiyang@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/sparse.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- a/mm/sparse.c~mm-sparsec-allocate-memmap-preferring-the-given-node +++ a/mm/sparse.c @@ -664,8 +664,8 @@ static void free_map_bootmem(struct page struct page * __meminit populate_section_memmap(unsigned long pfn, unsigned long nr_pages, int nid, struct vmem_altmap *altmap) { - return kvmalloc(array_size(sizeof(struct page), - PAGES_PER_SECTION), GFP_KERNEL); + return kvmalloc_node(array_size(sizeof(struct page), + PAGES_PER_SECTION), GFP_KERNEL, nid); } static void depopulate_section_memmap(unsigned long pfn, unsigned long nr_pages, _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 112/155] kasan: detect negative size in memory operation function 2020-04-02 4:01 incoming Andrew Morton ` (110 preceding siblings ...) 2020-04-02 4:09 ` [patch 111/155] mm/sparse.c: allocate memmap preferring the given node Andrew Morton @ 2020-04-02 4:09 ` Andrew Morton 2020-04-02 4:09 ` [patch 113/155] kasan: add test for invalid size in memmove Andrew Morton ` (42 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:09 UTC (permalink / raw) To: akpm, aryabinin, cai, dvyukov, glider, linux-mm, lkp, mm-commits, torvalds, walter-zh.wu From: Walter Wu <walter-zh.wu@mediatek.com> Subject: kasan: detect negative size in memory operation function Patch series "fix the missing underflow in memory operation function", v4. The patchset helps to produce a KASAN report when size is negative in memory operation functions. It is helpful for programmer to solve an undefined behavior issue. Patch 1 based on Dmitry's review and suggestion, patch 2 is a test in order to verify the patch 1. [1]https://bugzilla.kernel.org/show_bug.cgi?id=199341 [2]https://lore.kernel.org/linux-arm-kernel/20190927034338.15813-1-walter-zh.wu@mediatek.com/ This patch (of 2): KASAN missed detecting size is a negative number in memset(), memcpy(), and memmove(), it will cause out-of-bounds bug. So needs to be detected by KASAN. If size is a negative number, then it has a reason to be defined as out-of-bounds bug type. Casting negative numbers to size_t would indeed turn up as a large size_t and its value will be larger than ULONG_MAX/2, so that this can qualify as out-of-bounds. KASAN report is shown below: BUG: KASAN: out-of-bounds in kmalloc_memmove_invalid_size+0x70/0xa0 Read of size 18446744073709551608 at addr ffffff8069660904 by task cat/72 CPU: 2 PID: 72 Comm: cat Not tainted 5.4.0-rc1-next-20191004ajb-00001-gdb8af2f372b2-dirty #1 Hardware name: linux,dummy-virt (DT) Call trace: dump_backtrace+0x0/0x288 show_stack+0x14/0x20 dump_stack+0x10c/0x164 print_address_description.isra.9+0x68/0x378 __kasan_report+0x164/0x1a0 kasan_report+0xc/0x18 check_memory_region+0x174/0x1d0 memmove+0x34/0x88 kmalloc_memmove_invalid_size+0x70/0xa0 [1] https://bugzilla.kernel.org/show_bug.cgi?id=199341 [cai@lca.pw: fix -Wdeclaration-after-statement warn] Link: http://lkml.kernel.org/r/1583509030-27939-1-git-send-email-cai@lca.pw [peterz@infradead.org: fix objtool warning] Link: http://lkml.kernel.org/r/20200305095436.GV2596@hirez.programming.kicks-ass.net Link: http://lkml.kernel.org/r/20191112065302.7015-1-walter-zh.wu@mediatek.com Signed-off-by: Walter Wu <walter-zh.wu@mediatek.com> Signed-off-by: Qian Cai <cai@lca.pw> Reported-by: kernel test robot <lkp@intel.com> Reported-by: Dmitry Vyukov <dvyukov@google.com> Suggested-by: Dmitry Vyukov <dvyukov@google.com> Reviewed-by: Dmitry Vyukov <dvyukov@google.com> Reviewed-by: Andrey Ryabinin <aryabinin@virtuozzo.com> Cc: Alexander Potapenko <glider@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/kasan.h | 2 +- mm/kasan/common.c | 26 +++++++++++++++++++------- mm/kasan/generic.c | 9 +++++---- mm/kasan/generic_report.c | 11 +++++++++++ mm/kasan/kasan.h | 2 +- mm/kasan/report.c | 5 +---- mm/kasan/tags.c | 9 +++++---- mm/kasan/tags_report.c | 11 +++++++++++ 8 files changed, 54 insertions(+), 21 deletions(-) --- a/include/linux/kasan.h~kasan-detect-negative-size-in-memory-operation-function +++ a/include/linux/kasan.h @@ -190,7 +190,7 @@ void kasan_init_tags(void); void *kasan_reset_tag(const void *addr); -void kasan_report(unsigned long addr, size_t size, +bool kasan_report(unsigned long addr, size_t size, bool is_write, unsigned long ip); #else /* CONFIG_KASAN_SW_TAGS */ --- a/mm/kasan/common.c~kasan-detect-negative-size-in-memory-operation-function +++ a/mm/kasan/common.c @@ -105,7 +105,8 @@ EXPORT_SYMBOL(__kasan_check_write); #undef memset void *memset(void *addr, int c, size_t len) { - check_memory_region((unsigned long)addr, len, true, _RET_IP_); + if (!check_memory_region((unsigned long)addr, len, true, _RET_IP_)) + return NULL; return __memset(addr, c, len); } @@ -114,8 +115,9 @@ void *memset(void *addr, int c, size_t l #undef memmove void *memmove(void *dest, const void *src, size_t len) { - check_memory_region((unsigned long)src, len, false, _RET_IP_); - check_memory_region((unsigned long)dest, len, true, _RET_IP_); + if (!check_memory_region((unsigned long)src, len, false, _RET_IP_) || + !check_memory_region((unsigned long)dest, len, true, _RET_IP_)) + return NULL; return __memmove(dest, src, len); } @@ -124,8 +126,9 @@ void *memmove(void *dest, const void *sr #undef memcpy void *memcpy(void *dest, const void *src, size_t len) { - check_memory_region((unsigned long)src, len, false, _RET_IP_); - check_memory_region((unsigned long)dest, len, true, _RET_IP_); + if (!check_memory_region((unsigned long)src, len, false, _RET_IP_) || + !check_memory_region((unsigned long)dest, len, true, _RET_IP_)) + return NULL; return __memcpy(dest, src, len); } @@ -634,12 +637,21 @@ void kasan_free_shadow(const struct vm_s #endif extern void __kasan_report(unsigned long addr, size_t size, bool is_write, unsigned long ip); +extern bool report_enabled(void); -void kasan_report(unsigned long addr, size_t size, bool is_write, unsigned long ip) +bool kasan_report(unsigned long addr, size_t size, bool is_write, unsigned long ip) { unsigned long flags = user_access_save(); - __kasan_report(addr, size, is_write, ip); + bool ret = false; + + if (likely(report_enabled())) { + __kasan_report(addr, size, is_write, ip); + ret = true; + } + user_access_restore(flags); + + return ret; } #ifdef CONFIG_MEMORY_HOTPLUG --- a/mm/kasan/generic.c~kasan-detect-negative-size-in-memory-operation-function +++ a/mm/kasan/generic.c @@ -173,17 +173,18 @@ static __always_inline bool check_memory if (unlikely(size == 0)) return true; + if (unlikely(addr + size < addr)) + return !kasan_report(addr, size, write, ret_ip); + if (unlikely((void *)addr < kasan_shadow_to_mem((void *)KASAN_SHADOW_START))) { - kasan_report(addr, size, write, ret_ip); - return false; + return !kasan_report(addr, size, write, ret_ip); } if (likely(!memory_is_poisoned(addr, size))) return true; - kasan_report(addr, size, write, ret_ip); - return false; + return !kasan_report(addr, size, write, ret_ip); } bool check_memory_region(unsigned long addr, size_t size, bool write, --- a/mm/kasan/generic_report.c~kasan-detect-negative-size-in-memory-operation-function +++ a/mm/kasan/generic_report.c @@ -110,6 +110,17 @@ static const char *get_wild_bug_type(str const char *get_bug_type(struct kasan_access_info *info) { + /* + * If access_size is a negative number, then it has reason to be + * defined as out-of-bounds bug type. + * + * Casting negative numbers to size_t would indeed turn up as + * a large size_t and its value will be larger than ULONG_MAX/2, + * so that this can qualify as out-of-bounds. + */ + if (info->access_addr + info->access_size < info->access_addr) + return "out-of-bounds"; + if (addr_has_shadow(info->access_addr)) return get_shadow_bug_type(info); return get_wild_bug_type(info); --- a/mm/kasan/kasan.h~kasan-detect-negative-size-in-memory-operation-function +++ a/mm/kasan/kasan.h @@ -153,7 +153,7 @@ bool check_memory_region(unsigned long a void *find_first_bad_addr(void *addr, size_t size); const char *get_bug_type(struct kasan_access_info *info); -void kasan_report(unsigned long addr, size_t size, +bool kasan_report(unsigned long addr, size_t size, bool is_write, unsigned long ip); void kasan_report_invalid_free(void *object, unsigned long ip); --- a/mm/kasan/report.c~kasan-detect-negative-size-in-memory-operation-function +++ a/mm/kasan/report.c @@ -446,7 +446,7 @@ static void print_shadow_for_address(con } } -static bool report_enabled(void) +bool report_enabled(void) { if (current->kasan_depth) return false; @@ -478,9 +478,6 @@ void __kasan_report(unsigned long addr, void *untagged_addr; unsigned long flags; - if (likely(!report_enabled())) - return; - disable_trace_on_warning(); tagged_addr = (void *)addr; --- a/mm/kasan/tags.c~kasan-detect-negative-size-in-memory-operation-function +++ a/mm/kasan/tags.c @@ -86,6 +86,9 @@ bool check_memory_region(unsigned long a if (unlikely(size == 0)) return true; + if (unlikely(addr + size < addr)) + return !kasan_report(addr, size, write, ret_ip); + tag = get_tag((const void *)addr); /* @@ -111,15 +114,13 @@ bool check_memory_region(unsigned long a untagged_addr = reset_tag((const void *)addr); if (unlikely(untagged_addr < kasan_shadow_to_mem((void *)KASAN_SHADOW_START))) { - kasan_report(addr, size, write, ret_ip); - return false; + return !kasan_report(addr, size, write, ret_ip); } shadow_first = kasan_mem_to_shadow(untagged_addr); shadow_last = kasan_mem_to_shadow(untagged_addr + size - 1); for (shadow = shadow_first; shadow <= shadow_last; shadow++) { if (*shadow != tag) { - kasan_report(addr, size, write, ret_ip); - return false; + return !kasan_report(addr, size, write, ret_ip); } } --- a/mm/kasan/tags_report.c~kasan-detect-negative-size-in-memory-operation-function +++ a/mm/kasan/tags_report.c @@ -60,6 +60,17 @@ const char *get_bug_type(struct kasan_ac } #endif + /* + * If access_size is a negative number, then it has reason to be + * defined as out-of-bounds bug type. + * + * Casting negative numbers to size_t would indeed turn up as + * a large size_t and its value will be larger than ULONG_MAX/2, + * so that this can qualify as out-of-bounds. + */ + if (info->access_addr + info->access_size < info->access_addr) + return "out-of-bounds"; + return "invalid-access"; } _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 113/155] kasan: add test for invalid size in memmove 2020-04-02 4:01 incoming Andrew Morton ` (111 preceding siblings ...) 2020-04-02 4:09 ` [patch 112/155] kasan: detect negative size in memory operation function Andrew Morton @ 2020-04-02 4:09 ` Andrew Morton 2020-04-02 4:09 ` [patch 114/155] mm/page_alloc: increase default min_free_kbytes bound Andrew Morton ` (41 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:09 UTC (permalink / raw) To: akpm, aryabinin, dvyukov, glider, linux-mm, lkp, mm-commits, torvalds, walter-zh.wu From: Walter Wu <walter-zh.wu@mediatek.com> Subject: kasan: add test for invalid size in memmove Test negative size in memmove in order to verify whether it correctly get KASAN report. Casting negative numbers to size_t would indeed turn up as a large size_t, so it will have out-of-bounds bug and be detected by KASAN. [walter-zh.wu@mediatek.com: fix -Wstringop-overflow warning] Link: http://lkml.kernel.org/r/20200311134244.13016-1-walter-zh.wu@mediatek.com Link: http://lkml.kernel.org/r/20191112065313.7060-1-walter-zh.wu@mediatek.com Signed-off-by: Walter Wu <walter-zh.wu@mediatek.com> Reviewed-by: Dmitry Vyukov <dvyukov@google.com> Reviewed-by: Andrey Ryabinin <aryabinin@virtuozzo.com> Cc: Alexander Potapenko <glider@google.com> Cc: kernel test robot <lkp@intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- lib/test_kasan.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) --- a/lib/test_kasan.c~kasan-add-test-for-invalid-size-in-memmove +++ a/lib/test_kasan.c @@ -285,6 +285,24 @@ static noinline void __init kmalloc_oob_ kfree(ptr); } +static noinline void __init kmalloc_memmove_invalid_size(void) +{ + char *ptr; + size_t size = 64; + volatile size_t invalid_size = -2; + + pr_info("invalid size in memmove\n"); + ptr = kmalloc(size, GFP_KERNEL); + if (!ptr) { + pr_err("Allocation failed\n"); + return; + } + + memset((char *)ptr, 0, 64); + memmove((char *)ptr, (char *)ptr + 4, invalid_size); + kfree(ptr); +} + static noinline void __init kmalloc_uaf(void) { char *ptr; @@ -799,6 +817,7 @@ static int __init kmalloc_tests_init(voi kmalloc_oob_memset_4(); kmalloc_oob_memset_8(); kmalloc_oob_memset_16(); + kmalloc_memmove_invalid_size(); kmalloc_uaf(); kmalloc_uaf_memset(); kmalloc_uaf2(); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 114/155] mm/page_alloc: increase default min_free_kbytes bound 2020-04-02 4:01 incoming Andrew Morton ` (112 preceding siblings ...) 2020-04-02 4:09 ` [patch 113/155] kasan: add test for invalid size in memmove Andrew Morton @ 2020-04-02 4:09 ` Andrew Morton 2020-04-02 4:09 ` [patch 115/155] mm, pagealloc: micro-optimisation: save two branches on hot page allocation path Andrew Morton ` (40 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:09 UTC (permalink / raw) To: akpm, aquini, jsavitz, linux-mm, mm-commits, torvalds From: Joel Savitz <jsavitz@redhat.com> Subject: mm/page_alloc: increase default min_free_kbytes bound Currently, the vm.min_free_kbytes sysctl value is capped at a hardcoded 64M in init_per_zone_wmark_min (unless it is overridden by khugepaged initialization). This value has not been modified since 2005, and enterprise-grade systems now frequently have hundreds of GB of RAM and multiple 10, 40, or even 100 GB NICs. We have seen page allocation failures on heavily loaded systems related to NIC drivers. These issues were resolved by an increase to vm.min_free_kbytes. This patch increases the hardcoded value by a factor of 4 as a temporary solution. Further work to make the calculation of vm.min_free_kbytes more consistent throughout the kernel would be desirable. As an example of the inconsistency of the current method, this value is recalculated by init_per_zone_wmark_min() in the case of memory hotplug which will override the value set by set_recommended_min_free_kbytes() called during khugepaged initialization even if khugepaged remains enabled, however an on/off toggle of khugepaged will then recalculate and set the value via set_recommended_min_free_kbytes(). Link: http://lkml.kernel.org/r/20200220150103.5183-1-jsavitz@redhat.com Signed-off-by: Joel Savitz <jsavitz@redhat.com> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Cc: Rafael Aquini <aquini@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/page_alloc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- a/mm/page_alloc.c~mm-page_alloc-increase-default-min_free_kbytes-bound +++ a/mm/page_alloc.c @@ -7868,8 +7868,8 @@ int __meminit init_per_zone_wmark_min(vo min_free_kbytes = new_min_free_kbytes; if (min_free_kbytes < 128) min_free_kbytes = 128; - if (min_free_kbytes > 65536) - min_free_kbytes = 65536; + if (min_free_kbytes > 262144) + min_free_kbytes = 262144; } else { pr_warn("min_free_kbytes is not updated to %d because user defined value %d is preferred\n", new_min_free_kbytes, user_min_free_kbytes); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 115/155] mm, pagealloc: micro-optimisation: save two branches on hot page allocation path 2020-04-02 4:01 incoming Andrew Morton ` (113 preceding siblings ...) 2020-04-02 4:09 ` [patch 114/155] mm/page_alloc: increase default min_free_kbytes bound Andrew Morton @ 2020-04-02 4:09 ` Andrew Morton 2020-04-02 4:09 ` [patch 116/155] mm/page_alloc.c: use free_area_empty() instead of open-coding Andrew Morton ` (39 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:09 UTC (permalink / raw) To: akpm, linux-mm, mateusznosek0, mgorman, mm-commits, torvalds, vbabka From: Mateusz Nosek <mateusznosek0@gmail.com> Subject: mm, pagealloc: micro-optimisation: save two branches on hot page allocation path This patch makes ALLOC_KSWAPD equal to __GFP_KSWAPD_RECLAIM (cast to int). Thanks to that code like: if (gfp_mask & __GFP_KSWAPD_RECLAIM) alloc_flags |= ALLOC_KSWAPD; can be changed to: alloc_flags |= (__force int) (gfp_mask &__GFP_KSWAPD_RECLAIM); Thanks to this one branch less is generated in the assembly. In case of ALLOC_KSWAPD flag two branches are saved, first one in code that always executes in the beginning of page allocation and the second one in loop in page allocator slowpath. Link: http://lkml.kernel.org/r/20200304162118.14784-1-mateusznosek0@gmail.com Signed-off-by: Mateusz Nosek <mateusznosek0@gmail.com> Acked-by: Vlastimil Babka <vbabka@suse.cz> Acked-by: Mel Gorman <mgorman@techsingularity.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/internal.h | 2 +- mm/page_alloc.c | 22 ++++++++++++++-------- 2 files changed, 15 insertions(+), 9 deletions(-) --- a/mm/internal.h~mm-micro-optimisation-save-two-branches-on-hot-page-allocation-path +++ a/mm/internal.h @@ -555,7 +555,7 @@ unsigned long reclaim_clean_pages_from_l #else #define ALLOC_NOFRAGMENT 0x0 #endif -#define ALLOC_KSWAPD 0x200 /* allow waking of kswapd */ +#define ALLOC_KSWAPD 0x800 /* allow waking of kswapd, __GFP_KSWAPD_RECLAIM set */ enum ttu_flags; struct tlbflush_unmap_batch; --- a/mm/page_alloc.c~mm-micro-optimisation-save-two-branches-on-hot-page-allocation-path +++ a/mm/page_alloc.c @@ -3536,10 +3536,13 @@ static bool zone_allows_reclaim(struct z static inline unsigned int alloc_flags_nofragment(struct zone *zone, gfp_t gfp_mask) { - unsigned int alloc_flags = 0; + unsigned int alloc_flags; - if (gfp_mask & __GFP_KSWAPD_RECLAIM) - alloc_flags |= ALLOC_KSWAPD; + /* + * __GFP_KSWAPD_RECLAIM is assumed to be the same as ALLOC_KSWAPD + * to save a branch. + */ + alloc_flags = (__force int) (gfp_mask & __GFP_KSWAPD_RECLAIM); #ifdef CONFIG_ZONE_DMA32 if (!zone) @@ -4175,8 +4178,13 @@ gfp_to_alloc_flags(gfp_t gfp_mask) { unsigned int alloc_flags = ALLOC_WMARK_MIN | ALLOC_CPUSET; - /* __GFP_HIGH is assumed to be the same as ALLOC_HIGH to save a branch. */ + /* + * __GFP_HIGH is assumed to be the same as ALLOC_HIGH + * and __GFP_KSWAPD_RECLAIM is assumed to be the same as ALLOC_KSWAPD + * to save two branches. + */ BUILD_BUG_ON(__GFP_HIGH != (__force gfp_t) ALLOC_HIGH); + BUILD_BUG_ON(__GFP_KSWAPD_RECLAIM != (__force gfp_t) ALLOC_KSWAPD); /* * The caller may dip into page reserves a bit more if the caller @@ -4184,7 +4192,8 @@ gfp_to_alloc_flags(gfp_t gfp_mask) * policy or is asking for __GFP_HIGH memory. GFP_ATOMIC requests will * set both ALLOC_HARDER (__GFP_ATOMIC) and ALLOC_HIGH (__GFP_HIGH). */ - alloc_flags |= (__force int) (gfp_mask & __GFP_HIGH); + alloc_flags |= (__force int) + (gfp_mask & (__GFP_HIGH | __GFP_KSWAPD_RECLAIM)); if (gfp_mask & __GFP_ATOMIC) { /* @@ -4201,9 +4210,6 @@ gfp_to_alloc_flags(gfp_t gfp_mask) } else if (unlikely(rt_task(current)) && !in_interrupt()) alloc_flags |= ALLOC_HARDER; - if (gfp_mask & __GFP_KSWAPD_RECLAIM) - alloc_flags |= ALLOC_KSWAPD; - #ifdef CONFIG_CMA if (gfpflags_to_migratetype(gfp_mask) == MIGRATE_MOVABLE) alloc_flags |= ALLOC_CMA; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 116/155] mm/page_alloc.c: use free_area_empty() instead of open-coding 2020-04-02 4:01 incoming Andrew Morton ` (114 preceding siblings ...) 2020-04-02 4:09 ` [patch 115/155] mm, pagealloc: micro-optimisation: save two branches on hot page allocation path Andrew Morton @ 2020-04-02 4:09 ` Andrew Morton 2020-04-02 4:09 ` [patch 117/155] mm/page_alloc.c: micro-optimisation Remove unnecessary branch Andrew Morton ` (38 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:09 UTC (permalink / raw) To: akpm, chenqiwu, linux-mm, mm-commits, torvalds, willy From: chenqiwu <chenqiwu@xiaomi.com> Subject: mm/page_alloc.c: use free_area_empty() instead of open-coding Use free_area_empty() API to replace list_empty() for better code readability. Link: http://lkml.kernel.org/r/1583674354-7713-1-git-send-email-qiwuchen55@gmail.com Signed-off-by: chenqiwu <chenqiwu@xiaomi.com> Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/page_alloc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) --- a/mm/page_alloc.c~mm-page_alloc-use-free_area_empty-instead-of-open-coding +++ a/mm/page_alloc.c @@ -3460,8 +3460,7 @@ bool __zone_watermark_ok(struct zone *z, return true; } #endif - if (alloc_harder && - !list_empty(&area->free_list[MIGRATE_HIGHATOMIC])) + if (alloc_harder && !free_area_empty(area, MIGRATE_HIGHATOMIC)) return true; } return false; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 117/155] mm/page_alloc.c: micro-optimisation Remove unnecessary branch 2020-04-02 4:01 incoming Andrew Morton ` (115 preceding siblings ...) 2020-04-02 4:09 ` [patch 116/155] mm/page_alloc.c: use free_area_empty() instead of open-coding Andrew Morton @ 2020-04-02 4:09 ` Andrew Morton 2020-04-02 4:09 ` [patch 118/155] mm/page_alloc: simplify page_is_buddy() for better code readability Andrew Morton ` (37 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:09 UTC (permalink / raw) To: akpm, linux-mm, mateusznosek0, mm-commits, torvalds, willy From: Mateusz Nosek <mateusznosek0@gmail.com> Subject: mm/page_alloc.c: micro-optimisation Remove unnecessary branch Previously if branch condition was false, the assignment was not executed. The assignment can be safely executed even when the condition is false and it is not incorrect as it assigns the value of 'nodemask' to 'ac.nodemask' which already has the same value. So as the assignment can be executed unconditionally, the branch can be removed. Link: http://lkml.kernel.org/r/20200307225335.31300-1-mateusznosek0@gmail.com Signed-off-by: Mateusz Nosek <mateusznosek0@gmail.com> Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/page_alloc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) --- a/mm/page_alloc.c~mm-page_allocc-micro-optimisation-remove-unnecessary-branch +++ a/mm/page_alloc.c @@ -4751,8 +4751,7 @@ __alloc_pages_nodemask(gfp_t gfp_mask, u * Restore the original nodemask if it was potentially replaced with * &cpuset_current_mems_allowed to optimize the fast-path attempt. */ - if (unlikely(ac.nodemask != nodemask)) - ac.nodemask = nodemask; + ac.nodemask = nodemask; page = __alloc_pages_slowpath(alloc_mask, order, &ac); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 118/155] mm/page_alloc: simplify page_is_buddy() for better code readability 2020-04-02 4:01 incoming Andrew Morton ` (116 preceding siblings ...) 2020-04-02 4:09 ` [patch 117/155] mm/page_alloc.c: micro-optimisation Remove unnecessary branch Andrew Morton @ 2020-04-02 4:09 ` Andrew Morton 2020-04-02 4:09 ` [patch 119/155] mm: vmpressure: don't need call kfree if kstrndup fails Andrew Morton ` (36 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:09 UTC (permalink / raw) To: akpm, alexander.h.duyck, chenqiwu, linux-mm, mm-commits, pankaj.gupta.linux, torvalds, vbabka, willy From: chenqiwu <chenqiwu@xiaomi.com> Subject: mm/page_alloc: simplify page_is_buddy() for better code readability Simplify page_is_buddy() to reduce the redundant code for better code readability. Link: http://lkml.kernel.org/r/1583853751-5525-1-git-send-email-qiwuchen55@gmail.com Signed-off-by: chenqiwu <chenqiwu@xiaomi.com> Reviewed-by: Alexander Duyck <alexander.h.duyck@linux.intel.com> Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Vlastimil Babka <vbabka@suse.cz> Acked-by: Pankaj Gupta <pankaj.gupta.linux@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/page_alloc.c | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-) --- a/mm/page_alloc.c~mm-page_alloc-simplify-page_is_buddy-for-better-code-readability +++ a/mm/page_alloc.c @@ -792,32 +792,25 @@ static inline void set_page_order(struct * * For recording page's order, we use page_private(page). */ -static inline int page_is_buddy(struct page *page, struct page *buddy, +static inline bool page_is_buddy(struct page *page, struct page *buddy, unsigned int order) { - if (page_is_guard(buddy) && page_order(buddy) == order) { - if (page_zone_id(page) != page_zone_id(buddy)) - return 0; + if (!page_is_guard(buddy) && !PageBuddy(buddy)) + return false; - VM_BUG_ON_PAGE(page_count(buddy) != 0, buddy); + if (page_order(buddy) != order) + return false; - return 1; - } + /* + * zone check is done late to avoid uselessly calculating + * zone/node ids for pages that could never merge. + */ + if (page_zone_id(page) != page_zone_id(buddy)) + return false; - if (PageBuddy(buddy) && page_order(buddy) == order) { - /* - * zone check is done late to avoid uselessly - * calculating zone/node ids for pages that could - * never merge. - */ - if (page_zone_id(page) != page_zone_id(buddy)) - return 0; + VM_BUG_ON_PAGE(page_count(buddy) != 0, buddy); - VM_BUG_ON_PAGE(page_count(buddy) != 0, buddy); - - return 1; - } - return 0; + return true; } #ifdef CONFIG_COMPACTION _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 119/155] mm: vmpressure: don't need call kfree if kstrndup fails 2020-04-02 4:01 incoming Andrew Morton ` (117 preceding siblings ...) 2020-04-02 4:09 ` [patch 118/155] mm/page_alloc: simplify page_is_buddy() for better code readability Andrew Morton @ 2020-04-02 4:09 ` Andrew Morton 2020-04-02 4:10 ` [patch 120/155] mm: vmpressure: use mem_cgroup_is_root API Andrew Morton ` (35 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:09 UTC (permalink / raw) To: akpm, david, linux-mm, mm-commits, rientjes, torvalds, yang.shi From: Yang Shi <yang.shi@linux.alibaba.com> Subject: mm: vmpressure: don't need call kfree if kstrndup fails When kstrndup fails, no memory was allocated and we can exit directly. [david@redhat.com: reword changelog] Link: http://lkml.kernel.org/r/1581398649-125989-1-git-send-email-yang.shi@linux.alibaba.com Signed-off-by: Yang Shi <yang.shi@linux.alibaba.com> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Reviewed-by: David Hildenbrand <david@redhat.com> Acked-by: David Rientjes <rientjes@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/vmpressure.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) --- a/mm/vmpressure.c~mm-vmpressure-dont-need-call-kfree-if-kstrndup-fails +++ a/mm/vmpressure.c @@ -371,10 +371,8 @@ int vmpressure_register_event(struct mem int ret = 0; spec_orig = spec = kstrndup(args, MAX_VMPRESSURE_ARGS_LEN, GFP_KERNEL); - if (!spec) { - ret = -ENOMEM; - goto out; - } + if (!spec) + return -ENOMEM; /* Find required level */ token = strsep(&spec, ","); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 120/155] mm: vmpressure: use mem_cgroup_is_root API 2020-04-02 4:01 incoming Andrew Morton ` (118 preceding siblings ...) 2020-04-02 4:09 ` [patch 119/155] mm: vmpressure: don't need call kfree if kstrndup fails Andrew Morton @ 2020-04-02 4:10 ` Andrew Morton 2020-04-02 4:10 ` [patch 121/155] mm: vmscan: replace open codings to NUMA_NO_NODE Andrew Morton ` (34 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:10 UTC (permalink / raw) To: akpm, david, linux-mm, mhocko, mm-commits, rientjes, torvalds, yang.shi From: Yang Shi <yang.shi@linux.alibaba.com> Subject: mm: vmpressure: use mem_cgroup_is_root API Use mem_cgroup_is_root() API to check if memcg is root memcg instead of open coding. Link: http://lkml.kernel.org/r/1581398649-125989-2-git-send-email-yang.shi@linux.alibaba.com Signed-off-by: Yang Shi <yang.shi@linux.alibaba.com> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Reviewed-by: David Hildenbrand <david@redhat.com> Acked-by: Michal Hocko <mhocko@suse.com> Acked-by: David Rientjes <rientjes@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/vmpressure.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/mm/vmpressure.c~mm-vmpressure-use-mem_cgroup_is_root-api +++ a/mm/vmpressure.c @@ -280,7 +280,7 @@ void vmpressure(gfp_t gfp, struct mem_cg enum vmpressure_levels level; /* For now, no users for root-level efficiency */ - if (!memcg || memcg == root_mem_cgroup) + if (!memcg || mem_cgroup_is_root(memcg)) return; spin_lock(&vmpr->sr_lock); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 121/155] mm: vmscan: replace open codings to NUMA_NO_NODE 2020-04-02 4:01 incoming Andrew Morton ` (119 preceding siblings ...) 2020-04-02 4:10 ` [patch 120/155] mm: vmpressure: use mem_cgroup_is_root API Andrew Morton @ 2020-04-02 4:10 ` Andrew Morton 2020-04-02 4:10 ` [patch 122/155] mm/vmscan.c: remove cpu online notification for now Andrew Morton ` (33 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:10 UTC (permalink / raw) To: akpm, anshuman.khandual, linux-mm, minchan, mm-commits, rientjes, torvalds, yang.shi From: Yang Shi <yang.shi@linux.alibaba.com> Subject: mm: vmscan: replace open codings to NUMA_NO_NODE The commit 98fa15f34cb3 ("mm: replace all open encodings for NUMA_NO_NODE") did the replacement across the kernel tree, but we got some more in vmscan.c since then. Link: http://lkml.kernel.org/r/1581568298-45317-1-git-send-email-yang.shi@linux.alibaba.com Signed-off-by: Yang Shi <yang.shi@linux.alibaba.com> Acked-by: Minchan Kim <minchan@kernel.org> Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com> Acked-by: David Rientjes <rientjes@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/vmscan.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --- a/mm/vmscan.c~mm-vmscan-replace-open-codings-to-numa_no_node +++ a/mm/vmscan.c @@ -2096,7 +2096,7 @@ static void shrink_active_list(unsigned unsigned long reclaim_pages(struct list_head *page_list) { - int nid = -1; + int nid = NUMA_NO_NODE; unsigned long nr_reclaimed = 0; LIST_HEAD(node_page_list); struct reclaim_stat dummy_stat; @@ -2111,7 +2111,7 @@ unsigned long reclaim_pages(struct list_ while (!list_empty(page_list)) { page = lru_to_page(page_list); - if (nid == -1) { + if (nid == NUMA_NO_NODE) { nid = page_to_nid(page); INIT_LIST_HEAD(&node_page_list); } @@ -2132,7 +2132,7 @@ unsigned long reclaim_pages(struct list_ putback_lru_page(page); } - nid = -1; + nid = NUMA_NO_NODE; } if (!list_empty(&node_page_list)) { _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 122/155] mm/vmscan.c: remove cpu online notification for now 2020-04-02 4:01 incoming Andrew Morton ` (120 preceding siblings ...) 2020-04-02 4:10 ` [patch 121/155] mm: vmscan: replace open codings to NUMA_NO_NODE Andrew Morton @ 2020-04-02 4:10 ` Andrew Morton 2020-04-02 4:10 ` [patch 123/155] mm/vmscan.c: fix data races using kswapd_classzone_idx Andrew Morton ` (32 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:10 UTC (permalink / raw) To: akpm, linux-mm, mhocko, mhocko, mm-commits, richardw.yang, rientjes, torvalds From: Wei Yang <richardw.yang@linux.intel.com> Subject: mm/vmscan.c: remove cpu online notification for now kswapd kernel thread starts either with a CPU affinity set to the full cpu mask of its target node or without any affinity at all if the node is CPUless. There is a cpu hotplug callback (kswapd_cpu_online) that implements an elaborate way to update this mask when a cpu is onlined. It is not really clear whether there is any actual benefit from this scheme. Completely CPU-less NUMA nodes rarely gain a new CPU during runtime. Drop the code for that reason. If there is a real usecase then we can resurrect and simplify the code. [mhocko@suse.com rewrite changelog] Link: http://lkml.kernel.org/r/20200218224422.3407-1-richardw.yang@linux.intel.com Suggested-by: Michal Hocko <mhocko@suse.org> Signed-off-by: Wei Yang <richardw.yang@linux.intel.com> Acked-by: Michal Hocko <mhocko@suse.com> Cc: David Rientjes <rientjes@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/vmscan.c | 27 +-------------------------- 1 file changed, 1 insertion(+), 26 deletions(-) --- a/mm/vmscan.c~mm-vmscanc-remove-cpu-online-notification-for-now +++ a/mm/vmscan.c @@ -4030,27 +4030,6 @@ unsigned long shrink_all_memory(unsigned } #endif /* CONFIG_HIBERNATION */ -/* It's optimal to keep kswapds on the same CPUs as their memory, but - not required for correctness. So if the last cpu in a node goes - away, we get changed to run anywhere: as the first one comes back, - restore their cpu bindings. */ -static int kswapd_cpu_online(unsigned int cpu) -{ - int nid; - - for_each_node_state(nid, N_MEMORY) { - pg_data_t *pgdat = NODE_DATA(nid); - const struct cpumask *mask; - - mask = cpumask_of_node(pgdat->node_id); - - if (cpumask_any_and(cpu_online_mask, mask) < nr_cpu_ids) - /* One of our CPUs online: restore mask */ - set_cpus_allowed_ptr(pgdat->kswapd, mask); - } - return 0; -} - /* * This kswapd start function will be called by init and node-hot-add. * On node-hot-add, kswapd will moved to proper cpus if cpus are hot-added. @@ -4090,15 +4069,11 @@ void kswapd_stop(int nid) static int __init kswapd_init(void) { - int nid, ret; + int nid; swap_setup(); for_each_node_state(nid, N_MEMORY) kswapd_run(nid); - ret = cpuhp_setup_state_nocalls(CPUHP_AP_ONLINE_DYN, - "mm/vmscan:online", kswapd_cpu_online, - NULL); - WARN_ON(ret < 0); return 0; } _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 123/155] mm/vmscan.c: fix data races using kswapd_classzone_idx 2020-04-02 4:01 incoming Andrew Morton ` (121 preceding siblings ...) 2020-04-02 4:10 ` [patch 122/155] mm/vmscan.c: remove cpu online notification for now Andrew Morton @ 2020-04-02 4:10 ` Andrew Morton 2020-04-02 4:10 ` [patch 124/155] mm/vmscan.c: clean code by removing unnecessary assignment Andrew Morton ` (31 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:10 UTC (permalink / raw) To: akpm, cai, elver, linux-mm, mm-commits, torvalds, willy From: Qian Cai <cai@lca.pw> Subject: mm/vmscan.c: fix data races using kswapd_classzone_idx pgdat->kswapd_classzone_idx could be accessed concurrently in wakeup_kswapd(). Plain writes and reads without any lock protection result in data races. Fix them by adding a pair of READ|WRITE_ONCE() as well as saving a branch (compilers might well optimize the original code in an unintentional way anyway). While at it, also take care of pgdat->kswapd_order and non-kswapd threads in allow_direct_reclaim(). The data races were reported by KCSAN, BUG: KCSAN: data-race in wakeup_kswapd / wakeup_kswapd write to 0xffff9f427ffff2dc of 4 bytes by task 7454 on cpu 13: wakeup_kswapd+0xf1/0x400 wakeup_kswapd at mm/vmscan.c:3967 wake_all_kswapds+0x59/0xc0 wake_all_kswapds at mm/page_alloc.c:4241 __alloc_pages_slowpath+0xdcc/0x1290 __alloc_pages_slowpath at mm/page_alloc.c:4512 __alloc_pages_nodemask+0x3bb/0x450 alloc_pages_vma+0x8a/0x2c0 do_anonymous_page+0x16e/0x6f0 __handle_mm_fault+0xcd5/0xd40 handle_mm_fault+0xfc/0x2f0 do_page_fault+0x263/0x6f9 page_fault+0x34/0x40 1 lock held by mtest01/7454: #0: ffff9f425afe8808 (&mm->mmap_sem#2){++++}, at: do_page_fault+0x143/0x6f9 do_user_addr_fault at arch/x86/mm/fault.c:1405 (inlined by) do_page_fault at arch/x86/mm/fault.c:1539 irq event stamp: 6944085 count_memcg_event_mm+0x1a6/0x270 count_memcg_event_mm+0x119/0x270 __do_softirq+0x34c/0x57c irq_exit+0xa2/0xc0 read to 0xffff9f427ffff2dc of 4 bytes by task 7472 on cpu 38: wakeup_kswapd+0xc8/0x400 wake_all_kswapds+0x59/0xc0 __alloc_pages_slowpath+0xdcc/0x1290 __alloc_pages_nodemask+0x3bb/0x450 alloc_pages_vma+0x8a/0x2c0 do_anonymous_page+0x16e/0x6f0 __handle_mm_fault+0xcd5/0xd40 handle_mm_fault+0xfc/0x2f0 do_page_fault+0x263/0x6f9 page_fault+0x34/0x40 1 lock held by mtest01/7472: #0: ffff9f425a9ac148 (&mm->mmap_sem#2){++++}, at: do_page_fault+0x143/0x6f9 irq event stamp: 6793561 count_memcg_event_mm+0x1a6/0x270 count_memcg_event_mm+0x119/0x270 __do_softirq+0x34c/0x57c irq_exit+0xa2/0xc0 BUG: KCSAN: data-race in kswapd / wakeup_kswapd write to 0xffff90973ffff2dc of 4 bytes by task 820 on cpu 6: kswapd+0x27c/0x8d0 kthread+0x1e0/0x200 ret_from_fork+0x27/0x50 read to 0xffff90973ffff2dc of 4 bytes by task 6299 on cpu 0: wakeup_kswapd+0xf3/0x450 wake_all_kswapds+0x59/0xc0 __alloc_pages_slowpath+0xdcc/0x1290 __alloc_pages_nodemask+0x3bb/0x450 alloc_pages_vma+0x8a/0x2c0 do_anonymous_page+0x170/0x700 __handle_mm_fault+0xc9f/0xd00 handle_mm_fault+0xfc/0x2f0 do_page_fault+0x263/0x6f9 page_fault+0x34/0x40 Link: http://lkml.kernel.org/r/1582749472-5171-1-git-send-email-cai@lca.pw Signed-off-by: Qian Cai <cai@lca.pw> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Cc: Marco Elver <elver@google.com> Cc: Matthew Wilcox <willy@infradead.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/vmscan.c | 45 ++++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) --- a/mm/vmscan.c~mm-vmscan-fix-data-races-at-kswapd_classzone_idx +++ a/mm/vmscan.c @@ -3136,8 +3136,9 @@ static bool allow_direct_reclaim(pg_data /* kswapd must be awake if processes are being throttled */ if (!wmark_ok && waitqueue_active(&pgdat->kswapd_wait)) { - pgdat->kswapd_classzone_idx = min(pgdat->kswapd_classzone_idx, - (enum zone_type)ZONE_NORMAL); + if (READ_ONCE(pgdat->kswapd_classzone_idx) > ZONE_NORMAL) + WRITE_ONCE(pgdat->kswapd_classzone_idx, ZONE_NORMAL); + wake_up_interruptible(&pgdat->kswapd_wait); } @@ -3769,9 +3770,9 @@ out: static enum zone_type kswapd_classzone_idx(pg_data_t *pgdat, enum zone_type prev_classzone_idx) { - if (pgdat->kswapd_classzone_idx == MAX_NR_ZONES) - return prev_classzone_idx; - return pgdat->kswapd_classzone_idx; + enum zone_type curr_idx = READ_ONCE(pgdat->kswapd_classzone_idx); + + return curr_idx == MAX_NR_ZONES ? prev_classzone_idx : curr_idx; } static void kswapd_try_to_sleep(pg_data_t *pgdat, int alloc_order, int reclaim_order, @@ -3815,8 +3816,11 @@ static void kswapd_try_to_sleep(pg_data_ * the previous request that slept prematurely. */ if (remaining) { - pgdat->kswapd_classzone_idx = kswapd_classzone_idx(pgdat, classzone_idx); - pgdat->kswapd_order = max(pgdat->kswapd_order, reclaim_order); + WRITE_ONCE(pgdat->kswapd_classzone_idx, + kswapd_classzone_idx(pgdat, classzone_idx)); + + if (READ_ONCE(pgdat->kswapd_order) < reclaim_order) + WRITE_ONCE(pgdat->kswapd_order, reclaim_order); } finish_wait(&pgdat->kswapd_wait, &wait); @@ -3893,12 +3897,12 @@ static int kswapd(void *p) tsk->flags |= PF_MEMALLOC | PF_SWAPWRITE | PF_KSWAPD; set_freezable(); - pgdat->kswapd_order = 0; - pgdat->kswapd_classzone_idx = MAX_NR_ZONES; + WRITE_ONCE(pgdat->kswapd_order, 0); + WRITE_ONCE(pgdat->kswapd_classzone_idx, MAX_NR_ZONES); for ( ; ; ) { bool ret; - alloc_order = reclaim_order = pgdat->kswapd_order; + alloc_order = reclaim_order = READ_ONCE(pgdat->kswapd_order); classzone_idx = kswapd_classzone_idx(pgdat, classzone_idx); kswapd_try_sleep: @@ -3906,10 +3910,10 @@ kswapd_try_sleep: classzone_idx); /* Read the new order and classzone_idx */ - alloc_order = reclaim_order = pgdat->kswapd_order; + alloc_order = reclaim_order = READ_ONCE(pgdat->kswapd_order); classzone_idx = kswapd_classzone_idx(pgdat, classzone_idx); - pgdat->kswapd_order = 0; - pgdat->kswapd_classzone_idx = MAX_NR_ZONES; + WRITE_ONCE(pgdat->kswapd_order, 0); + WRITE_ONCE(pgdat->kswapd_classzone_idx, MAX_NR_ZONES); ret = try_to_freeze(); if (kthread_should_stop()) @@ -3953,20 +3957,23 @@ void wakeup_kswapd(struct zone *zone, gf enum zone_type classzone_idx) { pg_data_t *pgdat; + enum zone_type curr_idx; if (!managed_zone(zone)) return; if (!cpuset_zone_allowed(zone, gfp_flags)) return; + pgdat = zone->zone_pgdat; + curr_idx = READ_ONCE(pgdat->kswapd_classzone_idx); + + if (curr_idx == MAX_NR_ZONES || curr_idx < classzone_idx) + WRITE_ONCE(pgdat->kswapd_classzone_idx, classzone_idx); + + if (READ_ONCE(pgdat->kswapd_order) < order) + WRITE_ONCE(pgdat->kswapd_order, order); - if (pgdat->kswapd_classzone_idx == MAX_NR_ZONES) - pgdat->kswapd_classzone_idx = classzone_idx; - else - pgdat->kswapd_classzone_idx = max(pgdat->kswapd_classzone_idx, - classzone_idx); - pgdat->kswapd_order = max(pgdat->kswapd_order, order); if (!waitqueue_active(&pgdat->kswapd_wait)) return; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 124/155] mm/vmscan.c: clean code by removing unnecessary assignment 2020-04-02 4:01 incoming Andrew Morton ` (122 preceding siblings ...) 2020-04-02 4:10 ` [patch 123/155] mm/vmscan.c: fix data races using kswapd_classzone_idx Andrew Morton @ 2020-04-02 4:10 ` Andrew Morton 2020-04-02 4:10 ` [patch 125/155] mm/vmscan.c: make may_enter_fs bool in shrink_page_list() Andrew Morton ` (30 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:10 UTC (permalink / raw) To: akpm, david, linux-mm, mateusznosek0, mm-commits, richard.weiyang, torvalds, willy From: Mateusz Nosek <mateusznosek0@gmail.com> Subject: mm/vmscan.c: clean code by removing unnecessary assignment Previously 0 was assigned to variable 'lruvec_size', but the variable was never read later. So the assignment can be removed. Link: http://lkml.kernel.org/r/20200229214022.11853-1-mateusznosek0@gmail.com Fixes: f87bccde6a7d ("mm/vmscan: remove unused lru_pages argument") Signed-off-by: Mateusz Nosek <mateusznosek0@gmail.com> Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Wei Yang <richard.weiyang@gmail.com> Reviewed-by: David Hildenbrand <david@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/vmscan.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) --- a/mm/vmscan.c~mm-vmscanc-clean-code-by-removing-unnecessary-assignment +++ a/mm/vmscan.c @@ -2427,10 +2427,8 @@ out: case SCAN_FILE: case SCAN_ANON: /* Scan one type exclusively */ - if ((scan_balance == SCAN_FILE) != file) { - lruvec_size = 0; + if ((scan_balance == SCAN_FILE) != file) scan = 0; - } break; default: /* Look ma, no brain */ _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 125/155] mm/vmscan.c: make may_enter_fs bool in shrink_page_list() 2020-04-02 4:01 incoming Andrew Morton ` (123 preceding siblings ...) 2020-04-02 4:10 ` [patch 124/155] mm/vmscan.c: clean code by removing unnecessary assignment Andrew Morton @ 2020-04-02 4:10 ` Andrew Morton 2020-04-02 4:10 ` [patch 126/155] mm/vmscan.c: do_try_to_free_pages(): clean code by removing unnecessary assignment Andrew Morton ` (29 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:10 UTC (permalink / raw) To: akpm, ktkhai, linux-mm, mm-commits, torvalds From: Kirill Tkhai <ktkhai@virtuozzo.com> Subject: mm/vmscan.c: make may_enter_fs bool in shrink_page_list() This gives some size improvement: $size mm/vmscan.o (before) text data bss dec hex filename 53670 24123 12 77805 12fed mm/vmscan.o $size mm/vmscan.o (after) text data bss dec hex filename 53648 24123 12 77783 12fd7 mm/vmscan.o Link: http://lkml.kernel.org/r/Message-ID: Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/vmscan.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) --- a/mm/vmscan.c~mm-make-may_enter_fs-bool-in-shrink_page_list +++ a/mm/vmscan.c @@ -1084,9 +1084,8 @@ static unsigned long shrink_page_list(st while (!list_empty(page_list)) { struct address_space *mapping; struct page *page; - int may_enter_fs; enum page_references references = PAGEREF_RECLAIM; - bool dirty, writeback; + bool dirty, writeback, may_enter_fs; unsigned int nr_pages; cond_resched(); @@ -1267,7 +1266,7 @@ static unsigned long shrink_page_list(st goto activate_locked_split; } - may_enter_fs = 1; + may_enter_fs = true; /* Adding to swap updated mapping */ mapping = page_mapping(page); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 126/155] mm/vmscan.c: do_try_to_free_pages(): clean code by removing unnecessary assignment 2020-04-02 4:01 incoming Andrew Morton ` (124 preceding siblings ...) 2020-04-02 4:10 ` [patch 125/155] mm/vmscan.c: make may_enter_fs bool in shrink_page_list() Andrew Morton @ 2020-04-02 4:10 ` Andrew Morton 2020-04-02 4:10 ` [patch 127/155] selftests: vm: drop dependencies on page flags from mlock2 tests Andrew Morton ` (28 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:10 UTC (permalink / raw) To: akpm, hannes, linux-mm, mateusznosek0, mhocko, mm-commits, torvalds From: Mateusz Nosek <mateusznosek0@gmail.com> Subject: mm/vmscan.c: do_try_to_free_pages(): clean code by removing unnecessary assignment sc->memcg_low_skipped resets skipped_deactivate to 0 but this is not needed as this code path is never reachable with skipped_deactivate != 0 due to previous sc->skipped_deactivate branch. [mhocko@kernel.org: rewrite changelog] Link: http://lkml.kernel.org/r/20200319165938.23354-1-mateusznosek0@gmail.com Signed-off-by: Mateusz Nosek <mateusznosek0@gmail.com> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Cc: Michal Hocko <mhocko@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/vmscan.c | 1 - 1 file changed, 1 deletion(-) --- a/mm/vmscan.c~mm-vmscanc-do_try_to_free_pages-clean-code-by-removing-unnecessary-assignment +++ a/mm/vmscan.c @@ -3093,7 +3093,6 @@ retry: if (sc->memcg_low_skipped) { sc->priority = initial_priority; sc->force_deactivate = 0; - sc->skipped_deactivate = 0; sc->memcg_low_reclaim = 1; sc->memcg_low_skipped = 0; goto retry; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 127/155] selftests: vm: drop dependencies on page flags from mlock2 tests 2020-04-02 4:01 incoming Andrew Morton ` (125 preceding siblings ...) 2020-04-02 4:10 ` [patch 126/155] mm/vmscan.c: do_try_to_free_pages(): clean code by removing unnecessary assignment Andrew Morton @ 2020-04-02 4:10 ` Andrew Morton 2020-04-02 4:10 ` [patch 128/155] mm,compaction,cma: add alloc_contig flag to compact_control Andrew Morton ` (27 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:10 UTC (permalink / raw) To: akpm, aquini, emunson, linux-mm, mhocko, mm-commits, shakeelb, shuah, stable, torvalds From: Michal Hocko <mhocko@suse.com> Subject: selftests: vm: drop dependencies on page flags from mlock2 tests It was noticed that mlock2 tests are failing after 9c4e6b1a7027f ("mm, mlock, vmscan: no more skipping pagevecs") because the patch has changed the timing on when the page is added to the unevictable LRU list and thus gains the unevictable page flag. The test was just too dependent on the implementation details which were true at the time when it was introduced. Page flags and the timing when they are set is something no userspace should ever depend on. The test should be testing only for the user observable contract of the tested syscalls. Those are defined pretty well for the mlock and there are other means for testing them. In fact this is already done and testing for page flags can be safely dropped to achieve the aimed purpose. Present bits can be checked by /proc/<pid>/smaps RSS field and the locking state by VmFlags although I would argue that Locked: field would be more appropriate. Drop all the page flag machinery and considerably simplify the test. This should be more robust for future kernel changes while checking the promised contract is still valid. Link: http://lkml.kernel.org/r/20200324154218.GS19542@dhcp22.suse.cz Fixes: 9c4e6b1a7027f ("mm, mlock, vmscan: no more skipping pagevecs") Signed-off-by: Michal Hocko <mhocko@suse.com> Reported-by: Rafael Aquini <aquini@redhat.com> Acked-by: Rafael Aquini <aquini@redhat.com> Cc: Shakeel Butt <shakeelb@google.com> Cc: Eric B Munson <emunson@akamai.com> Cc: Shuah Khan <shuah@kernel.org> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- tools/testing/selftests/vm/mlock2-tests.c | 233 +++----------------- 1 file changed, 37 insertions(+), 196 deletions(-) --- a/tools/testing/selftests/vm/mlock2-tests.c~selftests-vm-drop-dependencies-on-page-flags-from-mlock2-tests +++ a/tools/testing/selftests/vm/mlock2-tests.c @@ -67,59 +67,6 @@ out: return ret; } -static uint64_t get_pageflags(unsigned long addr) -{ - FILE *file; - uint64_t pfn; - unsigned long offset; - - file = fopen("/proc/self/pagemap", "r"); - if (!file) { - perror("fopen pagemap"); - _exit(1); - } - - offset = addr / getpagesize() * sizeof(pfn); - - if (fseek(file, offset, SEEK_SET)) { - perror("fseek pagemap"); - _exit(1); - } - - if (fread(&pfn, sizeof(pfn), 1, file) != 1) { - perror("fread pagemap"); - _exit(1); - } - - fclose(file); - return pfn; -} - -static uint64_t get_kpageflags(unsigned long pfn) -{ - uint64_t flags; - FILE *file; - - file = fopen("/proc/kpageflags", "r"); - if (!file) { - perror("fopen kpageflags"); - _exit(1); - } - - if (fseek(file, pfn * sizeof(flags), SEEK_SET)) { - perror("fseek kpageflags"); - _exit(1); - } - - if (fread(&flags, sizeof(flags), 1, file) != 1) { - perror("fread kpageflags"); - _exit(1); - } - - fclose(file); - return flags; -} - #define VMFLAGS "VmFlags:" static bool is_vmflag_set(unsigned long addr, const char *vmflag) @@ -159,19 +106,13 @@ out: #define RSS "Rss:" #define LOCKED "lo" -static bool is_vma_lock_on_fault(unsigned long addr) +static unsigned long get_value_for_name(unsigned long addr, const char *name) { - bool ret = false; - bool locked; - FILE *smaps = NULL; - unsigned long vma_size, vma_rss; char *line = NULL; - char *value; size_t size = 0; - - locked = is_vmflag_set(addr, LOCKED); - if (!locked) - goto out; + char *value_ptr; + FILE *smaps = NULL; + unsigned long value = -1UL; smaps = seek_to_smaps_entry(addr); if (!smaps) { @@ -180,112 +121,70 @@ static bool is_vma_lock_on_fault(unsigne } while (getline(&line, &size, smaps) > 0) { - if (!strstr(line, SIZE)) { + if (!strstr(line, name)) { free(line); line = NULL; size = 0; continue; } - value = line + strlen(SIZE); - if (sscanf(value, "%lu kB", &vma_size) < 1) { + value_ptr = line + strlen(name); + if (sscanf(value_ptr, "%lu kB", &value) < 1) { printf("Unable to parse smaps entry for Size\n"); goto out; } break; } - while (getline(&line, &size, smaps) > 0) { - if (!strstr(line, RSS)) { - free(line); - line = NULL; - size = 0; - continue; - } - - value = line + strlen(RSS); - if (sscanf(value, "%lu kB", &vma_rss) < 1) { - printf("Unable to parse smaps entry for Rss\n"); - goto out; - } - break; - } - - ret = locked && (vma_rss < vma_size); out: - free(line); if (smaps) fclose(smaps); - return ret; + free(line); + return value; } -#define PRESENT_BIT 0x8000000000000000ULL -#define PFN_MASK 0x007FFFFFFFFFFFFFULL -#define UNEVICTABLE_BIT (1UL << 18) - -static int lock_check(char *map) +static bool is_vma_lock_on_fault(unsigned long addr) { - unsigned long page_size = getpagesize(); - uint64_t page1_flags, page2_flags; + bool locked; + unsigned long vma_size, vma_rss; + + locked = is_vmflag_set(addr, LOCKED); + if (!locked) + return false; - page1_flags = get_pageflags((unsigned long)map); - page2_flags = get_pageflags((unsigned long)map + page_size); + vma_size = get_value_for_name(addr, SIZE); + vma_rss = get_value_for_name(addr, RSS); - /* Both pages should be present */ - if (((page1_flags & PRESENT_BIT) == 0) || - ((page2_flags & PRESENT_BIT) == 0)) { - printf("Failed to make both pages present\n"); - return 1; - } + /* only one page is faulted in */ + return (vma_rss < vma_size); +} - page1_flags = get_kpageflags(page1_flags & PFN_MASK); - page2_flags = get_kpageflags(page2_flags & PFN_MASK); +#define PRESENT_BIT 0x8000000000000000ULL +#define PFN_MASK 0x007FFFFFFFFFFFFFULL +#define UNEVICTABLE_BIT (1UL << 18) - /* Both pages should be unevictable */ - if (((page1_flags & UNEVICTABLE_BIT) == 0) || - ((page2_flags & UNEVICTABLE_BIT) == 0)) { - printf("Failed to make both pages unevictable\n"); - return 1; - } +static int lock_check(unsigned long addr) +{ + bool locked; + unsigned long vma_size, vma_rss; - if (!is_vmflag_set((unsigned long)map, LOCKED)) { - printf("VMA flag %s is missing on page 1\n", LOCKED); - return 1; - } + locked = is_vmflag_set(addr, LOCKED); + if (!locked) + return false; - if (!is_vmflag_set((unsigned long)map + page_size, LOCKED)) { - printf("VMA flag %s is missing on page 2\n", LOCKED); - return 1; - } + vma_size = get_value_for_name(addr, SIZE); + vma_rss = get_value_for_name(addr, RSS); - return 0; + return (vma_rss == vma_size); } static int unlock_lock_check(char *map) { - unsigned long page_size = getpagesize(); - uint64_t page1_flags, page2_flags; - - page1_flags = get_pageflags((unsigned long)map); - page2_flags = get_pageflags((unsigned long)map + page_size); - page1_flags = get_kpageflags(page1_flags & PFN_MASK); - page2_flags = get_kpageflags(page2_flags & PFN_MASK); - - if ((page1_flags & UNEVICTABLE_BIT) || (page2_flags & UNEVICTABLE_BIT)) { - printf("A page is still marked unevictable after unlock\n"); - return 1; - } - if (is_vmflag_set((unsigned long)map, LOCKED)) { printf("VMA flag %s is present on page 1 after unlock\n", LOCKED); return 1; } - if (is_vmflag_set((unsigned long)map + page_size, LOCKED)) { - printf("VMA flag %s is present on page 2 after unlock\n", LOCKED); - return 1; - } - return 0; } @@ -311,7 +210,7 @@ static int test_mlock_lock() goto unmap; } - if (lock_check(map)) + if (!lock_check((unsigned long)map)) goto unmap; /* Now unlock and recheck attributes */ @@ -330,64 +229,18 @@ out: static int onfault_check(char *map) { - unsigned long page_size = getpagesize(); - uint64_t page1_flags, page2_flags; - - page1_flags = get_pageflags((unsigned long)map); - page2_flags = get_pageflags((unsigned long)map + page_size); - - /* Neither page should be present */ - if ((page1_flags & PRESENT_BIT) || (page2_flags & PRESENT_BIT)) { - printf("Pages were made present by MLOCK_ONFAULT\n"); - return 1; - } - *map = 'a'; - page1_flags = get_pageflags((unsigned long)map); - page2_flags = get_pageflags((unsigned long)map + page_size); - - /* Only page 1 should be present */ - if ((page1_flags & PRESENT_BIT) == 0) { - printf("Page 1 is not present after fault\n"); - return 1; - } else if (page2_flags & PRESENT_BIT) { - printf("Page 2 was made present\n"); - return 1; - } - - page1_flags = get_kpageflags(page1_flags & PFN_MASK); - - /* Page 1 should be unevictable */ - if ((page1_flags & UNEVICTABLE_BIT) == 0) { - printf("Failed to make faulted page unevictable\n"); - return 1; - } - if (!is_vma_lock_on_fault((unsigned long)map)) { printf("VMA is not marked for lock on fault\n"); return 1; } - if (!is_vma_lock_on_fault((unsigned long)map + page_size)) { - printf("VMA is not marked for lock on fault\n"); - return 1; - } - return 0; } static int unlock_onfault_check(char *map) { unsigned long page_size = getpagesize(); - uint64_t page1_flags; - - page1_flags = get_pageflags((unsigned long)map); - page1_flags = get_kpageflags(page1_flags & PFN_MASK); - - if (page1_flags & UNEVICTABLE_BIT) { - printf("Page 1 is still marked unevictable after unlock\n"); - return 1; - } if (is_vma_lock_on_fault((unsigned long)map) || is_vma_lock_on_fault((unsigned long)map + page_size)) { @@ -445,7 +298,6 @@ static int test_lock_onfault_of_present( char *map; int ret = 1; unsigned long page_size = getpagesize(); - uint64_t page1_flags, page2_flags; map = mmap(NULL, 2 * page_size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); @@ -465,17 +317,6 @@ static int test_lock_onfault_of_present( goto unmap; } - page1_flags = get_pageflags((unsigned long)map); - page2_flags = get_pageflags((unsigned long)map + page_size); - page1_flags = get_kpageflags(page1_flags & PFN_MASK); - page2_flags = get_kpageflags(page2_flags & PFN_MASK); - - /* Page 1 should be unevictable */ - if ((page1_flags & UNEVICTABLE_BIT) == 0) { - printf("Failed to make present page unevictable\n"); - goto unmap; - } - if (!is_vma_lock_on_fault((unsigned long)map) || !is_vma_lock_on_fault((unsigned long)map + page_size)) { printf("VMA with present pages is not marked lock on fault\n"); @@ -507,7 +348,7 @@ static int test_munlockall() goto out; } - if (lock_check(map)) + if (!lock_check((unsigned long)map)) goto unmap; if (munlockall()) { @@ -549,7 +390,7 @@ static int test_munlockall() goto out; } - if (lock_check(map)) + if (!lock_check((unsigned long)map)) goto unmap; if (munlockall()) { _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 128/155] mm,compaction,cma: add alloc_contig flag to compact_control 2020-04-02 4:01 incoming Andrew Morton ` (126 preceding siblings ...) 2020-04-02 4:10 ` [patch 127/155] selftests: vm: drop dependencies on page flags from mlock2 tests Andrew Morton @ 2020-04-02 4:10 ` Andrew Morton 2020-04-02 4:10 ` [patch 129/155] mm,thp,compaction,cma: allow THP migration for CMA allocations Andrew Morton ` (26 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:10 UTC (permalink / raw) To: aarcange, akpm, js1304, linux-mm, mgorman, mhocko, mm-commits, riel, rientjes, torvalds, vbabka, ziy From: Rik van Riel <riel@surriel.com> Subject: mm,compaction,cma: add alloc_contig flag to compact_control Patch series "fix THP migration for CMA allocations", v2. Transparent huge pages are allocated with __GFP_MOVABLE, and can end up in CMA memory blocks. Transparent huge pages also have most of the infrastructure in place to allow migration. However, a few pieces were missing, causing THP migration to fail when attempting to use CMA to allocate 1GB hugepages. With these patches in place, THP migration from CMA blocks seems to work, both for anonymous THPs and for tmpfs/shmem THPs. This patch (of 2): Add information to struct compact_control to indicate that the allocator would really like to clear out this specific part of memory, used by for example CMA. Link: http://lkml.kernel.org/r/20200227213238.1298752-1-riel@surriel.com Signed-off-by: Rik van Riel <riel@surriel.com> Reviewed-by: Vlastimil Babka <vbabka@suse.cz> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: David Rientjes <rientjes@google.com> Cc: Mel Gorman <mgorman@techsingularity.net> Cc: Michal Hocko <mhocko@kernel.org> Cc: Zi Yan <ziy@nvidia.com> Cc: Joonsoo Kim <js1304@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/internal.h | 1 + mm/page_alloc.c | 1 + 2 files changed, 2 insertions(+) --- a/mm/internal.h~mmcompactioncma-add-alloc_contig-flag-to-compact_control +++ a/mm/internal.h @@ -229,6 +229,7 @@ struct compact_control { bool whole_zone; /* Whole zone should/has been scanned */ bool contended; /* Signal lock or sched contention */ bool rescan; /* Rescanning the same pageblock */ + bool alloc_contig; /* alloc_contig_range allocation */ }; /* --- a/mm/page_alloc.c~mmcompactioncma-add-alloc_contig-flag-to-compact_control +++ a/mm/page_alloc.c @@ -8400,6 +8400,7 @@ int alloc_contig_range(unsigned long sta .ignore_skip_hint = true, .no_set_skip_hint = true, .gfp_mask = current_gfp_context(gfp_mask), + .alloc_contig = true, }; INIT_LIST_HEAD(&cc.migratepages); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 129/155] mm,thp,compaction,cma: allow THP migration for CMA allocations 2020-04-02 4:01 incoming Andrew Morton ` (127 preceding siblings ...) 2020-04-02 4:10 ` [patch 128/155] mm,compaction,cma: add alloc_contig flag to compact_control Andrew Morton @ 2020-04-02 4:10 ` Andrew Morton 2020-04-02 4:10 ` [patch 130/155] mm, compaction: fully assume capture is not NULL in compact_zone_order() Andrew Morton ` (25 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:10 UTC (permalink / raw) To: aarcange, akpm, js1304, linux-mm, mgorman, mhocko, mike.kravetz, mm-commits, riel, rientjes, torvalds, vbabka, ziy From: Rik van Riel <riel@surriel.com> Subject: mm,thp,compaction,cma: allow THP migration for CMA allocations The code to implement THP migrations already exists, and the code for CMA to clear out a region of memory already exists. Only a few small tweaks are needed to allow CMA to move THP memory when attempting an allocation from alloc_contig_range. With these changes, migrating THPs from a CMA area works when allocating a 1GB hugepage from CMA memory. [riel@surriel.com: fix hugetlbfs pages per Mike, cleanup per Vlastimil] Link: http://lkml.kernel.org/r/20200228104700.0af2f18d@imladris.surriel.com Link: http://lkml.kernel.org/r/20200227213238.1298752-2-riel@surriel.com Signed-off-by: Rik van Riel <riel@surriel.com> Reviewed-by: Zi Yan <ziy@nvidia.com> Reviewed-by: Vlastimil Babka <vbabka@suse.cz> Cc: Michal Hocko <mhocko@kernel.org> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: Mel Gorman <mgorman@techsingularity.net> Cc: David Rientjes <rientjes@google.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Joonsoo Kim <js1304@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/compaction.c | 22 +++++++++++++--------- mm/page_alloc.c | 9 +++++++-- 2 files changed, 20 insertions(+), 11 deletions(-) --- a/mm/compaction.c~mmthpcompactioncma-allow-thp-migration-for-cma-allocations +++ a/mm/compaction.c @@ -894,12 +894,13 @@ isolate_migratepages_block(struct compac /* * Regardless of being on LRU, compound pages such as THP and - * hugetlbfs are not to be compacted. We can potentially save - * a lot of iterations if we skip them at once. The check is - * racy, but we can consider only valid values and the only - * danger is skipping too much. + * hugetlbfs are not to be compacted unless we are attempting + * an allocation much larger than the huge page size (eg CMA). + * We can potentially save a lot of iterations if we skip them + * at once. The check is racy, but we can consider only valid + * values and the only danger is skipping too much. */ - if (PageCompound(page)) { + if (PageCompound(page) && !cc->alloc_contig) { const unsigned int order = compound_order(page); if (likely(order < MAX_ORDER)) @@ -969,7 +970,7 @@ isolate_migratepages_block(struct compac * and it's on LRU. It can only be a THP so the order * is safe to read and it's 0 for tail pages. */ - if (unlikely(PageCompound(page))) { + if (unlikely(PageCompound(page) && !cc->alloc_contig)) { low_pfn += compound_nr(page) - 1; goto isolate_fail; } @@ -981,12 +982,15 @@ isolate_migratepages_block(struct compac if (__isolate_lru_page(page, isolate_mode) != 0) goto isolate_fail; - VM_BUG_ON_PAGE(PageCompound(page), page); + /* The whole page is taken off the LRU; skip the tail pages. */ + if (PageCompound(page)) + low_pfn += compound_nr(page) - 1; /* Successfully isolated */ del_page_from_lru_list(page, lruvec, page_lru(page)); - inc_node_page_state(page, - NR_ISOLATED_ANON + page_is_file_cache(page)); + mod_node_page_state(page_pgdat(page), + NR_ISOLATED_ANON + page_is_file_cache(page), + hpage_nr_pages(page)); isolate_success: list_add(&page->lru, &cc->migratepages); --- a/mm/page_alloc.c~mmthpcompactioncma-allow-thp-migration-for-cma-allocations +++ a/mm/page_alloc.c @@ -8251,15 +8251,20 @@ struct page *has_unmovable_pages(struct /* * Hugepages are not in LRU lists, but they're movable. + * THPs are on the LRU, but need to be counted as #small pages. * We need not scan over tail pages because we don't * handle each tail page individually in migration. */ - if (PageHuge(page)) { + if (PageHuge(page) || PageTransCompound(page)) { struct page *head = compound_head(page); unsigned int skip_pages; - if (!hugepage_migration_supported(page_hstate(head))) + if (PageHuge(page)) { + if (!hugepage_migration_supported(page_hstate(head))) + return page; + } else if (!PageLRU(head) && !__PageMovable(head)) { return page; + } skip_pages = compound_nr(head) - (page - head); iter += skip_pages - 1; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 130/155] mm, compaction: fully assume capture is not NULL in compact_zone_order() 2020-04-02 4:01 incoming Andrew Morton ` (128 preceding siblings ...) 2020-04-02 4:10 ` [patch 129/155] mm,thp,compaction,cma: allow THP migration for CMA allocations Andrew Morton @ 2020-04-02 4:10 ` Andrew Morton 2020-04-02 4:10 ` [patch 131/155] mm/compaction: really limit compact_unevictable_allowed to 0 and 1 Andrew Morton ` (24 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:10 UTC (permalink / raw) To: akpm, dan.carpenter, linux-mm, mgorman, mm-commits, torvalds, vbabka From: Vlastimil Babka <vbabka@suse.cz> Subject: mm, compaction: fully assume capture is not NULL in compact_zone_order() Dan reports: The patch 5e1f0f098b46: "mm, compaction: capture a page under direct compaction" from Mar 5, 2019, leads to the following Smatch complaint: mm/compaction.c:2321 compact_zone_order() error: we previously assumed 'capture' could be null (see line 2313) mm/compaction.c 2288 static enum compact_result compact_zone_order(struct zone *zone, int order, 2289 gfp_t gfp_mask, enum compact_priority prio, 2290 unsigned int alloc_flags, int classzone_idx, 2291 struct page **capture) ^^^^^^^ 2313 if (capture) ^^^^^^^ Check for NULL 2314 current->capture_control = &capc; 2315 2316 ret = compact_zone(&cc, &capc); 2317 2318 VM_BUG_ON(!list_empty(&cc.freepages)); 2319 VM_BUG_ON(!list_empty(&cc.migratepages)); 2320 2321 *capture = capc.page; ^^^^^^^^ Unchecked dereference. 2322 current->capture_control = NULL; 2323 In practice this is not an issue, as the only caller path passes non-NULL capture: __alloc_pages_direct_compact() struct page *page = NULL; try_to_compact_pages(capture = &page); compact_zone_order(capture = capture); So let's remove the unnecessary check, which should also make Smatch happy. Link: http://lkml.kernel.org/r/18b0df3c-0589-d96c-23fa-040798fee187@suse.cz Fixes: 5e1f0f098b46 ("mm, compaction: capture a page under direct compaction") Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Suggested-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Vlastimil Babka <vbabka@suse.cz> Acked-by: Mel Gorman <mgorman@techsingularity.net> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/compaction.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- a/mm/compaction.c~mm-compaction-fully-assume-capture-is-not-null-in-compact_zone_order +++ a/mm/compaction.c @@ -2314,8 +2314,7 @@ static enum compact_result compact_zone_ .page = NULL, }; - if (capture) - current->capture_control = &capc; + current->capture_control = &capc; ret = compact_zone(&cc, &capc); @@ -2337,6 +2336,7 @@ int sysctl_extfrag_threshold = 500; * @alloc_flags: The allocation flags of the current allocation * @ac: The context of current allocation * @prio: Determines how hard direct compaction should try to succeed + * @capture: Pointer to free page created by compaction will be stored here * * This is the main entry point for direct page compaction. */ _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 131/155] mm/compaction: really limit compact_unevictable_allowed to 0 and 1 2020-04-02 4:01 incoming Andrew Morton ` (129 preceding siblings ...) 2020-04-02 4:10 ` [patch 130/155] mm, compaction: fully assume capture is not NULL in compact_zone_order() Andrew Morton @ 2020-04-02 4:10 ` Andrew Morton 2020-04-02 4:10 ` [patch 132/155] mm/compaction: Disable compact_unevictable_allowed on RT Andrew Morton ` (23 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:10 UTC (permalink / raw) To: akpm, bigeasy, keescook, linux-mm, mcgrof, mgorman, mm-commits, tglx, torvalds, vbabka, yzaikin From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Subject: mm/compaction: really limit compact_unevictable_allowed to 0 and 1 The proc file `compact_unevictable_allowed' should allow 0 and 1 only, the `extra*' attribues have been set properly but without proc_dointvec_minmax() as the `proc_handler' the limit will not be enforced. Use proc_dointvec_minmax() as the `proc_handler' to enfoce the valid specified range. Link: http://lkml.kernel.org/r/20200303202054.gsosv7fsx2ma3cic@linutronix.de Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Acked-by: Vlastimil Babka <vbabka@suse.cz> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Luis Chamberlain <mcgrof@kernel.org> Cc: Kees Cook <keescook@chromium.org> Cc: Iurii Zaikin <yzaikin@google.com> Cc: Mel Gorman <mgorman@techsingularity.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- kernel/sysctl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/kernel/sysctl.c~really-limit-compact_unevictable_allowed-to-0-and-1 +++ a/kernel/sysctl.c @@ -1467,7 +1467,7 @@ static struct ctl_table vm_table[] = { .data = &sysctl_compact_unevictable_allowed, .maxlen = sizeof(int), .mode = 0644, - .proc_handler = proc_dointvec, + .proc_handler = proc_dointvec_minmax, .extra1 = SYSCTL_ZERO, .extra2 = SYSCTL_ONE, }, _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 132/155] mm/compaction: Disable compact_unevictable_allowed on RT 2020-04-02 4:01 incoming Andrew Morton ` (130 preceding siblings ...) 2020-04-02 4:10 ` [patch 131/155] mm/compaction: really limit compact_unevictable_allowed to 0 and 1 Andrew Morton @ 2020-04-02 4:10 ` Andrew Morton 2020-04-02 4:10 ` [patch 133/155] mm/compaction.c: clean code by removing unnecessary assignment Andrew Morton ` (22 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:10 UTC (permalink / raw) To: akpm, bigeasy, keescook, linux-mm, mcgrof, mgorman, mm-commits, tglx, torvalds, vbabka, yzaikin From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Subject: mm/compaction: Disable compact_unevictable_allowed on RT Since commit 5bbe3547aa3ba ("mm: allow compaction of unevictable pages") it is allowed to examine mlocked pages and compact them by default. On -RT even minor pagefaults are problematic because it may take a few 100us to resolve them and until then the task is blocked. Make compact_unevictable_allowed = 0 default and issue a warning on RT if it is changed. [bigeasy@linutronix.de: v5] Link: https://lore.kernel.org/linux-mm/20190710144138.qyn4tuttdq6h7kqx@linutronix.de/ Link: http://lkml.kernel.org/r/20200319165536.ovi75tsr2seared4@linutronix.de Link: https://lore.kernel.org/linux-mm/20190710144138.qyn4tuttdq6h7kqx@linutronix.de/ Link: http://lkml.kernel.org/r/20200303202225.nhqc3v5gwlb7x6et@linutronix.de Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Acked-by: Mel Gorman <mgorman@techsingularity.net> Acked-by: Vlastimil Babka <vbabka@suse.cz> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Luis Chamberlain <mcgrof@kernel.org> Cc: Kees Cook <keescook@chromium.org> Cc: Iurii Zaikin <yzaikin@google.com> Cc: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- Documentation/admin-guide/sysctl/vm.rst | 3 ++ kernel/sysctl.c | 29 +++++++++++++++++++++- mm/compaction.c | 4 +++ 3 files changed, 35 insertions(+), 1 deletion(-) --- a/Documentation/admin-guide/sysctl/vm.rst~mm-compaction-disable-compact_unevictable_allowed-on-rt +++ a/Documentation/admin-guide/sysctl/vm.rst @@ -128,6 +128,9 @@ allowed to examine the unevictable lru ( This should be used on systems where stalls for minor page faults are an acceptable trade for large contiguous free memory. Set to 0 to prevent compaction from moving pages that are unevictable. Default value is 1. +On CONFIG_PREEMPT_RT the default value is 0 in order to avoid a page fault, due +to compaction, which would block the task from becomming active until the fault +is resolved. dirty_background_bytes --- a/kernel/sysctl.c~mm-compaction-disable-compact_unevictable_allowed-on-rt +++ a/kernel/sysctl.c @@ -212,6 +212,11 @@ static int proc_do_cad_pid(struct ctl_ta void __user *buffer, size_t *lenp, loff_t *ppos); static int proc_taint(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos); +#ifdef CONFIG_COMPACTION +static int proc_dointvec_minmax_warn_RT_change(struct ctl_table *table, + int write, void __user *buffer, + size_t *lenp, loff_t *ppos); +#endif #endif #ifdef CONFIG_PRINTK @@ -1467,7 +1472,7 @@ static struct ctl_table vm_table[] = { .data = &sysctl_compact_unevictable_allowed, .maxlen = sizeof(int), .mode = 0644, - .proc_handler = proc_dointvec_minmax, + .proc_handler = proc_dointvec_minmax_warn_RT_change, .extra1 = SYSCTL_ZERO, .extra2 = SYSCTL_ONE, }, @@ -2555,6 +2560,28 @@ int proc_dointvec(struct ctl_table *tabl return do_proc_dointvec(table, write, buffer, lenp, ppos, NULL, NULL); } +#ifdef CONFIG_COMPACTION +static int proc_dointvec_minmax_warn_RT_change(struct ctl_table *table, + int write, void __user *buffer, + size_t *lenp, loff_t *ppos) +{ + int ret, old; + + if (!IS_ENABLED(CONFIG_PREEMPT_RT) || !write) + return proc_dointvec_minmax(table, write, buffer, lenp, ppos); + + old = *(int *)table->data; + ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos); + if (ret) + return ret; + if (old != *(int *)table->data) + pr_warn_once("sysctl attribute %s changed by %s[%d]\n", + table->procname, current->comm, + task_pid_nr(current)); + return ret; +} +#endif + /** * proc_douintvec - read a vector of unsigned integers * @table: the sysctl table --- a/mm/compaction.c~mm-compaction-disable-compact_unevictable_allowed-on-rt +++ a/mm/compaction.c @@ -1594,7 +1594,11 @@ typedef enum { * Allow userspace to control policy on scanning the unevictable LRU for * compactable pages. */ +#ifdef CONFIG_PREEMPT_RT +int sysctl_compact_unevictable_allowed __read_mostly = 0; +#else int sysctl_compact_unevictable_allowed __read_mostly = 1; +#endif static inline void update_fast_start_pfn(struct compact_control *cc, unsigned long pfn) _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 133/155] mm/compaction.c: clean code by removing unnecessary assignment 2020-04-02 4:01 incoming Andrew Morton ` (131 preceding siblings ...) 2020-04-02 4:10 ` [patch 132/155] mm/compaction: Disable compact_unevictable_allowed on RT Andrew Morton @ 2020-04-02 4:10 ` Andrew Morton 2020-04-02 4:10 ` [patch 134/155] mm/mempolicy: support MPOL_MF_STRICT for huge page mapping Andrew Morton ` (21 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:10 UTC (permalink / raw) To: akpm, linux-mm, mateusznosek0, mgorman, mm-commits, torvalds, vbabka From: Mateusz Nosek <mateusznosek0@gmail.com> Subject: mm/compaction.c: clean code by removing unnecessary assignment Previously 0 was assigned to variable 'last_migrated_pfn'. But the variable is not read after that, so the assignment can be removed. Link: http://lkml.kernel.org/r/20200318174509.15021-1-mateusznosek0@gmail.com Signed-off-by: Mateusz Nosek <mateusznosek0@gmail.com> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Acked-by: Vlastimil Babka <vbabka@suse.cz> Cc: Mel Gorman <mgorman@techsingularity.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/compaction.c | 1 - 1 file changed, 1 deletion(-) --- a/mm/compaction.c~mm-compactionc-clean-code-by-removing-unnecessary-assignment +++ a/mm/compaction.c @@ -2182,7 +2182,6 @@ compact_zone(struct compact_control *cc, ret = COMPACT_CONTENDED; putback_movable_pages(&cc->migratepages); cc->nr_migratepages = 0; - last_migrated_pfn = 0; goto out; case ISOLATE_NONE: if (update_cached) { _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 134/155] mm/mempolicy: support MPOL_MF_STRICT for huge page mapping 2020-04-02 4:01 incoming Andrew Morton ` (132 preceding siblings ...) 2020-04-02 4:10 ` [patch 133/155] mm/compaction.c: clean code by removing unnecessary assignment Andrew Morton @ 2020-04-02 4:10 ` Andrew Morton 2020-04-02 4:10 ` [patch 135/155] mm/mempolicy: check hugepage migration is supported by arch in vma_migratable() Andrew Morton ` (20 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:10 UTC (permalink / raw) To: akpm, linux-man, linux-mm, lixinhai.lxh, mhocko, mike.kravetz, mm-commits, naoya.horiguchi, torvalds From: Li Xinhai <lixinhai.lxh@gmail.com> Subject: mm/mempolicy: support MPOL_MF_STRICT for huge page mapping MPOL_MF_STRICT is used in mbind() for purposes: (1) MPOL_MF_STRICT is set alone without MPOL_MF_MOVE or MPOL_MF_MOVE_ALL, to check if there is misplaced page and return -EIO; (2) MPOL_MF_STRICT is set with MPOL_MF_MOVE or MPOL_MF_MOVE_ALL, to check if there is misplaced page which is failed to isolate, or page is success on isolate but failed to move, and return -EIO. For non hugepage mapping, (1) and (2) are implemented as expectation. For hugepage mapping, (1) is not implemented. And in (2), the part about failed to isolate and report -EIO is not implemented. This patch implements the missed parts for hugepage mapping. Benefits with it applied: - User space can apply same code logic to handle mbind() on hugepage and non hugepage mapping; - Reliably using MPOL_MF_STRICT alone to check whether there is misplaced page or not when bind policy on address range, especially for address range which contains both hugepage and non hugepage mapping. Analysis of potential impact to existing users: - If MPOL_MF_STRICT alone was previously used, hugetlb pages not following the memory policy would not cause an EIO error. After this change, hugetlb pages are treated like all other pages. If MPOL_MF_STRICT alone is used and hugetlb pages do not follow memory policy an EIO error will be returned. - For users who using MPOL_MF_STRICT with MPOL_MF_MOVE or MPOL_MF_MOVE_ALL, the semantic about some pages could not be moved will not be changed by this patch, because failed to isolate and failed to move have same effects to users, so their existing code will not be impacted. In mbind man page, the note about 'MPOL_MF_STRICT is ignored on huge page mappings' can be removed after this patch is applied. Mike: : The current behavior with MPOL_MF_STRICT and hugetlb pages is inconsistent : and does not match documentation (as described above). The special : behavior for hugetlb pages ideally should have been removed when hugetlb : page migration was introduced. It is unlikely that anyone relies on : today's inconsistent behavior, and removing one more case of special : handling for hugetlb pages is a good thing. Link: http://lkml.kernel.org/r/1581559627-6206-1-git-send-email-lixinhai.lxh@gmail.com Signed-off-by: Li Xinhai <lixinhai.lxh@gmail.com> Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com> Reviewed-by: Naoya Horiguchi <naoya.horiguchi@nec.com> Cc: Michal Hocko <mhocko@suse.com> Cc: linux-man <linux-man@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/mempolicy.c | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) --- a/mm/mempolicy.c~mm-mempolicy-support-mpol_mf_strict-for-huge-page-mapping +++ a/mm/mempolicy.c @@ -557,9 +557,10 @@ static int queue_pages_hugetlb(pte_t *pt unsigned long addr, unsigned long end, struct mm_walk *walk) { + int ret = 0; #ifdef CONFIG_HUGETLB_PAGE struct queue_pages *qp = walk->private; - unsigned long flags = qp->flags; + unsigned long flags = (qp->flags & MPOL_MF_VALID); struct page *page; spinlock_t *ptl; pte_t entry; @@ -571,16 +572,44 @@ static int queue_pages_hugetlb(pte_t *pt page = pte_page(entry); if (!queue_pages_required(page, qp)) goto unlock; + + if (flags == MPOL_MF_STRICT) { + /* + * STRICT alone means only detecting misplaced page and no + * need to further check other vma. + */ + ret = -EIO; + goto unlock; + } + + if (!vma_migratable(walk->vma)) { + /* + * Must be STRICT with MOVE*, otherwise .test_walk() have + * stopped walking current vma. + * Detecting misplaced page but allow migrating pages which + * have been queued. + */ + ret = 1; + goto unlock; + } + /* With MPOL_MF_MOVE, we migrate only unshared hugepage. */ if (flags & (MPOL_MF_MOVE_ALL) || - (flags & MPOL_MF_MOVE && page_mapcount(page) == 1)) - isolate_huge_page(page, qp->pagelist); + (flags & MPOL_MF_MOVE && page_mapcount(page) == 1)) { + if (!isolate_huge_page(page, qp->pagelist) && + (flags & MPOL_MF_STRICT)) + /* + * Failed to isolate page but allow migrating pages + * which have been queued. + */ + ret = 1; + } unlock: spin_unlock(ptl); #else BUG(); #endif - return 0; + return ret; } #ifdef CONFIG_NUMA_BALANCING _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 135/155] mm/mempolicy: check hugepage migration is supported by arch in vma_migratable() 2020-04-02 4:01 incoming Andrew Morton ` (133 preceding siblings ...) 2020-04-02 4:10 ` [patch 134/155] mm/mempolicy: support MPOL_MF_STRICT for huge page mapping Andrew Morton @ 2020-04-02 4:10 ` Andrew Morton 2020-04-02 4:10 ` [patch 136/155] mm: mempolicy: use VM_BUG_ON_VMA in queue_pages_test_walk() Andrew Morton ` (19 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:10 UTC (permalink / raw) To: akpm, anshuman.khandual, linux-mm, lixinhai.lxh, mhocko, mike.kravetz, mm-commits, n-horiguchi, torvalds From: Li Xinhai <lixinhai.lxh@gmail.com> Subject: mm/mempolicy: check hugepage migration is supported by arch in vma_migratable() vma_migratable() is called to check if pages in vma can be migrated before go ahead to further actions. Currently it is used in below code path: - task_numa_work - mbind - move_pages For hugetlb mapping, whether vma is migratable or not is determined by: - CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION - arch_hugetlb_migration_supported Issue: current code only checks for CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION alone, and no code should use it directly. (note that current code in vma_migratable don't cause failure or bug because unmap_and_move_huge_page() will catch unsupported hugepage and handle it properly) This patch checks the two factors by hugepage_migration_supported for impoving code logic and robustness. It will enable early bail out of hugepage migration procedure, but because currently all architecture supporting hugepage migration is able to support all page size, we would not see performance gain with this patch applied. vma_migratable() is moved to mm/mempolicy.c, because of the circular reference of mempolicy.h and hugetlb.h cause defining it as inline not feasible. Link: http://lkml.kernel.org/r/1579786179-30633-1-git-send-email-lixinhai.lxh@gmail.com Signed-off-by: Li Xinhai <lixinhai.lxh@gmail.com> Acked-by: Michal Hocko <mhocko@suse.com> Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com> Cc: Anshuman Khandual <anshuman.khandual@arm.com> Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/mempolicy.h | 29 +---------------------------- mm/mempolicy.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 28 deletions(-) --- a/include/linux/mempolicy.h~mm-mempolicy-checking-hugepage-migration-is-supported-by-arch-in-vma_migratable +++ a/include/linux/mempolicy.h @@ -173,34 +173,7 @@ extern int mpol_parse_str(char *str, str extern void mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol); /* Check if a vma is migratable */ -static inline bool vma_migratable(struct vm_area_struct *vma) -{ - if (vma->vm_flags & (VM_IO | VM_PFNMAP)) - return false; - - /* - * DAX device mappings require predictable access latency, so avoid - * incurring periodic faults. - */ - if (vma_is_dax(vma)) - return false; - -#ifndef CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION - if (vma->vm_flags & VM_HUGETLB) - return false; -#endif - - /* - * Migration allocates pages in the highest zone. If we cannot - * do so then migration (at least from node to node) is not - * possible. - */ - if (vma->vm_file && - gfp_zone(mapping_gfp_mask(vma->vm_file->f_mapping)) - < policy_zone) - return false; - return true; -} +extern bool vma_migratable(struct vm_area_struct *vma); extern int mpol_misplaced(struct page *, struct vm_area_struct *, unsigned long); extern void mpol_put_task_policy(struct task_struct *); --- a/mm/mempolicy.c~mm-mempolicy-checking-hugepage-migration-is-supported-by-arch-in-vma_migratable +++ a/mm/mempolicy.c @@ -1743,6 +1743,34 @@ COMPAT_SYSCALL_DEFINE4(migrate_pages, co #endif /* CONFIG_COMPAT */ +bool vma_migratable(struct vm_area_struct *vma) +{ + if (vma->vm_flags & (VM_IO | VM_PFNMAP)) + return false; + + /* + * DAX device mappings require predictable access latency, so avoid + * incurring periodic faults. + */ + if (vma_is_dax(vma)) + return false; + + if (is_vm_hugetlb_page(vma) && + !hugepage_migration_supported(hstate_vma(vma))) + return false; + + /* + * Migration allocates pages in the highest zone. If we cannot + * do so then migration (at least from node to node) is not + * possible. + */ + if (vma->vm_file && + gfp_zone(mapping_gfp_mask(vma->vm_file->f_mapping)) + < policy_zone) + return false; + return true; +} + struct mempolicy *__get_vma_policy(struct vm_area_struct *vma, unsigned long addr) { _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 136/155] mm: mempolicy: use VM_BUG_ON_VMA in queue_pages_test_walk() 2020-04-02 4:01 incoming Andrew Morton ` (134 preceding siblings ...) 2020-04-02 4:10 ` [patch 135/155] mm/mempolicy: check hugepage migration is supported by arch in vma_migratable() Andrew Morton @ 2020-04-02 4:10 ` Andrew Morton 2020-04-02 4:10 ` [patch 137/155] mm: mempolicy: require at least one nodeid for MPOL_PREFERRED Andrew Morton ` (18 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:10 UTC (permalink / raw) To: akpm, cai, linux-mm, lixinhai.lxh, mm-commits, torvalds, yang.shi From: Yang Shi <yang.shi@linux.alibaba.com> Subject: mm: mempolicy: use VM_BUG_ON_VMA in queue_pages_test_walk() The VM_BUG_ON() is already used by queue_pages_test_walk(), it sounds better to dump more debug information by using VM_BUG_ON_VMA() to help debugging. Link: http://lkml.kernel.org/r/1579068565-110432-1-git-send-email-yang.shi@linux.alibaba.com Signed-off-by: Yang Shi <yang.shi@linux.alibaba.com> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Cc: "Li Xinhai" <lixinhai.lxh@gmail.com> Cc: Qian Cai <cai@lca.pw> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/mempolicy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/mm/mempolicy.c~mm-mempolicy-use-vm_bug_on_vma-in-queue_pages_test_walk +++ a/mm/mempolicy.c @@ -650,7 +650,7 @@ static int queue_pages_test_walk(unsigne unsigned long flags = qp->flags; /* range check first */ - VM_BUG_ON((vma->vm_start > start) || (vma->vm_end < end)); + VM_BUG_ON_VMA((vma->vm_start > start) || (vma->vm_end < end), vma); if (!qp->first) { qp->first = vma; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 137/155] mm: mempolicy: require at least one nodeid for MPOL_PREFERRED 2020-04-02 4:01 incoming Andrew Morton ` (135 preceding siblings ...) 2020-04-02 4:10 ` [patch 136/155] mm: mempolicy: use VM_BUG_ON_VMA in queue_pages_test_walk() Andrew Morton @ 2020-04-02 4:10 ` Andrew Morton 2020-04-02 4:11 ` [patch 138/155] mm/memblock.c: remove redundant assignment to variable max_addr Andrew Morton ` (17 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:10 UTC (permalink / raw) To: 3ntr0py1337, akpm, lee.schermerhorn, linux-mm, mm-commits, rdunlap, torvalds From: Randy Dunlap <rdunlap@infradead.org> Subject: mm: mempolicy: require at least one nodeid for MPOL_PREFERRED Using an empty (malformed) nodelist that is not caught during mount option parsing leads to a stack-out-of-bounds access. The option string that was used was: "mpol=prefer:,". However, MPOL_PREFERRED requires a single node number, which is not being provided here. Add a check that 'nodes' is not empty after parsing for MPOL_PREFERRED's nodeid. Link: http://lkml.kernel.org/r/89526377-7eb6-b662-e1d8-4430928abde9@infradead.org Fixes: 095f1fc4ebf3 ("mempolicy: rework shmem mpol parsing and display") Reported-by: Entropy Moe <3ntr0py1337@gmail.com> Reported-by: syzbot+b055b1a6b2b958707a21@syzkaller.appspotmail.com Tested-by: syzbot+b055b1a6b2b958707a21@syzkaller.appspotmail.com Signed-off-by: Randy Dunlap <rdunlap@infradead.org> Cc: Lee Schermerhorn <lee.schermerhorn@hp.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/mempolicy.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) --- a/mm/mempolicy.c~mm-mempolicy-require-at-least-one-nodeid-for-mpol_preferred +++ a/mm/mempolicy.c @@ -2898,7 +2898,9 @@ int mpol_parse_str(char *str, struct mem switch (mode) { case MPOL_PREFERRED: /* - * Insist on a nodelist of one node only + * Insist on a nodelist of one node only, although later + * we use first_node(nodes) to grab a single node, so here + * nodelist (or nodes) cannot be empty. */ if (nodelist) { char *rest = nodelist; @@ -2906,6 +2908,8 @@ int mpol_parse_str(char *str, struct mem rest++; if (*rest) goto out; + if (nodes_empty(nodes)) + goto out; } break; case MPOL_INTERLEAVE: _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 138/155] mm/memblock.c: remove redundant assignment to variable max_addr 2020-04-02 4:01 incoming Andrew Morton ` (136 preceding siblings ...) 2020-04-02 4:10 ` [patch 137/155] mm: mempolicy: require at least one nodeid for MPOL_PREFERRED Andrew Morton @ 2020-04-02 4:11 ` Andrew Morton 2020-04-02 4:11 ` [patch 139/155] hugetlbfs: use i_mmap_rwsem for more pmd sharing synchronization Andrew Morton ` (16 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:11 UTC (permalink / raw) To: akpm, colin.king, linux-mm, mm-commits, pankaj.gupta.linux, rppt, torvalds From: Colin Ian King <colin.king@canonical.com> Subject: mm/memblock.c: remove redundant assignment to variable max_addr The variable max_addr is being initialized with a value that is never read and it is being updated later with a new value. The initialization is redundant and can be removed. Addresses-Coverity: ("Unused value") Link: http://lkml.kernel.org/r/20200228235003.112718-1-colin.king@canonical.com Signed-off-by: Colin Ian King <colin.king@canonical.com> Reviewed-by: Pankaj Gupta <pankaj.gupta.linux@gmail.com> Reviewed-by: Mike Rapoport <rppt@linux.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/memblock.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/mm/memblock.c~mm-memblock-remove-redundant-assignment-to-variable-max_addr +++ a/mm/memblock.c @@ -1698,7 +1698,7 @@ static phys_addr_t __init_memblock __fin void __init memblock_enforce_memory_limit(phys_addr_t limit) { - phys_addr_t max_addr = PHYS_ADDR_MAX; + phys_addr_t max_addr; if (!limit) return; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 139/155] hugetlbfs: use i_mmap_rwsem for more pmd sharing synchronization 2020-04-02 4:01 incoming Andrew Morton ` (137 preceding siblings ...) 2020-04-02 4:11 ` [patch 138/155] mm/memblock.c: remove redundant assignment to variable max_addr Andrew Morton @ 2020-04-02 4:11 ` Andrew Morton 2020-04-02 4:11 ` [patch 140/155] hugetlbfs: Use i_mmap_rwsem to address page fault/truncate race Andrew Morton ` (15 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:11 UTC (permalink / raw) To: aarcange, akpm, aneesh.kumar, dave, hughd, kirill.shutemov, linux-mm, mhocko, mike.kravetz, mm-commits, n-horiguchi, prakash.sangappa, torvalds From: Mike Kravetz <mike.kravetz@oracle.com> Subject: hugetlbfs: use i_mmap_rwsem for more pmd sharing synchronization Patch series "hugetlbfs: use i_mmap_rwsem for more synchronization", v2. While discussing the issue with huge_pte_offset [1], I remembered that there were more outstanding hugetlb races. These issues are: 1) For shared pmds, huge PTE pointers returned by huge_pte_alloc can become invalid via a call to huge_pmd_unshare by another thread. 2) hugetlbfs page faults can race with truncation causing invalid global reserve counts and state. A previous attempt was made to use i_mmap_rwsem in this manner as described at [2]. However, those patches were reverted starting with [3] due to locking issues. To effectively use i_mmap_rwsem to address the above issues it needs to be held (in read mode) during page fault processing. However, during fault processing we need to lock the page we will be adding. Lock ordering requires we take page lock before i_mmap_rwsem. Waiting until after taking the page lock is too late in the fault process for the synchronization we want to do. To address this lock ordering issue, the following patches change the lock ordering for hugetlb pages. This is not too invasive as hugetlbfs processing is done separate from core mm in many places. However, I don't really like this idea. Much ugliness is contained in the new routine hugetlb_page_mapping_lock_write() of patch 1. The only other way I can think of to address these issues is by catching all the races. After catching a race, cleanup, backout, retry ... etc, as needed. This can get really ugly, especially for huge page reservations. At one time, I started writing some of the reservation backout code for page faults and it got so ugly and complicated I went down the path of adding synchronization to avoid the races. Any other suggestions would be welcome. [1] https://lore.kernel.org/linux-mm/1582342427-230392-1-git-send-email-longpeng2@huawei.com/ [2] https://lore.kernel.org/linux-mm/20181222223013.22193-1-mike.kravetz@oracle.com/ [3] https://lore.kernel.org/linux-mm/20190103235452.29335-1-mike.kravetz@oracle.com [4] https://lore.kernel.org/linux-mm/1584028670.7365.182.camel@lca.pw/ [5] https://lore.kernel.org/lkml/20200312183142.108df9ac@canb.auug.org.au/ This patch (of 2): While looking at BUGs associated with invalid huge page map counts, it was discovered and observed that a huge pte pointer could become 'invalid' and point to another task's page table. Consider the following: A task takes a page fault on a shared hugetlbfs file and calls huge_pte_alloc to get a ptep. Suppose the returned ptep points to a shared pmd. Now, another task truncates the hugetlbfs file. As part of truncation, it unmaps everyone who has the file mapped. If the range being truncated is covered by a shared pmd, huge_pmd_unshare will be called. For all but the last user of the shared pmd, huge_pmd_unshare will clear the pud pointing to the pmd. If the task in the middle of the page fault is not the last user, the ptep returned by huge_pte_alloc now points to another task's page table or worse. This leads to bad things such as incorrect page map/reference counts or invalid memory references. To fix, expand the use of i_mmap_rwsem as follows: - i_mmap_rwsem is held in read mode whenever huge_pmd_share is called. huge_pmd_share is only called via huge_pte_alloc, so callers of huge_pte_alloc take i_mmap_rwsem before calling. In addition, callers of huge_pte_alloc continue to hold the semaphore until finished with the ptep. - i_mmap_rwsem is held in write mode whenever huge_pmd_unshare is called. One problem with this scheme is that it requires taking i_mmap_rwsem before taking the page lock during page faults. This is not the order specified in the rest of mm code. Handling of hugetlbfs pages is mostly isolated today. Therefore, we use this alternative locking order for PageHuge() pages. mapping->i_mmap_rwsem hugetlb_fault_mutex (hugetlbfs specific page fault mutex) page->flags PG_locked (lock_page) To help with lock ordering issues, hugetlb_page_mapping_lock_write() is introduced to write lock the i_mmap_rwsem associated with a page. In most cases it is easy to get address_space via vma->vm_file->f_mapping. However, in the case of migration or memory errors for anon pages we do not have an associated vma. A new routine _get_hugetlb_page_mapping() will use anon_vma to get address_space in these cases. Link: http://lkml.kernel.org/r/20200316205756.146666-2-mike.kravetz@oracle.com Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com> Cc: Michal Hocko <mhocko@kernel.org> Cc: Hugh Dickins <hughd@google.com> Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com> Cc: "Aneesh Kumar K . V" <aneesh.kumar@linux.vnet.ibm.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: "Kirill A . Shutemov" <kirill.shutemov@linux.intel.com> Cc: Davidlohr Bueso <dave@stgolabs.net> Cc: Prakash Sangappa <prakash.sangappa@oracle.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/hugetlbfs/inode.c | 2 include/linux/fs.h | 5 + include/linux/hugetlb.h | 8 + mm/hugetlb.c | 156 +++++++++++++++++++++++++++++++++++--- mm/memory-failure.c | 29 ++++++- mm/migrate.c | 25 +++++- mm/rmap.c | 17 +++- mm/userfaultfd.c | 11 ++ 8 files changed, 234 insertions(+), 19 deletions(-) --- a/fs/hugetlbfs/inode.c~hugetlbfs-use-i_mmap_rwsem-for-more-pmd-sharing-synchronization +++ a/fs/hugetlbfs/inode.c @@ -450,7 +450,9 @@ static void remove_inode_hugepages(struc if (unlikely(page_mapped(page))) { BUG_ON(truncate_op); + mutex_unlock(&hugetlb_fault_mutex_table[hash]); i_mmap_lock_write(mapping); + mutex_lock(&hugetlb_fault_mutex_table[hash]); hugetlb_vmdelete_list(&mapping->i_mmap, index * pages_per_huge_page(h), (index + 1) * pages_per_huge_page(h)); --- a/include/linux/fs.h~hugetlbfs-use-i_mmap_rwsem-for-more-pmd-sharing-synchronization +++ a/include/linux/fs.h @@ -526,6 +526,11 @@ static inline void i_mmap_lock_write(str down_write(&mapping->i_mmap_rwsem); } +static inline int i_mmap_trylock_write(struct address_space *mapping) +{ + return down_write_trylock(&mapping->i_mmap_rwsem); +} + static inline void i_mmap_unlock_write(struct address_space *mapping) { up_write(&mapping->i_mmap_rwsem); --- a/include/linux/hugetlb.h~hugetlbfs-use-i_mmap_rwsem-for-more-pmd-sharing-synchronization +++ a/include/linux/hugetlb.h @@ -109,6 +109,8 @@ u32 hugetlb_fault_mutex_hash(struct addr pte_t *huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud); +struct address_space *hugetlb_page_mapping_lock_write(struct page *hpage); + extern int sysctl_hugetlb_shm_group; extern struct list_head huge_boot_pages; @@ -151,6 +153,12 @@ static inline unsigned long hugetlb_tota return 0; } +static inline struct address_space *hugetlb_page_mapping_lock_write( + struct page *hpage) +{ + return NULL; +} + static inline int huge_pmd_unshare(struct mm_struct *mm, unsigned long *addr, pte_t *ptep) { --- a/mm/hugetlb.c~hugetlbfs-use-i_mmap_rwsem-for-more-pmd-sharing-synchronization +++ a/mm/hugetlb.c @@ -1322,6 +1322,106 @@ int PageHeadHuge(struct page *page_head) return get_compound_page_dtor(page_head) == free_huge_page; } +/* + * Find address_space associated with hugetlbfs page. + * Upon entry page is locked and page 'was' mapped although mapped state + * could change. If necessary, use anon_vma to find vma and associated + * address space. The returned mapping may be stale, but it can not be + * invalid as page lock (which is held) is required to destroy mapping. + */ +static struct address_space *_get_hugetlb_page_mapping(struct page *hpage) +{ + struct anon_vma *anon_vma; + pgoff_t pgoff_start, pgoff_end; + struct anon_vma_chain *avc; + struct address_space *mapping = page_mapping(hpage); + + /* Simple file based mapping */ + if (mapping) + return mapping; + + /* + * Even anonymous hugetlbfs mappings are associated with an + * underlying hugetlbfs file (see hugetlb_file_setup in mmap + * code). Find a vma associated with the anonymous vma, and + * use the file pointer to get address_space. + */ + anon_vma = page_lock_anon_vma_read(hpage); + if (!anon_vma) + return mapping; /* NULL */ + + /* Use first found vma */ + pgoff_start = page_to_pgoff(hpage); + pgoff_end = pgoff_start + hpage_nr_pages(hpage) - 1; + anon_vma_interval_tree_foreach(avc, &anon_vma->rb_root, + pgoff_start, pgoff_end) { + struct vm_area_struct *vma = avc->vma; + + mapping = vma->vm_file->f_mapping; + break; + } + + anon_vma_unlock_read(anon_vma); + return mapping; +} + +/* + * Find and lock address space (mapping) in write mode. + * + * Upon entry, the page is locked which allows us to find the mapping + * even in the case of an anon page. However, locking order dictates + * the i_mmap_rwsem be acquired BEFORE the page lock. This is hugetlbfs + * specific. So, we first try to lock the sema while still holding the + * page lock. If this works, great! If not, then we need to drop the + * page lock and then acquire i_mmap_rwsem and reacquire page lock. Of + * course, need to revalidate state along the way. + */ +struct address_space *hugetlb_page_mapping_lock_write(struct page *hpage) +{ + struct address_space *mapping, *mapping2; + + mapping = _get_hugetlb_page_mapping(hpage); +retry: + if (!mapping) + return mapping; + + /* + * If no contention, take lock and return + */ + if (i_mmap_trylock_write(mapping)) + return mapping; + + /* + * Must drop page lock and wait on mapping sema. + * Note: Once page lock is dropped, mapping could become invalid. + * As a hack, increase map count until we lock page again. + */ + atomic_inc(&hpage->_mapcount); + unlock_page(hpage); + i_mmap_lock_write(mapping); + lock_page(hpage); + atomic_add_negative(-1, &hpage->_mapcount); + + /* verify page is still mapped */ + if (!page_mapped(hpage)) { + i_mmap_unlock_write(mapping); + return NULL; + } + + /* + * Get address space again and verify it is the same one + * we locked. If not, drop lock and retry. + */ + mapping2 = _get_hugetlb_page_mapping(hpage); + if (mapping2 != mapping) { + i_mmap_unlock_write(mapping); + mapping = mapping2; + goto retry; + } + + return mapping; +} + pgoff_t __basepage_index(struct page *page) { struct page *page_head = compound_head(page); @@ -3312,6 +3412,7 @@ int copy_hugetlb_page_range(struct mm_st int cow; struct hstate *h = hstate_vma(vma); unsigned long sz = huge_page_size(h); + struct address_space *mapping = vma->vm_file->f_mapping; struct mmu_notifier_range range; int ret = 0; @@ -3322,6 +3423,14 @@ int copy_hugetlb_page_range(struct mm_st vma->vm_start, vma->vm_end); mmu_notifier_invalidate_range_start(&range); + } else { + /* + * For shared mappings i_mmap_rwsem must be held to call + * huge_pte_alloc, otherwise the returned ptep could go + * away if part of a shared pmd and another thread calls + * huge_pmd_unshare. + */ + i_mmap_lock_read(mapping); } for (addr = vma->vm_start; addr < vma->vm_end; addr += sz) { @@ -3399,6 +3508,8 @@ int copy_hugetlb_page_range(struct mm_st if (cow) mmu_notifier_invalidate_range_end(&range); + else + i_mmap_unlock_read(mapping); return ret; } @@ -3847,13 +3958,15 @@ retry: }; /* - * hugetlb_fault_mutex must be dropped before - * handling userfault. Reacquire after handling - * fault to make calling code simpler. + * hugetlb_fault_mutex and i_mmap_rwsem must be + * dropped before handling userfault. Reacquire + * after handling fault to make calling code simpler. */ hash = hugetlb_fault_mutex_hash(mapping, idx); mutex_unlock(&hugetlb_fault_mutex_table[hash]); + i_mmap_unlock_read(mapping); ret = handle_userfault(&vmf, VM_UFFD_MISSING); + i_mmap_lock_read(mapping); mutex_lock(&hugetlb_fault_mutex_table[hash]); goto out; } @@ -4018,6 +4131,11 @@ vm_fault_t hugetlb_fault(struct mm_struc ptep = huge_pte_offset(mm, haddr, huge_page_size(h)); if (ptep) { + /* + * Since we hold no locks, ptep could be stale. That is + * OK as we are only making decisions based on content and + * not actually modifying content here. + */ entry = huge_ptep_get(ptep); if (unlikely(is_hugetlb_entry_migration(entry))) { migration_entry_wait_huge(vma, mm, ptep); @@ -4031,14 +4149,29 @@ vm_fault_t hugetlb_fault(struct mm_struc return VM_FAULT_OOM; } + /* + * Acquire i_mmap_rwsem before calling huge_pte_alloc and hold + * until finished with ptep. This prevents huge_pmd_unshare from + * being called elsewhere and making the ptep no longer valid. + * + * ptep could have already be assigned via huge_pte_offset. That + * is OK, as huge_pte_alloc will return the same value unless + * something has changed. + */ mapping = vma->vm_file->f_mapping; - idx = vma_hugecache_offset(h, vma, haddr); + i_mmap_lock_read(mapping); + ptep = huge_pte_alloc(mm, haddr, huge_page_size(h)); + if (!ptep) { + i_mmap_unlock_read(mapping); + return VM_FAULT_OOM; + } /* * Serialize hugepage allocation and instantiation, so that we don't * get spurious allocation failures if two CPUs race to instantiate * the same page in the page cache. */ + idx = vma_hugecache_offset(h, vma, haddr); hash = hugetlb_fault_mutex_hash(mapping, idx); mutex_lock(&hugetlb_fault_mutex_table[hash]); @@ -4126,6 +4259,7 @@ out_ptl: } out_mutex: mutex_unlock(&hugetlb_fault_mutex_table[hash]); + i_mmap_unlock_read(mapping); /* * Generally it's safe to hold refcount during waiting page lock. But * here we just wait to defer the next page fault to avoid busy loop and @@ -4776,10 +4910,12 @@ void adjust_range_if_pmd_sharing_possibl * Search for a shareable pmd page for hugetlb. In any case calls pmd_alloc() * and returns the corresponding pte. While this is not necessary for the * !shared pmd case because we can allocate the pmd later as well, it makes the - * code much cleaner. pmd allocation is essential for the shared case because - * pud has to be populated inside the same i_mmap_rwsem section - otherwise - * racing tasks could either miss the sharing (see huge_pte_offset) or select a - * bad pmd for sharing. + * code much cleaner. + * + * This routine must be called with i_mmap_rwsem held in at least read mode. + * For hugetlbfs, this prevents removal of any page table entries associated + * with the address space. This is important as we are setting up sharing + * based on existing page table entries (mappings). */ pte_t *huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud) { @@ -4796,7 +4932,6 @@ pte_t *huge_pmd_share(struct mm_struct * if (!vma_shareable(vma, addr)) return (pte_t *)pmd_alloc(mm, pud, addr); - i_mmap_lock_read(mapping); vma_interval_tree_foreach(svma, &mapping->i_mmap, idx, idx) { if (svma == vma) continue; @@ -4826,7 +4961,6 @@ pte_t *huge_pmd_share(struct mm_struct * spin_unlock(ptl); out: pte = (pte_t *)pmd_alloc(mm, pud, addr); - i_mmap_unlock_read(mapping); return pte; } @@ -4837,7 +4971,7 @@ out: * indicated by page_count > 1, unmap is achieved by clearing pud and * decrementing the ref count. If count == 1, the pte page is not shared. * - * called with page table lock held. + * Called with page table lock held and i_mmap_rwsem held in write mode. * * returns: 1 successfully unmapped a shared pte page * 0 the underlying pte page is not shared, or it is the last user --- a/mm/memory-failure.c~hugetlbfs-use-i_mmap_rwsem-for-more-pmd-sharing-synchronization +++ a/mm/memory-failure.c @@ -954,7 +954,7 @@ static bool hwpoison_user_mappings(struc enum ttu_flags ttu = TTU_IGNORE_MLOCK | TTU_IGNORE_ACCESS; struct address_space *mapping; LIST_HEAD(tokill); - bool unmap_success; + bool unmap_success = true; int kill = 1, forcekill; struct page *hpage = *hpagep; bool mlocked = PageMlocked(hpage); @@ -1016,7 +1016,32 @@ static bool hwpoison_user_mappings(struc if (kill) collect_procs(hpage, &tokill, flags & MF_ACTION_REQUIRED); - unmap_success = try_to_unmap(hpage, ttu); + if (!PageHuge(hpage)) { + unmap_success = try_to_unmap(hpage, ttu); + } else { + /* + * For hugetlb pages, try_to_unmap could potentially call + * huge_pmd_unshare. Because of this, take semaphore in + * write mode here and set TTU_RMAP_LOCKED to indicate we + * have taken the lock at this higer level. + * + * Note that the call to hugetlb_page_mapping_lock_write + * is necessary even if mapping is already set. It handles + * ugliness of potentially having to drop page lock to obtain + * i_mmap_rwsem. + */ + mapping = hugetlb_page_mapping_lock_write(hpage); + + if (mapping) { + unmap_success = try_to_unmap(hpage, + ttu|TTU_RMAP_LOCKED); + i_mmap_unlock_write(mapping); + } else { + pr_info("Memory failure: %#lx: could not find mapping for mapped huge page\n", + pfn); + unmap_success = false; + } + } if (!unmap_success) pr_err("Memory failure: %#lx: failed to unmap page (mapcount=%d)\n", pfn, page_mapcount(hpage)); --- a/mm/migrate.c~hugetlbfs-use-i_mmap_rwsem-for-more-pmd-sharing-synchronization +++ a/mm/migrate.c @@ -1282,6 +1282,7 @@ static int unmap_and_move_huge_page(new_ int page_was_mapped = 0; struct page *new_hpage; struct anon_vma *anon_vma = NULL; + struct address_space *mapping = NULL; /* * Migratability of hugepages depends on architectures and their size. @@ -1329,18 +1330,36 @@ static int unmap_and_move_huge_page(new_ goto put_anon; if (page_mapped(hpage)) { + /* + * try_to_unmap could potentially call huge_pmd_unshare. + * Because of this, take semaphore in write mode here and + * set TTU_RMAP_LOCKED to let lower levels know we have + * taken the lock. + */ + mapping = hugetlb_page_mapping_lock_write(hpage); + if (unlikely(!mapping)) + goto unlock_put_anon; + try_to_unmap(hpage, - TTU_MIGRATION|TTU_IGNORE_MLOCK|TTU_IGNORE_ACCESS); + TTU_MIGRATION|TTU_IGNORE_MLOCK|TTU_IGNORE_ACCESS| + TTU_RMAP_LOCKED); page_was_mapped = 1; + /* + * Leave mapping locked until after subsequent call to + * remove_migration_ptes() + */ } if (!page_mapped(hpage)) rc = move_to_new_page(new_hpage, hpage, mode); - if (page_was_mapped) + if (page_was_mapped) { remove_migration_ptes(hpage, - rc == MIGRATEPAGE_SUCCESS ? new_hpage : hpage, false); + rc == MIGRATEPAGE_SUCCESS ? new_hpage : hpage, true); + i_mmap_unlock_write(mapping); + } +unlock_put_anon: unlock_page(new_hpage); put_anon: --- a/mm/rmap.c~hugetlbfs-use-i_mmap_rwsem-for-more-pmd-sharing-synchronization +++ a/mm/rmap.c @@ -22,9 +22,10 @@ * * inode->i_mutex (while writing or truncating, not reading or faulting) * mm->mmap_sem - * page->flags PG_locked (lock_page) + * page->flags PG_locked (lock_page) * (see huegtlbfs below) * hugetlbfs_i_mmap_rwsem_key (in huge_pmd_share) * mapping->i_mmap_rwsem + * hugetlb_fault_mutex (hugetlbfs specific page fault mutex) * anon_vma->rwsem * mm->page_table_lock or pte_lock * pgdat->lru_lock (in mark_page_accessed, isolate_lru_page) @@ -43,6 +44,11 @@ * anon_vma->rwsem,mapping->i_mutex (memory_failure, collect_procs_anon) * ->tasklist_lock * pte map lock + * + * * hugetlbfs PageHuge() pages take locks in this order: + * mapping->i_mmap_rwsem + * hugetlb_fault_mutex (hugetlbfs specific page fault mutex) + * page->flags PG_locked (lock_page) */ #include <linux/mm.h> @@ -1409,6 +1415,9 @@ static bool try_to_unmap_one(struct page /* * If sharing is possible, start and end will be adjusted * accordingly. + * + * If called for a huge page, caller must hold i_mmap_rwsem + * in write mode as it is possible to call huge_pmd_unshare. */ adjust_range_if_pmd_sharing_possible(vma, &range.start, &range.end); @@ -1456,6 +1465,12 @@ static bool try_to_unmap_one(struct page address = pvmw.address; if (PageHuge(page)) { + /* + * To call huge_pmd_unshare, i_mmap_rwsem must be + * held in write mode. Caller needs to explicitly + * do this outside rmap routines. + */ + VM_BUG_ON(!(flags & TTU_RMAP_LOCKED)); if (huge_pmd_unshare(mm, &address, pvmw.pte)) { /* * huge_pmd_unshare unmapped an entire PMD --- a/mm/userfaultfd.c~hugetlbfs-use-i_mmap_rwsem-for-more-pmd-sharing-synchronization +++ a/mm/userfaultfd.c @@ -276,10 +276,14 @@ retry: BUG_ON(dst_addr >= dst_start + len); /* - * Serialize via hugetlb_fault_mutex + * Serialize via i_mmap_rwsem and hugetlb_fault_mutex. + * i_mmap_rwsem ensures the dst_pte remains valid even + * in the case of shared pmds. fault mutex prevents + * races with other faulting threads. */ - idx = linear_page_index(dst_vma, dst_addr); mapping = dst_vma->vm_file->f_mapping; + i_mmap_lock_read(mapping); + idx = linear_page_index(dst_vma, dst_addr); hash = hugetlb_fault_mutex_hash(mapping, idx); mutex_lock(&hugetlb_fault_mutex_table[hash]); @@ -287,6 +291,7 @@ retry: dst_pte = huge_pte_alloc(dst_mm, dst_addr, vma_hpagesize); if (!dst_pte) { mutex_unlock(&hugetlb_fault_mutex_table[hash]); + i_mmap_unlock_read(mapping); goto out_unlock; } @@ -294,6 +299,7 @@ retry: dst_pteval = huge_ptep_get(dst_pte); if (!huge_pte_none(dst_pteval)) { mutex_unlock(&hugetlb_fault_mutex_table[hash]); + i_mmap_unlock_read(mapping); goto out_unlock; } @@ -301,6 +307,7 @@ retry: dst_addr, src_addr, &page); mutex_unlock(&hugetlb_fault_mutex_table[hash]); + i_mmap_unlock_read(mapping); vm_alloc_shared = vm_shared; cond_resched(); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 140/155] hugetlbfs: Use i_mmap_rwsem to address page fault/truncate race 2020-04-02 4:01 incoming Andrew Morton ` (138 preceding siblings ...) 2020-04-02 4:11 ` [patch 139/155] hugetlbfs: use i_mmap_rwsem for more pmd sharing synchronization Andrew Morton @ 2020-04-02 4:11 ` Andrew Morton 2020-04-02 4:11 ` [patch 141/155] hugetlb_cgroup: add hugetlb_cgroup reservation counter Andrew Morton ` (14 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:11 UTC (permalink / raw) To: aarcange, akpm, aneesh.kumar, dave, hughd, kirill.shutemov, linux-mm, mhocko, mike.kravetz, mm-commits, n-horiguchi, prakash.sangappa, torvalds From: Mike Kravetz <mike.kravetz@oracle.com> Subject: hugetlbfs: Use i_mmap_rwsem to address page fault/truncate race hugetlbfs page faults can race with truncate and hole punch operations. Current code in the page fault path attempts to handle this by 'backing out' operations if we encounter the race. One obvious omission in the current code is removing a page newly added to the page cache. This is pretty straight forward to address, but there is a more subtle and difficult issue of backing out hugetlb reservations. To handle this correctly, the 'reservation state' before page allocation needs to be noted so that it can be properly backed out. There are four distinct possibilities for reservation state: shared/reserved, shared/no-resv, private/reserved and private/no-resv. Backing out a reservation may require memory allocation which could fail so that needs to be taken into account as well. Instead of writing the required complicated code for this rare occurrence, just eliminate the race. i_mmap_rwsem is now held in read mode for the duration of page fault processing. Hold i_mmap_rwsem in write mode when modifying i_size. In this way, truncation can not proceed when page faults are being processed. In addition, i_size will not change during fault processing so a single check can be made to ensure faults are not beyond (proposed) end of file. Faults can still race with hole punch, but that race is handled by existing code and the use of hugetlb_fault_mutex. With this modification, checks for races with truncation in the page fault path can be simplified and removed. remove_inode_hugepages no longer needs to take hugetlb_fault_mutex in the case of truncation. Comments are expanded to explain reasoning behind locking. Link: http://lkml.kernel.org/r/20200316205756.146666-3-mike.kravetz@oracle.com Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: "Aneesh Kumar K . V" <aneesh.kumar@linux.vnet.ibm.com> Cc: Davidlohr Bueso <dave@stgolabs.net> Cc: Hugh Dickins <hughd@google.com> Cc: "Kirill A . Shutemov" <kirill.shutemov@linux.intel.com> Cc: Michal Hocko <mhocko@kernel.org> Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com> Cc: Prakash Sangappa <prakash.sangappa@oracle.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/hugetlbfs/inode.c | 28 ++++++++++++++++++++-------- mm/hugetlb.c | 23 +++++++++++------------ 2 files changed, 31 insertions(+), 20 deletions(-) --- a/fs/hugetlbfs/inode.c~hugetlbfs-use-i_mmap_rwsem-to-address-page-fault-truncate-race +++ a/fs/hugetlbfs/inode.c @@ -393,10 +393,9 @@ hugetlb_vmdelete_list(struct rb_root_cac * In this case, we first scan the range and release found pages. * After releasing pages, hugetlb_unreserve_pages cleans up region/reserv * maps and global counts. Page faults can not race with truncation - * in this routine. hugetlb_no_page() prevents page faults in the - * truncated range. It checks i_size before allocation, and again after - * with the page table lock for the page held. The same lock must be - * acquired to unmap a page. + * in this routine. hugetlb_no_page() holds i_mmap_rwsem and prevents + * page faults in the truncated range by checking i_size. i_size is + * modified while holding i_mmap_rwsem. * hole punch is indicated if end is not LLONG_MAX * In the hole punch case we scan the range and release found pages. * Only when releasing a page is the associated region/reserv map @@ -436,7 +435,15 @@ static void remove_inode_hugepages(struc index = page->index; hash = hugetlb_fault_mutex_hash(mapping, index); - mutex_lock(&hugetlb_fault_mutex_table[hash]); + if (!truncate_op) { + /* + * Only need to hold the fault mutex in the + * hole punch case. This prevents races with + * page faults. Races are not possible in the + * case of truncation. + */ + mutex_lock(&hugetlb_fault_mutex_table[hash]); + } /* * If page is mapped, it was faulted in after being @@ -479,7 +486,8 @@ static void remove_inode_hugepages(struc } unlock_page(page); - mutex_unlock(&hugetlb_fault_mutex_table[hash]); + if (!truncate_op) + mutex_unlock(&hugetlb_fault_mutex_table[hash]); } huge_pagevec_release(&pvec); cond_resched(); @@ -517,8 +525,8 @@ static int hugetlb_vmtruncate(struct ino BUG_ON(offset & ~huge_page_mask(h)); pgoff = offset >> PAGE_SHIFT; - i_size_write(inode, offset); i_mmap_lock_write(mapping); + i_size_write(inode, offset); if (!RB_EMPTY_ROOT(&mapping->i_mmap.rb_root)) hugetlb_vmdelete_list(&mapping->i_mmap, pgoff, 0); i_mmap_unlock_write(mapping); @@ -640,7 +648,11 @@ static long hugetlbfs_fallocate(struct f /* addr is the offset within the file (zero based) */ addr = index * hpage_size; - /* mutex taken here, fault path and hole punch */ + /* + * fault mutex taken here, protects against fault path + * and hole punch. inode_lock previously taken protects + * against truncation. + */ hash = hugetlb_fault_mutex_hash(mapping, index); mutex_lock(&hugetlb_fault_mutex_table[hash]); --- a/mm/hugetlb.c~hugetlbfs-use-i_mmap_rwsem-to-address-page-fault-truncate-race +++ a/mm/hugetlb.c @@ -3929,16 +3929,17 @@ static vm_fault_t hugetlb_no_page(struct } /* - * Use page lock to guard against racing truncation - * before we get page_table_lock. + * We can not race with truncation due to holding i_mmap_rwsem. + * i_size is modified when holding i_mmap_rwsem, so check here + * once for faults beyond end of file. */ + size = i_size_read(mapping->host) >> huge_page_shift(h); + if (idx >= size) + goto out; + retry: page = find_lock_page(mapping, idx); if (!page) { - size = i_size_read(mapping->host) >> huge_page_shift(h); - if (idx >= size) - goto out; - /* * Check for page in userfault range */ @@ -4044,10 +4045,6 @@ retry: } ptl = huge_pte_lock(h, mm, ptep); - size = i_size_read(mapping->host) >> huge_page_shift(h); - if (idx >= size) - goto backout; - ret = 0; if (!huge_pte_none(huge_ptep_get(ptep))) goto backout; @@ -4151,8 +4148,10 @@ vm_fault_t hugetlb_fault(struct mm_struc /* * Acquire i_mmap_rwsem before calling huge_pte_alloc and hold - * until finished with ptep. This prevents huge_pmd_unshare from - * being called elsewhere and making the ptep no longer valid. + * until finished with ptep. This serves two purposes: + * 1) It prevents huge_pmd_unshare from being called elsewhere + * and making the ptep no longer valid. + * 2) It synchronizes us with i_size modifications during truncation. * * ptep could have already be assigned via huge_pte_offset. That * is OK, as huge_pte_alloc will return the same value unless _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 141/155] hugetlb_cgroup: add hugetlb_cgroup reservation counter 2020-04-02 4:01 incoming Andrew Morton ` (139 preceding siblings ...) 2020-04-02 4:11 ` [patch 140/155] hugetlbfs: Use i_mmap_rwsem to address page fault/truncate race Andrew Morton @ 2020-04-02 4:11 ` Andrew Morton 2020-04-02 4:11 ` [patch 142/155] hugetlb_cgroup: add interface for charge/uncharge hugetlb reservations Andrew Morton ` (13 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:11 UTC (permalink / raw) To: akpm, almasrymina, gthelen, linux-mm, mike.kravetz, mm-commits, rientjes, sandipan, shakeelb, shuah, torvalds From: Mina Almasry <almasrymina@google.com> Subject: hugetlb_cgroup: add hugetlb_cgroup reservation counter These counters will track hugetlb reservations rather than hugetlb memory faulted in. This patch only adds the counter, following patches add the charging and uncharging of the counter. This is patch 1 of an 9 patch series. Problem: Currently tasks attempting to reserve more hugetlb memory than is available get a failure at mmap/shmget time. This is thanks to Hugetlbfs Reservations [1]. However, if a task attempts to reserve more hugetlb memory than its hugetlb_cgroup limit allows, the kernel will allow the mmap/shmget call, but will SIGBUS the task when it attempts to fault in the excess memory. We have users hitting their hugetlb_cgroup limits and thus we've been looking at this failure mode. We'd like to improve this behavior such that users violating the hugetlb_cgroup limits get an error on mmap/shmget time, rather than getting SIGBUS'd when they try to fault the excess memory in. This gives the user an opportunity to fallback more gracefully to non-hugetlbfs memory for example. The underlying problem is that today's hugetlb_cgroup accounting happens at hugetlb memory *fault* time, rather than at *reservation* time. Thus, enforcing the hugetlb_cgroup limit only happens at fault time, and the offending task gets SIGBUS'd. Proposed Solution: A new page counter named 'hugetlb.xMB.rsvd.[limit|usage|max_usage]_in_bytes'. This counter has slightly different semantics than 'hugetlb.xMB.[limit|usage|max_usage]_in_bytes': - While usage_in_bytes tracks all *faulted* hugetlb memory, rsvd.usage_in_bytes tracks all *reserved* hugetlb memory and hugetlb memory faulted in without a prior reservation. - If a task attempts to reserve more memory than limit_in_bytes allows, the kernel will allow it to do so. But if a task attempts to reserve more memory than rsvd.limit_in_bytes, the kernel will fail this reservation. This proposal is implemented in this patch series, with tests to verify functionality and show the usage. Alternatives considered: 1. A new cgroup, instead of only a new page_counter attached to the existing hugetlb_cgroup. Adding a new cgroup seemed like a lot of code duplication with hugetlb_cgroup. Keeping hugetlb related page counters under hugetlb_cgroup seemed cleaner as well. 2. Instead of adding a new counter, we considered adding a sysctl that modifies the behavior of hugetlb.xMB.[limit|usage]_in_bytes, to do accounting at reservation time rather than fault time. Adding a new page_counter seems better as userspace could, if it wants, choose to enforce different cgroups differently: one via limit_in_bytes, and another via rsvd.limit_in_bytes. This could be very useful if you're transitioning how hugetlb memory is partitioned on your system one cgroup at a time, for example. Also, someone may find usage for both limit_in_bytes and rsvd.limit_in_bytes concurrently, and this approach gives them the option to do so. Testing: - Added tests passing. - Used libhugetlbfs for regression testing. [1]: https://www.kernel.org/doc/html/latest/vm/hugetlbfs_reserv.html Link: http://lkml.kernel.org/r/20200211213128.73302-1-almasrymina@google.com Signed-off-by: Mina Almasry <almasrymina@google.com> Acked-by: David Rientjes <rientjes@google.com> Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Shakeel Butt <shakeelb@google.com> Cc: Greg Thelen <gthelen@google.com> Cc: Sandipan Das <sandipan@linux.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/hugetlb.h | 4 - mm/hugetlb_cgroup.c | 115 +++++++++++++++++++++++++++++++++----- 2 files changed, 104 insertions(+), 15 deletions(-) --- a/include/linux/hugetlb.h~hugetlb_cgroup-add-hugetlb_cgroup-reservation-counter +++ a/include/linux/hugetlb.h @@ -440,8 +440,8 @@ struct hstate { unsigned int surplus_huge_pages_node[MAX_NUMNODES]; #ifdef CONFIG_CGROUP_HUGETLB /* cgroup control files */ - struct cftype cgroup_files_dfl[5]; - struct cftype cgroup_files_legacy[5]; + struct cftype cgroup_files_dfl[7]; + struct cftype cgroup_files_legacy[9]; #endif char name[HSTATE_NAME_LEN]; }; --- a/mm/hugetlb_cgroup.c~hugetlb_cgroup-add-hugetlb_cgroup-reservation-counter +++ a/mm/hugetlb_cgroup.c @@ -36,6 +36,11 @@ struct hugetlb_cgroup { */ struct page_counter hugepage[HUGE_MAX_HSTATE]; + /* + * the counter to account for hugepage reservations from hugetlb. + */ + struct page_counter rsvd_hugepage[HUGE_MAX_HSTATE]; + atomic_long_t events[HUGE_MAX_HSTATE][HUGETLB_NR_MEMORY_EVENTS]; atomic_long_t events_local[HUGE_MAX_HSTATE][HUGETLB_NR_MEMORY_EVENTS]; @@ -55,6 +60,15 @@ struct hugetlb_cgroup { static struct hugetlb_cgroup *root_h_cgroup __read_mostly; +static inline struct page_counter * +hugetlb_cgroup_counter_from_cgroup(struct hugetlb_cgroup *h_cg, int idx, + bool rsvd) +{ + if (rsvd) + return &h_cg->rsvd_hugepage[idx]; + return &h_cg->hugepage[idx]; +} + static inline struct hugetlb_cgroup *hugetlb_cgroup_from_css(struct cgroup_subsys_state *s) { @@ -294,28 +308,42 @@ void hugetlb_cgroup_uncharge_cgroup(int enum { RES_USAGE, + RES_RSVD_USAGE, RES_LIMIT, + RES_RSVD_LIMIT, RES_MAX_USAGE, + RES_RSVD_MAX_USAGE, RES_FAILCNT, + RES_RSVD_FAILCNT, }; static u64 hugetlb_cgroup_read_u64(struct cgroup_subsys_state *css, struct cftype *cft) { struct page_counter *counter; + struct page_counter *rsvd_counter; struct hugetlb_cgroup *h_cg = hugetlb_cgroup_from_css(css); counter = &h_cg->hugepage[MEMFILE_IDX(cft->private)]; + rsvd_counter = &h_cg->rsvd_hugepage[MEMFILE_IDX(cft->private)]; switch (MEMFILE_ATTR(cft->private)) { case RES_USAGE: return (u64)page_counter_read(counter) * PAGE_SIZE; + case RES_RSVD_USAGE: + return (u64)page_counter_read(rsvd_counter) * PAGE_SIZE; case RES_LIMIT: return (u64)counter->max * PAGE_SIZE; + case RES_RSVD_LIMIT: + return (u64)rsvd_counter->max * PAGE_SIZE; case RES_MAX_USAGE: return (u64)counter->watermark * PAGE_SIZE; + case RES_RSVD_MAX_USAGE: + return (u64)rsvd_counter->watermark * PAGE_SIZE; case RES_FAILCNT: return counter->failcnt; + case RES_RSVD_FAILCNT: + return rsvd_counter->failcnt; default: BUG(); } @@ -337,10 +365,16 @@ static int hugetlb_cgroup_read_u64_max(s 1 << huge_page_order(&hstates[idx])); switch (MEMFILE_ATTR(cft->private)) { + case RES_RSVD_USAGE: + counter = &h_cg->rsvd_hugepage[idx]; + /* Fall through. */ case RES_USAGE: val = (u64)page_counter_read(counter); seq_printf(seq, "%llu\n", val * PAGE_SIZE); break; + case RES_RSVD_LIMIT: + counter = &h_cg->rsvd_hugepage[idx]; + /* Fall through. */ case RES_LIMIT: val = (u64)counter->max; if (val == limit) @@ -364,6 +398,7 @@ static ssize_t hugetlb_cgroup_write(stru int ret, idx; unsigned long nr_pages; struct hugetlb_cgroup *h_cg = hugetlb_cgroup_from_css(of_css(of)); + bool rsvd = false; if (hugetlb_cgroup_is_root(h_cg)) /* Can't set limit on root */ return -EINVAL; @@ -377,9 +412,14 @@ static ssize_t hugetlb_cgroup_write(stru nr_pages = round_down(nr_pages, 1 << huge_page_order(&hstates[idx])); switch (MEMFILE_ATTR(of_cft(of)->private)) { + case RES_RSVD_LIMIT: + rsvd = true; + /* Fall through. */ case RES_LIMIT: mutex_lock(&hugetlb_limit_mutex); - ret = page_counter_set_max(&h_cg->hugepage[idx], nr_pages); + ret = page_counter_set_max( + hugetlb_cgroup_counter_from_cgroup(h_cg, idx, rsvd), + nr_pages); mutex_unlock(&hugetlb_limit_mutex); break; default: @@ -405,18 +445,25 @@ static ssize_t hugetlb_cgroup_reset(stru char *buf, size_t nbytes, loff_t off) { int ret = 0; - struct page_counter *counter; + struct page_counter *counter, *rsvd_counter; struct hugetlb_cgroup *h_cg = hugetlb_cgroup_from_css(of_css(of)); counter = &h_cg->hugepage[MEMFILE_IDX(of_cft(of)->private)]; + rsvd_counter = &h_cg->rsvd_hugepage[MEMFILE_IDX(of_cft(of)->private)]; switch (MEMFILE_ATTR(of_cft(of)->private)) { case RES_MAX_USAGE: page_counter_reset_watermark(counter); break; + case RES_RSVD_MAX_USAGE: + page_counter_reset_watermark(rsvd_counter); + break; case RES_FAILCNT: counter->failcnt = 0; break; + case RES_RSVD_FAILCNT: + rsvd_counter->failcnt = 0; + break; default: ret = -EINVAL; break; @@ -471,7 +518,7 @@ static void __init __hugetlb_cgroup_file struct hstate *h = &hstates[idx]; /* format the size */ - mem_fmt(buf, 32, huge_page_size(h)); + mem_fmt(buf, sizeof(buf), huge_page_size(h)); /* Add the limit file */ cft = &h->cgroup_files_dfl[0]; @@ -481,15 +528,30 @@ static void __init __hugetlb_cgroup_file cft->write = hugetlb_cgroup_write_dfl; cft->flags = CFTYPE_NOT_ON_ROOT; - /* Add the current usage file */ + /* Add the reservation limit file */ cft = &h->cgroup_files_dfl[1]; + snprintf(cft->name, MAX_CFTYPE_NAME, "%s.rsvd.max", buf); + cft->private = MEMFILE_PRIVATE(idx, RES_RSVD_LIMIT); + cft->seq_show = hugetlb_cgroup_read_u64_max; + cft->write = hugetlb_cgroup_write_dfl; + cft->flags = CFTYPE_NOT_ON_ROOT; + + /* Add the current usage file */ + cft = &h->cgroup_files_dfl[2]; snprintf(cft->name, MAX_CFTYPE_NAME, "%s.current", buf); cft->private = MEMFILE_PRIVATE(idx, RES_USAGE); cft->seq_show = hugetlb_cgroup_read_u64_max; cft->flags = CFTYPE_NOT_ON_ROOT; + /* Add the current reservation usage file */ + cft = &h->cgroup_files_dfl[3]; + snprintf(cft->name, MAX_CFTYPE_NAME, "%s.rsvd.current", buf); + cft->private = MEMFILE_PRIVATE(idx, RES_RSVD_USAGE); + cft->seq_show = hugetlb_cgroup_read_u64_max; + cft->flags = CFTYPE_NOT_ON_ROOT; + /* Add the events file */ - cft = &h->cgroup_files_dfl[2]; + cft = &h->cgroup_files_dfl[4]; snprintf(cft->name, MAX_CFTYPE_NAME, "%s.events", buf); cft->private = MEMFILE_PRIVATE(idx, 0); cft->seq_show = hugetlb_events_show; @@ -497,7 +559,7 @@ static void __init __hugetlb_cgroup_file cft->flags = CFTYPE_NOT_ON_ROOT; /* Add the events.local file */ - cft = &h->cgroup_files_dfl[3]; + cft = &h->cgroup_files_dfl[5]; snprintf(cft->name, MAX_CFTYPE_NAME, "%s.events.local", buf); cft->private = MEMFILE_PRIVATE(idx, 0); cft->seq_show = hugetlb_events_local_show; @@ -506,7 +568,7 @@ static void __init __hugetlb_cgroup_file cft->flags = CFTYPE_NOT_ON_ROOT; /* NULL terminate the last cft */ - cft = &h->cgroup_files_dfl[4]; + cft = &h->cgroup_files_dfl[6]; memset(cft, 0, sizeof(*cft)); WARN_ON(cgroup_add_dfl_cftypes(&hugetlb_cgrp_subsys, @@ -520,7 +582,7 @@ static void __init __hugetlb_cgroup_file struct hstate *h = &hstates[idx]; /* format the size */ - mem_fmt(buf, 32, huge_page_size(h)); + mem_fmt(buf, sizeof(buf), huge_page_size(h)); /* Add the limit file */ cft = &h->cgroup_files_legacy[0]; @@ -529,28 +591,55 @@ static void __init __hugetlb_cgroup_file cft->read_u64 = hugetlb_cgroup_read_u64; cft->write = hugetlb_cgroup_write_legacy; - /* Add the usage file */ + /* Add the reservation limit file */ cft = &h->cgroup_files_legacy[1]; + snprintf(cft->name, MAX_CFTYPE_NAME, "%s.rsvd.limit_in_bytes", buf); + cft->private = MEMFILE_PRIVATE(idx, RES_RSVD_LIMIT); + cft->read_u64 = hugetlb_cgroup_read_u64; + cft->write = hugetlb_cgroup_write_legacy; + + /* Add the usage file */ + cft = &h->cgroup_files_legacy[2]; snprintf(cft->name, MAX_CFTYPE_NAME, "%s.usage_in_bytes", buf); cft->private = MEMFILE_PRIVATE(idx, RES_USAGE); cft->read_u64 = hugetlb_cgroup_read_u64; + /* Add the reservation usage file */ + cft = &h->cgroup_files_legacy[3]; + snprintf(cft->name, MAX_CFTYPE_NAME, "%s.rsvd.usage_in_bytes", buf); + cft->private = MEMFILE_PRIVATE(idx, RES_RSVD_USAGE); + cft->read_u64 = hugetlb_cgroup_read_u64; + /* Add the MAX usage file */ - cft = &h->cgroup_files_legacy[2]; + cft = &h->cgroup_files_legacy[4]; snprintf(cft->name, MAX_CFTYPE_NAME, "%s.max_usage_in_bytes", buf); cft->private = MEMFILE_PRIVATE(idx, RES_MAX_USAGE); cft->write = hugetlb_cgroup_reset; cft->read_u64 = hugetlb_cgroup_read_u64; + /* Add the MAX reservation usage file */ + cft = &h->cgroup_files_legacy[5]; + snprintf(cft->name, MAX_CFTYPE_NAME, "%s.rsvd.max_usage_in_bytes", buf); + cft->private = MEMFILE_PRIVATE(idx, RES_RSVD_MAX_USAGE); + cft->write = hugetlb_cgroup_reset; + cft->read_u64 = hugetlb_cgroup_read_u64; + /* Add the failcntfile */ - cft = &h->cgroup_files_legacy[3]; + cft = &h->cgroup_files_legacy[6]; snprintf(cft->name, MAX_CFTYPE_NAME, "%s.failcnt", buf); - cft->private = MEMFILE_PRIVATE(idx, RES_FAILCNT); + cft->private = MEMFILE_PRIVATE(idx, RES_FAILCNT); + cft->write = hugetlb_cgroup_reset; + cft->read_u64 = hugetlb_cgroup_read_u64; + + /* Add the reservation failcntfile */ + cft = &h->cgroup_files_legacy[7]; + snprintf(cft->name, MAX_CFTYPE_NAME, "%s.rsvd.failcnt", buf); + cft->private = MEMFILE_PRIVATE(idx, RES_RSVD_FAILCNT); cft->write = hugetlb_cgroup_reset; cft->read_u64 = hugetlb_cgroup_read_u64; /* NULL terminate the last cft */ - cft = &h->cgroup_files_legacy[4]; + cft = &h->cgroup_files_legacy[8]; memset(cft, 0, sizeof(*cft)); WARN_ON(cgroup_add_legacy_cftypes(&hugetlb_cgrp_subsys, _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 142/155] hugetlb_cgroup: add interface for charge/uncharge hugetlb reservations 2020-04-02 4:01 incoming Andrew Morton ` (140 preceding siblings ...) 2020-04-02 4:11 ` [patch 141/155] hugetlb_cgroup: add hugetlb_cgroup reservation counter Andrew Morton @ 2020-04-02 4:11 ` Andrew Morton 2020-04-02 4:11 ` [patch 143/155] mm/hugetlb_cgroup: fix hugetlb_cgroup migration Andrew Morton ` (12 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:11 UTC (permalink / raw) To: akpm, almasrymina, gthelen, linux-mm, mike.kravetz, mm-commits, rientjes, sandipan, shakeelb, shuah, torvalds From: Mina Almasry <almasrymina@google.com> Subject: hugetlb_cgroup: add interface for charge/uncharge hugetlb reservations Augments hugetlb_cgroup_charge_cgroup to be able to charge hugetlb usage or hugetlb reservation counter. Adds a new interface to uncharge a hugetlb_cgroup counter via hugetlb_cgroup_uncharge_counter. Integrates the counter with hugetlb_cgroup, via hugetlb_cgroup_init, hugetlb_cgroup_have_usage, and hugetlb_cgroup_css_offline. Link: http://lkml.kernel.org/r/20200211213128.73302-2-almasrymina@google.com Signed-off-by: Mina Almasry <almasrymina@google.com> Acked-by: Mike Kravetz <mike.kravetz@oracle.com> Acked-by: David Rientjes <rientjes@google.com> Cc: Greg Thelen <gthelen@google.com> Cc: Sandipan Das <sandipan@linux.ibm.com> Cc: Shakeel Butt <shakeelb@google.com> Cc: Shuah Khan <shuah@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/hugetlb_cgroup.h | 123 ++++++++++++++++++--- mm/hugetlb.c | 2 mm/hugetlb_cgroup.c | 174 +++++++++++++++++++++++++------ 3 files changed, 251 insertions(+), 48 deletions(-) --- a/include/linux/hugetlb_cgroup.h~hugetlb_cgroup-add-interface-for-charge-uncharge-hugetlb-reservations +++ a/include/linux/hugetlb_cgroup.h @@ -20,32 +20,64 @@ struct hugetlb_cgroup; /* * Minimum page order trackable by hugetlb cgroup. - * At least 3 pages are necessary for all the tracking information. + * At least 4 pages are necessary for all the tracking information. + * The second tail page (hpage[2]) is the fault usage cgroup. + * The third tail page (hpage[3]) is the reservation usage cgroup. */ #define HUGETLB_CGROUP_MIN_ORDER 2 #ifdef CONFIG_CGROUP_HUGETLB -static inline struct hugetlb_cgroup *hugetlb_cgroup_from_page(struct page *page) +static inline struct hugetlb_cgroup * +__hugetlb_cgroup_from_page(struct page *page, bool rsvd) { VM_BUG_ON_PAGE(!PageHuge(page), page); if (compound_order(page) < HUGETLB_CGROUP_MIN_ORDER) return NULL; - return (struct hugetlb_cgroup *)page[2].private; + if (rsvd) + return (struct hugetlb_cgroup *)page[3].private; + else + return (struct hugetlb_cgroup *)page[2].private; +} + +static inline struct hugetlb_cgroup *hugetlb_cgroup_from_page(struct page *page) +{ + return __hugetlb_cgroup_from_page(page, false); } -static inline -int set_hugetlb_cgroup(struct page *page, struct hugetlb_cgroup *h_cg) +static inline struct hugetlb_cgroup * +hugetlb_cgroup_from_page_rsvd(struct page *page) +{ + return __hugetlb_cgroup_from_page(page, true); +} + +static inline int __set_hugetlb_cgroup(struct page *page, + struct hugetlb_cgroup *h_cg, bool rsvd) { VM_BUG_ON_PAGE(!PageHuge(page), page); if (compound_order(page) < HUGETLB_CGROUP_MIN_ORDER) return -1; - page[2].private = (unsigned long)h_cg; + if (rsvd) + page[3].private = (unsigned long)h_cg; + else + page[2].private = (unsigned long)h_cg; return 0; } +static inline int set_hugetlb_cgroup(struct page *page, + struct hugetlb_cgroup *h_cg) +{ + return __set_hugetlb_cgroup(page, h_cg, false); +} + +static inline int set_hugetlb_cgroup_rsvd(struct page *page, + struct hugetlb_cgroup *h_cg) +{ + return __set_hugetlb_cgroup(page, h_cg, true); +} + static inline bool hugetlb_cgroup_disabled(void) { return !cgroup_subsys_enabled(hugetlb_cgrp_subsys); @@ -53,13 +85,27 @@ static inline bool hugetlb_cgroup_disabl extern int hugetlb_cgroup_charge_cgroup(int idx, unsigned long nr_pages, struct hugetlb_cgroup **ptr); +extern int hugetlb_cgroup_charge_cgroup_rsvd(int idx, unsigned long nr_pages, + struct hugetlb_cgroup **ptr); extern void hugetlb_cgroup_commit_charge(int idx, unsigned long nr_pages, struct hugetlb_cgroup *h_cg, struct page *page); +extern void hugetlb_cgroup_commit_charge_rsvd(int idx, unsigned long nr_pages, + struct hugetlb_cgroup *h_cg, + struct page *page); extern void hugetlb_cgroup_uncharge_page(int idx, unsigned long nr_pages, struct page *page); +extern void hugetlb_cgroup_uncharge_page_rsvd(int idx, unsigned long nr_pages, + struct page *page); + extern void hugetlb_cgroup_uncharge_cgroup(int idx, unsigned long nr_pages, struct hugetlb_cgroup *h_cg); +extern void hugetlb_cgroup_uncharge_cgroup_rsvd(int idx, unsigned long nr_pages, + struct hugetlb_cgroup *h_cg); +extern void hugetlb_cgroup_uncharge_counter(struct page_counter *p, + unsigned long nr_pages, + struct cgroup_subsys_state *css); + extern void hugetlb_cgroup_file_init(void) __init; extern void hugetlb_cgroup_migrate(struct page *oldhpage, struct page *newhpage); @@ -70,8 +116,26 @@ static inline struct hugetlb_cgroup *hug return NULL; } -static inline -int set_hugetlb_cgroup(struct page *page, struct hugetlb_cgroup *h_cg) +static inline struct hugetlb_cgroup * +hugetlb_cgroup_from_page_resv(struct page *page) +{ + return NULL; +} + +static inline struct hugetlb_cgroup * +hugetlb_cgroup_from_page_rsvd(struct page *page) +{ + return NULL; +} + +static inline int set_hugetlb_cgroup(struct page *page, + struct hugetlb_cgroup *h_cg) +{ + return 0; +} + +static inline int set_hugetlb_cgroup_rsvd(struct page *page, + struct hugetlb_cgroup *h_cg) { return 0; } @@ -81,28 +145,51 @@ static inline bool hugetlb_cgroup_disabl return true; } -static inline int -hugetlb_cgroup_charge_cgroup(int idx, unsigned long nr_pages, - struct hugetlb_cgroup **ptr) +static inline int hugetlb_cgroup_charge_cgroup(int idx, unsigned long nr_pages, + struct hugetlb_cgroup **ptr) { return 0; } -static inline void -hugetlb_cgroup_commit_charge(int idx, unsigned long nr_pages, - struct hugetlb_cgroup *h_cg, - struct page *page) +static inline int hugetlb_cgroup_charge_cgroup_rsvd(int idx, + unsigned long nr_pages, + struct hugetlb_cgroup **ptr) +{ + return 0; +} + +static inline void hugetlb_cgroup_commit_charge(int idx, unsigned long nr_pages, + struct hugetlb_cgroup *h_cg, + struct page *page) { } static inline void -hugetlb_cgroup_uncharge_page(int idx, unsigned long nr_pages, struct page *page) +hugetlb_cgroup_commit_charge_rsvd(int idx, unsigned long nr_pages, + struct hugetlb_cgroup *h_cg, + struct page *page) +{ +} + +static inline void hugetlb_cgroup_uncharge_page(int idx, unsigned long nr_pages, + struct page *page) +{ +} + +static inline void hugetlb_cgroup_uncharge_page_rsvd(int idx, + unsigned long nr_pages, + struct page *page) +{ +} +static inline void hugetlb_cgroup_uncharge_cgroup(int idx, + unsigned long nr_pages, + struct hugetlb_cgroup *h_cg) { } static inline void -hugetlb_cgroup_uncharge_cgroup(int idx, unsigned long nr_pages, - struct hugetlb_cgroup *h_cg) +hugetlb_cgroup_uncharge_cgroup_rsvd(int idx, unsigned long nr_pages, + struct hugetlb_cgroup *h_cg) { } --- a/mm/hugetlb.c~hugetlb_cgroup-add-interface-for-charge-uncharge-hugetlb-reservations +++ a/mm/hugetlb.c @@ -1072,6 +1072,7 @@ static void update_and_free_page(struct 1 << PG_writeback); } VM_BUG_ON_PAGE(hugetlb_cgroup_from_page(page), page); + VM_BUG_ON_PAGE(hugetlb_cgroup_from_page_rsvd(page), page); set_compound_page_dtor(page, NULL_COMPOUND_DTOR); set_page_refcounted(page); if (hstate_is_gigantic(h)) { @@ -1257,6 +1258,7 @@ static void prep_new_huge_page(struct hs set_compound_page_dtor(page, HUGETLB_PAGE_DTOR); spin_lock(&hugetlb_lock); set_hugetlb_cgroup(page, NULL); + set_hugetlb_cgroup_rsvd(page, NULL); h->nr_huge_pages++; h->nr_huge_pages_node[nid]++; spin_unlock(&hugetlb_lock); --- a/mm/hugetlb_cgroup.c~hugetlb_cgroup-add-interface-for-charge-uncharge-hugetlb-reservations +++ a/mm/hugetlb_cgroup.c @@ -61,14 +61,26 @@ struct hugetlb_cgroup { static struct hugetlb_cgroup *root_h_cgroup __read_mostly; static inline struct page_counter * -hugetlb_cgroup_counter_from_cgroup(struct hugetlb_cgroup *h_cg, int idx, - bool rsvd) +__hugetlb_cgroup_counter_from_cgroup(struct hugetlb_cgroup *h_cg, int idx, + bool rsvd) { if (rsvd) return &h_cg->rsvd_hugepage[idx]; return &h_cg->hugepage[idx]; } +static inline struct page_counter * +hugetlb_cgroup_counter_from_cgroup(struct hugetlb_cgroup *h_cg, int idx) +{ + return __hugetlb_cgroup_counter_from_cgroup(h_cg, idx, false); +} + +static inline struct page_counter * +hugetlb_cgroup_counter_from_cgroup_rsvd(struct hugetlb_cgroup *h_cg, int idx) +{ + return __hugetlb_cgroup_counter_from_cgroup(h_cg, idx, true); +} + static inline struct hugetlb_cgroup *hugetlb_cgroup_from_css(struct cgroup_subsys_state *s) { @@ -97,8 +109,12 @@ static inline bool hugetlb_cgroup_have_u int idx; for (idx = 0; idx < hugetlb_max_hstate; idx++) { - if (page_counter_read(&h_cg->hugepage[idx])) + if (page_counter_read( + hugetlb_cgroup_counter_from_cgroup(h_cg, idx)) || + page_counter_read(hugetlb_cgroup_counter_from_cgroup_rsvd( + h_cg, idx))) { return true; + } } return false; } @@ -109,18 +125,34 @@ static void hugetlb_cgroup_init(struct h int idx; for (idx = 0; idx < HUGE_MAX_HSTATE; idx++) { - struct page_counter *counter = &h_cgroup->hugepage[idx]; - struct page_counter *parent = NULL; + struct page_counter *fault_parent = NULL; + struct page_counter *rsvd_parent = NULL; unsigned long limit; int ret; - if (parent_h_cgroup) - parent = &parent_h_cgroup->hugepage[idx]; - page_counter_init(counter, parent); + if (parent_h_cgroup) { + fault_parent = hugetlb_cgroup_counter_from_cgroup( + parent_h_cgroup, idx); + rsvd_parent = hugetlb_cgroup_counter_from_cgroup_rsvd( + parent_h_cgroup, idx); + } + page_counter_init(hugetlb_cgroup_counter_from_cgroup(h_cgroup, + idx), + fault_parent); + page_counter_init( + hugetlb_cgroup_counter_from_cgroup_rsvd(h_cgroup, idx), + rsvd_parent); limit = round_down(PAGE_COUNTER_MAX, 1 << huge_page_order(&hstates[idx])); - ret = page_counter_set_max(counter, limit); + + ret = page_counter_set_max( + hugetlb_cgroup_counter_from_cgroup(h_cgroup, idx), + limit); + VM_BUG_ON(ret); + ret = page_counter_set_max( + hugetlb_cgroup_counter_from_cgroup_rsvd(h_cgroup, idx), + limit); VM_BUG_ON(ret); } } @@ -150,7 +182,6 @@ static void hugetlb_cgroup_css_free(stru kfree(h_cgroup); } - /* * Should be called with hugetlb_lock held. * Since we are holding hugetlb_lock, pages cannot get moved from @@ -227,8 +258,9 @@ static inline void hugetlb_event(struct !hugetlb_cgroup_is_root(hugetlb)); } -int hugetlb_cgroup_charge_cgroup(int idx, unsigned long nr_pages, - struct hugetlb_cgroup **ptr) +static int __hugetlb_cgroup_charge_cgroup(int idx, unsigned long nr_pages, + struct hugetlb_cgroup **ptr, + bool rsvd) { int ret = 0; struct page_counter *counter; @@ -251,50 +283,103 @@ again: } rcu_read_unlock(); - if (!page_counter_try_charge(&h_cg->hugepage[idx], nr_pages, - &counter)) { + if (!page_counter_try_charge( + __hugetlb_cgroup_counter_from_cgroup(h_cg, idx, rsvd), + nr_pages, &counter)) { ret = -ENOMEM; hugetlb_event(h_cg, idx, HUGETLB_MAX); + css_put(&h_cg->css); + goto done; } - css_put(&h_cg->css); + /* Reservations take a reference to the css because they do not get + * reparented. + */ + if (!rsvd) + css_put(&h_cg->css); done: *ptr = h_cg; return ret; } +int hugetlb_cgroup_charge_cgroup(int idx, unsigned long nr_pages, + struct hugetlb_cgroup **ptr) +{ + return __hugetlb_cgroup_charge_cgroup(idx, nr_pages, ptr, false); +} + +int hugetlb_cgroup_charge_cgroup_rsvd(int idx, unsigned long nr_pages, + struct hugetlb_cgroup **ptr) +{ + return __hugetlb_cgroup_charge_cgroup(idx, nr_pages, ptr, true); +} + /* Should be called with hugetlb_lock held */ -void hugetlb_cgroup_commit_charge(int idx, unsigned long nr_pages, - struct hugetlb_cgroup *h_cg, - struct page *page) +static void __hugetlb_cgroup_commit_charge(int idx, unsigned long nr_pages, + struct hugetlb_cgroup *h_cg, + struct page *page, bool rsvd) { if (hugetlb_cgroup_disabled() || !h_cg) return; - set_hugetlb_cgroup(page, h_cg); + __set_hugetlb_cgroup(page, h_cg, rsvd); return; } +void hugetlb_cgroup_commit_charge(int idx, unsigned long nr_pages, + struct hugetlb_cgroup *h_cg, + struct page *page) +{ + __hugetlb_cgroup_commit_charge(idx, nr_pages, h_cg, page, false); +} + +void hugetlb_cgroup_commit_charge_rsvd(int idx, unsigned long nr_pages, + struct hugetlb_cgroup *h_cg, + struct page *page) +{ + __hugetlb_cgroup_commit_charge(idx, nr_pages, h_cg, page, true); +} + /* * Should be called with hugetlb_lock held */ -void hugetlb_cgroup_uncharge_page(int idx, unsigned long nr_pages, - struct page *page) +static void __hugetlb_cgroup_uncharge_page(int idx, unsigned long nr_pages, + struct page *page, bool rsvd) { struct hugetlb_cgroup *h_cg; if (hugetlb_cgroup_disabled()) return; lockdep_assert_held(&hugetlb_lock); - h_cg = hugetlb_cgroup_from_page(page); + h_cg = __hugetlb_cgroup_from_page(page, rsvd); if (unlikely(!h_cg)) return; - set_hugetlb_cgroup(page, NULL); - page_counter_uncharge(&h_cg->hugepage[idx], nr_pages); + __set_hugetlb_cgroup(page, NULL, rsvd); + + page_counter_uncharge(__hugetlb_cgroup_counter_from_cgroup(h_cg, idx, + rsvd), + nr_pages); + + if (rsvd) + css_put(&h_cg->css); + return; } -void hugetlb_cgroup_uncharge_cgroup(int idx, unsigned long nr_pages, - struct hugetlb_cgroup *h_cg) +void hugetlb_cgroup_uncharge_page(int idx, unsigned long nr_pages, + struct page *page) +{ + __hugetlb_cgroup_uncharge_page(idx, nr_pages, page, false); +} + +void hugetlb_cgroup_uncharge_page_rsvd(int idx, unsigned long nr_pages, + struct page *page) +{ + __hugetlb_cgroup_uncharge_page(idx, nr_pages, page, true); +} + +static void __hugetlb_cgroup_uncharge_cgroup(int idx, unsigned long nr_pages, + struct hugetlb_cgroup *h_cg, + bool rsvd) { if (hugetlb_cgroup_disabled() || !h_cg) return; @@ -302,8 +387,35 @@ void hugetlb_cgroup_uncharge_cgroup(int if (huge_page_order(&hstates[idx]) < HUGETLB_CGROUP_MIN_ORDER) return; - page_counter_uncharge(&h_cg->hugepage[idx], nr_pages); - return; + page_counter_uncharge(__hugetlb_cgroup_counter_from_cgroup(h_cg, idx, + rsvd), + nr_pages); + + if (rsvd) + css_put(&h_cg->css); +} + +void hugetlb_cgroup_uncharge_cgroup(int idx, unsigned long nr_pages, + struct hugetlb_cgroup *h_cg) +{ + __hugetlb_cgroup_uncharge_cgroup(idx, nr_pages, h_cg, false); +} + +void hugetlb_cgroup_uncharge_cgroup_rsvd(int idx, unsigned long nr_pages, + struct hugetlb_cgroup *h_cg) +{ + __hugetlb_cgroup_uncharge_cgroup(idx, nr_pages, h_cg, true); +} + +void hugetlb_cgroup_uncharge_counter(struct page_counter *p, + unsigned long nr_pages, + struct cgroup_subsys_state *css) +{ + if (hugetlb_cgroup_disabled() || !p || !css) + return; + + page_counter_uncharge(p, nr_pages); + css_put(css); } enum { @@ -418,7 +530,7 @@ static ssize_t hugetlb_cgroup_write(stru case RES_LIMIT: mutex_lock(&hugetlb_limit_mutex); ret = page_counter_set_max( - hugetlb_cgroup_counter_from_cgroup(h_cg, idx, rsvd), + __hugetlb_cgroup_counter_from_cgroup(h_cg, idx, rsvd), nr_pages); mutex_unlock(&hugetlb_limit_mutex); break; @@ -674,6 +786,7 @@ void __init hugetlb_cgroup_file_init(voi void hugetlb_cgroup_migrate(struct page *oldhpage, struct page *newhpage) { struct hugetlb_cgroup *h_cg; + struct hugetlb_cgroup *h_cg_rsvd; struct hstate *h = page_hstate(oldhpage); if (hugetlb_cgroup_disabled()) @@ -682,10 +795,11 @@ void hugetlb_cgroup_migrate(struct page VM_BUG_ON_PAGE(!PageHuge(oldhpage), oldhpage); spin_lock(&hugetlb_lock); h_cg = hugetlb_cgroup_from_page(oldhpage); + h_cg_rsvd = hugetlb_cgroup_from_page_rsvd(oldhpage); set_hugetlb_cgroup(oldhpage, NULL); /* move the h_cg details to new cgroup */ - set_hugetlb_cgroup(newhpage, h_cg); + set_hugetlb_cgroup_rsvd(newhpage, h_cg_rsvd); list_move(&newhpage->lru, &h->hugepage_activelist); spin_unlock(&hugetlb_lock); return; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 143/155] mm/hugetlb_cgroup: fix hugetlb_cgroup migration 2020-04-02 4:01 incoming Andrew Morton ` (141 preceding siblings ...) 2020-04-02 4:11 ` [patch 142/155] hugetlb_cgroup: add interface for charge/uncharge hugetlb reservations Andrew Morton @ 2020-04-02 4:11 ` Andrew Morton 2020-04-02 4:11 ` [patch 144/155] hugetlb_cgroup: add reservation accounting for private mappings Andrew Morton ` (11 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:11 UTC (permalink / raw) To: akpm, almasrymina, cai, gthelen, linux-mm, mike.kravetz, mm-commits, rientjes, sandipan, shakeelb, shuah, torvalds From: Mina Almasry <almasrymina@google.com> Subject: mm/hugetlb_cgroup: fix hugetlb_cgroup migration commit c32300516047 ("hugetlb_cgroup: add interface for charge/uncharge hugetlb reservations") mistakingly doesn't handle the migration of *both* the reservation hugetlb_cgroup and the fault hugetlb_cgroup correctly. What should happen is that both cgroups shuold be queried from the old page, then both set to NULL on the old page, then both inserted into the new page. The mistake also creates the following warning: mm/hugetlb_cgroup.c: In function 'hugetlb_cgroup_migrate': mm/hugetlb_cgroup.c:777:25: warning: variable 'h_cg' set but not used [-Wunused-but-set-variable] struct hugetlb_cgroup *h_cg; ^~~~ Solution is to add the missing steps, namly setting the reservation hugetlb_cgroup to NULL on the old page, and setting the fault hugetlb_cgroup on the new page. Link: http://lkml.kernel.org/r/20200218194727.46995-1-almasrymina@google.com Fixes: c32300516047 ("hugetlb_cgroup: add interface for charge/uncharge hugetlb reservations") Signed-off-by: Mina Almasry <almasrymina@google.com> Reported-by: Qian Cai <cai@lca.pw> Cc: David Rientjes <rientjes@google.com> Cc: Greg Thelen <gthelen@google.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Sandipan Das <sandipan@linux.ibm.com> Cc: Shakeel Butt <shakeelb@google.com> Cc: Shuah Khan <shuah@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/hugetlb_cgroup.c | 2 ++ 1 file changed, 2 insertions(+) --- a/mm/hugetlb_cgroup.c~mm-hugetlb_cgroup-fix-hugetlb_cgroup-migration +++ a/mm/hugetlb_cgroup.c @@ -797,8 +797,10 @@ void hugetlb_cgroup_migrate(struct page h_cg = hugetlb_cgroup_from_page(oldhpage); h_cg_rsvd = hugetlb_cgroup_from_page_rsvd(oldhpage); set_hugetlb_cgroup(oldhpage, NULL); + set_hugetlb_cgroup_rsvd(oldhpage, NULL); /* move the h_cg details to new cgroup */ + set_hugetlb_cgroup(newhpage, h_cg); set_hugetlb_cgroup_rsvd(newhpage, h_cg_rsvd); list_move(&newhpage->lru, &h->hugepage_activelist); spin_unlock(&hugetlb_lock); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 144/155] hugetlb_cgroup: add reservation accounting for private mappings 2020-04-02 4:01 incoming Andrew Morton ` (142 preceding siblings ...) 2020-04-02 4:11 ` [patch 143/155] mm/hugetlb_cgroup: fix hugetlb_cgroup migration Andrew Morton @ 2020-04-02 4:11 ` Andrew Morton 2020-04-02 4:11 ` [patch 145/155] hugetlb: disable region_add file_region coalescing Andrew Morton ` (10 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:11 UTC (permalink / raw) To: akpm, almasrymina, gthelen, linux-mm, mike.kravetz, mm-commits, rientjes, sandipan, shakeelb, shuah, torvalds From: Mina Almasry <almasrymina@google.com> Subject: hugetlb_cgroup: add reservation accounting for private mappings Normally the pointer to the cgroup to uncharge hangs off the struct page, and gets queried when it's time to free the page. With hugetlb_cgroup reservations, this is not possible. Because it's possible for a page to be reserved by one task and actually faulted in by another task. The best place to put the hugetlb_cgroup pointer to uncharge for reservations is in the resv_map. But, because the resv_map has different semantics for private and shared mappings, the code patch to charge/uncharge shared and private mappings is different. This patch implements charging and uncharging for private mappings. For private mappings, the counter to uncharge is in resv_map->reservation_counter. On initializing the resv_map this is set to NULL. On reservation of a region in private mapping, the tasks hugetlb_cgroup is charged and the hugetlb_cgroup is placed is resv_map->reservation_counter. On hugetlb_vm_op_close, we uncharge resv_map->reservation_counter. [akpm@linux-foundation.org: forward declare struct resv_map] Link: http://lkml.kernel.org/r/20200211213128.73302-3-almasrymina@google.com Signed-off-by: Mina Almasry <almasrymina@google.com> Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com> Acked-by: David Rientjes <rientjes@google.com> Cc: Greg Thelen <gthelen@google.com> Cc: Sandipan Das <sandipan@linux.ibm.com> Cc: Shakeel Butt <shakeelb@google.com> Cc: Shuah Khan <shuah@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/hugetlb.h | 10 ++++++ include/linux/hugetlb_cgroup.h | 41 +++++++++++++++++++++++++-- mm/hugetlb.c | 47 +++++++++++++++++++++++++++++-- mm/hugetlb_cgroup.c | 41 ++++----------------------- 4 files changed, 99 insertions(+), 40 deletions(-) --- a/include/linux/hugetlb_cgroup.h~hugetlb_cgroup-add-reservation-accounting-for-private-mappings +++ a/include/linux/hugetlb_cgroup.h @@ -18,6 +18,8 @@ #include <linux/mmdebug.h> struct hugetlb_cgroup; +struct resv_map; + /* * Minimum page order trackable by hugetlb cgroup. * At least 4 pages are necessary for all the tracking information. @@ -27,6 +29,33 @@ struct hugetlb_cgroup; #define HUGETLB_CGROUP_MIN_ORDER 2 #ifdef CONFIG_CGROUP_HUGETLB +enum hugetlb_memory_event { + HUGETLB_MAX, + HUGETLB_NR_MEMORY_EVENTS, +}; + +struct hugetlb_cgroup { + struct cgroup_subsys_state css; + + /* + * the counter to account for hugepages from hugetlb. + */ + struct page_counter hugepage[HUGE_MAX_HSTATE]; + + /* + * the counter to account for hugepage reservations from hugetlb. + */ + struct page_counter rsvd_hugepage[HUGE_MAX_HSTATE]; + + atomic_long_t events[HUGE_MAX_HSTATE][HUGETLB_NR_MEMORY_EVENTS]; + atomic_long_t events_local[HUGE_MAX_HSTATE][HUGETLB_NR_MEMORY_EVENTS]; + + /* Handle for "hugetlb.events" */ + struct cgroup_file events_file[HUGE_MAX_HSTATE]; + + /* Handle for "hugetlb.events.local" */ + struct cgroup_file events_local_file[HUGE_MAX_HSTATE]; +}; static inline struct hugetlb_cgroup * __hugetlb_cgroup_from_page(struct page *page, bool rsvd) @@ -102,9 +131,9 @@ extern void hugetlb_cgroup_uncharge_cgro struct hugetlb_cgroup *h_cg); extern void hugetlb_cgroup_uncharge_cgroup_rsvd(int idx, unsigned long nr_pages, struct hugetlb_cgroup *h_cg); -extern void hugetlb_cgroup_uncharge_counter(struct page_counter *p, - unsigned long nr_pages, - struct cgroup_subsys_state *css); +extern void hugetlb_cgroup_uncharge_counter(struct resv_map *resv, + unsigned long start, + unsigned long end); extern void hugetlb_cgroup_file_init(void) __init; extern void hugetlb_cgroup_migrate(struct page *oldhpage, @@ -193,6 +222,12 @@ hugetlb_cgroup_uncharge_cgroup_rsvd(int { } +static inline void hugetlb_cgroup_uncharge_counter(struct resv_map *resv, + unsigned long start, + unsigned long end) +{ +} + static inline void hugetlb_cgroup_file_init(void) { } --- a/include/linux/hugetlb.h~hugetlb_cgroup-add-reservation-accounting-for-private-mappings +++ a/include/linux/hugetlb.h @@ -46,6 +46,16 @@ struct resv_map { long adds_in_progress; struct list_head region_cache; long region_cache_count; +#ifdef CONFIG_CGROUP_HUGETLB + /* + * On private mappings, the counter to uncharge reservations is stored + * here. If these fields are 0, then either the mapping is shared, or + * cgroup accounting is disabled for this resv_map. + */ + struct page_counter *reservation_counter; + unsigned long pages_per_hpage; + struct cgroup_subsys_state *css; +#endif }; extern struct resv_map *resv_map_alloc(void); void resv_map_release(struct kref *ref); --- a/mm/hugetlb.c~hugetlb_cgroup-add-reservation-accounting-for-private-mappings +++ a/mm/hugetlb.c @@ -650,6 +650,25 @@ static void set_vma_private_data(struct vma->vm_private_data = (void *)value; } +static void +resv_map_set_hugetlb_cgroup_uncharge_info(struct resv_map *resv_map, + struct hugetlb_cgroup *h_cg, + struct hstate *h) +{ +#ifdef CONFIG_CGROUP_HUGETLB + if (!h_cg || !h) { + resv_map->reservation_counter = NULL; + resv_map->pages_per_hpage = 0; + resv_map->css = NULL; + } else { + resv_map->reservation_counter = + &h_cg->rsvd_hugepage[hstate_index(h)]; + resv_map->pages_per_hpage = pages_per_huge_page(h); + resv_map->css = &h_cg->css; + } +#endif +} + struct resv_map *resv_map_alloc(void) { struct resv_map *resv_map = kmalloc(sizeof(*resv_map), GFP_KERNEL); @@ -666,6 +685,13 @@ struct resv_map *resv_map_alloc(void) INIT_LIST_HEAD(&resv_map->regions); resv_map->adds_in_progress = 0; + /* + * Initialize these to 0. On shared mappings, 0's here indicate these + * fields don't do cgroup accounting. On private mappings, these will be + * re-initialized to the proper values, to indicate that hugetlb cgroup + * reservations are to be un-charged from here. + */ + resv_map_set_hugetlb_cgroup_uncharge_info(resv_map, NULL, NULL); INIT_LIST_HEAD(&resv_map->region_cache); list_add(&rg->link, &resv_map->region_cache); @@ -3296,9 +3322,7 @@ static void hugetlb_vm_op_close(struct v end = vma_hugecache_offset(h, vma, vma->vm_end); reserve = (end - start) - region_count(resv, start, end); - - kref_put(&resv->refs, resv_map_release); - + hugetlb_cgroup_uncharge_counter(resv, start, end); if (reserve) { /* * Decrement reserve counts. The global reserve count may be @@ -3307,6 +3331,8 @@ static void hugetlb_vm_op_close(struct v gbl_reserve = hugepage_subpool_put_pages(spool, reserve); hugetlb_acct_memory(h, -gbl_reserve); } + + kref_put(&resv->refs, resv_map_release); } static int hugetlb_vm_op_split(struct vm_area_struct *vma, unsigned long addr) @@ -4691,6 +4717,7 @@ int hugetlb_reserve_pages(struct inode * struct hstate *h = hstate_inode(inode); struct hugepage_subpool *spool = subpool_inode(inode); struct resv_map *resv_map; + struct hugetlb_cgroup *h_cg; long gbl_reserve; /* This should never happen */ @@ -4724,12 +4751,26 @@ int hugetlb_reserve_pages(struct inode * chg = region_chg(resv_map, from, to); } else { + /* Private mapping. */ resv_map = resv_map_alloc(); if (!resv_map) return -ENOMEM; chg = to - from; + if (hugetlb_cgroup_charge_cgroup_rsvd( + hstate_index(h), chg * pages_per_huge_page(h), + &h_cg)) { + kref_put(&resv_map->refs, resv_map_release); + return -ENOMEM; + } + + /* + * Since this branch handles private mappings, we attach the + * counter to uncharge for this reservation off resv_map. + */ + resv_map_set_hugetlb_cgroup_uncharge_info(resv_map, h_cg, h); + set_vma_resv_map(vma, resv_map); set_vma_resv_flags(vma, HPAGE_RESV_OWNER); } --- a/mm/hugetlb_cgroup.c~hugetlb_cgroup-add-reservation-accounting-for-private-mappings +++ a/mm/hugetlb_cgroup.c @@ -23,34 +23,6 @@ #include <linux/hugetlb.h> #include <linux/hugetlb_cgroup.h> -enum hugetlb_memory_event { - HUGETLB_MAX, - HUGETLB_NR_MEMORY_EVENTS, -}; - -struct hugetlb_cgroup { - struct cgroup_subsys_state css; - - /* - * the counter to account for hugepages from hugetlb. - */ - struct page_counter hugepage[HUGE_MAX_HSTATE]; - - /* - * the counter to account for hugepage reservations from hugetlb. - */ - struct page_counter rsvd_hugepage[HUGE_MAX_HSTATE]; - - atomic_long_t events[HUGE_MAX_HSTATE][HUGETLB_NR_MEMORY_EVENTS]; - atomic_long_t events_local[HUGE_MAX_HSTATE][HUGETLB_NR_MEMORY_EVENTS]; - - /* Handle for "hugetlb.events" */ - struct cgroup_file events_file[HUGE_MAX_HSTATE]; - - /* Handle for "hugetlb.events.local" */ - struct cgroup_file events_local_file[HUGE_MAX_HSTATE]; -}; - #define MEMFILE_PRIVATE(x, val) (((x) << 16) | (val)) #define MEMFILE_IDX(val) (((val) >> 16) & 0xffff) #define MEMFILE_ATTR(val) ((val) & 0xffff) @@ -407,15 +379,16 @@ void hugetlb_cgroup_uncharge_cgroup_rsvd __hugetlb_cgroup_uncharge_cgroup(idx, nr_pages, h_cg, true); } -void hugetlb_cgroup_uncharge_counter(struct page_counter *p, - unsigned long nr_pages, - struct cgroup_subsys_state *css) +void hugetlb_cgroup_uncharge_counter(struct resv_map *resv, unsigned long start, + unsigned long end) { - if (hugetlb_cgroup_disabled() || !p || !css) + if (hugetlb_cgroup_disabled() || !resv || !resv->reservation_counter || + !resv->css) return; - page_counter_uncharge(p, nr_pages); - css_put(css); + page_counter_uncharge(resv->reservation_counter, + (end - start) * resv->pages_per_hpage); + css_put(resv->css); } enum { _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 145/155] hugetlb: disable region_add file_region coalescing 2020-04-02 4:01 incoming Andrew Morton ` (143 preceding siblings ...) 2020-04-02 4:11 ` [patch 144/155] hugetlb_cgroup: add reservation accounting for private mappings Andrew Morton @ 2020-04-02 4:11 ` Andrew Morton 2020-04-02 4:11 ` [patch 146/155] hugetlb_cgroup: add accounting for shared mappings Andrew Morton ` (9 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:11 UTC (permalink / raw) To: akpm, almasrymina, gthelen, linux-mm, miguel.ojeda.sandonis, mike.kravetz, mm-commits, rientjes, sandipan, shakeelb, shuah, torvalds From: Mina Almasry <almasrymina@google.com> Subject: hugetlb: disable region_add file_region coalescing A follow up patch in this series adds hugetlb cgroup uncharge info the file_region entries in resv->regions. The cgroup uncharge info may differ for different regions, so they can no longer be coalesced at region_add time. So, disable region coalescing in region_add in this patch. Behavior change: Say a resv_map exists like this [0->1], [2->3], and [5->6]. Then a region_chg/add call comes in region_chg/add(f=0, t=5). Old code would generate resv->regions: [0->5], [5->6]. New code would generate resv->regions: [0->1], [1->2], [2->3], [3->5], [5->6]. Special care needs to be taken to handle the resv->adds_in_progress variable correctly. In the past, only 1 region would be added for every region_chg and region_add call. But now, each call may add multiple regions, so we can no longer increment adds_in_progress by 1 in region_chg, or decrement adds_in_progress by 1 after region_add or region_abort. Instead, region_chg calls add_reservation_in_range() to count the number of regions needed and allocates those, and that info is passed to region_add and region_abort to decrement adds_in_progress correctly. We've also modified the assumption that region_add after region_chg never fails. region_chg now pre-allocates at least 1 region for region_add. If region_add needs more regions than region_chg has allocated for it, then it may fail. [almasrymina@google.com: fix file_region entry allocations] Link: http://lkml.kernel.org/r/20200219012736.20363-1-almasrymina@google.com Link: http://lkml.kernel.org/r/20200211213128.73302-4-almasrymina@google.com Signed-off-by: Mina Almasry <almasrymina@google.com> Acked-by: David Rientjes <rientjes@google.com> Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com> Cc: Sandipan Das <sandipan@linux.ibm.com> Cc: Shakeel Butt <shakeelb@google.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Greg Thelen <gthelen@google.com> Cc: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/hugetlb.c | 338 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 229 insertions(+), 109 deletions(-) --- a/mm/hugetlb.c~hugetlb-disable-region_add-file_region-coalescing +++ a/mm/hugetlb.c @@ -245,107 +245,217 @@ struct file_region { long to; }; +/* Helper that removes a struct file_region from the resv_map cache and returns + * it for use. + */ +static struct file_region * +get_file_region_entry_from_cache(struct resv_map *resv, long from, long to) +{ + struct file_region *nrg = NULL; + + VM_BUG_ON(resv->region_cache_count <= 0); + + resv->region_cache_count--; + nrg = list_first_entry(&resv->region_cache, struct file_region, link); + VM_BUG_ON(!nrg); + list_del(&nrg->link); + + nrg->from = from; + nrg->to = to; + + return nrg; +} + /* Must be called with resv->lock held. Calling this with count_only == true * will count the number of pages to be added but will not modify the linked - * list. + * list. If regions_needed != NULL and count_only == true, then regions_needed + * will indicate the number of file_regions needed in the cache to carry out to + * add the regions for this range. */ static long add_reservation_in_range(struct resv_map *resv, long f, long t, - bool count_only) + long *regions_needed, bool count_only) { - long chg = 0; + long add = 0; struct list_head *head = &resv->regions; + long last_accounted_offset = f; struct file_region *rg = NULL, *trg = NULL, *nrg = NULL; - /* Locate the region we are before or in. */ - list_for_each_entry(rg, head, link) - if (f <= rg->to) - break; + if (regions_needed) + *regions_needed = 0; - /* Round our left edge to the current segment if it encloses us. */ - if (f > rg->from) - f = rg->from; - - chg = t - f; - - /* Check for and consume any regions we now overlap with. */ - nrg = rg; - list_for_each_entry_safe(rg, trg, rg->link.prev, link) { - if (&rg->link == head) - break; + /* In this loop, we essentially handle an entry for the range + * [last_accounted_offset, rg->from), at every iteration, with some + * bounds checking. + */ + list_for_each_entry_safe(rg, trg, head, link) { + /* Skip irrelevant regions that start before our range. */ + if (rg->from < f) { + /* If this region ends after the last accounted offset, + * then we need to update last_accounted_offset. + */ + if (rg->to > last_accounted_offset) + last_accounted_offset = rg->to; + continue; + } + + /* When we find a region that starts beyond our range, we've + * finished. + */ if (rg->from > t) break; - /* We overlap with this area, if it extends further than - * us then we must extend ourselves. Account for its - * existing reservation. + /* Add an entry for last_accounted_offset -> rg->from, and + * update last_accounted_offset. */ - if (rg->to > t) { - chg += rg->to - t; - t = rg->to; + if (rg->from > last_accounted_offset) { + add += rg->from - last_accounted_offset; + if (!count_only) { + nrg = get_file_region_entry_from_cache( + resv, last_accounted_offset, rg->from); + list_add(&nrg->link, rg->link.prev); + } else if (regions_needed) + *regions_needed += 1; + } + + last_accounted_offset = rg->to; + } + + /* Handle the case where our range extends beyond + * last_accounted_offset. + */ + if (last_accounted_offset < t) { + add += t - last_accounted_offset; + if (!count_only) { + nrg = get_file_region_entry_from_cache( + resv, last_accounted_offset, t); + list_add(&nrg->link, rg->link.prev); + } else if (regions_needed) + *regions_needed += 1; + } + + VM_BUG_ON(add < 0); + return add; +} + +/* Must be called with resv->lock acquired. Will drop lock to allocate entries. + */ +static int allocate_file_region_entries(struct resv_map *resv, + int regions_needed) + __must_hold(&resv->lock) +{ + struct list_head allocated_regions; + int to_allocate = 0, i = 0; + struct file_region *trg = NULL, *rg = NULL; + + VM_BUG_ON(regions_needed < 0); + + INIT_LIST_HEAD(&allocated_regions); + + /* + * Check for sufficient descriptors in the cache to accommodate + * the number of in progress add operations plus regions_needed. + * + * This is a while loop because when we drop the lock, some other call + * to region_add or region_del may have consumed some region_entries, + * so we keep looping here until we finally have enough entries for + * (adds_in_progress + regions_needed). + */ + while (resv->region_cache_count < + (resv->adds_in_progress + regions_needed)) { + to_allocate = resv->adds_in_progress + regions_needed - + resv->region_cache_count; + + /* At this point, we should have enough entries in the cache + * for all the existings adds_in_progress. We should only be + * needing to allocate for regions_needed. + */ + VM_BUG_ON(resv->region_cache_count < resv->adds_in_progress); + + spin_unlock(&resv->lock); + for (i = 0; i < to_allocate; i++) { + trg = kmalloc(sizeof(*trg), GFP_KERNEL); + if (!trg) + goto out_of_memory; + list_add(&trg->link, &allocated_regions); } - chg -= rg->to - rg->from; - if (!count_only && rg != nrg) { + spin_lock(&resv->lock); + + list_for_each_entry_safe(rg, trg, &allocated_regions, link) { list_del(&rg->link); - kfree(rg); + list_add(&rg->link, &resv->region_cache); + resv->region_cache_count++; } } - if (!count_only) { - nrg->from = f; - nrg->to = t; - } + return 0; - return chg; +out_of_memory: + list_for_each_entry_safe(rg, trg, &allocated_regions, link) { + list_del(&rg->link); + kfree(rg); + } + return -ENOMEM; } /* * Add the huge page range represented by [f, t) to the reserve - * map. Existing regions will be expanded to accommodate the specified - * range, or a region will be taken from the cache. Sufficient regions - * must exist in the cache due to the previous call to region_chg with - * the same range. + * map. Regions will be taken from the cache to fill in this range. + * Sufficient regions should exist in the cache due to the previous + * call to region_chg with the same range, but in some cases the cache will not + * have sufficient entries due to races with other code doing region_add or + * region_del. The extra needed entries will be allocated. * - * Return the number of new huge pages added to the map. This - * number is greater than or equal to zero. + * regions_needed is the out value provided by a previous call to region_chg. + * + * Return the number of new huge pages added to the map. This number is greater + * than or equal to zero. If file_region entries needed to be allocated for + * this operation and we were not able to allocate, it ruturns -ENOMEM. + * region_add of regions of length 1 never allocate file_regions and cannot + * fail; region_chg will always allocate at least 1 entry and a region_add for + * 1 page will only require at most 1 entry. */ -static long region_add(struct resv_map *resv, long f, long t) +static long region_add(struct resv_map *resv, long f, long t, + long in_regions_needed) { - struct list_head *head = &resv->regions; - struct file_region *rg, *nrg; - long add = 0; + long add = 0, actual_regions_needed = 0; spin_lock(&resv->lock); - /* Locate the region we are either in or before. */ - list_for_each_entry(rg, head, link) - if (f <= rg->to) - break; +retry: - /* - * If no region exists which can be expanded to include the - * specified range, pull a region descriptor from the cache - * and use it for this range. - */ - if (&rg->link == head || t < rg->from) { - VM_BUG_ON(resv->region_cache_count <= 0); + /* Count how many regions are actually needed to execute this add. */ + add_reservation_in_range(resv, f, t, &actual_regions_needed, true); - resv->region_cache_count--; - nrg = list_first_entry(&resv->region_cache, struct file_region, - link); - list_del(&nrg->link); + /* + * Check for sufficient descriptors in the cache to accommodate + * this add operation. Note that actual_regions_needed may be greater + * than in_regions_needed, as the resv_map may have been modified since + * the region_chg call. In this case, we need to make sure that we + * allocate extra entries, such that we have enough for all the + * existing adds_in_progress, plus the excess needed for this + * operation. + */ + if (actual_regions_needed > in_regions_needed && + resv->region_cache_count < + resv->adds_in_progress + + (actual_regions_needed - in_regions_needed)) { + /* region_add operation of range 1 should never need to + * allocate file_region entries. + */ + VM_BUG_ON(t - f <= 1); - nrg->from = f; - nrg->to = t; - list_add(&nrg->link, rg->link.prev); + if (allocate_file_region_entries( + resv, actual_regions_needed - in_regions_needed)) { + return -ENOMEM; + } - add += t - f; - goto out_locked; + goto retry; } - add = add_reservation_in_range(resv, f, t, false); + add = add_reservation_in_range(resv, f, t, NULL, false); + + resv->adds_in_progress -= in_regions_needed; -out_locked: - resv->adds_in_progress--; spin_unlock(&resv->lock); VM_BUG_ON(add < 0); return add; @@ -358,46 +468,36 @@ out_locked: * call to region_add that will actually modify the reserve * map to add the specified range [f, t). region_chg does * not change the number of huge pages represented by the - * map. A new file_region structure is added to the cache - * as a placeholder, so that the subsequent region_add - * call will have all the regions it needs and will not fail. + * map. A number of new file_region structures is added to the cache as a + * placeholder, for the subsequent region_add call to use. At least 1 + * file_region structure is added. + * + * out_regions_needed is the number of regions added to the + * resv->adds_in_progress. This value needs to be provided to a follow up call + * to region_add or region_abort for proper accounting. * * Returns the number of huge pages that need to be added to the existing * reservation map for the range [f, t). This number is greater or equal to * zero. -ENOMEM is returned if a new file_region structure or cache entry * is needed and can not be allocated. */ -static long region_chg(struct resv_map *resv, long f, long t) +static long region_chg(struct resv_map *resv, long f, long t, + long *out_regions_needed) { long chg = 0; spin_lock(&resv->lock); -retry_locked: - resv->adds_in_progress++; - /* - * Check for sufficient descriptors in the cache to accommodate - * the number of in progress add operations. - */ - if (resv->adds_in_progress > resv->region_cache_count) { - struct file_region *trg; - - VM_BUG_ON(resv->adds_in_progress - resv->region_cache_count > 1); - /* Must drop lock to allocate a new descriptor. */ - resv->adds_in_progress--; - spin_unlock(&resv->lock); + /* Count how many hugepages in this range are NOT respresented. */ + chg = add_reservation_in_range(resv, f, t, out_regions_needed, true); - trg = kmalloc(sizeof(*trg), GFP_KERNEL); - if (!trg) - return -ENOMEM; + if (*out_regions_needed == 0) + *out_regions_needed = 1; - spin_lock(&resv->lock); - list_add(&trg->link, &resv->region_cache); - resv->region_cache_count++; - goto retry_locked; - } + if (allocate_file_region_entries(resv, *out_regions_needed)) + return -ENOMEM; - chg = add_reservation_in_range(resv, f, t, true); + resv->adds_in_progress += *out_regions_needed; spin_unlock(&resv->lock); return chg; @@ -408,17 +508,20 @@ retry_locked: * of the resv_map keeps track of the operations in progress between * calls to region_chg and region_add. Operations are sometimes * aborted after the call to region_chg. In such cases, region_abort - * is called to decrement the adds_in_progress counter. + * is called to decrement the adds_in_progress counter. regions_needed + * is the value returned by the region_chg call, it is used to decrement + * the adds_in_progress counter. * * NOTE: The range arguments [f, t) are not needed or used in this * routine. They are kept to make reading the calling code easier as * arguments will match the associated region_chg call. */ -static void region_abort(struct resv_map *resv, long f, long t) +static void region_abort(struct resv_map *resv, long f, long t, + long regions_needed) { spin_lock(&resv->lock); VM_BUG_ON(!resv->region_cache_count); - resv->adds_in_progress--; + resv->adds_in_progress -= regions_needed; spin_unlock(&resv->lock); } @@ -2004,6 +2107,7 @@ static long __vma_reservation_common(str struct resv_map *resv; pgoff_t idx; long ret; + long dummy_out_regions_needed; resv = vma_resv_map(vma); if (!resv) @@ -2012,20 +2116,29 @@ static long __vma_reservation_common(str idx = vma_hugecache_offset(h, vma, addr); switch (mode) { case VMA_NEEDS_RESV: - ret = region_chg(resv, idx, idx + 1); + ret = region_chg(resv, idx, idx + 1, &dummy_out_regions_needed); + /* We assume that vma_reservation_* routines always operate on + * 1 page, and that adding to resv map a 1 page entry can only + * ever require 1 region. + */ + VM_BUG_ON(dummy_out_regions_needed != 1); break; case VMA_COMMIT_RESV: - ret = region_add(resv, idx, idx + 1); + ret = region_add(resv, idx, idx + 1, 1); + /* region_add calls of range 1 should never fail. */ + VM_BUG_ON(ret < 0); break; case VMA_END_RESV: - region_abort(resv, idx, idx + 1); + region_abort(resv, idx, idx + 1, 1); ret = 0; break; case VMA_ADD_RESV: - if (vma->vm_flags & VM_MAYSHARE) - ret = region_add(resv, idx, idx + 1); - else { - region_abort(resv, idx, idx + 1); + if (vma->vm_flags & VM_MAYSHARE) { + ret = region_add(resv, idx, idx + 1, 1); + /* region_add calls of range 1 should never fail. */ + VM_BUG_ON(ret < 0); + } else { + region_abort(resv, idx, idx + 1, 1); ret = region_del(resv, idx, idx + 1); } break; @@ -4713,12 +4826,12 @@ int hugetlb_reserve_pages(struct inode * struct vm_area_struct *vma, vm_flags_t vm_flags) { - long ret, chg; + long ret, chg, add = -1; struct hstate *h = hstate_inode(inode); struct hugepage_subpool *spool = subpool_inode(inode); struct resv_map *resv_map; struct hugetlb_cgroup *h_cg; - long gbl_reserve; + long gbl_reserve, regions_needed = 0; /* This should never happen */ if (from > to) { @@ -4748,7 +4861,7 @@ int hugetlb_reserve_pages(struct inode * */ resv_map = inode_resv_map(inode); - chg = region_chg(resv_map, from, to); + chg = region_chg(resv_map, from, to, ®ions_needed); } else { /* Private mapping. */ @@ -4814,9 +4927,14 @@ int hugetlb_reserve_pages(struct inode * * else has to be done for private mappings here */ if (!vma || vma->vm_flags & VM_MAYSHARE) { - long add = region_add(resv_map, from, to); + add = region_add(resv_map, from, to, regions_needed); - if (unlikely(chg > add)) { + if (unlikely(add < 0)) { + hugetlb_acct_memory(h, -gbl_reserve); + /* put back original number of pages, chg */ + (void)hugepage_subpool_put_pages(spool, chg); + goto out_err; + } else if (unlikely(chg > add)) { /* * pages in this range were added to the reserve * map between region_chg and region_add. This @@ -4834,9 +4952,11 @@ int hugetlb_reserve_pages(struct inode * return 0; out_err: if (!vma || vma->vm_flags & VM_MAYSHARE) - /* Don't call region_abort if region_chg failed */ - if (chg >= 0) - region_abort(resv_map, from, to); + /* Only call region_abort if the region_chg succeeded but the + * region_add failed or didn't run. + */ + if (chg >= 0 && add < 0) + region_abort(resv_map, from, to, regions_needed); if (vma && is_vma_resv_set(vma, HPAGE_RESV_OWNER)) kref_put(&resv_map->refs, resv_map_release); return ret; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 146/155] hugetlb_cgroup: add accounting for shared mappings 2020-04-02 4:01 incoming Andrew Morton ` (144 preceding siblings ...) 2020-04-02 4:11 ` [patch 145/155] hugetlb: disable region_add file_region coalescing Andrew Morton @ 2020-04-02 4:11 ` Andrew Morton 2020-04-02 4:11 ` [patch 147/155] hugetlb_cgroup: support noreserve mappings Andrew Morton ` (8 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:11 UTC (permalink / raw) To: akpm, almasrymina, gthelen, linux-mm, mike.kravetz, mm-commits, rientjes, sandipan, shakeelb, shuah, torvalds From: Mina Almasry <almasrymina@google.com> Subject: hugetlb_cgroup: add accounting for shared mappings For shared mappings, the pointer to the hugetlb_cgroup to uncharge lives in the resv_map entries, in file_region->reservation_counter. After a call to region_chg, we charge the approprate hugetlb_cgroup, and if successful, we pass on the hugetlb_cgroup info to a follow up region_add call. When a file_region entry is added to the resv_map via region_add, we put the pointer to that cgroup in file_region->reservation_counter. If charging doesn't succeed, we report the error to the caller, so that the kernel fails the reservation. On region_del, which is when the hugetlb memory is unreserved, we also uncharge the file_region->reservation_counter. [akpm@linux-foundation.org: forward declare struct file_region] Link: http://lkml.kernel.org/r/20200211213128.73302-5-almasrymina@google.com Signed-off-by: Mina Almasry <almasrymina@google.com> Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com> Cc: David Rientjes <rientjes@google.com> Cc: Greg Thelen <gthelen@google.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Sandipan Das <sandipan@linux.ibm.com> Cc: Shakeel Butt <shakeelb@google.com> Cc: Shuah Khan <shuah@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/hugetlb.h | 35 +++++++ include/linux/hugetlb_cgroup.h | 11 ++ mm/hugetlb.c | 148 +++++++++++++++++++------------ mm/hugetlb_cgroup.c | 15 +++ 4 files changed, 155 insertions(+), 54 deletions(-) --- a/include/linux/hugetlb_cgroup.h~hugetlb_cgroup-add-accounting-for-shared-mappings +++ a/include/linux/hugetlb_cgroup.h @@ -19,6 +19,7 @@ struct hugetlb_cgroup; struct resv_map; +struct file_region; /* * Minimum page order trackable by hugetlb cgroup. @@ -135,11 +136,21 @@ extern void hugetlb_cgroup_uncharge_coun unsigned long start, unsigned long end); +extern void hugetlb_cgroup_uncharge_file_region(struct resv_map *resv, + struct file_region *rg, + unsigned long nr_pages); + extern void hugetlb_cgroup_file_init(void) __init; extern void hugetlb_cgroup_migrate(struct page *oldhpage, struct page *newhpage); #else +static inline void hugetlb_cgroup_uncharge_file_region(struct resv_map *resv, + struct file_region *rg, + unsigned long nr_pages) +{ +} + static inline struct hugetlb_cgroup *hugetlb_cgroup_from_page(struct page *page) { return NULL; --- a/include/linux/hugetlb.h~hugetlb_cgroup-add-accounting-for-shared-mappings +++ a/include/linux/hugetlb.h @@ -57,6 +57,41 @@ struct resv_map { struct cgroup_subsys_state *css; #endif }; + +/* + * Region tracking -- allows tracking of reservations and instantiated pages + * across the pages in a mapping. + * + * The region data structures are embedded into a resv_map and protected + * by a resv_map's lock. The set of regions within the resv_map represent + * reservations for huge pages, or huge pages that have already been + * instantiated within the map. The from and to elements are huge page + * indicies into the associated mapping. from indicates the starting index + * of the region. to represents the first index past the end of the region. + * + * For example, a file region structure with from == 0 and to == 4 represents + * four huge pages in a mapping. It is important to note that the to element + * represents the first element past the end of the region. This is used in + * arithmetic as 4(to) - 0(from) = 4 huge pages in the region. + * + * Interval notation of the form [from, to) will be used to indicate that + * the endpoint from is inclusive and to is exclusive. + */ +struct file_region { + struct list_head link; + long from; + long to; +#ifdef CONFIG_CGROUP_HUGETLB + /* + * On shared mappings, each reserved region appears as a struct + * file_region in resv_map. These fields hold the info needed to + * uncharge each reservation. + */ + struct page_counter *reservation_counter; + struct cgroup_subsys_state *css; +#endif +}; + extern struct resv_map *resv_map_alloc(void); void resv_map_release(struct kref *ref); --- a/mm/hugetlb.c~hugetlb_cgroup-add-accounting-for-shared-mappings +++ a/mm/hugetlb.c @@ -220,31 +220,6 @@ static inline struct hugepage_subpool *s return subpool_inode(file_inode(vma->vm_file)); } -/* - * Region tracking -- allows tracking of reservations and instantiated pages - * across the pages in a mapping. - * - * The region data structures are embedded into a resv_map and protected - * by a resv_map's lock. The set of regions within the resv_map represent - * reservations for huge pages, or huge pages that have already been - * instantiated within the map. The from and to elements are huge page - * indicies into the associated mapping. from indicates the starting index - * of the region. to represents the first index past the end of the region. - * - * For example, a file region structure with from == 0 and to == 4 represents - * four huge pages in a mapping. It is important to note that the to element - * represents the first element past the end of the region. This is used in - * arithmetic as 4(to) - 0(from) = 4 huge pages in the region. - * - * Interval notation of the form [from, to) will be used to indicate that - * the endpoint from is inclusive and to is exclusive. - */ -struct file_region { - struct list_head link; - long from; - long to; -}; - /* Helper that removes a struct file_region from the resv_map cache and returns * it for use. */ @@ -266,6 +241,41 @@ get_file_region_entry_from_cache(struct return nrg; } +static void copy_hugetlb_cgroup_uncharge_info(struct file_region *nrg, + struct file_region *rg) +{ +#ifdef CONFIG_CGROUP_HUGETLB + nrg->reservation_counter = rg->reservation_counter; + nrg->css = rg->css; + if (rg->css) + css_get(rg->css); +#endif +} + +/* Helper that records hugetlb_cgroup uncharge info. */ +static void record_hugetlb_cgroup_uncharge_info(struct hugetlb_cgroup *h_cg, + struct hstate *h, + struct resv_map *resv, + struct file_region *nrg) +{ +#ifdef CONFIG_CGROUP_HUGETLB + if (h_cg) { + nrg->reservation_counter = + &h_cg->rsvd_hugepage[hstate_index(h)]; + nrg->css = &h_cg->css; + if (!resv->pages_per_hpage) + resv->pages_per_hpage = pages_per_huge_page(h); + /* pages_per_hpage should be the same for all entries in + * a resv_map. + */ + VM_BUG_ON(resv->pages_per_hpage != pages_per_huge_page(h)); + } else { + nrg->reservation_counter = NULL; + nrg->css = NULL; + } +#endif +} + /* Must be called with resv->lock held. Calling this with count_only == true * will count the number of pages to be added but will not modify the linked * list. If regions_needed != NULL and count_only == true, then regions_needed @@ -273,7 +283,9 @@ get_file_region_entry_from_cache(struct * add the regions for this range. */ static long add_reservation_in_range(struct resv_map *resv, long f, long t, - long *regions_needed, bool count_only) + struct hugetlb_cgroup *h_cg, + struct hstate *h, long *regions_needed, + bool count_only) { long add = 0; struct list_head *head = &resv->regions; @@ -312,6 +324,8 @@ static long add_reservation_in_range(str if (!count_only) { nrg = get_file_region_entry_from_cache( resv, last_accounted_offset, rg->from); + record_hugetlb_cgroup_uncharge_info(h_cg, h, + resv, nrg); list_add(&nrg->link, rg->link.prev); } else if (regions_needed) *regions_needed += 1; @@ -328,6 +342,7 @@ static long add_reservation_in_range(str if (!count_only) { nrg = get_file_region_entry_from_cache( resv, last_accounted_offset, t); + record_hugetlb_cgroup_uncharge_info(h_cg, h, resv, nrg); list_add(&nrg->link, rg->link.prev); } else if (regions_needed) *regions_needed += 1; @@ -416,7 +431,8 @@ out_of_memory: * 1 page will only require at most 1 entry. */ static long region_add(struct resv_map *resv, long f, long t, - long in_regions_needed) + long in_regions_needed, struct hstate *h, + struct hugetlb_cgroup *h_cg) { long add = 0, actual_regions_needed = 0; @@ -424,7 +440,8 @@ static long region_add(struct resv_map * retry: /* Count how many regions are actually needed to execute this add. */ - add_reservation_in_range(resv, f, t, &actual_regions_needed, true); + add_reservation_in_range(resv, f, t, NULL, NULL, &actual_regions_needed, + true); /* * Check for sufficient descriptors in the cache to accommodate @@ -452,7 +469,7 @@ retry: goto retry; } - add = add_reservation_in_range(resv, f, t, NULL, false); + add = add_reservation_in_range(resv, f, t, h_cg, h, NULL, false); resv->adds_in_progress -= in_regions_needed; @@ -489,7 +506,8 @@ static long region_chg(struct resv_map * spin_lock(&resv->lock); /* Count how many hugepages in this range are NOT respresented. */ - chg = add_reservation_in_range(resv, f, t, out_regions_needed, true); + chg = add_reservation_in_range(resv, f, t, NULL, NULL, + out_regions_needed, true); if (*out_regions_needed == 0) *out_regions_needed = 1; @@ -589,11 +607,17 @@ retry: /* New entry for end of split region */ nrg->from = t; nrg->to = rg->to; + + copy_hugetlb_cgroup_uncharge_info(nrg, rg); + INIT_LIST_HEAD(&nrg->link); /* Original entry is trimmed */ rg->to = f; + hugetlb_cgroup_uncharge_file_region( + resv, rg, nrg->to - nrg->from); + list_add(&nrg->link, &rg->link); nrg = NULL; break; @@ -601,6 +625,8 @@ retry: if (f <= rg->from && t >= rg->to) { /* Remove entire region */ del += rg->to - rg->from; + hugetlb_cgroup_uncharge_file_region(resv, rg, + rg->to - rg->from); list_del(&rg->link); kfree(rg); continue; @@ -609,9 +635,15 @@ retry: if (f <= rg->from) { /* Trim beginning of region */ del += t - rg->from; rg->from = t; + + hugetlb_cgroup_uncharge_file_region(resv, rg, + t - rg->from); } else { /* Trim end of region */ del += rg->to - f; rg->to = f; + + hugetlb_cgroup_uncharge_file_region(resv, rg, + rg->to - f); } } @@ -2124,7 +2156,7 @@ static long __vma_reservation_common(str VM_BUG_ON(dummy_out_regions_needed != 1); break; case VMA_COMMIT_RESV: - ret = region_add(resv, idx, idx + 1, 1); + ret = region_add(resv, idx, idx + 1, 1, NULL, NULL); /* region_add calls of range 1 should never fail. */ VM_BUG_ON(ret < 0); break; @@ -2134,7 +2166,7 @@ static long __vma_reservation_common(str break; case VMA_ADD_RESV: if (vma->vm_flags & VM_MAYSHARE) { - ret = region_add(resv, idx, idx + 1, 1); + ret = region_add(resv, idx, idx + 1, 1, NULL, NULL); /* region_add calls of range 1 should never fail. */ VM_BUG_ON(ret < 0); } else { @@ -4830,7 +4862,7 @@ int hugetlb_reserve_pages(struct inode * struct hstate *h = hstate_inode(inode); struct hugepage_subpool *spool = subpool_inode(inode); struct resv_map *resv_map; - struct hugetlb_cgroup *h_cg; + struct hugetlb_cgroup *h_cg = NULL; long gbl_reserve, regions_needed = 0; /* This should never happen */ @@ -4871,19 +4903,6 @@ int hugetlb_reserve_pages(struct inode * chg = to - from; - if (hugetlb_cgroup_charge_cgroup_rsvd( - hstate_index(h), chg * pages_per_huge_page(h), - &h_cg)) { - kref_put(&resv_map->refs, resv_map_release); - return -ENOMEM; - } - - /* - * Since this branch handles private mappings, we attach the - * counter to uncharge for this reservation off resv_map. - */ - resv_map_set_hugetlb_cgroup_uncharge_info(resv_map, h_cg, h); - set_vma_resv_map(vma, resv_map); set_vma_resv_flags(vma, HPAGE_RESV_OWNER); } @@ -4893,6 +4912,21 @@ int hugetlb_reserve_pages(struct inode * goto out_err; } + ret = hugetlb_cgroup_charge_cgroup_rsvd( + hstate_index(h), chg * pages_per_huge_page(h), &h_cg); + + if (ret < 0) { + ret = -ENOMEM; + goto out_err; + } + + if (vma && !(vma->vm_flags & VM_MAYSHARE) && h_cg) { + /* For private mappings, the hugetlb_cgroup uncharge info hangs + * of the resv_map. + */ + resv_map_set_hugetlb_cgroup_uncharge_info(resv_map, h_cg, h); + } + /* * There must be enough pages in the subpool for the mapping. If * the subpool has a minimum size, there may be some global @@ -4901,7 +4935,7 @@ int hugetlb_reserve_pages(struct inode * gbl_reserve = hugepage_subpool_get_pages(spool, chg); if (gbl_reserve < 0) { ret = -ENOSPC; - goto out_err; + goto out_uncharge_cgroup; } /* @@ -4910,9 +4944,7 @@ int hugetlb_reserve_pages(struct inode * */ ret = hugetlb_acct_memory(h, gbl_reserve); if (ret < 0) { - /* put back original number of pages, chg */ - (void)hugepage_subpool_put_pages(spool, chg); - goto out_err; + goto out_put_pages; } /* @@ -4927,13 +4959,11 @@ int hugetlb_reserve_pages(struct inode * * else has to be done for private mappings here */ if (!vma || vma->vm_flags & VM_MAYSHARE) { - add = region_add(resv_map, from, to, regions_needed); + add = region_add(resv_map, from, to, regions_needed, h, h_cg); if (unlikely(add < 0)) { hugetlb_acct_memory(h, -gbl_reserve); - /* put back original number of pages, chg */ - (void)hugepage_subpool_put_pages(spool, chg); - goto out_err; + goto out_put_pages; } else if (unlikely(chg > add)) { /* * pages in this range were added to the reserve @@ -4944,12 +4974,22 @@ int hugetlb_reserve_pages(struct inode * */ long rsv_adjust; + hugetlb_cgroup_uncharge_cgroup_rsvd( + hstate_index(h), + (chg - add) * pages_per_huge_page(h), h_cg); + rsv_adjust = hugepage_subpool_put_pages(spool, chg - add); hugetlb_acct_memory(h, -rsv_adjust); } } return 0; +out_put_pages: + /* put back original number of pages, chg */ + (void)hugepage_subpool_put_pages(spool, chg); +out_uncharge_cgroup: + hugetlb_cgroup_uncharge_cgroup_rsvd(hstate_index(h), + chg * pages_per_huge_page(h), h_cg); out_err: if (!vma || vma->vm_flags & VM_MAYSHARE) /* Only call region_abort if the region_chg succeeded but the --- a/mm/hugetlb_cgroup.c~hugetlb_cgroup-add-accounting-for-shared-mappings +++ a/mm/hugetlb_cgroup.c @@ -391,6 +391,21 @@ void hugetlb_cgroup_uncharge_counter(str css_put(resv->css); } +void hugetlb_cgroup_uncharge_file_region(struct resv_map *resv, + struct file_region *rg, + unsigned long nr_pages) +{ + if (hugetlb_cgroup_disabled() || !resv || !rg || !nr_pages) + return; + + if (rg->reservation_counter && resv->pages_per_hpage && nr_pages > 0 && + !resv->reservation_counter) { + page_counter_uncharge(rg->reservation_counter, + nr_pages * resv->pages_per_hpage); + css_put(rg->css); + } +} + enum { RES_USAGE, RES_RSVD_USAGE, _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 147/155] hugetlb_cgroup: support noreserve mappings 2020-04-02 4:01 incoming Andrew Morton ` (145 preceding siblings ...) 2020-04-02 4:11 ` [patch 146/155] hugetlb_cgroup: add accounting for shared mappings Andrew Morton @ 2020-04-02 4:11 ` Andrew Morton 2020-04-02 4:11 ` [patch 148/155] hugetlb: support file_region coalescing again Andrew Morton ` (7 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:11 UTC (permalink / raw) To: akpm, almasrymina, gthelen, linux-mm, mike.kravetz, mm-commits, rientjes, sandipan, shakeelb, shuah, torvalds From: Mina Almasry <almasrymina@google.com> Subject: hugetlb_cgroup: support noreserve mappings Support MAP_NORESERVE accounting as part of the new counter. For each hugepage allocation, at allocation time we check if there is a reservation for this allocation or not. If there is a reservation for this allocation, then this allocation was charged at reservation time, and we don't re-account it. If there is no reserevation for this allocation, we charge the appropriate hugetlb_cgroup. The hugetlb_cgroup to uncharge for this allocation is stored in page[3].private. We use new APIs added in an earlier patch to set this pointer. Link: http://lkml.kernel.org/r/20200211213128.73302-6-almasrymina@google.com Signed-off-by: Mina Almasry <almasrymina@google.com> Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com> Cc: David Rientjes <rientjes@google.com> Cc: Greg Thelen <gthelen@google.com> Cc: Sandipan Das <sandipan@linux.ibm.com> Cc: Shakeel Butt <shakeelb@google.com> Cc: Shuah Khan <shuah@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/hugetlb.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) --- a/mm/hugetlb.c~hugetlb_cgroup-support-noreserve-mappings +++ a/mm/hugetlb.c @@ -1345,6 +1345,8 @@ static void __free_huge_page(struct page clear_page_huge_active(page); hugetlb_cgroup_uncharge_page(hstate_index(h), pages_per_huge_page(h), page); + hugetlb_cgroup_uncharge_page_rsvd(hstate_index(h), + pages_per_huge_page(h), page); if (restore_reserve) h->resv_huge_pages++; @@ -2281,6 +2283,7 @@ struct page *alloc_huge_page(struct vm_a long gbl_chg; int ret, idx; struct hugetlb_cgroup *h_cg; + bool deferred_reserve; idx = hstate_index(h); /* @@ -2318,9 +2321,19 @@ struct page *alloc_huge_page(struct vm_a gbl_chg = 1; } + /* If this allocation is not consuming a reservation, charge it now. + */ + deferred_reserve = map_chg || avoid_reserve || !vma_resv_map(vma); + if (deferred_reserve) { + ret = hugetlb_cgroup_charge_cgroup_rsvd( + idx, pages_per_huge_page(h), &h_cg); + if (ret) + goto out_subpool_put; + } + ret = hugetlb_cgroup_charge_cgroup(idx, pages_per_huge_page(h), &h_cg); if (ret) - goto out_subpool_put; + goto out_uncharge_cgroup_reservation; spin_lock(&hugetlb_lock); /* @@ -2343,6 +2356,14 @@ struct page *alloc_huge_page(struct vm_a /* Fall through */ } hugetlb_cgroup_commit_charge(idx, pages_per_huge_page(h), h_cg, page); + /* If allocation is not consuming a reservation, also store the + * hugetlb_cgroup pointer on the page. + */ + if (deferred_reserve) { + hugetlb_cgroup_commit_charge_rsvd(idx, pages_per_huge_page(h), + h_cg, page); + } + spin_unlock(&hugetlb_lock); set_page_private(page, (unsigned long)spool); @@ -2367,6 +2388,10 @@ struct page *alloc_huge_page(struct vm_a out_uncharge_cgroup: hugetlb_cgroup_uncharge_cgroup(idx, pages_per_huge_page(h), h_cg); +out_uncharge_cgroup_reservation: + if (deferred_reserve) + hugetlb_cgroup_uncharge_cgroup_rsvd(idx, pages_per_huge_page(h), + h_cg); out_subpool_put: if (map_chg || avoid_reserve) hugepage_subpool_put_pages(spool, 1); _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 148/155] hugetlb: support file_region coalescing again 2020-04-02 4:01 incoming Andrew Morton ` (146 preceding siblings ...) 2020-04-02 4:11 ` [patch 147/155] hugetlb_cgroup: support noreserve mappings Andrew Morton @ 2020-04-02 4:11 ` Andrew Morton 2020-04-02 4:11 ` [patch 149/155] hugetlb_cgroup: add hugetlb_cgroup reservation tests Andrew Morton ` (6 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:11 UTC (permalink / raw) To: akpm, almasrymina, gthelen, linux-mm, mike.kravetz, mm-commits, rdunlap, rientjes, sandipan, shakeelb, shuah, torvalds From: Mina Almasry <almasrymina@google.com> Subject: hugetlb: support file_region coalescing again An earlier patch in this series disabled file_region coalescing in order to hang the hugetlb_cgroup uncharge info on the file_region entries. This patch re-adds support for coalescing of file_region entries. Essentially everytime we add an entry, we call a recursive function that tries to coalesce the added region with the regions next to it. The worst case call depth for this function is 3: one to coalesce with the region next to it, one to coalesce to the region prev, and one to reach the base case. This is an important performance optimization as private mappings add their entries page by page, and we could incur big performance costs for large mappings with lots of file_region entries in their resv_map. [almasrymina@google.com: fix CONFIG_CGROUP_HUGETLB ifdefs] Link: http://lkml.kernel.org/r/20200214204544.231482-1-almasrymina@google.com [almasrymina@google.com: remove check_coalesce_bug debug code] Link: http://lkml.kernel.org/r/20200219233610.13808-1-almasrymina@google.com Link: http://lkml.kernel.org/r/20200211213128.73302-7-almasrymina@google.com Signed-off-by: Mina Almasry <almasrymina@google.com> Acked-by: David Rientjes <rientjes@google.com> Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com> Cc: Greg Thelen <gthelen@google.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Sandipan Das <sandipan@linux.ibm.com> Cc: Shakeel Butt <shakeelb@google.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Randy Dunlap <rdunlap@infradead.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/hugetlb.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) --- a/mm/hugetlb.c~hugetlb-support-file_region-coalescing-again +++ a/mm/hugetlb.c @@ -276,6 +276,48 @@ static void record_hugetlb_cgroup_unchar #endif } +static bool has_same_uncharge_info(struct file_region *rg, + struct file_region *org) +{ +#ifdef CONFIG_CGROUP_HUGETLB + return rg && org && + rg->reservation_counter == org->reservation_counter && + rg->css == org->css; + +#else + return true; +#endif +} + +static void coalesce_file_region(struct resv_map *resv, struct file_region *rg) +{ + struct file_region *nrg = NULL, *prg = NULL; + + prg = list_prev_entry(rg, link); + if (&prg->link != &resv->regions && prg->to == rg->from && + has_same_uncharge_info(prg, rg)) { + prg->to = rg->to; + + list_del(&rg->link); + kfree(rg); + + coalesce_file_region(resv, prg); + return; + } + + nrg = list_next_entry(rg, link); + if (&nrg->link != &resv->regions && nrg->from == rg->to && + has_same_uncharge_info(nrg, rg)) { + nrg->from = rg->from; + + list_del(&rg->link); + kfree(rg); + + coalesce_file_region(resv, nrg); + return; + } +} + /* Must be called with resv->lock held. Calling this with count_only == true * will count the number of pages to be added but will not modify the linked * list. If regions_needed != NULL and count_only == true, then regions_needed @@ -327,6 +369,7 @@ static long add_reservation_in_range(str record_hugetlb_cgroup_uncharge_info(h_cg, h, resv, nrg); list_add(&nrg->link, rg->link.prev); + coalesce_file_region(resv, nrg); } else if (regions_needed) *regions_needed += 1; } @@ -344,6 +387,7 @@ static long add_reservation_in_range(str resv, last_accounted_offset, t); record_hugetlb_cgroup_uncharge_info(h_cg, h, resv, nrg); list_add(&nrg->link, rg->link.prev); + coalesce_file_region(resv, nrg); } else if (regions_needed) *regions_needed += 1; } _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 149/155] hugetlb_cgroup: add hugetlb_cgroup reservation tests 2020-04-02 4:01 incoming Andrew Morton ` (147 preceding siblings ...) 2020-04-02 4:11 ` [patch 148/155] hugetlb: support file_region coalescing again Andrew Morton @ 2020-04-02 4:11 ` Andrew Morton 2020-04-02 4:11 ` [patch 150/155] hugetlb_cgroup: add hugetlb_cgroup reservation docs Andrew Morton ` (5 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:11 UTC (permalink / raw) To: akpm, almasrymina, gthelen, linux-mm, mike.kravetz, mm-commits, rientjes, sandipan, shakeelb, shuah, torvalds From: Mina Almasry <almasrymina@google.com> Subject: hugetlb_cgroup: add hugetlb_cgroup reservation tests The tests use both shared and private mapped hugetlb memory, and monitors the hugetlb usage counter as well as the hugetlb reservation counter. They test different configurations such as hugetlb memory usage via hugetlbfs, or MAP_HUGETLB, or shmget/shmat, and with and without MAP_POPULATE. Also add test for hugetlb reservation reparenting, since this is a subtle issue. Link: http://lkml.kernel.org/r/20200211213128.73302-8-almasrymina@google.com Signed-off-by: Mina Almasry <almasrymina@google.com> Tested-by: Sandipan Das <sandipan@linux.ibm.com> [powerpc64] Acked-by: Mike Kravetz <mike.kravetz@oracle.com> Cc: Sandipan Das <sandipan@linux.ibm.com> Cc: David Rientjes <rientjes@google.com> Cc: Greg Thelen <gthelen@google.com> Cc: Shakeel Butt <shakeelb@google.com> Cc: Shuah Khan <shuah@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- tools/testing/selftests/vm/.gitignore | 1 tools/testing/selftests/vm/Makefile | 1 tools/testing/selftests/vm/charge_reserved_hugetlb.sh | 575 ++++++++++ tools/testing/selftests/vm/hugetlb_reparenting_test.sh | 244 ++++ tools/testing/selftests/vm/write_hugetlb_memory.sh | 23 tools/testing/selftests/vm/write_to_hugetlbfs.c | 242 ++++ 6 files changed, 1086 insertions(+) --- /dev/null +++ a/tools/testing/selftests/vm/charge_reserved_hugetlb.sh @@ -0,0 +1,575 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 + +set -e + +if [[ $(id -u) -ne 0 ]]; then + echo "This test must be run as root. Skipping..." + exit 0 +fi + +fault_limit_file=limit_in_bytes +reservation_limit_file=rsvd.limit_in_bytes +fault_usage_file=usage_in_bytes +reservation_usage_file=rsvd.usage_in_bytes + +if [[ "$1" == "-cgroup-v2" ]]; then + cgroup2=1 + fault_limit_file=max + reservation_limit_file=rsvd.max + fault_usage_file=current + reservation_usage_file=rsvd.current +fi + +cgroup_path=/dev/cgroup/memory +if [[ ! -e $cgroup_path ]]; then + mkdir -p $cgroup_path + if [[ $cgroup2 ]]; then + mount -t cgroup2 none $cgroup_path + else + mount -t cgroup memory,hugetlb $cgroup_path + fi +fi + +if [[ $cgroup2 ]]; then + echo "+hugetlb" >/dev/cgroup/memory/cgroup.subtree_control +fi + +function cleanup() { + if [[ $cgroup2 ]]; then + echo $$ >$cgroup_path/cgroup.procs + else + echo $$ >$cgroup_path/tasks + fi + + if [[ -e /mnt/huge ]]; then + rm -rf /mnt/huge/* + umount /mnt/huge || echo error + rmdir /mnt/huge + fi + if [[ -e $cgroup_path/hugetlb_cgroup_test ]]; then + rmdir $cgroup_path/hugetlb_cgroup_test + fi + if [[ -e $cgroup_path/hugetlb_cgroup_test1 ]]; then + rmdir $cgroup_path/hugetlb_cgroup_test1 + fi + if [[ -e $cgroup_path/hugetlb_cgroup_test2 ]]; then + rmdir $cgroup_path/hugetlb_cgroup_test2 + fi + echo 0 >/proc/sys/vm/nr_hugepages + echo CLEANUP DONE +} + +function expect_equal() { + local expected="$1" + local actual="$2" + local error="$3" + + if [[ "$expected" != "$actual" ]]; then + echo "expected ($expected) != actual ($actual): $3" + cleanup + exit 1 + fi +} + +function get_machine_hugepage_size() { + hpz=$(grep -i hugepagesize /proc/meminfo) + kb=${hpz:14:-3} + mb=$(($kb / 1024)) + echo $mb +} + +MB=$(get_machine_hugepage_size) + +function setup_cgroup() { + local name="$1" + local cgroup_limit="$2" + local reservation_limit="$3" + + mkdir $cgroup_path/$name + + echo writing cgroup limit: "$cgroup_limit" + echo "$cgroup_limit" >$cgroup_path/$name/hugetlb.${MB}MB.$fault_limit_file + + echo writing reseravation limit: "$reservation_limit" + echo "$reservation_limit" > \ + $cgroup_path/$name/hugetlb.${MB}MB.$reservation_limit_file + + if [ -e "$cgroup_path/$name/cpuset.cpus" ]; then + echo 0 >$cgroup_path/$name/cpuset.cpus + fi + if [ -e "$cgroup_path/$name/cpuset.mems" ]; then + echo 0 >$cgroup_path/$name/cpuset.mems + fi +} + +function wait_for_hugetlb_memory_to_get_depleted() { + local cgroup="$1" + local path="/dev/cgroup/memory/$cgroup/hugetlb.${MB}MB.$reservation_usage_file" + # Wait for hugetlbfs memory to get depleted. + while [ $(cat $path) != 0 ]; do + echo Waiting for hugetlb memory to get depleted. + cat $path + sleep 0.5 + done +} + +function wait_for_hugetlb_memory_to_get_reserved() { + local cgroup="$1" + local size="$2" + + local path="/dev/cgroup/memory/$cgroup/hugetlb.${MB}MB.$reservation_usage_file" + # Wait for hugetlbfs memory to get written. + while [ $(cat $path) != $size ]; do + echo Waiting for hugetlb memory reservation to reach size $size. + cat $path + sleep 0.5 + done +} + +function wait_for_hugetlb_memory_to_get_written() { + local cgroup="$1" + local size="$2" + + local path="/dev/cgroup/memory/$cgroup/hugetlb.${MB}MB.$fault_usage_file" + # Wait for hugetlbfs memory to get written. + while [ $(cat $path) != $size ]; do + echo Waiting for hugetlb memory to reach size $size. + cat $path + sleep 0.5 + done +} + +function write_hugetlbfs_and_get_usage() { + local cgroup="$1" + local size="$2" + local populate="$3" + local write="$4" + local path="$5" + local method="$6" + local private="$7" + local expect_failure="$8" + local reserve="$9" + + # Function return values. + reservation_failed=0 + oom_killed=0 + hugetlb_difference=0 + reserved_difference=0 + + local hugetlb_usage=$cgroup_path/$cgroup/hugetlb.${MB}MB.$fault_usage_file + local reserved_usage=$cgroup_path/$cgroup/hugetlb.${MB}MB.$reservation_usage_file + + local hugetlb_before=$(cat $hugetlb_usage) + local reserved_before=$(cat $reserved_usage) + + echo + echo Starting: + echo hugetlb_usage="$hugetlb_before" + echo reserved_usage="$reserved_before" + echo expect_failure is "$expect_failure" + + output=$(mktemp) + set +e + if [[ "$method" == "1" ]] || [[ "$method" == 2 ]] || + [[ "$private" == "-r" ]] && [[ "$expect_failure" != 1 ]]; then + + bash write_hugetlb_memory.sh "$size" "$populate" "$write" \ + "$cgroup" "$path" "$method" "$private" "-l" "$reserve" 2>&1 | tee $output & + + local write_result=$? + local write_pid=$! + + until grep -q -i "DONE" $output; do + echo waiting for DONE signal. + if ! ps $write_pid > /dev/null + then + echo "FAIL: The write died" + cleanup + exit 1 + fi + sleep 0.5 + done + + echo ================= write_hugetlb_memory.sh output is: + cat $output + echo ================= end output. + + if [[ "$populate" == "-o" ]] || [[ "$write" == "-w" ]]; then + wait_for_hugetlb_memory_to_get_written "$cgroup" "$size" + elif [[ "$reserve" != "-n" ]]; then + wait_for_hugetlb_memory_to_get_reserved "$cgroup" "$size" + else + # This case doesn't produce visible effects, but we still have + # to wait for the async process to start and execute... + sleep 0.5 + fi + + echo write_result is $write_result + else + bash write_hugetlb_memory.sh "$size" "$populate" "$write" \ + "$cgroup" "$path" "$method" "$private" "$reserve" + local write_result=$? + + if [[ "$reserve" != "-n" ]]; then + wait_for_hugetlb_memory_to_get_reserved "$cgroup" "$size" + fi + fi + set -e + + if [[ "$write_result" == 1 ]]; then + reservation_failed=1 + fi + + # On linus/master, the above process gets SIGBUS'd on oomkill, with + # return code 135. On earlier kernels, it gets actual oomkill, with return + # code 137, so just check for both conditions in case we're testing + # against an earlier kernel. + if [[ "$write_result" == 135 ]] || [[ "$write_result" == 137 ]]; then + oom_killed=1 + fi + + local hugetlb_after=$(cat $hugetlb_usage) + local reserved_after=$(cat $reserved_usage) + + echo After write: + echo hugetlb_usage="$hugetlb_after" + echo reserved_usage="$reserved_after" + + hugetlb_difference=$(($hugetlb_after - $hugetlb_before)) + reserved_difference=$(($reserved_after - $reserved_before)) +} + +function cleanup_hugetlb_memory() { + set +e + local cgroup="$1" + if [[ "$(pgrep -f write_to_hugetlbfs)" != "" ]]; then + echo killing write_to_hugetlbfs + killall -2 write_to_hugetlbfs + wait_for_hugetlb_memory_to_get_depleted $cgroup + fi + set -e + + if [[ -e /mnt/huge ]]; then + rm -rf /mnt/huge/* + umount /mnt/huge + rmdir /mnt/huge + fi +} + +function run_test() { + local size=$(($1 * ${MB} * 1024 * 1024)) + local populate="$2" + local write="$3" + local cgroup_limit=$(($4 * ${MB} * 1024 * 1024)) + local reservation_limit=$(($5 * ${MB} * 1024 * 1024)) + local nr_hugepages="$6" + local method="$7" + local private="$8" + local expect_failure="$9" + local reserve="${10}" + + # Function return values. + hugetlb_difference=0 + reserved_difference=0 + reservation_failed=0 + oom_killed=0 + + echo nr hugepages = "$nr_hugepages" + echo "$nr_hugepages" >/proc/sys/vm/nr_hugepages + + setup_cgroup "hugetlb_cgroup_test" "$cgroup_limit" "$reservation_limit" + + mkdir -p /mnt/huge + mount -t hugetlbfs -o pagesize=${MB}M,size=256M none /mnt/huge + + write_hugetlbfs_and_get_usage "hugetlb_cgroup_test" "$size" "$populate" \ + "$write" "/mnt/huge/test" "$method" "$private" "$expect_failure" \ + "$reserve" + + cleanup_hugetlb_memory "hugetlb_cgroup_test" + + local final_hugetlb=$(cat $cgroup_path/hugetlb_cgroup_test/hugetlb.${MB}MB.$fault_usage_file) + local final_reservation=$(cat $cgroup_path/hugetlb_cgroup_test/hugetlb.${MB}MB.$reservation_usage_file) + + echo $hugetlb_difference + echo $reserved_difference + expect_equal "0" "$final_hugetlb" "final hugetlb is not zero" + expect_equal "0" "$final_reservation" "final reservation is not zero" +} + +function run_multiple_cgroup_test() { + local size1="$1" + local populate1="$2" + local write1="$3" + local cgroup_limit1="$4" + local reservation_limit1="$5" + + local size2="$6" + local populate2="$7" + local write2="$8" + local cgroup_limit2="$9" + local reservation_limit2="${10}" + + local nr_hugepages="${11}" + local method="${12}" + local private="${13}" + local expect_failure="${14}" + local reserve="${15}" + + # Function return values. + hugetlb_difference1=0 + reserved_difference1=0 + reservation_failed1=0 + oom_killed1=0 + + hugetlb_difference2=0 + reserved_difference2=0 + reservation_failed2=0 + oom_killed2=0 + + echo nr hugepages = "$nr_hugepages" + echo "$nr_hugepages" >/proc/sys/vm/nr_hugepages + + setup_cgroup "hugetlb_cgroup_test1" "$cgroup_limit1" "$reservation_limit1" + setup_cgroup "hugetlb_cgroup_test2" "$cgroup_limit2" "$reservation_limit2" + + mkdir -p /mnt/huge + mount -t hugetlbfs -o pagesize=${MB}M,size=256M none /mnt/huge + + write_hugetlbfs_and_get_usage "hugetlb_cgroup_test1" "$size1" \ + "$populate1" "$write1" "/mnt/huge/test1" "$method" "$private" \ + "$expect_failure" "$reserve" + + hugetlb_difference1=$hugetlb_difference + reserved_difference1=$reserved_difference + reservation_failed1=$reservation_failed + oom_killed1=$oom_killed + + local cgroup1_hugetlb_usage=$cgroup_path/hugetlb_cgroup_test1/hugetlb.${MB}MB.$fault_usage_file + local cgroup1_reservation_usage=$cgroup_path/hugetlb_cgroup_test1/hugetlb.${MB}MB.$reservation_usage_file + local cgroup2_hugetlb_usage=$cgroup_path/hugetlb_cgroup_test2/hugetlb.${MB}MB.$fault_usage_file + local cgroup2_reservation_usage=$cgroup_path/hugetlb_cgroup_test2/hugetlb.${MB}MB.$reservation_usage_file + + local usage_before_second_write=$(cat $cgroup1_hugetlb_usage) + local reservation_usage_before_second_write=$(cat $cgroup1_reservation_usage) + + write_hugetlbfs_and_get_usage "hugetlb_cgroup_test2" "$size2" \ + "$populate2" "$write2" "/mnt/huge/test2" "$method" "$private" \ + "$expect_failure" "$reserve" + + hugetlb_difference2=$hugetlb_difference + reserved_difference2=$reserved_difference + reservation_failed2=$reservation_failed + oom_killed2=$oom_killed + + expect_equal "$usage_before_second_write" \ + "$(cat $cgroup1_hugetlb_usage)" "Usage changed." + expect_equal "$reservation_usage_before_second_write" \ + "$(cat $cgroup1_reservation_usage)" "Reservation usage changed." + + cleanup_hugetlb_memory + + local final_hugetlb=$(cat $cgroup1_hugetlb_usage) + local final_reservation=$(cat $cgroup1_reservation_usage) + + expect_equal "0" "$final_hugetlb" \ + "hugetlbt_cgroup_test1 final hugetlb is not zero" + expect_equal "0" "$final_reservation" \ + "hugetlbt_cgroup_test1 final reservation is not zero" + + local final_hugetlb=$(cat $cgroup2_hugetlb_usage) + local final_reservation=$(cat $cgroup2_reservation_usage) + + expect_equal "0" "$final_hugetlb" \ + "hugetlb_cgroup_test2 final hugetlb is not zero" + expect_equal "0" "$final_reservation" \ + "hugetlb_cgroup_test2 final reservation is not zero" +} + +cleanup + +for populate in "" "-o"; do + for method in 0 1 2; do + for private in "" "-r"; do + for reserve in "" "-n"; do + + # Skip mmap(MAP_HUGETLB | MAP_SHARED). Doesn't seem to be supported. + if [[ "$method" == 1 ]] && [[ "$private" == "" ]]; then + continue + fi + + # Skip populated shmem tests. Doesn't seem to be supported. + if [[ "$method" == 2"" ]] && [[ "$populate" == "-o" ]]; then + continue + fi + + if [[ "$method" == 2"" ]] && [[ "$reserve" == "-n" ]]; then + continue + fi + + cleanup + echo + echo + echo + echo Test normal case. + echo private=$private, populate=$populate, method=$method, reserve=$reserve + run_test 5 "$populate" "" 10 10 10 "$method" "$private" "0" "$reserve" + + echo Memory charged to hugtlb=$hugetlb_difference + echo Memory charged to reservation=$reserved_difference + + if [[ "$populate" == "-o" ]]; then + expect_equal "$((5 * $MB * 1024 * 1024))" "$hugetlb_difference" \ + "Reserved memory charged to hugetlb cgroup." + else + expect_equal "0" "$hugetlb_difference" \ + "Reserved memory charged to hugetlb cgroup." + fi + + if [[ "$reserve" != "-n" ]] || [[ "$populate" == "-o" ]]; then + expect_equal "$((5 * $MB * 1024 * 1024))" "$reserved_difference" \ + "Reserved memory not charged to reservation usage." + else + expect_equal "0" "$reserved_difference" \ + "Reserved memory not charged to reservation usage." + fi + + echo 'PASS' + + cleanup + echo + echo + echo + echo Test normal case with write. + echo private=$private, populate=$populate, method=$method, reserve=$reserve + run_test 5 "$populate" '-w' 5 5 10 "$method" "$private" "0" "$reserve" + + echo Memory charged to hugtlb=$hugetlb_difference + echo Memory charged to reservation=$reserved_difference + + expect_equal "$((5 * $MB * 1024 * 1024))" "$hugetlb_difference" \ + "Reserved memory charged to hugetlb cgroup." + + expect_equal "$((5 * $MB * 1024 * 1024))" "$reserved_difference" \ + "Reserved memory not charged to reservation usage." + + echo 'PASS' + + cleanup + continue + echo + echo + echo + echo Test more than reservation case. + echo private=$private, populate=$populate, method=$method, reserve=$reserve + + if [ "$reserve" != "-n" ]; then + run_test "5" "$populate" '' "10" "2" "10" "$method" "$private" "1" \ + "$reserve" + + expect_equal "1" "$reservation_failed" "Reservation succeeded." + fi + + echo 'PASS' + + cleanup + + echo + echo + echo + echo Test more than cgroup limit case. + echo private=$private, populate=$populate, method=$method, reserve=$reserve + + # Not sure if shm memory can be cleaned up when the process gets sigbus'd. + if [[ "$method" != 2 ]]; then + run_test 5 "$populate" "-w" 2 10 10 "$method" "$private" "1" "$reserve" + + expect_equal "1" "$oom_killed" "Not oom killed." + fi + echo 'PASS' + + cleanup + + echo + echo + echo + echo Test normal case, multiple cgroups. + echo private=$private, populate=$populate, method=$method, reserve=$reserve + run_multiple_cgroup_test "3" "$populate" "" "10" "10" "5" \ + "$populate" "" "10" "10" "10" \ + "$method" "$private" "0" "$reserve" + + echo Memory charged to hugtlb1=$hugetlb_difference1 + echo Memory charged to reservation1=$reserved_difference1 + echo Memory charged to hugtlb2=$hugetlb_difference2 + echo Memory charged to reservation2=$reserved_difference2 + + if [[ "$reserve" != "-n" ]] || [[ "$populate" == "-o" ]]; then + expect_equal "3" "$reserved_difference1" \ + "Incorrect reservations charged to cgroup 1." + + expect_equal "5" "$reserved_difference2" \ + "Incorrect reservation charged to cgroup 2." + + else + expect_equal "0" "$reserved_difference1" \ + "Incorrect reservations charged to cgroup 1." + + expect_equal "0" "$reserved_difference2" \ + "Incorrect reservation charged to cgroup 2." + fi + + if [[ "$populate" == "-o" ]]; then + expect_equal "3" "$hugetlb_difference1" \ + "Incorrect hugetlb charged to cgroup 1." + + expect_equal "5" "$hugetlb_difference2" \ + "Incorrect hugetlb charged to cgroup 2." + + else + expect_equal "0" "$hugetlb_difference1" \ + "Incorrect hugetlb charged to cgroup 1." + + expect_equal "0" "$hugetlb_difference2" \ + "Incorrect hugetlb charged to cgroup 2." + fi + echo 'PASS' + + cleanup + echo + echo + echo + echo Test normal case with write, multiple cgroups. + echo private=$private, populate=$populate, method=$method, reserve=$reserve + run_multiple_cgroup_test "3" "$populate" "-w" "10" "10" "5" \ + "$populate" "-w" "10" "10" "10" \ + "$method" "$private" "0" "$reserve" + + echo Memory charged to hugtlb1=$hugetlb_difference1 + echo Memory charged to reservation1=$reserved_difference1 + echo Memory charged to hugtlb2=$hugetlb_difference2 + echo Memory charged to reservation2=$reserved_difference2 + + expect_equal "3" "$hugetlb_difference1" \ + "Incorrect hugetlb charged to cgroup 1." + + expect_equal "3" "$reserved_difference1" \ + "Incorrect reservation charged to cgroup 1." + + expect_equal "5" "$hugetlb_difference2" \ + "Incorrect hugetlb charged to cgroup 2." + + expect_equal "5" "$reserved_difference2" \ + "Incorrected reservation charged to cgroup 2." + echo 'PASS' + + cleanup + + done # reserve + done # private + done # populate +done # method + +umount $cgroup_path +rmdir $cgroup_path --- a/tools/testing/selftests/vm/.gitignore~hugetlb_cgroup-add-hugetlb_cgroup-reservation-tests +++ a/tools/testing/selftests/vm/.gitignore @@ -14,3 +14,4 @@ virtual_address_range gup_benchmark va_128TBswitch map_fixed_noreplace +write_to_hugetlbfs --- /dev/null +++ a/tools/testing/selftests/vm/hugetlb_reparenting_test.sh @@ -0,0 +1,244 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 + +set -e + +if [[ $(id -u) -ne 0 ]]; then + echo "This test must be run as root. Skipping..." + exit 0 +fi + +usage_file=usage_in_bytes + +if [[ "$1" == "-cgroup-v2" ]]; then + cgroup2=1 + usage_file=current +fi + +CGROUP_ROOT='/dev/cgroup/memory' +MNT='/mnt/huge/' + +if [[ ! -e $CGROUP_ROOT ]]; then + mkdir -p $CGROUP_ROOT + if [[ $cgroup2 ]]; then + mount -t cgroup2 none $CGROUP_ROOT + sleep 1 + echo "+hugetlb +memory" >$CGROUP_ROOT/cgroup.subtree_control + else + mount -t cgroup memory,hugetlb $CGROUP_ROOT + fi +fi + +function get_machine_hugepage_size() { + hpz=$(grep -i hugepagesize /proc/meminfo) + kb=${hpz:14:-3} + mb=$(($kb / 1024)) + echo $mb +} + +MB=$(get_machine_hugepage_size) + +function cleanup() { + echo cleanup + set +e + rm -rf "$MNT"/* 2>/dev/null + umount "$MNT" 2>/dev/null + rmdir "$MNT" 2>/dev/null + rmdir "$CGROUP_ROOT"/a/b 2>/dev/null + rmdir "$CGROUP_ROOT"/a 2>/dev/null + rmdir "$CGROUP_ROOT"/test1 2>/dev/null + echo 0 >/proc/sys/vm/nr_hugepages + set -e +} + +function assert_state() { + local expected_a="$1" + local expected_a_hugetlb="$2" + local expected_b="" + local expected_b_hugetlb="" + + if [ ! -z ${3:-} ] && [ ! -z ${4:-} ]; then + expected_b="$3" + expected_b_hugetlb="$4" + fi + local tolerance=$((5 * 1024 * 1024)) + + local actual_a + actual_a="$(cat "$CGROUP_ROOT"/a/memory.$usage_file)" + if [[ $actual_a -lt $(($expected_a - $tolerance)) ]] || + [[ $actual_a -gt $(($expected_a + $tolerance)) ]]; then + echo actual a = $((${actual_a%% *} / 1024 / 1024)) MB + echo expected a = $((${expected_a%% *} / 1024 / 1024)) MB + echo fail + + cleanup + exit 1 + fi + + local actual_a_hugetlb + actual_a_hugetlb="$(cat "$CGROUP_ROOT"/a/hugetlb.${MB}MB.$usage_file)" + if [[ $actual_a_hugetlb -lt $(($expected_a_hugetlb - $tolerance)) ]] || + [[ $actual_a_hugetlb -gt $(($expected_a_hugetlb + $tolerance)) ]]; then + echo actual a hugetlb = $((${actual_a_hugetlb%% *} / 1024 / 1024)) MB + echo expected a hugetlb = $((${expected_a_hugetlb%% *} / 1024 / 1024)) MB + echo fail + + cleanup + exit 1 + fi + + if [[ -z "$expected_b" || -z "$expected_b_hugetlb" ]]; then + return + fi + + local actual_b + actual_b="$(cat "$CGROUP_ROOT"/a/b/memory.$usage_file)" + if [[ $actual_b -lt $(($expected_b - $tolerance)) ]] || + [[ $actual_b -gt $(($expected_b + $tolerance)) ]]; then + echo actual b = $((${actual_b%% *} / 1024 / 1024)) MB + echo expected b = $((${expected_b%% *} / 1024 / 1024)) MB + echo fail + + cleanup + exit 1 + fi + + local actual_b_hugetlb + actual_b_hugetlb="$(cat "$CGROUP_ROOT"/a/b/hugetlb.${MB}MB.$usage_file)" + if [[ $actual_b_hugetlb -lt $(($expected_b_hugetlb - $tolerance)) ]] || + [[ $actual_b_hugetlb -gt $(($expected_b_hugetlb + $tolerance)) ]]; then + echo actual b hugetlb = $((${actual_b_hugetlb%% *} / 1024 / 1024)) MB + echo expected b hugetlb = $((${expected_b_hugetlb%% *} / 1024 / 1024)) MB + echo fail + + cleanup + exit 1 + fi +} + +function setup() { + echo 100 >/proc/sys/vm/nr_hugepages + mkdir "$CGROUP_ROOT"/a + sleep 1 + if [[ $cgroup2 ]]; then + echo "+hugetlb +memory" >$CGROUP_ROOT/a/cgroup.subtree_control + else + echo 0 >$CGROUP_ROOT/a/cpuset.mems + echo 0 >$CGROUP_ROOT/a/cpuset.cpus + fi + + mkdir "$CGROUP_ROOT"/a/b + + if [[ ! $cgroup2 ]]; then + echo 0 >$CGROUP_ROOT/a/b/cpuset.mems + echo 0 >$CGROUP_ROOT/a/b/cpuset.cpus + fi + + mkdir -p "$MNT" + mount -t hugetlbfs none "$MNT" +} + +write_hugetlbfs() { + local cgroup="$1" + local path="$2" + local size="$3" + + if [[ $cgroup2 ]]; then + echo $$ >$CGROUP_ROOT/$cgroup/cgroup.procs + else + echo 0 >$CGROUP_ROOT/$cgroup/cpuset.mems + echo 0 >$CGROUP_ROOT/$cgroup/cpuset.cpus + echo $$ >"$CGROUP_ROOT/$cgroup/tasks" + fi + ./write_to_hugetlbfs -p "$path" -s "$size" -m 0 -o + if [[ $cgroup2 ]]; then + echo $$ >$CGROUP_ROOT/cgroup.procs + else + echo $$ >"$CGROUP_ROOT/tasks" + fi + echo +} + +set -e + +size=$((${MB} * 1024 * 1024 * 25)) # 50MB = 25 * 2MB hugepages. + +cleanup + +echo +echo +echo Test charge, rmdir, uncharge +setup +echo mkdir +mkdir $CGROUP_ROOT/test1 + +echo write +write_hugetlbfs test1 "$MNT"/test $size + +echo rmdir +rmdir $CGROUP_ROOT/test1 +mkdir $CGROUP_ROOT/test1 + +echo uncharge +rm -rf /mnt/huge/* + +cleanup + +echo done +echo +echo +if [[ ! $cgroup2 ]]; then + echo "Test parent and child hugetlb usage" + setup + + echo write + write_hugetlbfs a "$MNT"/test $size + + echo Assert memory charged correctly for parent use. + assert_state 0 $size 0 0 + + write_hugetlbfs a/b "$MNT"/test2 $size + + echo Assert memory charged correctly for child use. + assert_state 0 $(($size * 2)) 0 $size + + rmdir "$CGROUP_ROOT"/a/b + sleep 5 + echo Assert memory reparent correctly. + assert_state 0 $(($size * 2)) + + rm -rf "$MNT"/* + umount "$MNT" + echo Assert memory uncharged correctly. + assert_state 0 0 + + cleanup +fi + +echo +echo +echo "Test child only hugetlb usage" +echo setup +setup + +echo write +write_hugetlbfs a/b "$MNT"/test2 $size + +echo Assert memory charged correctly for child only use. +assert_state 0 $(($size)) 0 $size + +rmdir "$CGROUP_ROOT"/a/b +echo Assert memory reparent correctly. +assert_state 0 $size + +rm -rf "$MNT"/* +umount "$MNT" +echo Assert memory uncharged correctly. +assert_state 0 0 + +cleanup + +echo ALL PASS + +umount $CGROUP_ROOT +rm -rf $CGROUP_ROOT --- a/tools/testing/selftests/vm/Makefile~hugetlb_cgroup-add-hugetlb_cgroup-reservation-tests +++ a/tools/testing/selftests/vm/Makefile @@ -23,6 +23,7 @@ TEST_GEN_FILES += userfaultfd ifneq (,$(filter $(ARCH),arm64 ia64 mips64 parisc64 ppc64 riscv64 s390x sh64 sparc64 x86_64)) TEST_GEN_FILES += va_128TBswitch TEST_GEN_FILES += virtual_address_range +TEST_GEN_FILES += write_to_hugetlbfs endif TEST_PROGS := run_vmtests --- /dev/null +++ a/tools/testing/selftests/vm/write_hugetlb_memory.sh @@ -0,0 +1,23 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 + +set -e + +size=$1 +populate=$2 +write=$3 +cgroup=$4 +path=$5 +method=$6 +private=$7 +want_sleep=$8 +reserve=$9 + +echo "Putting task in cgroup '$cgroup'" +echo $$ > /dev/cgroup/memory/"$cgroup"/cgroup.procs + +echo "Method is $method" + +set +e +./write_to_hugetlbfs -p "$path" -s "$size" "$write" "$populate" -m "$method" \ + "$private" "$want_sleep" "$reserve" --- /dev/null +++ a/tools/testing/selftests/vm/write_to_hugetlbfs.c @@ -0,0 +1,242 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * This program reserves and uses hugetlb memory, supporting a bunch of + * scenarios needed by the charged_reserved_hugetlb.sh test. + */ + +#include <err.h> +#include <errno.h> +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <fcntl.h> +#include <sys/types.h> +#include <sys/shm.h> +#include <sys/stat.h> +#include <sys/mman.h> + +/* Global definitions. */ +enum method { + HUGETLBFS, + MMAP_MAP_HUGETLB, + SHM, + MAX_METHOD +}; + + +/* Global variables. */ +static const char *self; +static char *shmaddr; +static int shmid; + +/* + * Show usage and exit. + */ +static void exit_usage(void) +{ + printf("Usage: %s -p <path to hugetlbfs file> -s <size to map> " + "[-m <0=hugetlbfs | 1=mmap(MAP_HUGETLB)>] [-l] [-r] " + "[-o] [-w] [-n]\n", + self); + exit(EXIT_FAILURE); +} + +void sig_handler(int signo) +{ + printf("Received %d.\n", signo); + if (signo == SIGINT) { + printf("Deleting the memory\n"); + if (shmdt((const void *)shmaddr) != 0) { + perror("Detach failure"); + shmctl(shmid, IPC_RMID, NULL); + exit(4); + } + + shmctl(shmid, IPC_RMID, NULL); + printf("Done deleting the memory\n"); + } + exit(2); +} + +int main(int argc, char **argv) +{ + int fd = 0; + int key = 0; + int *ptr = NULL; + int c = 0; + int size = 0; + char path[256] = ""; + enum method method = MAX_METHOD; + int want_sleep = 0, private = 0; + int populate = 0; + int write = 0; + int reserve = 1; + + unsigned long i; + + if (signal(SIGINT, sig_handler) == SIG_ERR) + err(1, "\ncan't catch SIGINT\n"); + + /* Parse command-line arguments. */ + setvbuf(stdout, NULL, _IONBF, 0); + self = argv[0]; + + while ((c = getopt(argc, argv, "s:p:m:owlrn")) != -1) { + switch (c) { + case 's': + size = atoi(optarg); + break; + case 'p': + strncpy(path, optarg, sizeof(path)); + break; + case 'm': + if (atoi(optarg) >= MAX_METHOD) { + errno = EINVAL; + perror("Invalid -m."); + exit_usage(); + } + method = atoi(optarg); + break; + case 'o': + populate = 1; + break; + case 'w': + write = 1; + break; + case 'l': + want_sleep = 1; + break; + case 'r': + private + = 1; + break; + case 'n': + reserve = 0; + break; + default: + errno = EINVAL; + perror("Invalid arg"); + exit_usage(); + } + } + + if (strncmp(path, "", sizeof(path)) != 0) { + printf("Writing to this path: %s\n", path); + } else { + errno = EINVAL; + perror("path not found"); + exit_usage(); + } + + if (size != 0) { + printf("Writing this size: %d\n", size); + } else { + errno = EINVAL; + perror("size not found"); + exit_usage(); + } + + if (!populate) + printf("Not populating.\n"); + else + printf("Populating.\n"); + + if (!write) + printf("Not writing to memory.\n"); + + if (method == MAX_METHOD) { + errno = EINVAL; + perror("-m Invalid"); + exit_usage(); + } else + printf("Using method=%d\n", method); + + if (!private) + printf("Shared mapping.\n"); + else + printf("Private mapping.\n"); + + if (!reserve) + printf("NO_RESERVE mapping.\n"); + else + printf("RESERVE mapping.\n"); + + switch (method) { + case HUGETLBFS: + printf("Allocating using HUGETLBFS.\n"); + fd = open(path, O_CREAT | O_RDWR, 0777); + if (fd == -1) + err(1, "Failed to open file."); + + ptr = mmap(NULL, size, PROT_READ | PROT_WRITE, + (private ? MAP_PRIVATE : MAP_SHARED) | + (populate ? MAP_POPULATE : 0) | + (reserve ? 0 : MAP_NORESERVE), + fd, 0); + + if (ptr == MAP_FAILED) { + close(fd); + err(1, "Error mapping the file"); + } + break; + case MMAP_MAP_HUGETLB: + printf("Allocating using MAP_HUGETLB.\n"); + ptr = mmap(NULL, size, PROT_READ | PROT_WRITE, + (private ? (MAP_PRIVATE | MAP_ANONYMOUS) : + MAP_SHARED) | + MAP_HUGETLB | (populate ? MAP_POPULATE : 0) | + (reserve ? 0 : MAP_NORESERVE), + -1, 0); + + if (ptr == MAP_FAILED) + err(1, "mmap"); + + printf("Returned address is %p\n", ptr); + break; + case SHM: + printf("Allocating using SHM.\n"); + shmid = shmget(key, size, + SHM_HUGETLB | IPC_CREAT | SHM_R | SHM_W); + if (shmid < 0) { + shmid = shmget(++key, size, + SHM_HUGETLB | IPC_CREAT | SHM_R | SHM_W); + if (shmid < 0) + err(1, "shmget"); + } + printf("shmid: 0x%x, shmget key:%d\n", shmid, key); + + ptr = shmat(shmid, NULL, 0); + if (ptr == (int *)-1) { + perror("Shared memory attach failure"); + shmctl(shmid, IPC_RMID, NULL); + exit(2); + } + printf("shmaddr: %p\n", ptr); + + break; + default: + errno = EINVAL; + err(1, "Invalid method."); + } + + if (write) { + printf("Writing to memory.\n"); + memset(ptr, 1, size); + } + + if (want_sleep) { + /* Signal to caller that we're done. */ + printf("DONE\n"); + + /* Hold memory until external kill signal is delivered. */ + while (1) + sleep(100); + } + + if (method == HUGETLBFS) + close(fd); + + return 0; +} _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 150/155] hugetlb_cgroup: add hugetlb_cgroup reservation docs 2020-04-02 4:01 incoming Andrew Morton ` (148 preceding siblings ...) 2020-04-02 4:11 ` [patch 149/155] hugetlb_cgroup: add hugetlb_cgroup reservation tests Andrew Morton @ 2020-04-02 4:11 ` Andrew Morton 2020-04-02 4:11 ` [patch 151/155] mm/hugetlb.c: clean code by removing unnecessary initialization Andrew Morton ` (4 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:11 UTC (permalink / raw) To: akpm, almasrymina, gthelen, linux-mm, mike.kravetz, mm-commits, rientjes, sandipan, shakeelb, shuah, torvalds From: Mina Almasry <almasrymina@google.com> Subject: hugetlb_cgroup: add hugetlb_cgroup reservation docs Add docs for how to use hugetlb_cgroup reservations, and their behavior. Link: http://lkml.kernel.org/r/20200211213128.73302-9-almasrymina@google.com Signed-off-by: Mina Almasry <almasrymina@google.com> Cc: David Rientjes <rientjes@google.com> Cc: Greg Thelen <gthelen@google.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Sandipan Das <sandipan@linux.ibm.com> Cc: Shakeel Butt <shakeelb@google.com> Cc: Shuah Khan <shuah@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- Documentation/admin-guide/cgroup-v1/hugetlb.rst | 103 ++++++++++++-- 1 file changed, 92 insertions(+), 11 deletions(-) --- a/Documentation/admin-guide/cgroup-v1/hugetlb.rst~hugetlb_cgroup-add-hugetlb_cgroup-reservation-docs +++ a/Documentation/admin-guide/cgroup-v1/hugetlb.rst @@ -2,13 +2,6 @@ HugeTLB Controller ================== -The HugeTLB controller allows to limit the HugeTLB usage per control group and -enforces the controller limit during page fault. Since HugeTLB doesn't -support page reclaim, enforcing the limit at page fault time implies that, -the application will get SIGBUS signal if it tries to access HugeTLB pages -beyond its limit. This requires the application to know beforehand how much -HugeTLB pages it would require for its use. - HugeTLB controller can be created by first mounting the cgroup filesystem. # mount -t cgroup -o hugetlb none /sys/fs/cgroup @@ -28,10 +21,14 @@ process (bash) into it. Brief summary of control files:: - hugetlb.<hugepagesize>.limit_in_bytes # set/show limit of "hugepagesize" hugetlb usage - hugetlb.<hugepagesize>.max_usage_in_bytes # show max "hugepagesize" hugetlb usage recorded - hugetlb.<hugepagesize>.usage_in_bytes # show current usage for "hugepagesize" hugetlb - hugetlb.<hugepagesize>.failcnt # show the number of allocation failure due to HugeTLB limit + hugetlb.<hugepagesize>.rsvd.limit_in_bytes # set/show limit of "hugepagesize" hugetlb reservations + hugetlb.<hugepagesize>.rsvd.max_usage_in_bytes # show max "hugepagesize" hugetlb reservations and no-reserve faults + hugetlb.<hugepagesize>.rsvd.usage_in_bytes # show current reservations and no-reserve faults for "hugepagesize" hugetlb + hugetlb.<hugepagesize>.rsvd.failcnt # show the number of allocation failure due to HugeTLB reservation limit + hugetlb.<hugepagesize>.limit_in_bytes # set/show limit of "hugepagesize" hugetlb faults + hugetlb.<hugepagesize>.max_usage_in_bytes # show max "hugepagesize" hugetlb usage recorded + hugetlb.<hugepagesize>.usage_in_bytes # show current usage for "hugepagesize" hugetlb + hugetlb.<hugepagesize>.failcnt # show the number of allocation failure due to HugeTLB usage limit For a system supporting three hugepage sizes (64k, 32M and 1G), the control files include:: @@ -40,11 +37,95 @@ files include:: hugetlb.1GB.max_usage_in_bytes hugetlb.1GB.usage_in_bytes hugetlb.1GB.failcnt + hugetlb.1GB.rsvd.limit_in_bytes + hugetlb.1GB.rsvd.max_usage_in_bytes + hugetlb.1GB.rsvd.usage_in_bytes + hugetlb.1GB.rsvd.failcnt hugetlb.64KB.limit_in_bytes hugetlb.64KB.max_usage_in_bytes hugetlb.64KB.usage_in_bytes hugetlb.64KB.failcnt + hugetlb.64KB.rsvd.limit_in_bytes + hugetlb.64KB.rsvd.max_usage_in_bytes + hugetlb.64KB.rsvd.usage_in_bytes + hugetlb.64KB.rsvd.failcnt hugetlb.32MB.limit_in_bytes hugetlb.32MB.max_usage_in_bytes hugetlb.32MB.usage_in_bytes hugetlb.32MB.failcnt + hugetlb.32MB.rsvd.limit_in_bytes + hugetlb.32MB.rsvd.max_usage_in_bytes + hugetlb.32MB.rsvd.usage_in_bytes + hugetlb.32MB.rsvd.failcnt + + +1. Page fault accounting + +hugetlb.<hugepagesize>.limit_in_bytes +hugetlb.<hugepagesize>.max_usage_in_bytes +hugetlb.<hugepagesize>.usage_in_bytes +hugetlb.<hugepagesize>.failcnt + +The HugeTLB controller allows users to limit the HugeTLB usage (page fault) per +control group and enforces the limit during page fault. Since HugeTLB +doesn't support page reclaim, enforcing the limit at page fault time implies +that, the application will get SIGBUS signal if it tries to fault in HugeTLB +pages beyond its limit. Therefore the application needs to know exactly how many +HugeTLB pages it uses before hand, and the sysadmin needs to make sure that +there are enough available on the machine for all the users to avoid processes +getting SIGBUS. + + +2. Reservation accounting + +hugetlb.<hugepagesize>.rsvd.limit_in_bytes +hugetlb.<hugepagesize>.rsvd.max_usage_in_bytes +hugetlb.<hugepagesize>.rsvd.usage_in_bytes +hugetlb.<hugepagesize>.rsvd.failcnt + +The HugeTLB controller allows to limit the HugeTLB reservations per control +group and enforces the controller limit at reservation time and at the fault of +HugeTLB memory for which no reservation exists. Since reservation limits are +enforced at reservation time (on mmap or shget), reservation limits never causes +the application to get SIGBUS signal if the memory was reserved before hand. For +MAP_NORESERVE allocations, the reservation limit behaves the same as the fault +limit, enforcing memory usage at fault time and causing the application to +receive a SIGBUS if it's crossing its limit. + +Reservation limits are superior to page fault limits described above, since +reservation limits are enforced at reservation time (on mmap or shget), and +never causes the application to get SIGBUS signal if the memory was reserved +before hand. This allows for easier fallback to alternatives such as +non-HugeTLB memory for example. In the case of page fault accounting, it's very +hard to avoid processes getting SIGBUS since the sysadmin needs precisely know +the HugeTLB usage of all the tasks in the system and make sure there is enough +pages to satisfy all requests. Avoiding tasks getting SIGBUS on overcommited +systems is practically impossible with page fault accounting. + + +3. Caveats with shared memory + +For shared HugeTLB memory, both HugeTLB reservation and page faults are charged +to the first task that causes the memory to be reserved or faulted, and all +subsequent uses of this reserved or faulted memory is done without charging. + +Shared HugeTLB memory is only uncharged when it is unreserved or deallocated. +This is usually when the HugeTLB file is deleted, and not when the task that +caused the reservation or fault has exited. + + +4. Caveats with HugeTLB cgroup offline. + +When a HugeTLB cgroup goes offline with some reservations or faults still +charged to it, the behavior is as follows: + +- The fault charges are charged to the parent HugeTLB cgroup (reparented), +- the reservation charges remain on the offline HugeTLB cgroup. + +This means that if a HugeTLB cgroup gets offlined while there is still HugeTLB +reservations charged to it, that cgroup persists as a zombie until all HugeTLB +reservations are uncharged. HugeTLB reservations behave in this manner to match +the memory controller whose cgroups also persist as zombie until all charged +memory is uncharged. Also, the tracking of HugeTLB reservations is a bit more +complex compared to the tracking of HugeTLB faults, so it is significantly +harder to reparent reservations at offline time. _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 151/155] mm/hugetlb.c: clean code by removing unnecessary initialization 2020-04-02 4:01 incoming Andrew Morton ` (149 preceding siblings ...) 2020-04-02 4:11 ` [patch 150/155] hugetlb_cgroup: add hugetlb_cgroup reservation docs Andrew Morton @ 2020-04-02 4:11 ` Andrew Morton 2020-04-02 4:11 ` [patch 152/155] mm/hugetlb: remove unnecessary memory fetch in PageHeadHuge() Andrew Morton ` (3 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:11 UTC (permalink / raw) To: akpm, linux-mm, mateusznosek0, mike.kravetz, mm-commits, torvalds From: Mateusz Nosek <mateusznosek0@gmail.com> Subject: mm/hugetlb.c: clean code by removing unnecessary initialization Previously variable 'check_addr' was initialized, but was not read later before reassigning. So the initialization can be removed. Link: http://lkml.kernel.org/r/20200303212354.25226-1-mateusznosek0@gmail.com Signed-off-by: Mateusz Nosek <mateusznosek0@gmail.com> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/hugetlb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/mm/hugetlb.c~mm-hugetlbc-clean-code-by-removing-unnecessary-initialization +++ a/mm/hugetlb.c @@ -5156,7 +5156,7 @@ static bool vma_shareable(struct vm_area void adjust_range_if_pmd_sharing_possible(struct vm_area_struct *vma, unsigned long *start, unsigned long *end) { - unsigned long check_addr = *start; + unsigned long check_addr; if (!(vma->vm_flags & VM_MAYSHARE)) return; _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 152/155] mm/hugetlb: remove unnecessary memory fetch in PageHeadHuge() 2020-04-02 4:01 incoming Andrew Morton ` (150 preceding siblings ...) 2020-04-02 4:11 ` [patch 151/155] mm/hugetlb.c: clean code by removing unnecessary initialization Andrew Morton @ 2020-04-02 4:11 ` Andrew Morton 2020-04-02 4:11 ` [patch 153/155] selftests/vm: fix map_hugetlb length used for testing read and write Andrew Morton ` (2 subsequent siblings) 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:11 UTC (permalink / raw) To: akpm, kirill.shutemov, linux-mm, mike.kravetz, mm-commits, nehaagarwal, rientjes, torvalds, vbabka From: Vlastimil Babka <vbabka@suse.cz> Subject: mm/hugetlb: remove unnecessary memory fetch in PageHeadHuge() Commit f1e61557f023 ("mm: pack compound_dtor and compound_order into one word in struct page") changed compound_dtor from a pointer to an array index in order to pack it. To check if page has the hugeltbfs compound_dtor, we can just compare the index directly without fetching the function pointer. Said commit did that with PageHuge() and we can do the same with PageHeadHuge() to make the code a bit smaller and faster. Link: http://lkml.kernel.org/r/20200311172440.6988-1-vbabka@suse.cz Signed-off-by: Vlastimil Babka <vbabka@suse.cz> Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com> Acked-by: David Rientjes <rientjes@google.com> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Neha Agarwal <nehaagarwal@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- mm/hugetlb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/mm/hugetlb.c~mm-hugetlb-remove-unnecessary-memory-fetch-in-pageheadhuge +++ a/mm/hugetlb.c @@ -1528,7 +1528,7 @@ int PageHeadHuge(struct page *page_head) if (!PageHead(page_head)) return 0; - return get_compound_page_dtor(page_head) == free_huge_page; + return page_head[1].compound_dtor == HUGETLB_PAGE_DTOR; } /* _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 153/155] selftests/vm: fix map_hugetlb length used for testing read and write 2020-04-02 4:01 incoming Andrew Morton ` (151 preceding siblings ...) 2020-04-02 4:11 ` [patch 152/155] mm/hugetlb: remove unnecessary memory fetch in PageHeadHuge() Andrew Morton @ 2020-04-02 4:11 ` Andrew Morton 2020-04-02 4:11 ` [patch 154/155] mm/hugetlb: fix build failure with HUGETLB_PAGE but not HUGEBTLBFS Andrew Morton 2020-04-02 4:11 ` [patch 155/155] include/linux/huge_mm.h: check PageTail in hpage_nr_pages even when !THP Andrew Morton 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:11 UTC (permalink / raw) To: akpm, christophe.leroy, leonardo, linux-mm, mm-commits, mpe, shuah, stable, torvalds From: Christophe Leroy <christophe.leroy@c-s.fr> Subject: selftests/vm: fix map_hugetlb length used for testing read and write Commit fa7b9a805c79 ("tools/selftest/vm: allow choosing mem size and page size in map_hugetlb") added the possibility to change the size of memory mapped for the test, but left the read and write test using the default value. This is unnoticed when mapping a length greater than the default one, but segfaults otherwise. Fix read_bytes() and write_bytes() by giving them the real length. Also fix the call to munmap(). Link: http://lkml.kernel.org/r/9a404a13c871c4bd0ba9ede68f69a1225180dd7e.1580978385.git.christophe.leroy@c-s.fr Fixes: fa7b9a805c79 ("tools/selftest/vm: allow choosing mem size and page size in map_hugetlb") Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> Reviewed-by: Leonardo Bras <leonardo@linux.ibm.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Shuah Khan <shuah@kernel.org> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- tools/testing/selftests/vm/map_hugetlb.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) --- a/tools/testing/selftests/vm/map_hugetlb.c~selftests-vm-fix-map_hugetlb-length-used-for-testing-read-and-write +++ a/tools/testing/selftests/vm/map_hugetlb.c @@ -45,20 +45,20 @@ static void check_bytes(char *addr) printf("First hex is %x\n", *((unsigned int *)addr)); } -static void write_bytes(char *addr) +static void write_bytes(char *addr, size_t length) { unsigned long i; - for (i = 0; i < LENGTH; i++) + for (i = 0; i < length; i++) *(addr + i) = (char)i; } -static int read_bytes(char *addr) +static int read_bytes(char *addr, size_t length) { unsigned long i; check_bytes(addr); - for (i = 0; i < LENGTH; i++) + for (i = 0; i < length; i++) if (*(addr + i) != (char)i) { printf("Mismatch at %lu\n", i); return 1; @@ -96,11 +96,11 @@ int main(int argc, char **argv) printf("Returned address is %p\n", addr); check_bytes(addr); - write_bytes(addr); - ret = read_bytes(addr); + write_bytes(addr, length); + ret = read_bytes(addr, length); /* munmap() length of MAP_HUGETLB memory must be hugepage aligned */ - if (munmap(addr, LENGTH)) { + if (munmap(addr, length)) { perror("munmap"); exit(1); } _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 154/155] mm/hugetlb: fix build failure with HUGETLB_PAGE but not HUGEBTLBFS 2020-04-02 4:01 incoming Andrew Morton ` (152 preceding siblings ...) 2020-04-02 4:11 ` [patch 153/155] selftests/vm: fix map_hugetlb length used for testing read and write Andrew Morton @ 2020-04-02 4:11 ` Andrew Morton 2020-04-02 4:11 ` [patch 155/155] include/linux/huge_mm.h: check PageTail in hpage_nr_pages even when !THP Andrew Morton 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:11 UTC (permalink / raw) To: agl, ak, akpm, bhe, christophe.leroy, linux-mm, lkp, mike.kravetz, mm-commits, nacc, npiggin, torvalds From: Christophe Leroy <christophe.leroy@c-s.fr> Subject: mm/hugetlb: fix build failure with HUGETLB_PAGE but not HUGEBTLBFS When CONFIG_HUGETLB_PAGE is set but not CONFIG_HUGETLBFS, the following build failure is encoutered: In file included from arch/powerpc/mm/fault.c:33:0: ./include/linux/hugetlb.h: In function 'hstate_inode': ./include/linux/hugetlb.h:477:9: error: implicit declaration of function 'HUGETLBFS_SB' [-Werror=implicit-function-declaration] return HUGETLBFS_SB(i->i_sb)->hstate; ^ ./include/linux/hugetlb.h:477:30: error: invalid type argument of '->' (have 'int') return HUGETLBFS_SB(i->i_sb)->hstate; ^ Gate hstate_inode() with CONFIG_HUGETLBFS instead of CONFIG_HUGETLB_PAGE. Link: http://lkml.kernel.org/r/7e8c3a3c9a587b9cd8a2f146df32a421b961f3a2.1584432148.git.christophe.leroy@c-s.fr Link: https://patchwork.ozlabs.org/patch/1255548/#2386036 Fixes: a137e1cc6d6e ("hugetlbfs: per mount huge page sizes") Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> Reported-by: kbuild test robot <lkp@intel.com> Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com> Cc: Baoquan He <bhe@redhat.com> Cc: Nishanth Aravamudan <nacc@us.ibm.com> Cc: Nick Piggin <npiggin@suse.de> Cc: Adam Litke <agl@us.ibm.com> Cc: Andi Kleen <ak@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/hugetlb.h | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) --- a/include/linux/hugetlb.h~mm-hugetlb-fix-build-failure-with-hugetlb_page-but-not-hugebtlbfs +++ a/include/linux/hugetlb.h @@ -443,7 +443,10 @@ static inline bool is_file_hugepages(str return is_file_shm_hugepages(file); } - +static inline struct hstate *hstate_inode(struct inode *i) +{ + return HUGETLBFS_SB(i->i_sb)->hstate; +} #else /* !CONFIG_HUGETLBFS */ #define is_file_hugepages(file) false @@ -455,6 +458,10 @@ hugetlb_file_setup(const char *name, siz return ERR_PTR(-ENOSYS); } +static inline struct hstate *hstate_inode(struct inode *i) +{ + return NULL; +} #endif /* !CONFIG_HUGETLBFS */ #ifdef HAVE_ARCH_HUGETLB_UNMAPPED_AREA @@ -525,11 +532,6 @@ extern unsigned int default_hstate_idx; #define default_hstate (hstates[default_hstate_idx]) -static inline struct hstate *hstate_inode(struct inode *i) -{ - return HUGETLBFS_SB(i->i_sb)->hstate; -} - static inline struct hstate *hstate_file(struct file *f) { return hstate_inode(file_inode(f)); @@ -781,11 +783,6 @@ static inline struct hstate *hstate_vma( { return NULL; } - -static inline struct hstate *hstate_inode(struct inode *i) -{ - return NULL; -} static inline struct hstate *page_hstate(struct page *page) { _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* [patch 155/155] include/linux/huge_mm.h: check PageTail in hpage_nr_pages even when !THP 2020-04-02 4:01 incoming Andrew Morton ` (153 preceding siblings ...) 2020-04-02 4:11 ` [patch 154/155] mm/hugetlb: fix build failure with HUGETLB_PAGE but not HUGEBTLBFS Andrew Morton @ 2020-04-02 4:11 ` Andrew Morton 154 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-02 4:11 UTC (permalink / raw) To: akpm, aneesh.kumar, hch, kirill.shutemov, linux-mm, mm-commits, pankaj.gupta.linux, torvalds, willy From: "Matthew Wilcox (Oracle)" <willy@infradead.org> Subject: include/linux/huge_mm.h: check PageTail in hpage_nr_pages even when !THP It's even more important to check that we don't have a tail page when calling hpage_nr_pages() when THP are disabled. Link: http://lkml.kernel.org/r/20200318140253.6141-4-willy@infradead.org Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- include/linux/huge_mm.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) --- a/include/linux/huge_mm.h~mm-check-pagetail-in-hpage_nr_pages-even-when-thp +++ a/include/linux/huge_mm.h @@ -287,7 +287,11 @@ static inline struct list_head *page_def #define HPAGE_PUD_MASK ({ BUILD_BUG(); 0; }) #define HPAGE_PUD_SIZE ({ BUILD_BUG(); 0; }) -#define hpage_nr_pages(x) 1 +static inline int hpage_nr_pages(struct page *page) +{ + VM_BUG_ON_PAGE(PageTail(page), page); + return 1; +} static inline bool __transparent_hugepage_enabled(struct vm_area_struct *vma) { _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2022-04-27 19:41 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2022-04-27 19:41 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits, patches 2 patches, based on d615b5416f8a1afeb82d13b238f8152c572d59c0. Subsystems affected by this patch series: mm/kasan mm/debug Subsystem: mm/kasan Zqiang <qiang1.zhang@intel.com>: kasan: prevent cpu_quarantine corruption when CPU offline and cache shrink occur at same time Subsystem: mm/debug Akira Yokosawa <akiyks@gmail.com>: docs: vm/page_owner: use literal blocks for param description Documentation/vm/page_owner.rst | 5 +++-- mm/kasan/quarantine.c | 7 +++++++ 2 files changed, 10 insertions(+), 2 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2022-04-21 23:35 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2022-04-21 23:35 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm, patches 13 patches, based on b253435746d9a4a701b5f09211b9c14d3370d0da. Subsystems affected by this patch series: mm/memory-failure mm/memcg mm/userfaultfd mm/hugetlbfs mm/mremap mm/oom-kill mm/kasan kcov mm/hmm Subsystem: mm/memory-failure Naoya Horiguchi <naoya.horiguchi@nec.com>: mm/hwpoison: fix race between hugetlb free/demotion and memory_failure_hugetlb() Xu Yu <xuyu@linux.alibaba.com>: mm/memory-failure.c: skip huge_zero_page in memory_failure() Subsystem: mm/memcg Shakeel Butt <shakeelb@google.com>: memcg: sync flush only if periodic flush is delayed Subsystem: mm/userfaultfd Nadav Amit <namit@vmware.com>: userfaultfd: mark uffd_wp regardless of VM_WRITE flag Subsystem: mm/hugetlbfs Christophe Leroy <christophe.leroy@csgroup.eu>: mm, hugetlb: allow for "high" userspace addresses Subsystem: mm/mremap Sidhartha Kumar <sidhartha.kumar@oracle.com>: selftest/vm: verify mmap addr in mremap_test selftest/vm: verify remap destination address in mremap_test selftest/vm: support xfail in mremap_test selftest/vm: add skip support to mremap_test Subsystem: mm/oom-kill Nico Pache <npache@redhat.com>: oom_kill.c: futex: delay the OOM reaper to allow time for proper futex cleanup Subsystem: mm/kasan Vincenzo Frascino <vincenzo.frascino@arm.com>: MAINTAINERS: add Vincenzo Frascino to KASAN reviewers Subsystem: kcov Aleksandr Nogikh <nogikh@google.com>: kcov: don't generate a warning on vm_insert_page()'s failure Subsystem: mm/hmm Alistair Popple <apopple@nvidia.com>: mm/mmu_notifier.c: fix race in mmu_interval_notifier_remove() MAINTAINERS | 1 fs/hugetlbfs/inode.c | 9 - include/linux/hugetlb.h | 6 + include/linux/memcontrol.h | 5 include/linux/mm.h | 8 + include/linux/sched.h | 1 include/linux/sched/mm.h | 8 + kernel/kcov.c | 7 - mm/hugetlb.c | 10 + mm/memcontrol.c | 12 ++ mm/memory-failure.c | 158 ++++++++++++++++++++++-------- mm/mmap.c | 8 - mm/mmu_notifier.c | 14 ++ mm/oom_kill.c | 54 +++++++--- mm/userfaultfd.c | 15 +- mm/workingset.c | 2 tools/testing/selftests/vm/mremap_test.c | 85 +++++++++++++++- tools/testing/selftests/vm/run_vmtests.sh | 11 +- 18 files changed, 327 insertions(+), 87 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2022-04-15 2:12 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2022-04-15 2:12 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits, patches 14 patches, based on 115acbb56978941bb7537a97dfc303da286106c1. Subsystems affected by this patch series: MAINTAINERS mm/tmpfs m/secretmem mm/kasan mm/kfence mm/pagealloc mm/zram mm/compaction mm/hugetlb binfmt mm/vmalloc mm/kmemleak Subsystem: MAINTAINERS Joe Perches <joe@perches.com>: MAINTAINERS: Broadcom internal lists aren't maintainers Subsystem: mm/tmpfs Hugh Dickins <hughd@google.com>: tmpfs: fix regressions from wider use of ZERO_PAGE Subsystem: m/secretmem Axel Rasmussen <axelrasmussen@google.com>: mm/secretmem: fix panic when growing a memfd_secret Subsystem: mm/kasan Zqiang <qiang1.zhang@intel.com>: irq_work: use kasan_record_aux_stack_noalloc() record callstack Vincenzo Frascino <vincenzo.frascino@arm.com>: kasan: fix hw tags enablement when KUNIT tests are disabled Subsystem: mm/kfence Marco Elver <elver@google.com>: mm, kfence: support kmem_dump_obj() for KFENCE objects Subsystem: mm/pagealloc Juergen Gross <jgross@suse.com>: mm, page_alloc: fix build_zonerefs_node() Subsystem: mm/zram Minchan Kim <minchan@kernel.org>: mm: fix unexpected zeroed page mapping with zram swap Subsystem: mm/compaction Charan Teja Kalla <quic_charante@quicinc.com>: mm: compaction: fix compiler warning when CONFIG_COMPACTION=n Subsystem: mm/hugetlb Mike Kravetz <mike.kravetz@oracle.com>: hugetlb: do not demote poisoned hugetlb pages Subsystem: binfmt Andrew Morton <akpm@linux-foundation.org>: revert "fs/binfmt_elf: fix PT_LOAD p_align values for loaders" revert "fs/binfmt_elf: use PT_LOAD p_align values for static PIE" Subsystem: mm/vmalloc Omar Sandoval <osandov@fb.com>: mm/vmalloc: fix spinning drain_vmap_work after reading from /proc/vmcore Subsystem: mm/kmemleak Patrick Wang <patrick.wang.shcn@gmail.com>: mm: kmemleak: take a full lowmem check in kmemleak_*_phys() MAINTAINERS | 64 ++++++++++++++++++++-------------------- arch/x86/include/asm/io.h | 2 - arch/x86/kernel/crash_dump_64.c | 1 fs/binfmt_elf.c | 6 +-- include/linux/kfence.h | 24 +++++++++++++++ kernel/irq_work.c | 2 - mm/compaction.c | 10 +++--- mm/filemap.c | 6 --- mm/hugetlb.c | 17 ++++++---- mm/kasan/hw_tags.c | 5 +-- mm/kasan/kasan.h | 10 +++--- mm/kfence/core.c | 21 ------------- mm/kfence/kfence.h | 21 +++++++++++++ mm/kfence/report.c | 47 +++++++++++++++++++++++++++++ mm/kmemleak.c | 8 ++--- mm/page_alloc.c | 2 - mm/page_io.c | 54 --------------------------------- mm/secretmem.c | 17 ++++++++++ mm/shmem.c | 31 ++++++++++++------- mm/slab.c | 2 - mm/slab.h | 2 - mm/slab_common.c | 9 +++++ mm/slob.c | 2 - mm/slub.c | 2 - mm/vmalloc.c | 11 ------ 25 files changed, 207 insertions(+), 169 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2022-04-08 20:08 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2022-04-08 20:08 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits, patches 9 patches, based on d00c50b35101b862c3db270ffeba53a63a1063d9. Subsystems affected by this patch series: mm/migration mm/highmem lz4 mm/sparsemem mm/mremap mm/mempolicy mailmap mm/memcg MAINTAINERS Subsystem: mm/migration Zi Yan <ziy@nvidia.com>: mm: migrate: use thp_order instead of HPAGE_PMD_ORDER for new page allocation. Subsystem: mm/highmem Max Filippov <jcmvbkbc@gmail.com>: highmem: fix checks in __kmap_local_sched_{in,out} Subsystem: lz4 Guo Xuenan <guoxuenan@huawei.com>: lz4: fix LZ4_decompress_safe_partial read out of bound Subsystem: mm/sparsemem Waiman Long <longman@redhat.com>: mm/sparsemem: fix 'mem_section' will never be NULL gcc 12 warning Subsystem: mm/mremap Paolo Bonzini <pbonzini@redhat.com>: mmmremap.c: avoid pointless invalidate_range_start/end on mremap(old_size=0) Subsystem: mm/mempolicy Miaohe Lin <linmiaohe@huawei.com>: mm/mempolicy: fix mpol_new leak in shared_policy_replace Subsystem: mailmap Vasily Averin <vasily.averin@linux.dev>: mailmap: update Vasily Averin's email address Subsystem: mm/memcg Andrew Morton <akpm@linux-foundation.org>: mm/list_lru.c: revert "mm/list_lru: optimize memcg_reparent_list_lru_node()" Subsystem: MAINTAINERS Tom Rix <trix@redhat.com>: MAINTAINERS: add Tom as clang reviewer .mailmap | 4 ++++ MAINTAINERS | 1 + include/linux/mmzone.h | 11 +++++++---- lib/lz4/lz4_decompress.c | 8 ++++++-- mm/highmem.c | 4 ++-- mm/list_lru.c | 6 ------ mm/mempolicy.c | 3 ++- mm/migrate.c | 2 +- mm/mremap.c | 3 +++ 9 files changed, 26 insertions(+), 16 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2022-04-01 18:27 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2022-04-01 18:27 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits, patches 16 patches, based on e8b767f5e04097aaedcd6e06e2270f9fe5282696. Subsystems affected by this patch series: mm/madvise ofs2 nilfs2 mm/mlock mm/mfence mailmap mm/memory-failure mm/kasan mm/debug mm/kmemleak mm/damon Subsystem: mm/madvise Charan Teja Kalla <quic_charante@quicinc.com>: Revert "mm: madvise: skip unmapped vma holes passed to process_madvise" Subsystem: ofs2 Joseph Qi <joseph.qi@linux.alibaba.com>: ocfs2: fix crash when mount with quota enabled Subsystem: nilfs2 Ryusuke Konishi <konishi.ryusuke@gmail.com>: Patch series "nilfs2 lockdep warning fixes": nilfs2: fix lockdep warnings in page operations for btree nodes nilfs2: fix lockdep warnings during disk space reclamation nilfs2: get rid of nilfs_mapping_init() Subsystem: mm/mlock Hugh Dickins <hughd@google.com>: mm/munlock: add lru_add_drain() to fix memcg_stat_test mm/munlock: update Documentation/vm/unevictable-lru.rst Sebastian Andrzej Siewior <bigeasy@linutronix.de>: mm/munlock: protect the per-CPU pagevec by a local_lock_t Subsystem: mm/kfence Muchun Song <songmuchun@bytedance.com>: mm: kfence: fix objcgs vector allocation Subsystem: mailmap Kirill Tkhai <kirill.tkhai@openvz.org>: mailmap: update Kirill's email Subsystem: mm/memory-failure Rik van Riel <riel@surriel.com>: mm,hwpoison: unmap poisoned page before invalidation Subsystem: mm/kasan Andrey Konovalov <andreyknvl@google.com>: mm, kasan: fix __GFP_BITS_SHIFT definition breaking LOCKDEP Subsystem: mm/debug Yinan Zhang <zhangyinan2019@email.szu.edu.cn>: tools/vm/page_owner_sort.c: remove -c option doc/vm/page_owner.rst: remove content related to -c option Subsystem: mm/kmemleak Kuan-Ying Lee <Kuan-Ying.Lee@mediatek.com>: mm/kmemleak: reset tag when compare object pointer Subsystem: mm/damon Jonghyeon Kim <tome01@ajou.ac.kr>: mm/damon: prevent activated scheme from sleeping by deactivated schemes .mailmap | 1 Documentation/vm/page_owner.rst | 1 Documentation/vm/unevictable-lru.rst | 473 +++++++++++++++-------------------- fs/nilfs2/btnode.c | 23 + fs/nilfs2/btnode.h | 1 fs/nilfs2/btree.c | 27 + fs/nilfs2/dat.c | 4 fs/nilfs2/gcinode.c | 7 fs/nilfs2/inode.c | 167 +++++++++++- fs/nilfs2/mdt.c | 45 ++- fs/nilfs2/mdt.h | 6 fs/nilfs2/nilfs.h | 16 - fs/nilfs2/page.c | 16 - fs/nilfs2/page.h | 1 fs/nilfs2/segment.c | 9 fs/nilfs2/super.c | 5 fs/ocfs2/quota_global.c | 23 - fs/ocfs2/quota_local.c | 2 include/linux/gfp.h | 4 mm/damon/core.c | 5 mm/gup.c | 10 mm/internal.h | 6 mm/kfence/core.c | 11 mm/kfence/kfence.h | 3 mm/kmemleak.c | 9 mm/madvise.c | 9 mm/memory.c | 12 mm/migrate.c | 2 mm/mlock.c | 46 ++- mm/page_alloc.c | 1 mm/rmap.c | 4 mm/swap.c | 4 tools/vm/page_owner_sort.c | 6 33 files changed, 560 insertions(+), 399 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2022-04-01 18:20 Andrew Morton 2022-04-01 18:27 ` incoming Andrew Morton 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2022-04-01 18:20 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits, patches 16 patches, based on e8b767f5e04097aaedcd6e06e2270f9fe5282696. Subsystems affected by this patch series: mm/madvise ofs2 nilfs2 mm/mlock mm/mfence mailmap mm/memory-failure mm/kasan mm/debug mm/kmemleak mm/damon Subsystem: mm/madvise Charan Teja Kalla <quic_charante@quicinc.com>: Revert "mm: madvise: skip unmapped vma holes passed to process_madvise" Subsystem: ofs2 Joseph Qi <joseph.qi@linux.alibaba.com>: ocfs2: fix crash when mount with quota enabled Subsystem: nilfs2 Ryusuke Konishi <konishi.ryusuke@gmail.com>: Patch series "nilfs2 lockdep warning fixes": nilfs2: fix lockdep warnings in page operations for btree nodes nilfs2: fix lockdep warnings during disk space reclamation nilfs2: get rid of nilfs_mapping_init() Subsystem: mm/mlock Hugh Dickins <hughd@google.com>: mm/munlock: add lru_add_drain() to fix memcg_stat_test mm/munlock: update Documentation/vm/unevictable-lru.rst Sebastian Andrzej Siewior <bigeasy@linutronix.de>: mm/munlock: protect the per-CPU pagevec by a local_lock_t Subsystem: mm/kfence Muchun Song <songmuchun@bytedance.com>: mm: kfence: fix objcgs vector allocation Subsystem: mailmap Kirill Tkhai <kirill.tkhai@openvz.org>: mailmap: update Kirill's email Subsystem: mm/memory-failure Rik van Riel <riel@surriel.com>: mm,hwpoison: unmap poisoned page before invalidation Subsystem: mm/kasan Andrey Konovalov <andreyknvl@google.com>: mm, kasan: fix __GFP_BITS_SHIFT definition breaking LOCKDEP Subsystem: mm/debug Yinan Zhang <zhangyinan2019@email.szu.edu.cn>: tools/vm/page_owner_sort.c: remove -c option doc/vm/page_owner.rst: remove content related to -c option Subsystem: mm/kmemleak Kuan-Ying Lee <Kuan-Ying.Lee@mediatek.com>: mm/kmemleak: reset tag when compare object pointer Subsystem: mm/damon Jonghyeon Kim <tome01@ajou.ac.kr>: mm/damon: prevent activated scheme from sleeping by deactivated schemes .mailmap | 1 Documentation/vm/page_owner.rst | 1 Documentation/vm/unevictable-lru.rst | 473 +++++++++++++++-------------------- fs/nilfs2/btnode.c | 23 + fs/nilfs2/btnode.h | 1 fs/nilfs2/btree.c | 27 + fs/nilfs2/dat.c | 4 fs/nilfs2/gcinode.c | 7 fs/nilfs2/inode.c | 167 +++++++++++- fs/nilfs2/mdt.c | 45 ++- fs/nilfs2/mdt.h | 6 fs/nilfs2/nilfs.h | 16 - fs/nilfs2/page.c | 16 - fs/nilfs2/page.h | 1 fs/nilfs2/segment.c | 9 fs/nilfs2/super.c | 5 fs/ocfs2/quota_global.c | 23 - fs/ocfs2/quota_local.c | 2 include/linux/gfp.h | 4 mm/damon/core.c | 5 mm/gup.c | 10 mm/internal.h | 6 mm/kfence/core.c | 11 mm/kfence/kfence.h | 3 mm/kmemleak.c | 9 mm/madvise.c | 9 mm/memory.c | 12 mm/migrate.c | 2 mm/mlock.c | 46 ++- mm/page_alloc.c | 1 mm/rmap.c | 4 mm/swap.c | 4 tools/vm/page_owner_sort.c | 6 33 files changed, 560 insertions(+), 399 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2022-04-01 18:20 incoming Andrew Morton @ 2022-04-01 18:27 ` Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2022-04-01 18:27 UTC (permalink / raw) To: Linus Torvalds, linux-mm, mm-commits, patches Argh, messed up in-reply-to. Let me redo... ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2022-03-25 1:07 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2022-03-25 1:07 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm, patches This is the material which was staged after willystuff in linux-next. Everything applied seamlessly on your latest, all looks well. 114 patches, based on 52deda9551a01879b3562e7b41748e85c591f14c. Subsystems affected by this patch series: mm/debug mm/selftests mm/pagecache mm/thp mm/rmap mm/migration mm/kasan mm/hugetlb mm/pagemap mm/madvise selftests Subsystem: mm/debug Sean Anderson <seanga2@gmail.com>: tools/vm/page_owner_sort.c: sort by stacktrace before culling tools/vm/page_owner_sort.c: support sorting by stack trace Yinan Zhang <zhangyinan2019@email.szu.edu.cn>: tools/vm/page_owner_sort.c: add switch between culling by stacktrace and txt Chongxi Zhao <zhaochongxi2019@email.szu.edu.cn>: tools/vm/page_owner_sort.c: support sorting pid and time Shenghong Han <hanshenghong2019@email.szu.edu.cn>: tools/vm/page_owner_sort.c: two trivial fixes Yixuan Cao <caoyixuan2019@email.szu.edu.cn>: tools/vm/page_owner_sort.c: delete invalid duplicate code Shenghong Han <hanshenghong2019@email.szu.edu.cn>: Documentation/vm/page_owner.rst: update the documentation Shuah Khan <skhan@linuxfoundation.org>: Documentation/vm/page_owner.rst: fix unexpected indentation warns Waiman Long <longman@redhat.com>: Patch series "mm/page_owner: Extend page_owner to show memcg information", v4: lib/vsprintf: avoid redundant work with 0 size mm/page_owner: use scnprintf() to avoid excessive buffer overrun check mm/page_owner: print memcg information mm/page_owner: record task command name Yixuan Cao <caoyixuan2019@email.szu.edu.cn>: mm/page_owner.c: record tgid tools/vm/page_owner_sort.c: fix the instructions for use Jiajian Ye <yejiajian2018@email.szu.edu.cn>: tools/vm/page_owner_sort.c: fix comments tools/vm/page_owner_sort.c: add a security check tools/vm/page_owner_sort.c: support sorting by tgid and update documentation tools/vm/page_owner_sort: fix three trivival places tools/vm/page_owner_sort: support for sorting by task command name tools/vm/page_owner_sort.c: support for selecting by PID, TGID or task command name tools/vm/page_owner_sort.c: support for user-defined culling rules Christoph Hellwig <hch@lst.de>: mm: unexport page_init_poison Subsystem: mm/selftests "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>: selftest/vm: add util.h and and move helper functions there Mike Rapoport <rppt@kernel.org>: selftest/vm: add helpers to detect PAGE_SIZE and PAGE_SHIFT Subsystem: mm/pagecache Hugh Dickins <hughd@google.com>: mm: delete __ClearPageWaiters() mm: filemap_unaccount_folio() large skip mapcount fixup Subsystem: mm/thp Hugh Dickins <hughd@google.com>: mm/thp: fix NR_FILE_MAPPED accounting in page_*_file_rmap() Subsystem: mm/rmap Subsystem: mm/migration Anshuman Khandual <anshuman.khandual@arm.com>: Patch series "mm/migration: Add trace events", v3: mm/migration: add trace events for THP migrations mm/migration: add trace events for base page and HugeTLB migrations Subsystem: mm/kasan Andrey Konovalov <andreyknvl@google.com>: Patch series "kasan, vmalloc, arm64: add vmalloc tagging support for SW/HW_TAGS", v6: kasan, page_alloc: deduplicate should_skip_kasan_poison kasan, page_alloc: move tag_clear_highpage out of kernel_init_free_pages kasan, page_alloc: merge kasan_free_pages into free_pages_prepare kasan, page_alloc: simplify kasan_poison_pages call site kasan, page_alloc: init memory of skipped pages on free kasan: drop skip_kasan_poison variable in free_pages_prepare mm: clarify __GFP_ZEROTAGS comment kasan: only apply __GFP_ZEROTAGS when memory is zeroed kasan, page_alloc: refactor init checks in post_alloc_hook kasan, page_alloc: merge kasan_alloc_pages into post_alloc_hook kasan, page_alloc: combine tag_clear_highpage calls in post_alloc_hook kasan, page_alloc: move SetPageSkipKASanPoison in post_alloc_hook kasan, page_alloc: move kernel_init_free_pages in post_alloc_hook kasan, page_alloc: rework kasan_unpoison_pages call site kasan: clean up metadata byte definitions kasan: define KASAN_VMALLOC_INVALID for SW_TAGS kasan, x86, arm64, s390: rename functions for modules shadow kasan, vmalloc: drop outdated VM_KASAN comment kasan: reorder vmalloc hooks kasan: add wrappers for vmalloc hooks kasan, vmalloc: reset tags in vmalloc functions kasan, fork: reset pointer tags of vmapped stacks kasan, arm64: reset pointer tags of vmapped stacks kasan, vmalloc: add vmalloc tagging for SW_TAGS kasan, vmalloc, arm64: mark vmalloc mappings as pgprot_tagged kasan, vmalloc: unpoison VM_ALLOC pages after mapping kasan, mm: only define ___GFP_SKIP_KASAN_POISON with HW_TAGS kasan, page_alloc: allow skipping unpoisoning for HW_TAGS kasan, page_alloc: allow skipping memory init for HW_TAGS kasan, vmalloc: add vmalloc tagging for HW_TAGS kasan, vmalloc: only tag normal vmalloc allocations kasan, arm64: don't tag executable vmalloc allocations kasan: mark kasan_arg_stacktrace as __initdata kasan: clean up feature flags for HW_TAGS mode kasan: add kasan.vmalloc command line flag kasan: allow enabling KASAN_VMALLOC and SW/HW_TAGS arm64: select KASAN_VMALLOC for SW/HW_TAGS modes kasan: documentation updates kasan: improve vmalloc tests kasan: test: support async (again) and asymm modes for HW_TAGS tangmeng <tangmeng@uniontech.com>: mm/kasan: remove unnecessary CONFIG_KASAN option Peter Collingbourne <pcc@google.com>: kasan: update function name in comments Andrey Konovalov <andreyknvl@google.com>: kasan: print virtual mapping info in reports Patch series "kasan: report clean-ups and improvements": kasan: drop addr check from describe_object_addr kasan: more line breaks in reports kasan: rearrange stack frame info in reports kasan: improve stack frame info in reports kasan: print basic stack frame info for SW_TAGS kasan: simplify async check in end_report() kasan: simplify kasan_update_kunit_status() and call sites kasan: check CONFIG_KASAN_KUNIT_TEST instead of CONFIG_KUNIT kasan: move update_kunit_status to start_report kasan: move disable_trace_on_warning to start_report kasan: split out print_report from __kasan_report kasan: simplify kasan_find_first_bad_addr call sites kasan: restructure kasan_report kasan: merge __kasan_report into kasan_report kasan: call print_report from kasan_report_invalid_free kasan: move and simplify kasan_report_async kasan: rename kasan_access_info to kasan_report_info kasan: add comment about UACCESS regions to kasan_report kasan: respect KASAN_BIT_REPORTED in all reporting routines kasan: reorder reporting functions kasan: move and hide kasan_save_enable/restore_multi_shot kasan: disable LOCKDEP when printing reports Subsystem: mm/hugetlb Mike Kravetz <mike.kravetz@oracle.com>: Patch series "Add hugetlb MADV_DONTNEED support", v3: mm: enable MADV_DONTNEED for hugetlb mappings selftests/vm: add hugetlb madvise MADV_DONTNEED MADV_REMOVE test userfaultfd/selftests: enable hugetlb remap and remove event testing Miaohe Lin <linmiaohe@huawei.com>: mm/huge_memory: make is_transparent_hugepage() static Subsystem: mm/pagemap David Hildenbrand <david@redhat.com>: Patch series "mm: COW fixes part 1: fix the COW security issue for THP and swap", v3: mm: optimize do_wp_page() for exclusive pages in the swapcache mm: optimize do_wp_page() for fresh pages in local LRU pagevecs mm: slightly clarify KSM logic in do_swap_page() mm: streamline COW logic in do_swap_page() mm/huge_memory: streamline COW logic in do_huge_pmd_wp_page() mm/khugepaged: remove reuse_swap_page() usage mm/swapfile: remove stale reuse_swap_page() mm/huge_memory: remove stale page_trans_huge_mapcount() mm/huge_memory: remove stale locking logic from __split_huge_pmd() Hugh Dickins <hughd@google.com>: mm: warn on deleting redirtied only if accounted mm: unmap_mapping_range_tree() with i_mmap_rwsem shared Anshuman Khandual <anshuman.khandual@arm.com>: mm: generalize ARCH_HAS_FILTER_PGPROT Subsystem: mm/madvise Mauricio Faria de Oliveira <mfo@canonical.com>: mm: fix race between MADV_FREE reclaim and blkdev direct IO read Johannes Weiner <hannes@cmpxchg.org>: mm: madvise: MADV_DONTNEED_LOCKED Subsystem: selftests Muhammad Usama Anjum <usama.anjum@collabora.com>: selftests: vm: remove dependecy from internal kernel macros Kees Cook <keescook@chromium.org>: selftests: kselftest framework: provide "finished" helper Documentation/dev-tools/kasan.rst | 17 Documentation/vm/page_owner.rst | 72 ++ arch/alpha/include/uapi/asm/mman.h | 2 arch/arm64/Kconfig | 2 arch/arm64/include/asm/vmalloc.h | 6 arch/arm64/include/asm/vmap_stack.h | 5 arch/arm64/kernel/module.c | 5 arch/arm64/mm/pageattr.c | 2 arch/arm64/net/bpf_jit_comp.c | 3 arch/mips/include/uapi/asm/mman.h | 2 arch/parisc/include/uapi/asm/mman.h | 2 arch/powerpc/mm/book3s64/trace.c | 1 arch/s390/kernel/module.c | 2 arch/x86/Kconfig | 3 arch/x86/kernel/module.c | 2 arch/x86/mm/init.c | 1 arch/xtensa/include/uapi/asm/mman.h | 2 include/linux/gfp.h | 53 +- include/linux/huge_mm.h | 6 include/linux/kasan.h | 136 +++-- include/linux/mm.h | 5 include/linux/page-flags.h | 2 include/linux/pagemap.h | 3 include/linux/swap.h | 4 include/linux/vmalloc.h | 18 include/trace/events/huge_memory.h | 1 include/trace/events/migrate.h | 31 + include/trace/events/mmflags.h | 18 include/trace/events/thp.h | 27 + include/uapi/asm-generic/mman-common.h | 2 kernel/fork.c | 13 kernel/scs.c | 16 lib/Kconfig.kasan | 18 lib/test_kasan.c | 239 ++++++++- lib/vsprintf.c | 8 mm/Kconfig | 3 mm/debug.c | 1 mm/filemap.c | 63 +- mm/huge_memory.c | 109 ---- mm/kasan/Makefile | 2 mm/kasan/common.c | 4 mm/kasan/hw_tags.c | 243 +++++++--- mm/kasan/kasan.h | 76 ++- mm/kasan/report.c | 516 +++++++++++---------- mm/kasan/report_generic.c | 34 - mm/kasan/report_hw_tags.c | 1 mm/kasan/report_sw_tags.c | 16 mm/kasan/report_tags.c | 2 mm/kasan/shadow.c | 76 +-- mm/khugepaged.c | 11 mm/madvise.c | 57 +- mm/memory.c | 129 +++-- mm/memremap.c | 2 mm/migrate.c | 4 mm/page-writeback.c | 18 mm/page_alloc.c | 270 ++++++----- mm/page_owner.c | 86 ++- mm/rmap.c | 62 +- mm/swap.c | 4 mm/swapfile.c | 104 ---- mm/vmalloc.c | 167 ++++-- tools/testing/selftests/kselftest.h | 10 tools/testing/selftests/vm/.gitignore | 1 tools/testing/selftests/vm/Makefile | 1 tools/testing/selftests/vm/gup_test.c | 3 tools/testing/selftests/vm/hugetlb-madvise.c | 410 ++++++++++++++++ tools/testing/selftests/vm/ksm_tests.c | 38 - tools/testing/selftests/vm/memfd_secret.c | 2 tools/testing/selftests/vm/run_vmtests.sh | 15 tools/testing/selftests/vm/transhuge-stress.c | 41 - tools/testing/selftests/vm/userfaultfd.c | 72 +- tools/testing/selftests/vm/util.h | 75 ++- tools/vm/page_owner_sort.c | 628 +++++++++++++++++++++----- 73 files changed, 2797 insertions(+), 1288 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2022-03-23 23:04 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2022-03-23 23:04 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm, patches Various misc subsystems, before getting into the post-linux-next material. This is all based on v5.17. I tested applying and compiling against today's 1bc191051dca28fa6. One patch required an extra whack, all looks good. 41 patches, based on f443e374ae131c168a065ea1748feac6b2e76613. Subsystems affected by this patch series: procfs misc core-kernel lib checkpatch init pipe minix fat cgroups kexec kdump taskstats panic kcov resource ubsan Subsystem: procfs Hao Lee <haolee.swjtu@gmail.com>: proc: alloc PATH_MAX bytes for /proc/${pid}/fd/ symlinks David Hildenbrand <david@redhat.com>: proc/vmcore: fix possible deadlock on concurrent mmap and read Yang Li <yang.lee@linux.alibaba.com>: proc/vmcore: fix vmcore_alloc_buf() kernel-doc comment Subsystem: misc Bjorn Helgaas <bhelgaas@google.com>: linux/types.h: remove unnecessary __bitwise__ Documentation/sparse: add hints about __CHECKER__ Subsystem: core-kernel Miaohe Lin <linmiaohe@huawei.com>: kernel/ksysfs.c: use helper macro __ATTR_RW Subsystem: lib Kees Cook <keescook@chromium.org>: Kconfig.debug: make DEBUG_INFO selectable from a choice Rasmus Villemoes <linux@rasmusvillemoes.dk>: include: drop pointless __compiler_offsetof indirection Christophe Leroy <christophe.leroy@csgroup.eu>: ilog2: force inlining of __ilog2_u32() and __ilog2_u64() Andy Shevchenko <andriy.shevchenko@linux.intel.com>: bitfield: add explicit inclusions to the example Feng Tang <feng.tang@intel.com>: lib/Kconfig.debug: add ARCH dependency for FUNCTION_ALIGN option Randy Dunlap <rdunlap@infradead.org>: lib: bitmap: fix many kernel-doc warnings Subsystem: checkpatch Joe Perches <joe@perches.com>: checkpatch: prefer MODULE_LICENSE("GPL") over MODULE_LICENSE("GPL v2") checkpatch: add --fix option for some TRAILING_STATEMENTS checkpatch: add early_param exception to blank line after struct/function test Sagar Patel <sagarmp@cs.unc.edu>: checkpatch: use python3 to find codespell dictionary Subsystem: init Mark-PK Tsai <mark-pk.tsai@mediatek.com>: init: use ktime_us_delta() to make initcall_debug log more precise Randy Dunlap <rdunlap@infradead.org>: init.h: improve __setup and early_param documentation init/main.c: return 1 from handled __setup() functions Subsystem: pipe Andrei Vagin <avagin@gmail.com>: fs/pipe: use kvcalloc to allocate a pipe_buffer array fs/pipe.c: local vars have to match types of proper pipe_inode_info fields Subsystem: minix Qinghua Jin <qhjin.dev@gmail.com>: minix: fix bug when opening a file with O_DIRECT Subsystem: fat Helge Deller <deller@gmx.de>: fat: use pointer to simple type in put_user() Subsystem: cgroups Sebastian Andrzej Siewior <bigeasy@linutronix.de>: cgroup: use irqsave in cgroup_rstat_flush_locked(). cgroup: add a comment to cgroup_rstat_flush_locked(). Subsystem: kexec Jisheng Zhang <jszhang@kernel.org>: Patch series "kexec: use IS_ENABLED(CONFIG_KEXEC_CORE) instead of #ifdef", v2: kexec: make crashk_res, crashk_low_res and crash_notes symbols always visible riscv: mm: init: use IS_ENABLED(CONFIG_KEXEC_CORE) instead of #ifdef x86/setup: use IS_ENABLED(CONFIG_KEXEC_CORE) instead of #ifdef arm64: mm: use IS_ENABLED(CONFIG_KEXEC_CORE) instead of #ifdef Subsystem: kdump Tiezhu Yang <yangtiezhu@loongson.cn>: Patch series "Update doc and fix some issues about kdump", v2: docs: kdump: update description about sysfs file system support docs: kdump: add scp example to write out the dump file panic: unset panic_on_warn inside panic() ubsan: no need to unset panic_on_warn in ubsan_epilogue() kasan: no need to unset panic_on_warn in end_report() Subsystem: taskstats Lukas Bulwahn <lukas.bulwahn@gmail.com>: taskstats: remove unneeded dead assignment Subsystem: panic "Guilherme G. Piccoli" <gpiccoli@igalia.com>: Patch series "Some improvements on panic_print": docs: sysctl/kernel: add missing bit to panic_print panic: add option to dump all CPUs backtraces in panic_print panic: move panic_print before kmsg dumpers Subsystem: kcov Aleksandr Nogikh <nogikh@google.com>: Patch series "kcov: improve mmap processing", v3: kcov: split ioctl handling into locked and unlocked parts kcov: properly handle subsequent mmap calls Subsystem: resource Miaohe Lin <linmiaohe@huawei.com>: kernel/resource: fix kfree() of bootmem memory again Subsystem: ubsan Marco Elver <elver@google.com>: Revert "ubsan, kcsan: Don't combine sanitizer with kcov on clang" Documentation/admin-guide/kdump/kdump.rst | 10 + Documentation/admin-guide/kernel-parameters.txt | 5 Documentation/admin-guide/sysctl/kernel.rst | 2 Documentation/dev-tools/sparse.rst | 2 arch/arm64/mm/init.c | 9 - arch/riscv/mm/init.c | 6 - arch/x86/kernel/setup.c | 10 - fs/fat/dir.c | 2 fs/minix/inode.c | 3 fs/pipe.c | 13 +- fs/proc/base.c | 8 - fs/proc/vmcore.c | 43 +++---- include/linux/bitfield.h | 3 include/linux/compiler_types.h | 3 include/linux/init.h | 11 + include/linux/kexec.h | 12 +- include/linux/log2.h | 4 include/linux/stddef.h | 6 - include/uapi/linux/types.h | 6 - init/main.c | 14 +- kernel/cgroup/rstat.c | 13 +- kernel/kcov.c | 102 ++++++++--------- kernel/ksysfs.c | 3 kernel/panic.c | 37 ++++-- kernel/resource.c | 41 +----- kernel/taskstats.c | 5 lib/Kconfig.debug | 142 ++++++++++++------------ lib/Kconfig.kcsan | 11 - lib/Kconfig.ubsan | 12 -- lib/bitmap.c | 24 ++-- lib/ubsan.c | 10 - mm/kasan/report.c | 10 - scripts/checkpatch.pl | 31 ++++- tools/include/linux/types.h | 5 34 files changed, 313 insertions(+), 305 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2022-03-22 21:38 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2022-03-22 21:38 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits, patches - A few misc subsystems - There is a lot of MM material in Willy's tree. Folio work and non-folio patches which depended on that work. Here I send almost all the MM patches which precede the patches in Willy's tree. The remaining ~100 MM patches are staged on Willy's tree and I'll send those along once Willy is merged up. I tried this batch against your current tree (as of 51912904076680281) and a couple need some extra persuasion to apply, but all looks OK otherwise. 227 patches, based on f443e374ae131c168a065ea1748feac6b2e76613 Subsystems affected by this patch series: kthread scripts ntfs ocfs2 block vfs mm/kasan mm/pagecache mm/gup mm/swap mm/shmem mm/memcg mm/selftests mm/pagemap mm/mremap mm/sparsemem mm/vmalloc mm/pagealloc mm/memory-failure mm/mlock mm/hugetlb mm/userfaultfd mm/vmscan mm/compaction mm/mempolicy mm/oom-kill mm/migration mm/thp mm/cma mm/autonuma mm/psi mm/ksm mm/page-poison mm/madvise mm/memory-hotplug mm/rmap mm/zswap mm/uaccess mm/ioremap mm/highmem mm/cleanups mm/kfence mm/hmm mm/damon Subsystem: kthread Rasmus Villemoes <linux@rasmusvillemoes.dk>: linux/kthread.h: remove unused macros Subsystem: scripts Colin Ian King <colin.i.king@gmail.com>: scripts/spelling.txt: add more spellings to spelling.txt Subsystem: ntfs Dongliang Mu <mudongliangabcd@gmail.com>: ntfs: add sanity check on allocation size Subsystem: ocfs2 Joseph Qi <joseph.qi@linux.alibaba.com>: ocfs2: cleanup some return variables hongnanli <hongnan.li@linux.alibaba.com>: fs/ocfs2: fix comments mentioning i_mutex Subsystem: block NeilBrown <neilb@suse.de>: Patch series "Remove remaining parts of congestion tracking code", v2: doc: convert 'subsection' to 'section' in gfp.h mm: document and polish read-ahead code mm: improve cleanup when ->readpages doesn't process all pages fuse: remove reliance on bdi congestion nfs: remove reliance on bdi congestion ceph: remove reliance on bdi congestion remove inode_congested() remove bdi_congested() and wb_congested() and related functions f2fs: replace congestion_wait() calls with io_schedule_timeout() block/bfq-iosched.c: use "false" rather than "BLK_RW_ASYNC" remove congestion tracking framework Subsystem: vfs Anthony Iliopoulos <ailiop@suse.com>: mount: warn only once about timestamp range expiration Subsystem: mm/kasan Miaohe Lin <linmiaohe@huawei.com>: mm/memremap: avoid calling kasan_remove_zero_shadow() for device private memory Subsystem: mm/pagecache Miaohe Lin <linmiaohe@huawei.com>: filemap: remove find_get_pages() mm/writeback: minor clean up for highmem_dirtyable_memory Minchan Kim <minchan@kernel.org>: mm: fs: fix lru_cache_disabled race in bh_lru Subsystem: mm/gup Peter Xu <peterx@redhat.com>: Patch series "mm/gup: some cleanups", v5: mm: fix invalid page pointer returned with FOLL_PIN gups John Hubbard <jhubbard@nvidia.com>: mm/gup: follow_pfn_pte(): -EEXIST cleanup mm/gup: remove unused pin_user_pages_locked() mm: change lookup_node() to use get_user_pages_fast() mm/gup: remove unused get_user_pages_locked() Subsystem: mm/swap Bang Li <libang.linuxer@gmail.com>: mm/swap: fix confusing comment in folio_mark_accessed Subsystem: mm/shmem Xavier Roche <xavier.roche@algolia.com>: tmpfs: support for file creation time Hugh Dickins <hughd@google.com>: shmem: mapping_set_exiting() to help mapped resilience tmpfs: do not allocate pages on read Miaohe Lin <linmiaohe@huawei.com>: mm: shmem: use helper macro __ATTR_RW Subsystem: mm/memcg Shakeel Butt <shakeelb@google.com>: memcg: replace in_interrupt() with !in_task() Yosry Ahmed <yosryahmed@google.com>: memcg: add per-memcg total kernel memory stat Wei Yang <richard.weiyang@gmail.com>: mm/memcg: mem_cgroup_per_node is already set to 0 on allocation mm/memcg: retrieve parent memcg from css.parent Shakeel Butt <shakeelb@google.com>: Patch series "memcg: robust enforcement of memory.high", v2: memcg: refactor mem_cgroup_oom memcg: unify force charging conditions selftests: memcg: test high limit for single entry allocation memcg: synchronously enforce memory.high for large overcharges Randy Dunlap <rdunlap@infradead.org>: mm/memcontrol: return 1 from cgroup.memory __setup() handler Michal Hocko <mhocko@suse.com>: Patch series "mm/memcg: Address PREEMPT_RT problems instead of disabling it", v5: mm/memcg: revert ("mm/memcg: optimize user context object stock access") Sebastian Andrzej Siewior <bigeasy@linutronix.de>: mm/memcg: disable threshold event handlers on PREEMPT_RT mm/memcg: protect per-CPU counter by disabling preemption on PREEMPT_RT where needed. Johannes Weiner <hannes@cmpxchg.org>: mm/memcg: opencode the inner part of obj_cgroup_uncharge_pages() in drain_obj_stock() Sebastian Andrzej Siewior <bigeasy@linutronix.de>: mm/memcg: protect memcg_stock with a local_lock_t mm/memcg: disable migration instead of preemption in drain_all_stock(). Muchun Song <songmuchun@bytedance.com>: Patch series "Optimize list lru memory consumption", v6: mm: list_lru: transpose the array of per-node per-memcg lru lists mm: introduce kmem_cache_alloc_lru fs: introduce alloc_inode_sb() to allocate filesystems specific inode fs: allocate inode by using alloc_inode_sb() f2fs: allocate inode by using alloc_inode_sb() mm: dcache: use kmem_cache_alloc_lru() to allocate dentry xarray: use kmem_cache_alloc_lru to allocate xa_node mm: memcontrol: move memcg_online_kmem() to mem_cgroup_css_online() mm: list_lru: allocate list_lru_one only when needed mm: list_lru: rename memcg_drain_all_list_lrus to memcg_reparent_list_lrus mm: list_lru: replace linear array with xarray mm: memcontrol: reuse memory cgroup ID for kmem ID mm: memcontrol: fix cannot alloc the maximum memcg ID mm: list_lru: rename list_lru_per_memcg to list_lru_memcg mm: memcontrol: rename memcg_cache_id to memcg_kmem_id Vasily Averin <vvs@virtuozzo.com>: memcg: enable accounting for tty-related objects Subsystem: mm/selftests Guillaume Tucker <guillaume.tucker@collabora.com>: selftests, x86: fix how check_cc.sh is being invoked Subsystem: mm/pagemap Anshuman Khandual <anshuman.khandual@arm.com>: mm: merge pte_mkhuge() call into arch_make_huge_pte() Stafford Horne <shorne@gmail.com>: mm: remove mmu_gathers storage from remaining architectures Muchun Song <songmuchun@bytedance.com>: Patch series "Fix some cache flush bugs", v5: mm: thp: fix wrong cache flush in remove_migration_pmd() mm: fix missing cache flush for all tail pages of compound page mm: hugetlb: fix missing cache flush in copy_huge_page_from_user() mm: hugetlb: fix missing cache flush in hugetlb_mcopy_atomic_pte() mm: shmem: fix missing cache flush in shmem_mfill_atomic_pte() mm: userfaultfd: fix missing cache flush in mcopy_atomic_pte() and __mcopy_atomic() mm: replace multiple dcache flush with flush_dcache_folio() Peter Xu <peterx@redhat.com>: Patch series "mm: Rework zap ptes on swap entries", v5: mm: don't skip swap entry even if zap_details specified mm: rename zap_skip_check_mapping() to should_zap_page() mm: change zap_details.zap_mapping into even_cows mm: rework swap handling of zap_pte_range Randy Dunlap <rdunlap@infradead.org>: mm/mmap: return 1 from stack_guard_gap __setup() handler Miaohe Lin <linmiaohe@huawei.com>: mm/memory.c: use helper function range_in_vma() mm/memory.c: use helper macro min and max in unmap_mapping_range_tree() Hugh Dickins <hughd@google.com>: mm: _install_special_mapping() apply VM_LOCKED_CLEAR_MASK Miaohe Lin <linmiaohe@huawei.com>: mm/mmap: remove obsolete comment in ksys_mmap_pgoff Subsystem: mm/mremap Miaohe Lin <linmiaohe@huawei.com>: mm/mremap:: use vma_lookup() instead of find_vma() Subsystem: mm/sparsemem Miaohe Lin <linmiaohe@huawei.com>: mm/sparse: make mminit_validate_memmodel_limits() static Subsystem: mm/vmalloc Miaohe Lin <linmiaohe@huawei.com>: mm/vmalloc: remove unneeded function forward declaration "Uladzislau Rezki (Sony)" <urezki@gmail.com>: mm/vmalloc: Move draining areas out of caller context Uladzislau Rezki <uladzislau.rezki@sony.com>: mm/vmalloc: add adjust_search_size parameter "Uladzislau Rezki (Sony)" <urezki@gmail.com>: mm/vmalloc: eliminate an extra orig_gfp_mask Jiapeng Chong <jiapeng.chong@linux.alibaba.com>: mm/vmalloc.c: fix "unused function" warning Bang Li <libang.linuxer@gmail.com>: mm/vmalloc: fix comments about vmap_area struct Subsystem: mm/pagealloc Zi Yan <ziy@nvidia.com>: mm: page_alloc: avoid merging non-fallbackable pageblocks with others Peter Collingbourne <pcc@google.com>: mm/mmzone.c: use try_cmpxchg() in page_cpupid_xchg_last() Miaohe Lin <linmiaohe@huawei.com>: mm/mmzone.h: remove unused macros Nicolas Saenz Julienne <nsaenzju@redhat.com>: mm/page_alloc: don't pass pfn to free_unref_page_commit() David Hildenbrand <david@redhat.com>: Patch series "mm: enforce pageblock_order < MAX_ORDER": cma: factor out minimum alignment requirement mm: enforce pageblock_order < MAX_ORDER Nathan Chancellor <nathan@kernel.org>: mm/page_alloc: mark pagesets as __maybe_unused Alistair Popple <apopple@nvidia.com>: mm/pages_alloc.c: don't create ZONE_MOVABLE beyond the end of a node Mel Gorman <mgorman@techsingularity.net>: Patch series "Follow-up on high-order PCP caching", v2: mm/page_alloc: fetch the correct pcp buddy during bulk free mm/page_alloc: track range of active PCP lists during bulk free mm/page_alloc: simplify how many pages are selected per pcp list during bulk free mm/page_alloc: drain the requested list first during bulk free mm/page_alloc: free pages in a single pass during bulk free mm/page_alloc: limit number of high-order pages on PCP during bulk free mm/page_alloc: do not prefetch buddies during bulk free Oscar Salvador <osalvador@suse.de>: arch/x86/mm/numa: Do not initialize nodes twice Suren Baghdasaryan <surenb@google.com>: mm: count time in drain_all_pages during direct reclaim as memory pressure Eric Dumazet <edumazet@google.com>: mm/page_alloc: call check_new_pages() while zone spinlock is not held Mel Gorman <mgorman@techsingularity.net>: mm/page_alloc: check high-order pages for corruption during PCP operations Subsystem: mm/memory-failure Naoya Horiguchi <naoya.horiguchi@nec.com>: mm/memory-failure.c: remove obsolete comment mm/hwpoison: fix error page recovered but reported "not recovered" Rik van Riel <riel@surriel.com>: mm: invalidate hwpoison page cache page in fault path Miaohe Lin <linmiaohe@huawei.com>: Patch series "A few cleanup and fixup patches for memory failure", v3: mm/memory-failure.c: minor clean up for memory_failure_dev_pagemap mm/memory-failure.c: catch unexpected -EFAULT from vma_address() mm/memory-failure.c: rework the signaling logic in kill_proc mm/memory-failure.c: fix race with changing page more robustly mm/memory-failure.c: remove PageSlab check in hwpoison_filter_dev mm/memory-failure.c: rework the try_to_unmap logic in hwpoison_user_mappings() mm/memory-failure.c: remove obsolete comment in __soft_offline_page mm/memory-failure.c: remove unnecessary PageTransTail check mm/hwpoison-inject: support injecting hwpoison to free page luofei <luofei@unicloud.com>: mm/hwpoison: avoid the impact of hwpoison_filter() return value on mce handler mm/hwpoison: add in-use hugepage hwpoison filter judgement Miaohe Lin <linmiaohe@huawei.com>: Patch series "A few fixup patches for memory failure", v2: mm/memory-failure.c: fix race with changing page compound again mm/memory-failure.c: avoid calling invalidate_inode_page() with unexpected pages mm/memory-failure.c: make non-LRU movable pages unhandlable Vlastimil Babka <vbabka@suse.cz>: mm, fault-injection: declare should_fail_alloc_page() Subsystem: mm/mlock Miaohe Lin <linmiaohe@huawei.com>: mm/mlock: fix potential imbalanced rlimit ucounts adjustment Subsystem: mm/hugetlb Muchun Song <songmuchun@bytedance.com>: Patch series "Free the 2nd vmemmap page associated with each HugeTLB page", v7: mm: hugetlb: free the 2nd vmemmap page associated with each HugeTLB page mm: hugetlb: replace hugetlb_free_vmemmap_enabled with a static_key mm: sparsemem: use page table lock to protect kernel pmd operations selftests: vm: add a hugetlb test case mm: sparsemem: move vmemmap related to HugeTLB to CONFIG_HUGETLB_PAGE_FREE_VMEMMAP Anshuman Khandual <anshuman.khandual@arm.com>: mm/hugetlb: generalize ARCH_WANT_GENERAL_HUGETLB Mike Kravetz <mike.kravetz@oracle.com>: hugetlb: clean up potential spectre issue warnings Miaohe Lin <linmiaohe@huawei.com>: mm/hugetlb: use helper macro __ATTR_RW David Howells <dhowells@redhat.com>: mm/hugetlb.c: export PageHeadHuge() Miaohe Lin <linmiaohe@huawei.com>: mm: remove unneeded local variable follflags Subsystem: mm/userfaultfd Nadav Amit <namit@vmware.com>: userfaultfd: provide unmasked address on page-fault Guo Zhengkui <guozhengkui@vivo.com>: userfaultfd/selftests: fix uninitialized_var.cocci warning Subsystem: mm/vmscan Hugh Dickins <hughd@google.com>: mm/fs: delete PF_SWAPWRITE mm: __isolate_lru_page_prepare() in isolate_migratepages_block() Waiman Long <longman@redhat.com>: mm/list_lru: optimize memcg_reparent_list_lru_node() Marcelo Tosatti <mtosatti@redhat.com>: mm: lru_cache_disable: replace work queue synchronization with synchronize_rcu Sebastian Andrzej Siewior <bigeasy@linutronix.de>: mm: workingset: replace IRQ-off check with a lockdep assert. Charan Teja Kalla <quic_charante@quicinc.com>: mm: vmscan: fix documentation for page_check_references() Subsystem: mm/compaction Baolin Wang <baolin.wang@linux.alibaba.com>: mm: compaction: cleanup the compaction trace events Subsystem: mm/mempolicy Hugh Dickins <hughd@google.com>: mempolicy: mbind_range() set_policy() after vma_merge() Subsystem: mm/oom-kill Miaohe Lin <linmiaohe@huawei.com>: mm/oom_kill: remove unneeded is_memcg_oom check Subsystem: mm/migration Huang Ying <ying.huang@intel.com>: mm,migrate: fix establishing demotion target "andrew.yang" <andrew.yang@mediatek.com>: mm/migrate: fix race between lock page and clear PG_Isolated Subsystem: mm/thp Hugh Dickins <hughd@google.com>: mm/thp: refix __split_huge_pmd_locked() for migration PMD Subsystem: mm/cma Hari Bathini <hbathini@linux.ibm.com>: Patch series "powerpc/fadump: handle CMA activation failure appropriately", v3: mm/cma: provide option to opt out from exposing pages on activation failure powerpc/fadump: opt out from freeing pages on cma activation failure Subsystem: mm/autonuma Huang Ying <ying.huang@intel.com>: Patch series "NUMA balancing: optimize memory placement for memory tiering system", v13: NUMA Balancing: add page promotion counter NUMA balancing: optimize page placement for memory tiering system memory tiering: skip to scan fast memory Subsystem: mm/psi Johannes Weiner <hannes@cmpxchg.org>: mm: page_io: fix psi memory pressure error on cold swapins Subsystem: mm/ksm Yang Yang <yang.yang29@zte.com.cn>: mm/vmstat: add event for ksm swapping in copy Miaohe Lin <linmiaohe@huawei.com>: mm/ksm: use helper macro __ATTR_RW Subsystem: mm/page-poison "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm/hwpoison: check the subpage, not the head page Subsystem: mm/madvise Miaohe Lin <linmiaohe@huawei.com>: mm/madvise: use vma_lookup() instead of find_vma() Charan Teja Kalla <quic_charante@quicinc.com>: Patch series "mm: madvise: return correct bytes processed with: mm: madvise: return correct bytes advised with process_madvise mm: madvise: skip unmapped vma holes passed to process_madvise Subsystem: mm/memory-hotplug Michal Hocko <mhocko@suse.com>: Patch series "mm, memory_hotplug: handle unitialized numa node gracefully": mm, memory_hotplug: make arch_alloc_nodedata independent on CONFIG_MEMORY_HOTPLUG mm: handle uninitialized numa nodes gracefully mm, memory_hotplug: drop arch_free_nodedata mm, memory_hotplug: reorganize new pgdat initialization mm: make free_area_init_node aware of memory less nodes Wei Yang <richard.weiyang@gmail.com>: memcg: do not tweak node in alloc_mem_cgroup_per_node_info David Hildenbrand <david@redhat.com>: drivers/base/memory: add memory block to memory group after registration succeeded drivers/base/node: consolidate node device subsystem initialization in node_dev_init() Miaohe Lin <linmiaohe@huawei.com>: Patch series "A few cleanup patches around memory_hotplug": mm/memory_hotplug: remove obsolete comment of __add_pages mm/memory_hotplug: avoid calling zone_intersects() for ZONE_NORMAL mm/memory_hotplug: clean up try_offline_node mm/memory_hotplug: fix misplaced comment in offline_pages David Hildenbrand <david@redhat.com>: Patch series "drivers/base/memory: determine and store zone for single-zone memory blocks", v2: drivers/base/node: rename link_mem_sections() to register_memory_block_under_node() drivers/base/memory: determine and store zone for single-zone memory blocks drivers/base/memory: clarify adding and removing of memory blocks Oscar Salvador <osalvador@suse.de>: mm: only re-generate demotion targets when a numa node changes its N_CPU state Subsystem: mm/rmap Hugh Dickins <hughd@google.com>: mm/thp: ClearPageDoubleMap in first page_add_file_rmap() Subsystem: mm/zswap "Maciej S. Szmigiero" <maciej.szmigiero@oracle.com>: mm/zswap.c: allow handling just same-value filled pages Subsystem: mm/uaccess Christophe Leroy <christophe.leroy@csgroup.eu>: mm: remove usercopy_warn() mm: uninline copy_overflow() Randy Dunlap <rdunlap@infradead.org>: mm/usercopy: return 1 from hardened_usercopy __setup() handler Subsystem: mm/ioremap Vlastimil Babka <vbabka@suse.cz>: mm/early_ioremap: declare early_memremap_pgprot_adjust() Subsystem: mm/highmem Ira Weiny <ira.weiny@intel.com>: highmem: document kunmap_local() Miaohe Lin <linmiaohe@huawei.com>: mm/highmem: remove unnecessary done label Subsystem: mm/cleanups "Dr. David Alan Gilbert" <linux@treblig.org>: mm/page_table_check.c: use strtobool for param parsing Subsystem: mm/kfence tangmeng <tangmeng@uniontech.com>: mm/kfence: remove unnecessary CONFIG_KFENCE option Tianchen Ding <dtcccc@linux.alibaba.com>: Patch series "provide the flexibility to enable KFENCE", v3: kfence: allow re-enabling KFENCE after system startup kfence: alloc kfence_pool after system startup Peng Liu <liupeng256@huawei.com>: Patch series "kunit: fix a UAF bug and do some optimization", v2: kunit: fix UAF when run kfence test case test_gfpzero kunit: make kunit_test_timeout compatible with comment kfence: test: try to avoid test_gfpzero trigger rcu_stall Marco Elver <elver@google.com>: kfence: allow use of a deferrable timer Subsystem: mm/hmm Miaohe Lin <linmiaohe@huawei.com>: mm/hmm.c: remove unneeded local variable ret Subsystem: mm/damon SeongJae Park <sj@kernel.org>: Patch series "Remove the type-unclear target id concept": mm/damon/dbgfs/init_regions: use target index instead of target id Docs/admin-guide/mm/damon/usage: update for changed initail_regions file input mm/damon/core: move damon_set_targets() into dbgfs mm/damon: remove the target id concept Baolin Wang <baolin.wang@linux.alibaba.com>: mm/damon: remove redundant page validation SeongJae Park <sj@kernel.org>: Patch series "Allow DAMON user code independent of monitoring primitives": mm/damon: rename damon_primitives to damon_operations mm/damon: let monitoring operations can be registered and selected mm/damon/paddr,vaddr: register themselves to DAMON in subsys_initcall mm/damon/reclaim: use damon_select_ops() instead of damon_{v,p}a_set_operations() mm/damon/dbgfs: use damon_select_ops() instead of damon_{v,p}a_set_operations() mm/damon/dbgfs: use operations id for knowing if the target has pid mm/damon/dbgfs-test: fix is_target_id() change mm/damon/paddr,vaddr: remove damon_{p,v}a_{target_valid,set_operations}() tangmeng <tangmeng@uniontech.com>: mm/damon: remove unnecessary CONFIG_DAMON option SeongJae Park <sj@kernel.org>: Patch series "Docs/damon: Update documents for better consistency": Docs/vm/damon: call low level monitoring primitives the operations Docs/vm/damon/design: update DAMON-Idle Page Tracking interference handling Docs/damon: update outdated term 'regions update interval' Patch series "Introduce DAMON sysfs interface", v3: mm/damon/core: allow non-exclusive DAMON start/stop mm/damon/core: add number of each enum type values mm/damon: implement a minimal stub for sysfs-based DAMON interface mm/damon/sysfs: link DAMON for virtual address spaces monitoring mm/damon/sysfs: support the physical address space monitoring mm/damon/sysfs: support DAMON-based Operation Schemes mm/damon/sysfs: support DAMOS quotas mm/damon/sysfs: support schemes prioritization mm/damon/sysfs: support DAMOS watermarks mm/damon/sysfs: support DAMOS stats selftests/damon: add a test for DAMON sysfs interface Docs/admin-guide/mm/damon/usage: document DAMON sysfs interface Docs/ABI/testing: add DAMON sysfs interface ABI document Xin Hao <xhao@linux.alibaba.com>: mm/damon/sysfs: remove repeat container_of() in damon_sysfs_kdamond_release() Documentation/ABI/testing/sysfs-kernel-mm-damon | 274 ++ Documentation/admin-guide/cgroup-v1/memory.rst | 2 Documentation/admin-guide/cgroup-v2.rst | 5 Documentation/admin-guide/kernel-parameters.txt | 2 Documentation/admin-guide/mm/damon/usage.rst | 380 +++ Documentation/admin-guide/mm/zswap.rst | 22 Documentation/admin-guide/sysctl/kernel.rst | 31 Documentation/core-api/mm-api.rst | 19 Documentation/dev-tools/kfence.rst | 12 Documentation/filesystems/porting.rst | 6 Documentation/filesystems/vfs.rst | 16 Documentation/vm/damon/design.rst | 43 Documentation/vm/damon/faq.rst | 2 MAINTAINERS | 1 arch/arm/Kconfig | 4 arch/arm64/kernel/setup.c | 3 arch/arm64/mm/hugetlbpage.c | 1 arch/hexagon/mm/init.c | 2 arch/ia64/kernel/topology.c | 10 arch/ia64/mm/discontig.c | 11 arch/mips/kernel/topology.c | 5 arch/nds32/mm/init.c | 1 arch/openrisc/mm/init.c | 2 arch/powerpc/include/asm/fadump-internal.h | 5 arch/powerpc/include/asm/nohash/32/hugetlb-8xx.h | 4 arch/powerpc/kernel/fadump.c | 8 arch/powerpc/kernel/sysfs.c | 17 arch/riscv/Kconfig | 4 arch/riscv/kernel/setup.c | 3 arch/s390/kernel/numa.c | 7 arch/sh/kernel/topology.c | 5 arch/sparc/kernel/sysfs.c | 12 arch/sparc/mm/hugetlbpage.c | 1 arch/x86/Kconfig | 4 arch/x86/kernel/cpu/mce/core.c | 8 arch/x86/kernel/topology.c | 5 arch/x86/mm/numa.c | 33 block/bdev.c | 2 block/bfq-iosched.c | 2 drivers/base/init.c | 1 drivers/base/memory.c | 149 + drivers/base/node.c | 48 drivers/block/drbd/drbd_int.h | 3 drivers/block/drbd/drbd_req.c | 3 drivers/dax/super.c | 2 drivers/of/of_reserved_mem.c | 9 drivers/tty/tty_io.c | 2 drivers/virtio/virtio_mem.c | 9 fs/9p/vfs_inode.c | 2 fs/adfs/super.c | 2 fs/affs/super.c | 2 fs/afs/super.c | 2 fs/befs/linuxvfs.c | 2 fs/bfs/inode.c | 2 fs/btrfs/inode.c | 2 fs/buffer.c | 8 fs/ceph/addr.c | 22 fs/ceph/inode.c | 2 fs/ceph/super.c | 1 fs/ceph/super.h | 1 fs/cifs/cifsfs.c | 2 fs/coda/inode.c | 2 fs/dcache.c | 3 fs/ecryptfs/super.c | 2 fs/efs/super.c | 2 fs/erofs/super.c | 2 fs/exfat/super.c | 2 fs/ext2/ialloc.c | 5 fs/ext2/super.c | 2 fs/ext4/super.c | 2 fs/f2fs/compress.c | 4 fs/f2fs/data.c | 3 fs/f2fs/f2fs.h | 6 fs/f2fs/segment.c | 8 fs/f2fs/super.c | 14 fs/fat/inode.c | 2 fs/freevxfs/vxfs_super.c | 2 fs/fs-writeback.c | 40 fs/fuse/control.c | 17 fs/fuse/dev.c | 8 fs/fuse/file.c | 17 fs/fuse/inode.c | 2 fs/gfs2/super.c | 2 fs/hfs/super.c | 2 fs/hfsplus/super.c | 2 fs/hostfs/hostfs_kern.c | 2 fs/hpfs/super.c | 2 fs/hugetlbfs/inode.c | 2 fs/inode.c | 2 fs/isofs/inode.c | 2 fs/jffs2/super.c | 2 fs/jfs/super.c | 2 fs/minix/inode.c | 2 fs/namespace.c | 2 fs/nfs/inode.c | 2 fs/nfs/write.c | 14 fs/nilfs2/segbuf.c | 16 fs/nilfs2/super.c | 2 fs/ntfs/inode.c | 6 fs/ntfs3/super.c | 2 fs/ocfs2/alloc.c | 2 fs/ocfs2/aops.c | 2 fs/ocfs2/cluster/nodemanager.c | 2 fs/ocfs2/dir.c | 4 fs/ocfs2/dlmfs/dlmfs.c | 2 fs/ocfs2/file.c | 13 fs/ocfs2/inode.c | 2 fs/ocfs2/localalloc.c | 6 fs/ocfs2/namei.c | 2 fs/ocfs2/ocfs2.h | 4 fs/ocfs2/quota_global.c | 2 fs/ocfs2/stack_user.c | 18 fs/ocfs2/super.c | 2 fs/ocfs2/xattr.c | 2 fs/openpromfs/inode.c | 2 fs/orangefs/super.c | 2 fs/overlayfs/super.c | 2 fs/proc/inode.c | 2 fs/qnx4/inode.c | 2 fs/qnx6/inode.c | 2 fs/reiserfs/super.c | 2 fs/romfs/super.c | 2 fs/squashfs/super.c | 2 fs/sysv/inode.c | 2 fs/ubifs/super.c | 2 fs/udf/super.c | 2 fs/ufs/super.c | 2 fs/userfaultfd.c | 5 fs/vboxsf/super.c | 2 fs/xfs/libxfs/xfs_btree.c | 2 fs/xfs/xfs_buf.c | 3 fs/xfs/xfs_icache.c | 2 fs/zonefs/super.c | 2 include/linux/backing-dev-defs.h | 8 include/linux/backing-dev.h | 50 include/linux/cma.h | 14 include/linux/damon.h | 95 include/linux/fault-inject.h | 2 include/linux/fs.h | 21 include/linux/gfp.h | 10 include/linux/highmem-internal.h | 10 include/linux/hugetlb.h | 8 include/linux/kthread.h | 22 include/linux/list_lru.h | 45 include/linux/memcontrol.h | 46 include/linux/memory.h | 12 include/linux/memory_hotplug.h | 132 - include/linux/migrate.h | 8 include/linux/mm.h | 11 include/linux/mmzone.h | 22 include/linux/nfs_fs_sb.h | 1 include/linux/node.h | 25 include/linux/page-flags.h | 96 include/linux/pageblock-flags.h | 7 include/linux/pagemap.h | 7 include/linux/sched.h | 1 include/linux/sched/sysctl.h | 10 include/linux/shmem_fs.h | 1 include/linux/slab.h | 3 include/linux/swap.h | 6 include/linux/thread_info.h | 5 include/linux/uaccess.h | 2 include/linux/vm_event_item.h | 3 include/linux/vmalloc.h | 4 include/linux/xarray.h | 9 include/ras/ras_event.h | 1 include/trace/events/compaction.h | 26 include/trace/events/writeback.h | 28 include/uapi/linux/userfaultfd.h | 8 ipc/mqueue.c | 2 kernel/dma/contiguous.c | 4 kernel/sched/core.c | 21 kernel/sysctl.c | 2 lib/Kconfig.kfence | 12 lib/kunit/try-catch.c | 3 lib/xarray.c | 10 mm/Kconfig | 6 mm/backing-dev.c | 57 mm/cma.c | 31 mm/cma.h | 1 mm/compaction.c | 60 mm/damon/Kconfig | 19 mm/damon/Makefile | 7 mm/damon/core-test.h | 23 mm/damon/core.c | 190 + mm/damon/dbgfs-test.h | 103 mm/damon/dbgfs.c | 264 +- mm/damon/ops-common.c | 133 + mm/damon/ops-common.h | 16 mm/damon/paddr.c | 62 mm/damon/prmtv-common.c | 133 - mm/damon/prmtv-common.h | 16 mm/damon/reclaim.c | 11 mm/damon/sysfs.c | 2632 ++++++++++++++++++++++- mm/damon/vaddr-test.h | 8 mm/damon/vaddr.c | 67 mm/early_ioremap.c | 1 mm/fadvise.c | 5 mm/filemap.c | 17 mm/gup.c | 103 mm/highmem.c | 9 mm/hmm.c | 3 mm/huge_memory.c | 41 mm/hugetlb.c | 23 mm/hugetlb_vmemmap.c | 74 mm/hwpoison-inject.c | 7 mm/internal.h | 19 mm/kfence/Makefile | 2 mm/kfence/core.c | 147 + mm/kfence/kfence_test.c | 3 mm/ksm.c | 6 mm/list_lru.c | 690 ++---- mm/maccess.c | 6 mm/madvise.c | 18 mm/memcontrol.c | 549 ++-- mm/memory-failure.c | 148 - mm/memory.c | 116 - mm/memory_hotplug.c | 136 - mm/mempolicy.c | 29 mm/memremap.c | 3 mm/migrate.c | 128 - mm/mlock.c | 1 mm/mmap.c | 5 mm/mmzone.c | 7 mm/mprotect.c | 13 mm/mremap.c | 4 mm/oom_kill.c | 3 mm/page-writeback.c | 12 mm/page_alloc.c | 429 +-- mm/page_io.c | 7 mm/page_table_check.c | 10 mm/ptdump.c | 16 mm/readahead.c | 124 + mm/rmap.c | 15 mm/shmem.c | 46 mm/slab.c | 39 mm/slab.h | 25 mm/slob.c | 6 mm/slub.c | 42 mm/sparse-vmemmap.c | 70 mm/sparse.c | 2 mm/swap.c | 25 mm/swapfile.c | 1 mm/usercopy.c | 16 mm/userfaultfd.c | 3 mm/vmalloc.c | 102 mm/vmscan.c | 138 - mm/vmstat.c | 19 mm/workingset.c | 7 mm/zswap.c | 15 net/socket.c | 2 net/sunrpc/rpc_pipe.c | 2 scripts/spelling.txt | 16 tools/testing/selftests/cgroup/cgroup_util.c | 15 tools/testing/selftests/cgroup/cgroup_util.h | 1 tools/testing/selftests/cgroup/test_memcontrol.c | 78 tools/testing/selftests/damon/Makefile | 1 tools/testing/selftests/damon/sysfs.sh | 306 ++ tools/testing/selftests/vm/.gitignore | 1 tools/testing/selftests/vm/Makefile | 7 tools/testing/selftests/vm/hugepage-vmemmap.c | 144 + tools/testing/selftests/vm/run_vmtests.sh | 11 tools/testing/selftests/vm/userfaultfd.c | 2 tools/testing/selftests/x86/Makefile | 6 264 files changed, 7205 insertions(+), 3090 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2022-03-16 23:14 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2022-03-16 23:14 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm, patches 4 patches, based on 56e337f2cf1326323844927a04e9dbce9a244835. Subsystems affected by this patch series: mm/swap kconfig ocfs2 selftests Subsystem: mm/swap Guo Ziliang <guo.ziliang@zte.com.cn>: mm: swap: get rid of deadloop in swapin readahead Subsystem: kconfig Qian Cai <quic_qiancai@quicinc.com>: configs/debug: restore DEBUG_INFO=y for overriding Subsystem: ocfs2 Joseph Qi <joseph.qi@linux.alibaba.com>: ocfs2: fix crash when initialize filecheck kobj fails Subsystem: selftests Yosry Ahmed <yosryahmed@google.com>: selftests: vm: fix clang build error multiple output files fs/ocfs2/super.c | 22 +++++++++++----------- kernel/configs/debug.config | 1 + mm/swap_state.c | 2 +- tools/testing/selftests/vm/Makefile | 6 ++---- 4 files changed, 15 insertions(+), 16 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2022-03-05 4:28 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2022-03-05 4:28 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm, patches 8 patches, based on 07ebd38a0da24d2534da57b4841346379db9f354. Subsystems affected by this patch series: mm/hugetlb mm/pagemap memfd selftests mm/userfaultfd kconfig Subsystem: mm/hugetlb Mike Kravetz <mike.kravetz@oracle.com>: selftests/vm: cleanup hugetlb file after mremap test Subsystem: mm/pagemap Suren Baghdasaryan <surenb@google.com>: mm: refactor vm_area_struct::anon_vma_name usage code mm: prevent vm_area_struct::anon_name refcount saturation mm: fix use-after-free when anon vma name is used after vma is freed Subsystem: memfd Hugh Dickins <hughd@google.com>: memfd: fix F_SEAL_WRITE after shmem huge page allocated Subsystem: selftests Chengming Zhou <zhouchengming@bytedance.com>: kselftest/vm: fix tests build with old libc Subsystem: mm/userfaultfd Yun Zhou <yun.zhou@windriver.com>: proc: fix documentation and description of pagemap Subsystem: kconfig Qian Cai <quic_qiancai@quicinc.com>: configs/debug: set CONFIG_DEBUG_INFO=y properly Documentation/admin-guide/mm/pagemap.rst | 2 fs/proc/task_mmu.c | 9 +- fs/userfaultfd.c | 6 - include/linux/mm.h | 7 + include/linux/mm_inline.h | 105 ++++++++++++++++++--------- include/linux/mm_types.h | 5 + kernel/configs/debug.config | 2 kernel/fork.c | 4 - kernel/sys.c | 19 +++- mm/madvise.c | 98 +++++++++---------------- mm/memfd.c | 40 +++++++--- mm/mempolicy.c | 2 mm/mlock.c | 2 mm/mmap.c | 12 +-- mm/mprotect.c | 2 tools/testing/selftests/vm/hugepage-mremap.c | 26 ++++-- tools/testing/selftests/vm/run_vmtests.sh | 3 tools/testing/selftests/vm/userfaultfd.c | 1 18 files changed, 201 insertions(+), 144 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2022-02-26 3:10 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2022-02-26 3:10 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm, patches 12 patches, based on c47658311d60be064b839f329c0e4d34f5f0735b. Subsystems affected by this patch series: MAINTAINERS mm/hugetlb mm/kasan mm/hugetlbfs mm/pagemap mm/selftests mm/memcg m/slab mailmap memfd Subsystem: MAINTAINERS Luis Chamberlain <mcgrof@kernel.org>: MAINTAINERS: add sysctl-next git tree Subsystem: mm/hugetlb "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>: mm/hugetlb: fix kernel crash with hugetlb mremap Subsystem: mm/kasan Andrey Konovalov <andreyknvl@google.com>: kasan: test: prevent cache merging in kmem_cache_double_destroy Subsystem: mm/hugetlbfs Liu Yuntao <liuyuntao10@huawei.com>: hugetlbfs: fix a truncation issue in hugepages parameter Subsystem: mm/pagemap Suren Baghdasaryan <surenb@google.com>: mm: fix use-after-free bug when mm->mmap is reused after being freed Subsystem: mm/selftests "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>: selftest/vm: fix map_fixed_noreplace test failure Subsystem: mm/memcg Roman Gushchin <roman.gushchin@linux.dev>: MAINTAINERS: add Roman as a memcg co-maintainer Vladimir Davydov <vdavydov.dev@gmail.com>: MAINTAINERS: remove Vladimir from memcg maintainers Shakeel Butt <shakeelb@google.com>: MAINTAINERS: add Shakeel as a memcg co-maintainer Subsystem: m/slab Vlastimil Babka <vbabka@suse.cz>: MAINTAINERS, SLAB: add Roman as reviewer, git tree Subsystem: mailmap Roman Gushchin <roman.gushchin@linux.dev>: mailmap: update Roman Gushchin's email Subsystem: memfd Mike Kravetz <mike.kravetz@oracle.com>: selftests/memfd: clean up mapping in mfd_fail_write .mailmap | 3 + MAINTAINERS | 6 ++ lib/test_kasan.c | 5 +- mm/hugetlb.c | 11 ++--- mm/mmap.c | 1 tools/testing/selftests/memfd/memfd_test.c | 1 tools/testing/selftests/vm/map_fixed_noreplace.c | 49 +++++++++++++++++------ 7 files changed, 56 insertions(+), 20 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2022-02-12 0:27 Andrew Morton 2022-02-12 2:02 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2022-02-12 0:27 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits, patches 5 patches, based on f1baf68e1383f6ed93eb9cff2866d46562607a43. Subsystems affected by this patch series: binfmt procfs mm/vmscan mm/memcg mm/kfence Subsystem: binfmt Mike Rapoport <rppt@linux.ibm.com>: fs/binfmt_elf: fix PT_LOAD p_align values for loaders Subsystem: procfs Yang Shi <shy828301@gmail.com>: fs/proc: task_mmu.c: don't read mapcount for migration entry Subsystem: mm/vmscan Mel Gorman <mgorman@suse.de>: mm: vmscan: remove deadlock due to throttling failing to make progress Subsystem: mm/memcg Roman Gushchin <guro@fb.com>: mm: memcg: synchronize objcg lists with a dedicated spinlock Subsystem: mm/kfence Peng Liu <liupeng256@huawei.com>: kfence: make test case compatible with run time set sample interval fs/binfmt_elf.c | 2 +- fs/proc/task_mmu.c | 40 +++++++++++++++++++++++++++++++--------- include/linux/kfence.h | 2 ++ include/linux/memcontrol.h | 5 +++-- mm/kfence/core.c | 3 ++- mm/kfence/kfence_test.c | 8 ++++---- mm/memcontrol.c | 10 +++++----- mm/vmscan.c | 4 +++- 8 files changed, 51 insertions(+), 23 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2022-02-12 0:27 incoming Andrew Morton @ 2022-02-12 2:02 ` Linus Torvalds 2022-02-12 5:24 ` incoming Andrew Morton 0 siblings, 1 reply; 370+ messages in thread From: Linus Torvalds @ 2022-02-12 2:02 UTC (permalink / raw) To: Andrew Morton; +Cc: Linux-MM, mm-commits, patches On Fri, Feb 11, 2022 at 4:27 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > 5 patches, based on f1baf68e1383f6ed93eb9cff2866d46562607a43. So this *completely* flummoxed 'b4', because you first sent the wrong series, and then sent the right one in the same thread. I fetched the emails manually, but honestly, this was confusing even then, with two "[PATCH x/5]" series where the only way to tell the right one was basically by date of email. They did arrive in the same order in my mailbox, but even that wouldn't have been guaranteed if there had been some mailer delays somewhere.. So next time when you mess up, resend it all as a completely new series and completely new threading - so with a new header email too. Please? And since I'm here, let me just verify that yes, the series you actually want me to apply is this one (as described by the head email): Subject: [patch 1/5] fs/binfmt_elf: fix PT_LOAD p_align values .. Subject: [patch 2/5] fs/proc: task_mmu.c: don't read mapcount f.. Subject: [patch 3/5] mm: vmscan: remove deadlock due to throttl.. Subject: [patch 4/5] mm: memcg: synchronize objcg lists with a .. Subject: [patch 5/5] kfence: make test case compatible with run.. and not the other one with GUP patches? Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2022-02-12 2:02 ` incoming Linus Torvalds @ 2022-02-12 5:24 ` Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2022-02-12 5:24 UTC (permalink / raw) To: Linus Torvalds; +Cc: Linux-MM, mm-commits, patches On Fri, 11 Feb 2022 18:02:53 -0800 Linus Torvalds <torvalds@linux-foundation.org> wrote: > On Fri, Feb 11, 2022 at 4:27 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > > > 5 patches, based on f1baf68e1383f6ed93eb9cff2866d46562607a43. > > So this *completely* flummoxed 'b4', because you first sent the wrong > series, and then sent the right one in the same thread. > > I fetched the emails manually, but honestly, this was confusing even > then, with two "[PATCH x/5]" series where the only way to tell the > right one was basically by date of email. They did arrive in the same > order in my mailbox, but even that wouldn't have been guaranteed if > there had been some mailer delays somewhere.. Yes, I wondered. Sorry bout that. > So next time when you mess up, resend it all as a completely new > series and completely new threading - so with a new header email too. > Please? Wilco. > And since I'm here, let me just verify that yes, the series you > actually want me to apply is this one (as described by the head > email): > > Subject: [patch 1/5] fs/binfmt_elf: fix PT_LOAD p_align values .. > Subject: [patch 2/5] fs/proc: task_mmu.c: don't read mapcount f.. > Subject: [patch 3/5] mm: vmscan: remove deadlock due to throttl.. > Subject: [patch 4/5] mm: memcg: synchronize objcg lists with a .. > Subject: [patch 5/5] kfence: make test case compatible with run.. > > and not the other one with GUP patches? Those are the ones. Five fixes, three with cc:stable. ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2022-02-04 4:48 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2022-02-04 4:48 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 10 patches, based on 1f2cfdd349b7647f438c1e552dc1b983da86d830. Subsystems affected by this patch series: mm/vmscan mm/debug mm/pagemap ipc mm/kmemleak MAINTAINERS mm/selftests Subsystem: mm/vmscan Chen Wandun <chenwandun@huawei.com>: Revert "mm/page_isolation: unset migratetype directly for non Buddy page" Subsystem: mm/debug Pasha Tatashin <pasha.tatashin@soleen.com>: Patch series "page table check fixes and cleanups", v5: mm/debug_vm_pgtable: remove pte entry from the page table mm/page_table_check: use unsigned long for page counters and cleanup mm/khugepaged: unify collapse pmd clear, flush and free mm/page_table_check: check entries at pmd levels Subsystem: mm/pagemap Mike Rapoport <rppt@linux.ibm.com>: mm/pgtable: define pte_index so that preprocessor could recognize it Subsystem: ipc Minghao Chi <chi.minghao@zte.com.cn>: ipc/sem: do not sleep with a spin lock held Subsystem: mm/kmemleak Lang Yu <lang.yu@amd.com>: mm/kmemleak: avoid scanning potential huge holes Subsystem: MAINTAINERS Mike Rapoport <rppt@linux.ibm.com>: MAINTAINERS: update rppt's email Subsystem: mm/selftests Shuah Khan <skhan@linuxfoundation.org>: kselftest/vm: revert "tools/testing/selftests/vm/userfaultfd.c: use swap() to make code cleaner" MAINTAINERS | 2 - include/linux/page_table_check.h | 19 ++++++++++ include/linux/pgtable.h | 1 ipc/sem.c | 4 +- mm/debug_vm_pgtable.c | 2 + mm/khugepaged.c | 37 +++++++++++--------- mm/kmemleak.c | 13 +++---- mm/page_isolation.c | 2 - mm/page_table_check.c | 55 +++++++++++++++---------------- tools/testing/selftests/vm/userfaultfd.c | 11 ++++-- 10 files changed, 89 insertions(+), 57 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2022-01-29 21:40 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2022-01-29 21:40 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 12 patches, based on f8c7e4ede46fe63ff10000669652648aab09d112. Subsystems affected by this patch series: sysctl binfmt ia64 mm/memory-failure mm/folios selftests mm/kasan mm/psi ocfs2 Subsystem: sysctl Andrew Morton <akpm@linux-foundation.org>: include/linux/sysctl.h: fix register_sysctl_mount_point() return type Subsystem: binfmt Tong Zhang <ztong0001@gmail.com>: binfmt_misc: fix crash when load/unload module Subsystem: ia64 Randy Dunlap <rdunlap@infradead.org>: ia64: make IA64_MCA_RECOVERY bool instead of tristate Subsystem: mm/memory-failure Joao Martins <joao.m.martins@oracle.com>: memory-failure: fetch compound_head after pgmap_pfn_valid() Subsystem: mm/folios Wei Yang <richard.weiyang@gmail.com>: mm: page->mapping folio->mapping should have the same offset Subsystem: selftests Maor Gottlieb <maorg@nvidia.com>: tools/testing/scatterlist: add missing defines Subsystem: mm/kasan Marco Elver <elver@google.com>: kasan: test: fix compatibility with FORTIFY_SOURCE Peter Collingbourne <pcc@google.com>: mm, kasan: use compare-exchange operation to set KASAN page tag Subsystem: mm/psi Suren Baghdasaryan <surenb@google.com>: psi: fix "no previous prototype" warnings when CONFIG_CGROUPS=n psi: fix "defined but not used" warnings when CONFIG_PROC_FS=n Subsystem: ocfs2 Joseph Qi <joseph.qi@linux.alibaba.com>: Patch series "ocfs2: fix a deadlock case": jbd2: export jbd2_journal_[grab|put]_journal_head ocfs2: fix a deadlock when commit trans arch/ia64/Kconfig | 2 fs/binfmt_misc.c | 8 +-- fs/jbd2/journal.c | 2 fs/ocfs2/suballoc.c | 25 ++++------- include/linux/mm.h | 17 +++++-- include/linux/mm_types.h | 1 include/linux/psi.h | 11 ++-- include/linux/sysctl.h | 2 kernel/sched/psi.c | 79 ++++++++++++++++++----------------- lib/test_kasan.c | 5 ++ mm/memory-failure.c | 6 ++ tools/testing/scatterlist/linux/mm.h | 3 - 12 files changed, 91 insertions(+), 70 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2022-01-29 2:13 Andrew Morton 2022-01-29 4:25 ` incoming Matthew Wilcox 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2022-01-29 2:13 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 12 patches, based on 169387e2aa291a4e3cb856053730fe99d6cec06f. Subsystems affected by this patch series: sysctl binfmt ia64 mm/memory-failure mm/folios selftests mm/kasan mm/psi ocfs2 Subsystem: sysctl Andrew Morton <akpm@linux-foundation.org>: include/linux/sysctl.h: fix register_sysctl_mount_point() return type Subsystem: binfmt Tong Zhang <ztong0001@gmail.com>: binfmt_misc: fix crash when load/unload module Subsystem: ia64 Randy Dunlap <rdunlap@infradead.org>: ia64: make IA64_MCA_RECOVERY bool instead of tristate Subsystem: mm/memory-failure Joao Martins <joao.m.martins@oracle.com>: memory-failure: fetch compound_head after pgmap_pfn_valid() Subsystem: mm/folios Wei Yang <richard.weiyang@gmail.com>: mm: page->mapping folio->mapping should have the same offset Subsystem: selftests Maor Gottlieb <maorg@nvidia.com>: tools/testing/scatterlist: add missing defines Subsystem: mm/kasan Marco Elver <elver@google.com>: kasan: test: fix compatibility with FORTIFY_SOURCE Peter Collingbourne <pcc@google.com>: mm, kasan: use compare-exchange operation to set KASAN page tag Subsystem: mm/psi Suren Baghdasaryan <surenb@google.com>: psi: fix "no previous prototype" warnings when CONFIG_CGROUPS=n psi: fix "defined but not used" warnings when CONFIG_PROC_FS=n Subsystem: ocfs2 Joseph Qi <joseph.qi@linux.alibaba.com>: Patch series "ocfs2: fix a deadlock case": jbd2: export jbd2_journal_[grab|put]_journal_head ocfs2: fix a deadlock when commit trans arch/ia64/Kconfig | 2 fs/binfmt_misc.c | 8 +-- fs/jbd2/journal.c | 2 fs/ocfs2/suballoc.c | 25 ++++------- include/linux/mm.h | 17 +++++-- include/linux/mm_types.h | 1 include/linux/psi.h | 11 ++-- include/linux/sysctl.h | 2 kernel/sched/psi.c | 79 ++++++++++++++++++----------------- lib/test_kasan.c | 5 ++ mm/memory-failure.c | 6 ++ tools/testing/scatterlist/linux/mm.h | 3 - 12 files changed, 91 insertions(+), 70 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2022-01-29 2:13 incoming Andrew Morton @ 2022-01-29 4:25 ` Matthew Wilcox 2022-01-29 6:23 ` incoming Andrew Morton 0 siblings, 1 reply; 370+ messages in thread From: Matthew Wilcox @ 2022-01-29 4:25 UTC (permalink / raw) To: Andrew Morton; +Cc: Linus Torvalds, mm-commits, linux-mm On Fri, Jan 28, 2022 at 06:13:41PM -0800, Andrew Morton wrote: > 12 patches, based on 169387e2aa291a4e3cb856053730fe99d6cec06f. ^^ I see 7? ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2022-01-29 4:25 ` incoming Matthew Wilcox @ 2022-01-29 6:23 ` Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2022-01-29 6:23 UTC (permalink / raw) To: Matthew Wilcox; +Cc: Linus Torvalds, mm-commits, linux-mm On Sat, 29 Jan 2022 04:25:33 +0000 Matthew Wilcox <willy@infradead.org> wrote: > On Fri, Jan 28, 2022 at 06:13:41PM -0800, Andrew Morton wrote: > > 12 patches, based on 169387e2aa291a4e3cb856053730fe99d6cec06f. > ^^ > > I see 7? Crap, sorry, ignore all this, shall redo tomorrow. (It wasn't a good day over here. The thing with disk drives is that the bigger they are, the harder they fall). ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2022-01-22 6:10 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2022-01-22 6:10 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits This is the post-linux-next queue. Material which was based on or dependent upon material which was in -next. 69 patches, based on 9b57f458985742bd1c585f4c7f36d04634ce1143. Subsystems affected by this patch series: mm/migration sysctl mm/zsmalloc proc lib Subsystem: mm/migration Alistair Popple <apopple@nvidia.com>: mm/migrate.c: rework migration_entry_wait() to not take a pageref Subsystem: sysctl Xiaoming Ni <nixiaoming@huawei.com>: Patch series "sysctl: first set of kernel/sysctl cleanups", v2: sysctl: add a new register_sysctl_init() interface sysctl: move some boundary constants from sysctl.c to sysctl_vals hung_task: move hung_task sysctl interface to hung_task.c watchdog: move watchdog sysctl interface to watchdog.c Stephen Kitt <steve@sk2.org>: sysctl: make ngroups_max const Xiaoming Ni <nixiaoming@huawei.com>: sysctl: use const for typically used max/min proc sysctls sysctl: use SYSCTL_ZERO to replace some static int zero uses aio: move aio sysctl to aio.c dnotify: move dnotify sysctl to dnotify.c Luis Chamberlain <mcgrof@kernel.org>: Patch series "sysctl: second set of kernel/sysctl cleanups", v2: hpet: simplify subdirectory registration with register_sysctl() i915: simplify subdirectory registration with register_sysctl() macintosh/mac_hid.c: simplify subdirectory registration with register_sysctl() ocfs2: simplify subdirectory registration with register_sysctl() test_sysctl: simplify subdirectory registration with register_sysctl() Xiaoming Ni <nixiaoming@huawei.com>: inotify: simplify subdirectory registration with register_sysctl() Luis Chamberlain <mcgrof@kernel.org>: cdrom: simplify subdirectory registration with register_sysctl() Xiaoming Ni <nixiaoming@huawei.com>: eventpoll: simplify sysctl declaration with register_sysctl() Patch series "sysctl: 3rd set of kernel/sysctl cleanups", v2: firmware_loader: move firmware sysctl to its own files random: move the random sysctl declarations to its own file Luis Chamberlain <mcgrof@kernel.org>: sysctl: add helper to register a sysctl mount point fs: move binfmt_misc sysctl to its own file Xiaoming Ni <nixiaoming@huawei.com>: printk: move printk sysctl to printk/sysctl.c scsi/sg: move sg-big-buff sysctl to scsi/sg.c stackleak: move stack_erasing sysctl to stackleak.c Luis Chamberlain <mcgrof@kernel.org>: sysctl: share unsigned long const values Patch series "sysctl: 4th set of kernel/sysctl cleanups": fs: move inode sysctls to its own file fs: move fs stat sysctls to file_table.c fs: move dcache sysctls to its own file sysctl: move maxolduid as a sysctl specific const fs: move shared sysctls to fs/sysctls.c fs: move locking sysctls where they are used fs: move namei sysctls to its own file fs: move fs/exec.c sysctls into its own file fs: move pipe sysctls to is own file Patch series "sysctl: add and use base directory declarer and registration helper": sysctl: add and use base directory declarer and registration helper fs: move namespace sysctls and declare fs base directory kernel/sysctl.c: rename sysctl_init() to sysctl_init_bases() Xiaoming Ni <nixiaoming@huawei.com>: printk: fix build warning when CONFIG_PRINTK=n fs/coredump: move coredump sysctls into its own file kprobe: move sysctl_kprobes_optimization to kprobes.c Colin Ian King <colin.i.king@gmail.com>: kernel/sysctl.c: remove unused variable ten_thousand Baokun Li <libaokun1@huawei.com>: sysctl: returns -EINVAL when a negative value is passed to proc_doulongvec_minmax Subsystem: mm/zsmalloc Minchan Kim <minchan@kernel.org>: Patch series "zsmalloc: remove bit_spin_lock", v2: zsmalloc: introduce some helper functions zsmalloc: rename zs_stat_type to class_stat_type zsmalloc: decouple class actions from zspage works zsmalloc: introduce obj_allocated zsmalloc: move huge compressed obj from page to zspage zsmalloc: remove zspage isolation for migration locking/rwlocks: introduce write_lock_nested zsmalloc: replace per zpage lock with pool->migrate_lock Mike Galbraith <umgwanakikbuti@gmail.com>: zsmalloc: replace get_cpu_var with local_lock Subsystem: proc Muchun Song <songmuchun@bytedance.com>: fs: proc: store PDE()->data into inode->i_private proc: remove PDE_DATA() completely Subsystem: lib Vlastimil Babka <vbabka@suse.cz>: lib/stackdepot: allow optional init and stack_table allocation by kvmalloc() lib/stackdepot: fix spelling mistake and grammar in pr_err message lib/stackdepot: allow optional init and stack_table allocation by kvmalloc() - fixup lib/stackdepot: allow optional init and stack_table allocation by kvmalloc() - fixup3 lib/stackdepot: allow optional init and stack_table allocation by kvmalloc() - fixup4 Marco Elver <elver@google.com>: lib/stackdepot: always do filter_irq_stacks() in stack_depot_save() Christoph Hellwig <hch@lst.de>: Patch series "remove Xen tmem leftovers": mm: remove cleancache frontswap: remove frontswap_writethrough frontswap: remove frontswap_tmem_exclusive_gets frontswap: remove frontswap_shrink frontswap: remove frontswap_curr_pages frontswap: simplify frontswap_init frontswap: remove the frontswap exports mm: simplify try_to_unuse frontswap: remove frontswap_test frontswap: simplify frontswap_register_ops mm: mark swap_lock and swap_active_head static frontswap: remove support for multiple ops mm: hide the FRONTSWAP Kconfig symbol Documentation/vm/cleancache.rst | 296 ------ Documentation/vm/frontswap.rst | 31 Documentation/vm/index.rst | 1 MAINTAINERS | 7 arch/alpha/kernel/srm_env.c | 4 arch/arm/configs/bcm2835_defconfig | 1 arch/arm/configs/qcom_defconfig | 1 arch/arm/kernel/atags_proc.c | 2 arch/arm/mm/alignment.c | 2 arch/ia64/kernel/salinfo.c | 10 arch/m68k/configs/amiga_defconfig | 1 arch/m68k/configs/apollo_defconfig | 1 arch/m68k/configs/atari_defconfig | 1 arch/m68k/configs/bvme6000_defconfig | 1 arch/m68k/configs/hp300_defconfig | 1 arch/m68k/configs/mac_defconfig | 1 arch/m68k/configs/multi_defconfig | 1 arch/m68k/configs/mvme147_defconfig | 1 arch/m68k/configs/mvme16x_defconfig | 1 arch/m68k/configs/q40_defconfig | 1 arch/m68k/configs/sun3_defconfig | 1 arch/m68k/configs/sun3x_defconfig | 1 arch/powerpc/kernel/proc_powerpc.c | 4 arch/s390/configs/debug_defconfig | 1 arch/s390/configs/defconfig | 1 arch/sh/mm/alignment.c | 4 arch/xtensa/platforms/iss/simdisk.c | 4 block/bdev.c | 5 drivers/acpi/proc.c | 2 drivers/base/firmware_loader/fallback.c | 7 drivers/base/firmware_loader/fallback.h | 11 drivers/base/firmware_loader/fallback_table.c | 25 drivers/cdrom/cdrom.c | 23 drivers/char/hpet.c | 22 drivers/char/random.c | 14 drivers/gpu/drm/drm_dp_mst_topology.c | 1 drivers/gpu/drm/drm_mm.c | 4 drivers/gpu/drm/drm_modeset_lock.c | 9 drivers/gpu/drm/i915/i915_perf.c | 22 drivers/gpu/drm/i915/intel_runtime_pm.c | 3 drivers/hwmon/dell-smm-hwmon.c | 4 drivers/macintosh/mac_hid.c | 24 drivers/net/bonding/bond_procfs.c | 8 drivers/net/wireless/cisco/airo.c | 22 drivers/net/wireless/intersil/hostap/hostap_ap.c | 16 drivers/net/wireless/intersil/hostap/hostap_download.c | 2 drivers/net/wireless/intersil/hostap/hostap_proc.c | 24 drivers/net/wireless/ray_cs.c | 2 drivers/nubus/proc.c | 36 drivers/parisc/led.c | 4 drivers/pci/proc.c | 10 drivers/platform/x86/thinkpad_acpi.c | 4 drivers/platform/x86/toshiba_acpi.c | 16 drivers/pnp/isapnp/proc.c | 2 drivers/pnp/pnpbios/proc.c | 4 drivers/scsi/scsi_proc.c | 4 drivers/scsi/sg.c | 35 drivers/usb/gadget/function/rndis.c | 4 drivers/zorro/proc.c | 2 fs/Makefile | 4 fs/afs/proc.c | 6 fs/aio.c | 31 fs/binfmt_misc.c | 6 fs/btrfs/extent_io.c | 10 fs/btrfs/super.c | 2 fs/coredump.c | 66 + fs/dcache.c | 37 fs/eventpoll.c | 10 fs/exec.c | 145 +-- fs/ext4/mballoc.c | 14 fs/ext4/readpage.c | 6 fs/ext4/super.c | 3 fs/f2fs/data.c | 13 fs/file_table.c | 47 - fs/inode.c | 39 fs/jbd2/journal.c | 2 fs/locks.c | 34 fs/mpage.c | 7 fs/namei.c | 58 + fs/namespace.c | 24 fs/notify/dnotify/dnotify.c | 21 fs/notify/fanotify/fanotify_user.c | 10 fs/notify/inotify/inotify_user.c | 11 fs/ntfs3/ntfs_fs.h | 1 fs/ocfs2/stackglue.c | 25 fs/ocfs2/super.c | 2 fs/pipe.c | 64 + fs/proc/generic.c | 6 fs/proc/inode.c | 1 fs/proc/internal.h | 5 fs/proc/proc_net.c | 8 fs/proc/proc_sysctl.c | 67 + fs/super.c | 3 fs/sysctls.c | 47 - include/linux/aio.h | 4 include/linux/cleancache.h | 124 -- include/linux/coredump.h | 10 include/linux/dcache.h | 10 include/linux/dnotify.h | 1 include/linux/fanotify.h | 2 include/linux/frontswap.h | 35 include/linux/fs.h | 18 include/linux/inotify.h | 3 include/linux/kprobes.h | 6 include/linux/migrate.h | 2 include/linux/mount.h | 3 include/linux/pipe_fs_i.h | 4 include/linux/poll.h | 2 include/linux/printk.h | 4 include/linux/proc_fs.h | 17 include/linux/ref_tracker.h | 2 include/linux/rwlock.h | 6 include/linux/rwlock_api_smp.h | 8 include/linux/rwlock_rt.h | 10 include/linux/sched/sysctl.h | 14 include/linux/seq_file.h | 2 include/linux/shmem_fs.h | 3 include/linux/spinlock_api_up.h | 1 include/linux/stackdepot.h | 25 include/linux/stackleak.h | 5 include/linux/swapfile.h | 3 include/linux/sysctl.h | 67 + include/scsi/sg.h | 4 init/main.c | 9 ipc/util.c | 2 kernel/hung_task.c | 81 + kernel/irq/proc.c | 8 kernel/kprobes.c | 30 kernel/locking/spinlock.c | 10 kernel/locking/spinlock_rt.c | 12 kernel/printk/Makefile | 5 kernel/printk/internal.h | 8 kernel/printk/printk.c | 4 kernel/printk/sysctl.c | 85 + kernel/resource.c | 4 kernel/stackleak.c | 26 kernel/sysctl.c | 790 +---------------- kernel/watchdog.c | 101 ++ lib/Kconfig | 4 lib/Kconfig.kasan | 2 lib/stackdepot.c | 46 lib/test_sysctl.c | 22 mm/Kconfig | 40 mm/Makefile | 1 mm/cleancache.c | 315 ------ mm/filemap.c | 102 +- mm/frontswap.c | 259 ----- mm/kasan/common.c | 1 mm/migrate.c | 38 mm/page_owner.c | 2 mm/shmem.c | 33 mm/swapfile.c | 90 - mm/truncate.c | 15 mm/zsmalloc.c | 557 ++++------- mm/zswap.c | 8 net/atm/proc.c | 4 net/bluetooth/af_bluetooth.c | 8 net/can/bcm.c | 2 net/can/proc.c | 2 net/core/neighbour.c | 6 net/core/pktgen.c | 6 net/ipv4/netfilter/ipt_CLUSTERIP.c | 6 net/ipv4/raw.c | 8 net/ipv4/tcp_ipv4.c | 2 net/ipv4/udp.c | 6 net/netfilter/x_tables.c | 10 net/netfilter/xt_hashlimit.c | 18 net/netfilter/xt_recent.c | 4 net/sunrpc/auth_gss/svcauth_gss.c | 4 net/sunrpc/cache.c | 24 net/sunrpc/stats.c | 2 sound/core/info.c | 4 172 files changed, 1877 insertions(+), 2931 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2022-01-20 2:07 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2022-01-20 2:07 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 55 patches, based on df0cc57e057f18e44dac8e6c18aba47ab53202f9 ("Linux 5.16") Subsystems affected by this patch series: percpu procfs sysctl misc core-kernel get_maintainer lib checkpatch binfmt nilfs2 hfs fat adfs panic delayacct kconfig kcov ubsan Subsystem: percpu Kefeng Wang <wangkefeng.wang@huawei.com>: Patch series "mm: percpu: Cleanup percpu first chunk function": mm: percpu: generalize percpu related config mm: percpu: add pcpu_fc_cpu_to_node_fn_t typedef mm: percpu: add generic pcpu_fc_alloc/free funciton mm: percpu: add generic pcpu_populate_pte() function Subsystem: procfs David Hildenbrand <david@redhat.com>: proc/vmcore: don't fake reading zeroes on surprise vmcore_cb unregistration Hans de Goede <hdegoede@redhat.com>: proc: make the proc_create[_data]() stubs static inlines Qi Zheng <zhengqi.arch@bytedance.com>: proc: convert the return type of proc_fd_access_allowed() to be boolean Subsystem: sysctl Geert Uytterhoeven <geert+renesas@glider.be>: sysctl: fix duplicate path separator in printed entries luo penghao <luo.penghao@zte.com.cn>: sysctl: remove redundant ret assignment Subsystem: misc Andy Shevchenko <andriy.shevchenko@linux.intel.com>: include/linux/unaligned: replace kernel.h with the necessary inclusions kernel.h: include a note to discourage people from including it in headers Subsystem: core-kernel Yafang Shao <laoar.shao@gmail.com>: Patch series "task comm cleanups", v2: fs/exec: replace strlcpy with strscpy_pad in __set_task_comm fs/exec: replace strncpy with strscpy_pad in __get_task_comm drivers/infiniband: replace open-coded string copy with get_task_comm fs/binfmt_elf: replace open-coded string copy with get_task_comm samples/bpf/test_overhead_kprobe_kern: replace bpf_probe_read_kernel with bpf_probe_read_kernel_str to get task comm tools/bpf/bpftool/skeleton: replace bpf_probe_read_kernel with bpf_probe_read_kernel_str to get task comm tools/testing/selftests/bpf: replace open-coded 16 with TASK_COMM_LEN kthread: dynamically allocate memory to store kthread's full name Davidlohr Bueso <dave@stgolabs.net>: kernel/sys.c: only take tasklist_lock for get/setpriority(PRIO_PGRP) Subsystem: get_maintainer Randy Dunlap <rdunlap@infradead.org>: get_maintainer: don't remind about no git repo when --nogit is used Subsystem: lib Alexey Dobriyan <adobriyan@gmail.com>: kstrtox: uninline everything Andy Shevchenko <andriy.shevchenko@linux.intel.com>: list: introduce list_is_head() helper and re-use it in list.h Zhen Lei <thunder.leizhen@huawei.com>: lib/list_debug.c: print more list debugging context in __list_del_entry_valid() Isabella Basso <isabbasso@riseup.net>: Patch series "test_hash.c: refactor into KUnit", v3: hash.h: remove unused define directive test_hash.c: split test_int_hash into arch-specific functions test_hash.c: split test_hash_init lib/Kconfig.debug: properly split hash test kernel entries test_hash.c: refactor into kunit Andy Shevchenko <andriy.shevchenko@linux.intel.com>: kunit: replace kernel.h with the necessary inclusions uuid: discourage people from using UAPI header in new code uuid: remove licence boilerplate text from the header Andrey Konovalov <andreyknvl@google.com>: lib/test_meminit: destroy cache in kmem_cache_alloc_bulk() test Subsystem: checkpatch Jerome Forissier <jerome@forissier.org>: checkpatch: relax regexp for COMMIT_LOG_LONG_LINE Joe Perches <joe@perches.com>: checkpatch: improve Kconfig help test Rikard Falkeborn <rikard.falkeborn@gmail.com>: const_structs.checkpatch: add frequently used ops structs Subsystem: binfmt "H.J. Lu" <hjl.tools@gmail.com>: fs/binfmt_elf: use PT_LOAD p_align values for static PIE Subsystem: nilfs2 Colin Ian King <colin.i.king@gmail.com>: nilfs2: remove redundant pointer sbufs Subsystem: hfs Kees Cook <keescook@chromium.org>: hfsplus: use struct_group_attr() for memcpy() region Subsystem: fat "NeilBrown" <neilb@suse.de>: FAT: use io_schedule_timeout() instead of congestion_wait() Subsystem: adfs Minghao Chi <chi.minghao@zte.com.cn>: fs/adfs: remove unneeded variable make code cleaner Subsystem: panic Marco Elver <elver@google.com>: panic: use error_report_end tracepoint on warnings Sebastian Andrzej Siewior <bigeasy@linutronix.de>: panic: remove oops_id Subsystem: delayacct Yang Yang <yang.yang29@zte.com.cn>: delayacct: support swapin delay accounting for swapping without blkio delayacct: fix incomplete disable operation when switch enable to disable delayacct: cleanup flags in struct task_delay_info and functions use it wangyong <wang.yong12@zte.com.cn>: Documentation/accounting/delay-accounting.rst: add thrashing page cache and direct compact delayacct: track delays from memory compact Subsystem: kconfig Qian Cai <quic_qiancai@quicinc.com>: configs: introduce debug.config for CI-like setup Nathan Chancellor <nathan@kernel.org>: Patch series "Fix CONFIG_TEST_KMOD with 256kB page size": arch/Kconfig: split PAGE_SIZE_LESS_THAN_256KB from PAGE_SIZE_LESS_THAN_64KB btrfs: use generic Kconfig option for 256kB page size limit lib/Kconfig.debug: make TEST_KMOD depend on PAGE_SIZE_LESS_THAN_256KB Subsystem: kcov Marco Elver <elver@google.com>: kcov: fix generic Kconfig dependencies if ARCH_WANTS_NO_INSTR Subsystem: ubsan Kees Cook <keescook@chromium.org>: ubsan: remove CONFIG_UBSAN_OBJECT_SIZE Colin Ian King <colin.i.king@gmail.com>: lib: remove redundant assignment to variable ret Documentation/accounting/delay-accounting.rst | 63 +- arch/Kconfig | 4 arch/arm64/Kconfig | 20 arch/ia64/Kconfig | 9 arch/mips/Kconfig | 10 arch/mips/mm/init.c | 28 - arch/powerpc/Kconfig | 17 arch/powerpc/kernel/setup_64.c | 113 ---- arch/riscv/Kconfig | 10 arch/sparc/Kconfig | 12 arch/sparc/kernel/led.c | 8 arch/sparc/kernel/smp_64.c | 119 ----- arch/x86/Kconfig | 19 arch/x86/kernel/setup_percpu.c | 82 --- drivers/base/arch_numa.c | 78 --- drivers/infiniband/hw/qib/qib.h | 2 drivers/infiniband/hw/qib/qib_file_ops.c | 2 drivers/infiniband/sw/rxe/rxe_qp.c | 3 drivers/net/wireless/broadcom/brcm80211/brcmfmac/xtlv.c | 2 fs/adfs/inode.c | 4 fs/binfmt_elf.c | 6 fs/btrfs/Kconfig | 3 fs/exec.c | 5 fs/fat/file.c | 5 fs/hfsplus/hfsplus_raw.h | 12 fs/hfsplus/xattr.c | 4 fs/nilfs2/page.c | 4 fs/proc/array.c | 3 fs/proc/base.c | 4 fs/proc/proc_sysctl.c | 9 fs/proc/vmcore.c | 10 include/kunit/assert.h | 2 include/linux/delayacct.h | 107 ++-- include/linux/elfcore-compat.h | 5 include/linux/elfcore.h | 5 include/linux/hash.h | 5 include/linux/kernel.h | 9 include/linux/kthread.h | 1 include/linux/list.h | 36 - include/linux/percpu.h | 21 include/linux/proc_fs.h | 12 include/linux/sched.h | 9 include/linux/unaligned/packed_struct.h | 2 include/trace/events/error_report.h | 8 include/uapi/linux/taskstats.h | 6 include/uapi/linux/uuid.h | 10 kernel/configs/debug.config | 105 ++++ kernel/delayacct.c | 49 +- kernel/kthread.c | 32 + kernel/panic.c | 21 kernel/sys.c | 16 lib/Kconfig.debug | 45 + lib/Kconfig.ubsan | 13 lib/Makefile | 5 lib/asn1_encoder.c | 2 lib/kstrtox.c | 12 lib/list_debug.c | 8 lib/lz4/lz4defs.h | 2 lib/test_hash.c | 375 +++++++--------- lib/test_meminit.c | 1 lib/test_ubsan.c | 22 mm/Kconfig | 12 mm/memory.c | 4 mm/page_alloc.c | 3 mm/page_io.c | 3 mm/percpu.c | 168 +++++-- samples/bpf/offwaketime_kern.c | 4 samples/bpf/test_overhead_kprobe_kern.c | 11 samples/bpf/test_overhead_tp_kern.c | 5 scripts/Makefile.ubsan | 1 scripts/checkpatch.pl | 54 +- scripts/const_structs.checkpatch | 23 scripts/get_maintainer.pl | 2 tools/accounting/getdelays.c | 8 tools/bpf/bpftool/skeleton/pid_iter.bpf.c | 4 tools/include/linux/hash.h | 5 tools/testing/selftests/bpf/progs/test_stacktrace_map.c | 6 tools/testing/selftests/bpf/progs/test_tracepoint.c | 6 78 files changed, 943 insertions(+), 992 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2022-01-14 22:02 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2022-01-14 22:02 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 146 patches, based on df0cc57e057f18e44dac8e6c18aba47ab53202f9 ("Linux 5.16") Subsystems affected by this patch series: kthread ia64 scripts ntfs squashfs ocfs2 vfs mm/slab-generic mm/slab mm/kmemleak mm/dax mm/kasan mm/debug mm/pagecache mm/gup mm/shmem mm/frontswap mm/memremap mm/memcg mm/selftests mm/pagemap mm/dma mm/vmalloc mm/memory-failure mm/hugetlb mm/userfaultfd mm/vmscan mm/mempolicy mm/oom-kill mm/hugetlbfs mm/migration mm/thp mm/ksm mm/page-poison mm/percpu mm/rmap mm/zswap mm/zram mm/cleanups mm/hmm mm/damon Subsystem: kthread Cai Huoqing <caihuoqing@baidu.com>: kthread: add the helper function kthread_run_on_cpu() RDMA/siw: make use of the helper function kthread_run_on_cpu() ring-buffer: make use of the helper function kthread_run_on_cpu() rcutorture: make use of the helper function kthread_run_on_cpu() trace/osnoise: make use of the helper function kthread_run_on_cpu() trace/hwlat: make use of the helper function kthread_run_on_cpu() Subsystem: ia64 Yang Guang <yang.guang5@zte.com.cn>: ia64: module: use swap() to make code cleaner arch/ia64/kernel/setup.c: use swap() to make code cleaner Jason Wang <wangborong@cdjrlc.com>: ia64: fix typo in a comment Greg Kroah-Hartman <gregkh@linuxfoundation.org>: ia64: topology: use default_groups in kobj_type Subsystem: scripts Drew Fustini <dfustini@baylibre.com>: scripts/spelling.txt: add "oveflow" Subsystem: ntfs Yang Li <yang.lee@linux.alibaba.com>: fs/ntfs/attrib.c: fix one kernel-doc comment Subsystem: squashfs Zheng Liang <zhengliang6@huawei.com>: squashfs: provide backing_dev_info in order to disable read-ahead Subsystem: ocfs2 Zhang Mingyu <zhang.mingyu@zte.com.cn>: ocfs2: use BUG_ON instead of if condition followed by BUG. Joseph Qi <joseph.qi@linux.alibaba.com>: ocfs2: clearly handle ocfs2_grab_pages_for_write() return value Greg Kroah-Hartman <gregkh@linuxfoundation.org>: ocfs2: use default_groups in kobj_type Colin Ian King <colin.i.king@gmail.com>: ocfs2: remove redundant assignment to pointer root_bh Greg Kroah-Hartman <gregkh@linuxfoundation.org>: ocfs2: cluster: use default_groups in kobj_type Colin Ian King <colin.i.king@gmail.com>: ocfs2: remove redundant assignment to variable free_space Subsystem: vfs Amit Daniel Kachhap <amit.kachhap@arm.com>: fs/ioctl: remove unnecessary __user annotation Subsystem: mm/slab-generic Marco Elver <elver@google.com>: mm/slab_common: use WARN() if cache still has objects on destroy Subsystem: mm/slab Muchun Song <songmuchun@bytedance.com>: mm: slab: make slab iterator functions static Subsystem: mm/kmemleak Kuan-Ying Lee <Kuan-Ying.Lee@mediatek.com>: kmemleak: fix kmemleak false positive report with HW tag-based kasan enable Calvin Zhang <calvinzhang.cool@gmail.com>: mm: kmemleak: alloc gray object for reserved region with direct map Kefeng Wang <wangkefeng.wang@huawei.com>: mm: defer kmemleak object creation of module_alloc() Subsystem: mm/dax Joao Martins <joao.m.martins@oracle.com>: Patch series "mm, device-dax: Introduce compound pages in devmap", v7: mm/page_alloc: split prep_compound_page into head and tail subparts mm/page_alloc: refactor memmap_init_zone_device() page init mm/memremap: add ZONE_DEVICE support for compound pages device-dax: use ALIGN() for determining pgoff device-dax: use struct_size() device-dax: ensure dev_dax->pgmap is valid for dynamic devices device-dax: factor out page mapping initialization device-dax: set mapping prior to vmf_insert_pfn{,_pmd,pud}() device-dax: remove pfn from __dev_dax_{pte,pmd,pud}_fault() device-dax: compound devmap support Subsystem: mm/kasan Marco Elver <elver@google.com>: kasan: test: add globals left-out-of-bounds test kasan: add ability to detect double-kmem_cache_destroy() kasan: test: add test case for double-kmem_cache_destroy() Andrey Konovalov <andreyknvl@google.com>: kasan: fix quarantine conflicting with init_on_free Subsystem: mm/debug "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm,fs: split dump_mapping() out from dump_page() Anshuman Khandual <anshuman.khandual@arm.com>: mm/debug_vm_pgtable: update comments regarding migration swap entries Subsystem: mm/pagecache chiminghao <chi.minghao@zte.com.cn>: mm/truncate.c: remove unneeded variable Subsystem: mm/gup Christophe Leroy <christophe.leroy@csgroup.eu>: gup: avoid multiple user access locking/unlocking in fault_in_{read/write}able Li Xinhai <lixinhai.lxh@gmail.com>: mm/gup.c: stricter check on THP migration entry during follow_pmd_mask Subsystem: mm/shmem Yang Shi <shy828301@gmail.com>: mm: shmem: don't truncate page if memory failure happens Gang Li <ligang.bdlg@bytedance.com>: shmem: fix a race between shmem_unused_huge_shrink and shmem_evict_inode Subsystem: mm/frontswap Christophe JAILLET <christophe.jaillet@wanadoo.fr>: mm/frontswap.c: use non-atomic '__set_bit()' when possible Subsystem: mm/memremap Subsystem: mm/memcg Muchun Song <songmuchun@bytedance.com>: mm: memcontrol: make cgroup_memory_nokmem static Donghai Qiao <dqiao@redhat.com>: mm/page_counter: remove an incorrect call to propagate_protected_usage() Dan Schatzberg <schatzberg.dan@gmail.com>: mm/memcg: add oom_group_kill memory event Shakeel Butt <shakeelb@google.com>: memcg: better bounds on the memcg stats updates Wang Weiyang <wangweiyang2@huawei.com>: mm/memcg: use struct_size() helper in kzalloc() Shakeel Butt <shakeelb@google.com>: memcg: add per-memcg vmalloc stat Subsystem: mm/selftests chiminghao <chi.minghao@zte.com.cn>: tools/testing/selftests/vm/userfaultfd.c: use swap() to make code cleaner Subsystem: mm/pagemap Qi Zheng <zhengqi.arch@bytedance.com>: mm: remove redundant check about FAULT_FLAG_ALLOW_RETRY bit Colin Cross <ccross@google.com>: Patch series "mm: rearrange madvise code to allow for reuse", v11: mm: rearrange madvise code to allow for reuse mm: add a field to store names for private anonymous memory Suren Baghdasaryan <surenb@google.com>: mm: add anonymous vma name refcounting Arnd Bergmann <arnd@arndb.de>: mm: move anon_vma declarations to linux/mm_inline.h mm: move tlb_flush_pending inline helpers to mm_inline.h Suren Baghdasaryan <surenb@google.com>: mm: protect free_pgtables with mmap_lock write lock in exit_mmap mm: document locking restrictions for vm_operations_struct::close mm/oom_kill: allow process_mrelease to run under mmap_lock protection Shuah Khan <skhan@linuxfoundation.org>: docs/vm: add vmalloced-kernel-stacks document Pasha Tatashin <pasha.tatashin@soleen.com>: Patch series "page table check", v3: mm: change page type prior to adding page table entry mm: ptep_clear() page table helper mm: page table check x86: mm: add x86_64 support for page table check "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm: remove last argument of reuse_swap_page() mm: remove the total_mapcount argument from page_trans_huge_map_swapcount() mm: remove the total_mapcount argument from page_trans_huge_mapcount() Subsystem: mm/dma Christian König <christian.koenig@amd.com>: mm/dmapool.c: revert "make dma pool to use kmalloc_node" Subsystem: mm/vmalloc Michal Hocko <mhocko@suse.com>: Patch series "extend vmalloc support for constrained allocations", v2: mm/vmalloc: alloc GFP_NO{FS,IO} for vmalloc mm/vmalloc: add support for __GFP_NOFAIL mm/vmalloc: be more explicit about supported gfp flags. mm: allow !GFP_KERNEL allocations for kvmalloc mm: make slab and vmalloc allocators __GFP_NOLOCKDEP aware "NeilBrown" <neilb@suse.de>: mm: introduce memalloc_retry_wait() Suren Baghdasaryan <surenb@google.com>: mm/pagealloc: sysctl: change watermark_scale_factor max limit to 30% Changcheng Deng <deng.changcheng@zte.com.cn>: mm: fix boolreturn.cocci warning Xiongwei Song <sxwjean@gmail.com>: mm: page_alloc: fix building error on -Werror=array-compare Michal Hocko <mhocko@suse.com>: mm: drop node from alloc_pages_vma Miles Chen <miles.chen@mediatek.com>: include/linux/gfp.h: further document GFP_DMA32 Anshuman Khandual <anshuman.khandual@arm.com>: mm/page_alloc.c: modify the comment section for alloc_contig_pages() Baoquan He <bhe@redhat.com>: Patch series "Handle warning of allocation failure on DMA zone w/o managed pages", v4: mm_zone: add function to check if managed dma zone exists dma/pool: create dma atomic pool only if dma zone has managed pages mm/page_alloc.c: do not warn allocation failure on zone DMA if no managed pages Subsystem: mm/memory-failure Subsystem: mm/hugetlb Mina Almasry <almasrymina@google.com>: hugetlb: add hugetlb.*.numa_stat file Yosry Ahmed <yosryahmed@google.com>: mm, hugepages: make memory size variable in hugepage-mremap selftest Yang Yang <yang.yang29@zte.com.cn>: mm/vmstat: add events for THP max_ptes_* exceeds Waiman Long <longman@redhat.com>: selftests/vm: make charge_reserved_hugetlb.sh work with existing cgroup setting Subsystem: mm/userfaultfd Peter Xu <peterx@redhat.com>: selftests/uffd: allow EINTR/EAGAIN Mike Kravetz <mike.kravetz@oracle.com>: userfaultfd/selftests: clean up hugetlb allocation code Subsystem: mm/vmscan Gang Li <ligang.bdlg@bytedance.com>: vmscan: make drop_slab_node static Chen Wandun <chenwandun@huawei.com>: mm/page_isolation: unset migratetype directly for non Buddy page Subsystem: mm/mempolicy "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>: Patch series "mm: add new syscall set_mempolicy_home_node", v6: mm/mempolicy: use policy_node helper with MPOL_PREFERRED_MANY mm/mempolicy: add set_mempolicy_home_node syscall mm/mempolicy: wire up syscall set_mempolicy_home_node Randy Dunlap <rdunlap@infradead.org>: mm/mempolicy: fix all kernel-doc warnings Subsystem: mm/oom-kill Jann Horn <jannh@google.com>: mm, oom: OOM sysrq should always kill a process Subsystem: mm/hugetlbfs Sean Christopherson <seanjc@google.com>: hugetlbfs: fix off-by-one error in hugetlb_vmdelete_list() Subsystem: mm/migration Baolin Wang <baolin.wang@linux.alibaba.com>: Patch series "Improve the migration stats": mm: migrate: fix the return value of migrate_pages() mm: migrate: correct the hugetlb migration stats mm: compaction: fix the migration stats in trace_mm_compaction_migratepages() mm: migrate: support multiple target nodes demotion mm: migrate: add more comments for selecting target node randomly Huang Ying <ying.huang@intel.com>: mm/migrate: move node demotion code to near its user Colin Ian King <colin.i.king@gmail.com>: mm/migrate: remove redundant variables used in a for-loop Subsystem: mm/thp Anshuman Khandual <anshuman.khandual@arm.com>: mm/thp: drop unused trace events hugepage_[invalidate|splitting] Subsystem: mm/ksm Nanyong Sun <sunnanyong@huawei.com>: mm: ksm: fix use-after-free kasan report in ksm_might_need_to_copy Subsystem: mm/page-poison Naoya Horiguchi <naoya.horiguchi@nec.com>: Patch series "mm/hwpoison: fix unpoison_memory()", v4: mm/hwpoison: mf_mutex for soft offline and unpoison mm/hwpoison: remove MF_MSG_BUDDY_2ND and MF_MSG_POISONED_HUGE mm/hwpoison: fix unpoison_memory() Subsystem: mm/percpu Qi Zheng <zhengqi.arch@bytedance.com>: mm: memcg/percpu: account extra objcg space to memory cgroups Subsystem: mm/rmap Huang Ying <ying.huang@intel.com>: mm/rmap: fix potential batched TLB flush race Subsystem: mm/zswap Zhaoyu Liu <zackary.liu.pro@gmail.com>: zpool: remove the list of pools_head Subsystem: mm/zram Luis Chamberlain <mcgrof@kernel.org>: zram: use ATTRIBUTE_GROUPS Subsystem: mm/cleanups Quanfa Fu <fuqf0919@gmail.com>: mm: fix some comment errors Ting Liu <liuting.0x7c00@bytedance.com>: mm: make some vars and functions static or __init Subsystem: mm/hmm Alistair Popple <apopple@nvidia.com>: mm/hmm.c: allow VM_MIXEDMAP to work with hmm_range_fault Subsystem: mm/damon Xin Hao <xhao@linux.alibaba.com>: Patch series "mm/damon: Do some small changes", v4: mm/damon: unified access_check function naming rules mm/damon: add 'age' of region tracepoint support mm/damon/core: use abs() instead of diff_of() mm/damon: remove some unneeded function definitions in damon.h Yihao Han <hanyihao@vivo.com>: mm/damon/vaddr: remove swap_ranges() and replace it with swap() Xin Hao <xhao@linux.alibaba.com>: mm/damon/schemes: add the validity judgment of thresholds mm/damon: move damon_rand() definition into damon.h mm/damon: modify damon_rand() macro to static inline function SeongJae Park <sj@kernel.org>: Patch series "mm/damon: Misc cleanups": mm/damon: convert macro functions to static inline functions Docs/admin-guide/mm/damon/usage: update for scheme quotas and watermarks Docs/admin-guide/mm/damon/usage: remove redundant information Docs/admin-guide/mm/damon/usage: mention tracepoint at the beginning Docs/admin-guide/mm/damon/usage: update for kdamond_pid and (mk|rm)_contexts mm/damon: remove a mistakenly added comment for a future feature Patch series "mm/damon/schemes: Extend stats for better online analysis and tuning": mm/damon/schemes: account scheme actions that successfully applied mm/damon/schemes: account how many times quota limit has exceeded mm/damon/reclaim: provide reclamation statistics Docs/admin-guide/mm/damon/reclaim: document statistics parameters mm/damon/dbgfs: support all DAMOS stats Docs/admin-guide/mm/damon/usage: update for schemes statistics Baolin Wang <baolin.wang@linux.alibaba.com>: mm/damon: add access checking for hugetlb pages Guoqing Jiang <guoqing.jiang@linux.dev>: mm/damon: move the implementation of damon_insert_region to damon.h SeongJae Park <sj@kernel.org>: Patch series "mm/damon: Hide unnecessary information disclosures": mm/damon/dbgfs: remove an unnecessary variable mm/damon/vaddr: use pr_debug() for damon_va_three_regions() failure logging mm/damon/vaddr: hide kernel pointer from damon_va_three_regions() failure log mm/damon: hide kernel pointer from tracepoint event Documentation/admin-guide/cgroup-v1/hugetlb.rst | 4 Documentation/admin-guide/cgroup-v2.rst | 11 Documentation/admin-guide/mm/damon/reclaim.rst | 25 Documentation/admin-guide/mm/damon/usage.rst | 235 +++++-- Documentation/admin-guide/mm/numa_memory_policy.rst | 16 Documentation/admin-guide/sysctl/vm.rst | 2 Documentation/filesystems/proc.rst | 6 Documentation/vm/arch_pgtable_helpers.rst | 20 Documentation/vm/index.rst | 2 Documentation/vm/page_migration.rst | 12 Documentation/vm/page_table_check.rst | 56 + Documentation/vm/vmalloced-kernel-stacks.rst | 153 ++++ MAINTAINERS | 9 arch/Kconfig | 3 arch/alpha/kernel/syscalls/syscall.tbl | 1 arch/alpha/mm/fault.c | 16 arch/arc/mm/fault.c | 3 arch/arm/mm/fault.c | 2 arch/arm/tools/syscall.tbl | 1 arch/arm64/include/asm/unistd.h | 2 arch/arm64/include/asm/unistd32.h | 2 arch/arm64/kernel/module.c | 4 arch/arm64/mm/fault.c | 6 arch/hexagon/mm/vm_fault.c | 8 arch/ia64/kernel/module.c | 6 arch/ia64/kernel/setup.c | 5 arch/ia64/kernel/syscalls/syscall.tbl | 1 arch/ia64/kernel/topology.c | 3 arch/ia64/kernel/uncached.c | 2 arch/ia64/mm/fault.c | 16 arch/m68k/kernel/syscalls/syscall.tbl | 1 arch/m68k/mm/fault.c | 18 arch/microblaze/kernel/syscalls/syscall.tbl | 1 arch/microblaze/mm/fault.c | 18 arch/mips/kernel/syscalls/syscall_n32.tbl | 1 arch/mips/kernel/syscalls/syscall_n64.tbl | 1 arch/mips/kernel/syscalls/syscall_o32.tbl | 1 arch/mips/mm/fault.c | 19 arch/nds32/mm/fault.c | 16 arch/nios2/mm/fault.c | 18 arch/openrisc/mm/fault.c | 18 arch/parisc/kernel/syscalls/syscall.tbl | 1 arch/parisc/mm/fault.c | 18 arch/powerpc/kernel/syscalls/syscall.tbl | 1 arch/powerpc/mm/fault.c | 6 arch/riscv/mm/fault.c | 2 arch/s390/kernel/module.c | 5 arch/s390/kernel/syscalls/syscall.tbl | 1 arch/s390/mm/fault.c | 28 arch/sh/kernel/syscalls/syscall.tbl | 1 arch/sh/mm/fault.c | 18 arch/sparc/kernel/syscalls/syscall.tbl | 1 arch/sparc/mm/fault_32.c | 16 arch/sparc/mm/fault_64.c | 16 arch/um/kernel/trap.c | 8 arch/x86/Kconfig | 1 arch/x86/entry/syscalls/syscall_32.tbl | 1 arch/x86/entry/syscalls/syscall_64.tbl | 1 arch/x86/include/asm/pgtable.h | 31 - arch/x86/kernel/module.c | 7 arch/x86/mm/fault.c | 3 arch/xtensa/kernel/syscalls/syscall.tbl | 1 arch/xtensa/mm/fault.c | 17 drivers/block/zram/zram_drv.c | 11 drivers/dax/bus.c | 32 + drivers/dax/bus.h | 1 drivers/dax/device.c | 140 ++-- drivers/infiniband/sw/siw/siw_main.c | 7 drivers/of/fdt.c | 6 fs/ext4/extents.c | 8 fs/ext4/inline.c | 5 fs/ext4/page-io.c | 9 fs/f2fs/data.c | 4 fs/f2fs/gc.c | 5 fs/f2fs/inode.c | 4 fs/f2fs/node.c | 4 fs/f2fs/recovery.c | 6 fs/f2fs/segment.c | 9 fs/f2fs/super.c | 5 fs/hugetlbfs/inode.c | 7 fs/inode.c | 49 + fs/ioctl.c | 2 fs/ntfs/attrib.c | 2 fs/ocfs2/alloc.c | 2 fs/ocfs2/aops.c | 26 fs/ocfs2/cluster/masklog.c | 11 fs/ocfs2/dir.c | 2 fs/ocfs2/filecheck.c | 3 fs/ocfs2/journal.c | 6 fs/proc/task_mmu.c | 13 fs/squashfs/super.c | 33 + fs/userfaultfd.c | 8 fs/xfs/kmem.c | 3 fs/xfs/xfs_buf.c | 2 include/linux/ceph/libceph.h | 1 include/linux/damon.h | 93 +-- include/linux/fs.h | 1 include/linux/gfp.h | 12 include/linux/hugetlb.h | 4 include/linux/hugetlb_cgroup.h | 7 include/linux/kasan.h | 4 include/linux/kthread.h | 25 include/linux/memcontrol.h | 22 include/linux/mempolicy.h | 1 include/linux/memremap.h | 11 include/linux/mm.h | 76 -- include/linux/mm_inline.h | 136 ++++ include/linux/mm_types.h | 252 +++----- include/linux/mmzone.h | 9 include/linux/page-flags.h | 6 include/linux/page_idle.h | 1 include/linux/page_table_check.h | 147 ++++ include/linux/pgtable.h | 8 include/linux/sched/mm.h | 26 include/linux/swap.h | 8 include/linux/syscalls.h | 3 include/linux/vm_event_item.h | 3 include/linux/vmalloc.h | 7 include/ras/ras_event.h | 2 include/trace/events/compaction.h | 24 include/trace/events/damon.h | 15 include/trace/events/thp.h | 35 - include/uapi/asm-generic/unistd.h | 5 include/uapi/linux/prctl.h | 3 kernel/dma/pool.c | 4 kernel/fork.c | 3 kernel/kthread.c | 1 kernel/rcu/rcutorture.c | 7 kernel/sys.c | 63 ++ kernel/sys_ni.c | 1 kernel/sysctl.c | 3 kernel/trace/ring_buffer.c | 7 kernel/trace/trace_hwlat.c | 6 kernel/trace/trace_osnoise.c | 3 lib/test_hmm.c | 24 lib/test_kasan.c | 30 mm/Kconfig | 14 mm/Kconfig.debug | 24 mm/Makefile | 1 mm/compaction.c | 7 mm/damon/core.c | 45 - mm/damon/dbgfs.c | 20 mm/damon/paddr.c | 24 mm/damon/prmtv-common.h | 4 mm/damon/reclaim.c | 46 + mm/damon/vaddr.c | 186 ++++-- mm/debug.c | 52 - mm/debug_vm_pgtable.c | 6 mm/dmapool.c | 2 mm/frontswap.c | 4 mm/gup.c | 31 - mm/hmm.c | 5 mm/huge_memory.c | 32 - mm/hugetlb.c | 6 mm/hugetlb_cgroup.c | 133 +++- mm/internal.h | 7 mm/kasan/quarantine.c | 11 mm/kasan/shadow.c | 9 mm/khugepaged.c | 23 mm/kmemleak.c | 21 mm/ksm.c | 5 mm/madvise.c | 510 ++++++++++------ mm/mapping_dirty_helpers.c | 1 mm/memcontrol.c | 44 - mm/memory-failure.c | 189 +++--- mm/memory.c | 12 mm/mempolicy.c | 95 ++- mm/memremap.c | 18 mm/migrate.c | 527 ++++++++++------- mm/mlock.c | 2 mm/mmap.c | 55 + mm/mmu_gather.c | 1 mm/mprotect.c | 2 mm/oom_kill.c | 30 mm/page_alloc.c | 198 ++++-- mm/page_counter.c | 1 mm/page_ext.c | 8 mm/page_isolation.c | 2 mm/page_owner.c | 4 mm/page_table_check.c | 270 ++++++++ mm/percpu-internal.h | 18 mm/percpu.c | 10 mm/pgtable-generic.c | 1 mm/rmap.c | 43 + mm/shmem.c | 91 ++ mm/slab.h | 5 mm/slab_common.c | 34 - mm/swap.c | 2 mm/swapfile.c | 46 - mm/truncate.c | 5 mm/userfaultfd.c | 5 mm/util.c | 15 mm/vmalloc.c | 75 +- mm/vmscan.c | 2 mm/vmstat.c | 3 mm/zpool.c | 12 net/ceph/buffer.c | 4 net/ceph/ceph_common.c | 27 net/ceph/crypto.c | 2 net/ceph/messenger.c | 2 net/ceph/messenger_v2.c | 2 net/ceph/osdmap.c | 12 net/sunrpc/svc_xprt.c | 3 scripts/spelling.txt | 1 tools/testing/selftests/vm/charge_reserved_hugetlb.sh | 34 - tools/testing/selftests/vm/hmm-tests.c | 42 + tools/testing/selftests/vm/hugepage-mremap.c | 46 - tools/testing/selftests/vm/hugetlb_reparenting_test.sh | 21 tools/testing/selftests/vm/run_vmtests.sh | 2 tools/testing/selftests/vm/userfaultfd.c | 33 - tools/testing/selftests/vm/write_hugetlb_memory.sh | 2 211 files changed, 3980 insertions(+), 1759 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-12-31 4:12 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-12-31 4:12 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 2 patches, based on 4f3d93c6eaff6b84e43b63e0d7a119c5920e1020. Subsystems affected by this patch series: mm/userfaultfd mm/damon Subsystem: mm/userfaultfd Mike Kravetz <mike.kravetz@oracle.com>: userfaultfd/selftests: fix hugetlb area allocations Subsystem: mm/damon SeongJae Park <sj@kernel.org>: mm/damon/dbgfs: fix 'struct pid' leaks in 'dbgfs_target_ids_write()' mm/damon/dbgfs.c | 9 +++++++-- tools/testing/selftests/vm/userfaultfd.c | 16 ++++++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-12-25 5:11 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-12-25 5:11 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 9 patches, based on bc491fb12513e79702c6f936c838f792b5389129. Subsystems affected by this patch series: mm/kfence mm/mempolicy core-kernel MAINTAINERS mm/memory-failure mm/pagemap mm/pagealloc mm/damon mm/memory-failure Subsystem: mm/kfence Baokun Li <libaokun1@huawei.com>: kfence: fix memory leak when cat kfence objects Subsystem: mm/mempolicy Andrey Ryabinin <arbn@yandex-team.com>: mm: mempolicy: fix THP allocations escaping mempolicy restrictions Subsystem: core-kernel Philipp Rudo <prudo@redhat.com>: kernel/crash_core: suppress unknown crashkernel parameter warning Subsystem: MAINTAINERS Randy Dunlap <rdunlap@infradead.org>: MAINTAINERS: mark more list instances as moderated Subsystem: mm/memory-failure Naoya Horiguchi <naoya.horiguchi@nec.com>: mm, hwpoison: fix condition in free hugetlb page path Subsystem: mm/pagemap Hugh Dickins <hughd@google.com>: mm: delete unsafe BUG from page_cache_add_speculative() Subsystem: mm/pagealloc Thibaut Sautereau <thibaut.sautereau@ssi.gouv.fr>: mm/page_alloc: fix __alloc_size attribute for alloc_pages_exact_nid Subsystem: mm/damon SeongJae Park <sj@kernel.org>: mm/damon/dbgfs: protect targets destructions with kdamond_lock Subsystem: mm/memory-failure Liu Shixin <liushixin2@huawei.com>: mm/hwpoison: clear MF_COUNT_INCREASED before retrying get_any_page() MAINTAINERS | 4 ++-- include/linux/gfp.h | 2 +- include/linux/pagemap.h | 1 - kernel/crash_core.c | 11 +++++++++++ mm/damon/dbgfs.c | 2 ++ mm/kfence/core.c | 1 + mm/memory-failure.c | 14 +++++--------- mm/mempolicy.c | 3 +-- 8 files changed, 23 insertions(+), 15 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-12-10 22:45 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-12-10 22:45 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 21 patches, based on c741e49150dbb0c0aebe234389f4aa8b47958fa8. Subsystems affected by this patch series: mm/mlock MAINTAINERS mailmap mm/pagecache mm/damon mm/slub mm/memcg mm/hugetlb mm/pagecache Subsystem: mm/mlock Drew DeVault <sir@cmpwn.com>: Increase default MLOCK_LIMIT to 8 MiB Subsystem: MAINTAINERS Dave Young <dyoung@redhat.com>: MAINTAINERS: update kdump maintainers Subsystem: mailmap Guo Ren <guoren@linux.alibaba.com>: mailmap: update email address for Guo Ren Subsystem: mm/pagecache "Matthew Wilcox (Oracle)" <willy@infradead.org>: filemap: remove PageHWPoison check from next_uptodate_page() Subsystem: mm/damon SeongJae Park <sj@kernel.org>: Patch series "mm/damon: Fix fake /proc/loadavg reports", v3: timers: implement usleep_idle_range() mm/damon/core: fix fake load reports due to uninterruptible sleeps Patch series "mm/damon: Trivial fixups and improvements": mm/damon/core: use better timer mechanisms selection threshold mm/damon/dbgfs: remove an unnecessary error message mm/damon/core: remove unnecessary error messages mm/damon/vaddr: remove an unnecessary warning message mm/damon/vaddr-test: split a test function having >1024 bytes frame size mm/damon/vaddr-test: remove unnecessary variables selftests/damon: skip test if DAMON is running selftests/damon: test DAMON enabling with empty target_ids case selftests/damon: test wrong DAMOS condition ranges input selftests/damon: test debugfs file reads/writes with huge count selftests/damon: split test cases Subsystem: mm/slub Gerald Schaefer <gerald.schaefer@linux.ibm.com>: mm/slub: fix endianness bug for alloc/free_traces attributes Subsystem: mm/memcg Waiman Long <longman@redhat.com>: mm/memcg: relocate mod_objcg_mlstate(), get_obj_stock() and put_obj_stock() Subsystem: mm/hugetlb Zhenguo Yao <yaozhenguo1@gmail.com>: hugetlbfs: fix issue of preallocation of gigantic pages can't work Subsystem: mm/pagecache Manjong Lee <mj0123.lee@samsung.com>: mm: bdi: initialize bdi_min_ratio when bdi is unregistered .mailmap | 2 MAINTAINERS | 2 include/linux/delay.h | 14 include/uapi/linux/resource.h | 13 kernel/time/timer.c | 16 - mm/backing-dev.c | 7 mm/damon/core.c | 20 - mm/damon/dbgfs.c | 4 mm/damon/vaddr-test.h | 85 ++--- mm/damon/vaddr.c | 1 mm/filemap.c | 2 mm/hugetlb.c | 2 mm/memcontrol.c | 106 +++---- mm/slub.c | 15 - tools/testing/selftests/damon/.gitignore | 2 tools/testing/selftests/damon/Makefile | 7 tools/testing/selftests/damon/_debugfs_common.sh | 52 +++ tools/testing/selftests/damon/debugfs_attrs.sh | 149 ++-------- tools/testing/selftests/damon/debugfs_empty_targets.sh | 13 tools/testing/selftests/damon/debugfs_huge_count_read_write.sh | 22 + tools/testing/selftests/damon/debugfs_schemes.sh | 19 + tools/testing/selftests/damon/debugfs_target_ids.sh | 19 + tools/testing/selftests/damon/huge_count_read_write.c | 39 ++ 23 files changed, 363 insertions(+), 248 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-11-20 0:42 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-11-20 0:42 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 15 patches, based on a90af8f15bdc9449ee2d24e1d73fa3f7e8633f81. Subsystems affected by this patch series: mm/swap ipc mm/slab-generic hexagon mm/kmemleak mm/hugetlb mm/kasan mm/damon mm/highmem proc Subsystem: mm/swap Matthew Wilcox <willy@infradead.org>: mm/swap.c:put_pages_list(): reinitialise the page list Subsystem: ipc Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>: Patch series "shm: shm_rmid_forced feature fixes": ipc: WARN if trying to remove ipc object which is absent shm: extend forced shm destroy to support objects from several IPC nses Subsystem: mm/slab-generic Yunfeng Ye <yeyunfeng@huawei.com>: mm: emit the "free" trace report before freeing memory in kmem_cache_free() Subsystem: hexagon Nathan Chancellor <nathan@kernel.org>: Patch series "Fixes for ARCH=hexagon allmodconfig", v2: hexagon: export raw I/O routines for modules hexagon: clean up timer-regs.h hexagon: ignore vmlinux.lds Subsystem: mm/kmemleak Rustam Kovhaev <rkovhaev@gmail.com>: mm: kmemleak: slob: respect SLAB_NOLEAKTRACE flag Subsystem: mm/hugetlb Bui Quang Minh <minhquangbui99@gmail.com>: hugetlb: fix hugetlb cgroup refcounting during mremap Mina Almasry <almasrymina@google.com>: hugetlb, userfaultfd: fix reservation restore on userfaultfd error Subsystem: mm/kasan Kees Cook <keescook@chromium.org>: kasan: test: silence intentional read overflow warnings Subsystem: mm/damon SeongJae Park <sj@kernel.org>: Patch series "DAMON fixes": mm/damon/dbgfs: use '__GFP_NOWARN' for user-specified size buffer allocation mm/damon/dbgfs: fix missed use of damon_dbgfs_lock Subsystem: mm/highmem Ard Biesheuvel <ardb@kernel.org>: kmap_local: don't assume kmap PTEs are linear arrays in memory Subsystem: proc David Hildenbrand <david@redhat.com>: proc/vmcore: fix clearing user buffer by properly using clear_user() arch/arm/Kconfig | 1 arch/hexagon/include/asm/timer-regs.h | 26 ---- arch/hexagon/include/asm/timex.h | 3 arch/hexagon/kernel/.gitignore | 1 arch/hexagon/kernel/time.c | 12 +- arch/hexagon/lib/io.c | 4 fs/proc/vmcore.c | 20 ++- include/linux/hugetlb_cgroup.h | 12 ++ include/linux/ipc_namespace.h | 15 ++ include/linux/sched/task.h | 2 ipc/shm.c | 189 +++++++++++++++++++++++++--------- ipc/util.c | 6 - lib/test_kasan.c | 2 mm/Kconfig | 3 mm/damon/dbgfs.c | 20 ++- mm/highmem.c | 32 +++-- mm/hugetlb.c | 11 + mm/slab.c | 3 mm/slab.h | 2 mm/slob.c | 3 mm/slub.c | 2 mm/swap.c | 1 22 files changed, 254 insertions(+), 116 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-11-11 4:32 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-11-11 4:32 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits The post-linux-next material. 7 patches, based on debe436e77c72fcee804fb867f275e6d31aa999c. Subsystems affected by this patch series: mm/debug mm/slab-generic mm/migration mm/memcg mm/kasan Subsystem: mm/debug Yixuan Cao <caoyixuan2019@email.szu.edu.cn>: mm/page_owner.c: modify the type of argument "order" in some functions Subsystem: mm/slab-generic Ingo Molnar <mingo@kernel.org>: mm: allow only SLUB on PREEMPT_RT Subsystem: mm/migration Baolin Wang <baolin.wang@linux.alibaba.com>: mm: migrate: simplify the file-backed pages validation when migrating its mapping Alistair Popple <apopple@nvidia.com>: mm/migrate.c: remove MIGRATE_PFN_LOCKED Subsystem: mm/memcg Christoph Hellwig <hch@lst.de>: Patch series "unexport memcg locking helpers": mm: unexport folio_memcg_{,un}lock mm: unexport {,un}lock_page_memcg Subsystem: mm/kasan Kuan-Ying Lee <Kuan-Ying.Lee@mediatek.com>: kasan: add kasan mode messages when kasan init Documentation/vm/hmm.rst | 2 arch/arm64/mm/kasan_init.c | 2 arch/powerpc/kvm/book3s_hv_uvmem.c | 4 drivers/gpu/drm/amd/amdkfd/kfd_migrate.c | 2 drivers/gpu/drm/nouveau/nouveau_dmem.c | 4 include/linux/migrate.h | 1 include/linux/page_owner.h | 12 +- init/Kconfig | 2 lib/test_hmm.c | 5 - mm/kasan/hw_tags.c | 14 ++ mm/kasan/sw_tags.c | 2 mm/memcontrol.c | 4 mm/migrate.c | 151 +++++-------------------------- mm/page_owner.c | 6 - 14 files changed, 61 insertions(+), 150 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-11-09 2:30 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-11-09 2:30 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 87 patches, based on 8bb7eca972ad531c9b149c0a51ab43a417385813, plus previously sent material. Subsystems affected by this patch series: mm/pagecache mm/hugetlb procfs misc MAINTAINERS lib checkpatch binfmt kallsyms ramfs init codafs nilfs2 hfs crash_dump signals seq_file fork sysvfs kcov gdb resource selftests ipc Subsystem: mm/pagecache Johannes Weiner <hannes@cmpxchg.org>: vfs: keep inodes with page cache off the inode shrinker LRU Subsystem: mm/hugetlb zhangyiru <zhangyiru3@huawei.com>: mm,hugetlb: remove mlock ulimit for SHM_HUGETLB Subsystem: procfs Florian Weimer <fweimer@redhat.com>: procfs: do not list TID 0 in /proc/<pid>/task David Hildenbrand <david@redhat.com>: x86/xen: update xen_oldmem_pfn_is_ram() documentation x86/xen: simplify xen_oldmem_pfn_is_ram() x86/xen: print a warning when HVMOP_get_mem_type fails proc/vmcore: let pfn_is_ram() return a bool proc/vmcore: convert oldmem_pfn_is_ram callback to more generic vmcore callbacks virtio-mem: factor out hotplug specifics from virtio_mem_init() into virtio_mem_init_hotplug() virtio-mem: factor out hotplug specifics from virtio_mem_probe() into virtio_mem_init_hotplug() virtio-mem: factor out hotplug specifics from virtio_mem_remove() into virtio_mem_deinit_hotplug() virtio-mem: kdump mode to sanitize /proc/vmcore access Stephen Brennan <stephen.s.brennan@oracle.com>: proc: allow pid_revalidate() during LOOKUP_RCU Subsystem: misc Andy Shevchenko <andriy.shevchenko@linux.intel.com>: Patch series "kernel.h further split", v5: kernel.h: drop unneeded <linux/kernel.h> inclusion from other headers kernel.h: split out container_of() and typeof_member() macros include/kunit/test.h: replace kernel.h with the necessary inclusions include/linux/list.h: replace kernel.h with the necessary inclusions include/linux/llist.h: replace kernel.h with the necessary inclusions include/linux/plist.h: replace kernel.h with the necessary inclusions include/media/media-entity.h: replace kernel.h with the necessary inclusions include/linux/delay.h: replace kernel.h with the necessary inclusions include/linux/sbitmap.h: replace kernel.h with the necessary inclusions include/linux/radix-tree.h: replace kernel.h with the necessary inclusions include/linux/generic-radix-tree.h: replace kernel.h with the necessary inclusions Stephen Rothwell <sfr@canb.auug.org.au>: kernel.h: split out instruction pointer accessors Rasmus Villemoes <linux@rasmusvillemoes.dk>: linux/container_of.h: switch to static_assert Colin Ian King <colin.i.king@googlemail.com>: mailmap: update email address for Colin King Subsystem: MAINTAINERS Kees Cook <keescook@chromium.org>: MAINTAINERS: add "exec & binfmt" section with myself and Eric Lukas Bulwahn <lukas.bulwahn@gmail.com>: Patch series "Rectify file references for dt-bindings in MAINTAINERS", v5: MAINTAINERS: rectify entry for ARM/TOSHIBA VISCONTI ARCHITECTURE MAINTAINERS: rectify entry for HIKEY960 ONBOARD USB GPIO HUB DRIVER MAINTAINERS: rectify entry for INTEL KEEM BAY DRM DRIVER MAINTAINERS: rectify entry for ALLWINNER HARDWARE SPINLOCK SUPPORT Subsystem: lib Imran Khan <imran.f.khan@oracle.com>: Patch series "lib, stackdepot: check stackdepot handle before accessing slabs", v2: lib, stackdepot: check stackdepot handle before accessing slabs lib, stackdepot: add helper to print stack entries lib, stackdepot: add helper to print stack entries into buffer Lucas De Marchi <lucas.demarchi@intel.com>: include/linux/string_helpers.h: add linux/string.h for strlen() Alexey Dobriyan <adobriyan@gmail.com>: lib: uninline simple_strntoull() as well Thomas Gleixner <tglx@linutronix.de>: mm/scatterlist: replace the !preemptible warning in sg_miter_stop() Subsystem: checkpatch Rikard Falkeborn <rikard.falkeborn@gmail.com>: const_structs.checkpatch: add a few sound ops structs Joe Perches <joe@perches.com>: checkpatch: improve EXPORT_SYMBOL test for EXPORT_SYMBOL_NS uses Peter Ujfalusi <peter.ujfalusi@linux.intel.com>: checkpatch: get default codespell dictionary path from package location Subsystem: binfmt Kees Cook <keescook@chromium.org>: binfmt_elf: reintroduce using MAP_FIXED_NOREPLACE Alexey Dobriyan <adobriyan@gmail.com>: ELF: simplify STACK_ALLOC macro Subsystem: kallsyms Kefeng Wang <wangkefeng.wang@huawei.com>: Patch series "sections: Unify kernel sections range check and use", v4: kallsyms: remove arch specific text and data check kallsyms: fix address-checks for kernel related range sections: move and rename core_kernel_data() to is_kernel_core_data() sections: move is_kernel_inittext() into sections.h x86: mm: rename __is_kernel_text() to is_x86_32_kernel_text() sections: provide internal __is_kernel() and __is_kernel_text() helper mm: kasan: use is_kernel() helper extable: use is_kernel_text() helper powerpc/mm: use core_kernel_text() helper microblaze: use is_kernel_text() helper alpha: use is_kernel_text() helper Subsystem: ramfs yangerkun <yangerkun@huawei.com>: ramfs: fix mount source show for ramfs Subsystem: init Andrew Halaney <ahalaney@redhat.com>: init: make unknown command line param message clearer Subsystem: codafs Jan Harkes <jaharkes@cs.cmu.edu>: Patch series "Coda updates for -next": coda: avoid NULL pointer dereference from a bad inode coda: check for async upcall request using local state Alex Shi <alex.shi@linux.alibaba.com>: coda: remove err which no one care Jan Harkes <jaharkes@cs.cmu.edu>: coda: avoid flagging NULL inodes coda: avoid hidden code duplication in rename coda: avoid doing bad things on inode type changes during revalidation Xiyu Yang <xiyuyang19@fudan.edu.cn>: coda: convert from atomic_t to refcount_t on coda_vm_ops->refcnt Jing Yangyang <jing.yangyang@zte.com.cn>: coda: use vmemdup_user to replace the open code Jan Harkes <jaharkes@cs.cmu.edu>: coda: bump module version to 7.2 Subsystem: nilfs2 Qing Wang <wangqing@vivo.com>: Patch series "nilfs2 updates": nilfs2: replace snprintf in show functions with sysfs_emit Ryusuke Konishi <konishi.ryusuke@gmail.com>: nilfs2: remove filenames from file comments Subsystem: hfs Arnd Bergmann <arnd@arndb.de>: hfs/hfsplus: use WARN_ON for sanity check Subsystem: crash_dump Changcheng Deng <deng.changcheng@zte.com.cn>: crash_dump: fix boolreturn.cocci warning Ye Guojin <ye.guojin@zte.com.cn>: crash_dump: remove duplicate include in crash_dump.h Subsystem: signals Ye Guojin <ye.guojin@zte.com.cn>: signal: remove duplicate include in signal.h Subsystem: seq_file Andy Shevchenko <andriy.shevchenko@linux.intel.com>: seq_file: move seq_escape() to a header Muchun Song <songmuchun@bytedance.com>: seq_file: fix passing wrong private data Subsystem: fork Ran Xiaokai <ran.xiaokai@zte.com.cn>: kernel/fork.c: unshare(): use swap() to make code cleaner Subsystem: sysvfs Pavel Skripkin <paskripkin@gmail.com>: sysv: use BUILD_BUG_ON instead of runtime check Subsystem: kcov Sebastian Andrzej Siewior <bigeasy@linutronix.de>: Patch series "kcov: PREEMPT_RT fixup + misc", v2: Documentation/kcov: include types.h in the example Documentation/kcov: define `ip' in the example kcov: allocate per-CPU memory on the relevant node kcov: avoid enable+disable interrupts if !in_task() kcov: replace local_irq_save() with a local_lock_t Subsystem: gdb Douglas Anderson <dianders@chromium.org>: scripts/gdb: handle split debug for vmlinux Subsystem: resource David Hildenbrand <david@redhat.com>: Patch series "virtio-mem: disallow mapping virtio-mem memory via /dev/mem", v5: kernel/resource: clean up and optimize iomem_is_exclusive() kernel/resource: disallow access to exclusive system RAM regions virtio-mem: disallow mapping virtio-mem memory via /dev/mem Subsystem: selftests SeongJae Park <sjpark@amazon.de>: selftests/kselftest/runner/run_one(): allow running non-executable files Subsystem: ipc Michal Clapinski <mclapinski@google.com>: ipc: check checkpoint_restore_ns_capable() to modify C/R proc files Manfred Spraul <manfred@colorfullife.com>: ipc/ipc_sysctl.c: remove fallback for !CONFIG_PROC_SYSCTL .mailmap | 2 Documentation/dev-tools/kcov.rst | 5 MAINTAINERS | 21 + arch/alpha/kernel/traps.c | 4 arch/microblaze/mm/pgtable.c | 3 arch/powerpc/mm/pgtable_32.c | 7 arch/riscv/lib/delay.c | 4 arch/s390/include/asm/facility.h | 4 arch/x86/kernel/aperture_64.c | 13 arch/x86/kernel/unwind_orc.c | 2 arch/x86/mm/init_32.c | 14 arch/x86/xen/mmu_hvm.c | 39 -- drivers/gpu/drm/drm_dp_mst_topology.c | 5 drivers/gpu/drm/drm_mm.c | 5 drivers/gpu/drm/i915/i915_vma.c | 5 drivers/gpu/drm/i915/intel_runtime_pm.c | 20 - drivers/media/dvb-frontends/cxd2880/cxd2880_common.h | 1 drivers/virtio/Kconfig | 1 drivers/virtio/virtio_mem.c | 321 +++++++++++++------ fs/binfmt_elf.c | 33 + fs/coda/cnode.c | 13 fs/coda/coda_linux.c | 39 +- fs/coda/coda_linux.h | 6 fs/coda/dir.c | 20 - fs/coda/file.c | 12 fs/coda/psdev.c | 14 fs/coda/upcall.c | 3 fs/hfs/inode.c | 6 fs/hfsplus/inode.c | 12 fs/hugetlbfs/inode.c | 23 - fs/inode.c | 46 +- fs/internal.h | 1 fs/nilfs2/alloc.c | 2 fs/nilfs2/alloc.h | 2 fs/nilfs2/bmap.c | 2 fs/nilfs2/bmap.h | 2 fs/nilfs2/btnode.c | 2 fs/nilfs2/btnode.h | 2 fs/nilfs2/btree.c | 2 fs/nilfs2/btree.h | 2 fs/nilfs2/cpfile.c | 2 fs/nilfs2/cpfile.h | 2 fs/nilfs2/dat.c | 2 fs/nilfs2/dat.h | 2 fs/nilfs2/dir.c | 2 fs/nilfs2/direct.c | 2 fs/nilfs2/direct.h | 2 fs/nilfs2/file.c | 2 fs/nilfs2/gcinode.c | 2 fs/nilfs2/ifile.c | 2 fs/nilfs2/ifile.h | 2 fs/nilfs2/inode.c | 2 fs/nilfs2/ioctl.c | 2 fs/nilfs2/mdt.c | 2 fs/nilfs2/mdt.h | 2 fs/nilfs2/namei.c | 2 fs/nilfs2/nilfs.h | 2 fs/nilfs2/page.c | 2 fs/nilfs2/page.h | 2 fs/nilfs2/recovery.c | 2 fs/nilfs2/segbuf.c | 2 fs/nilfs2/segbuf.h | 2 fs/nilfs2/segment.c | 2 fs/nilfs2/segment.h | 2 fs/nilfs2/sufile.c | 2 fs/nilfs2/sufile.h | 2 fs/nilfs2/super.c | 2 fs/nilfs2/sysfs.c | 78 ++-- fs/nilfs2/sysfs.h | 2 fs/nilfs2/the_nilfs.c | 2 fs/nilfs2/the_nilfs.h | 2 fs/proc/base.c | 21 - fs/proc/vmcore.c | 109 ++++-- fs/ramfs/inode.c | 11 fs/seq_file.c | 16 fs/sysv/super.c | 6 include/asm-generic/sections.h | 75 +++- include/kunit/test.h | 13 include/linux/bottom_half.h | 3 include/linux/container_of.h | 52 ++- include/linux/crash_dump.h | 30 + include/linux/delay.h | 2 include/linux/fs.h | 1 include/linux/fwnode.h | 1 include/linux/generic-radix-tree.h | 3 include/linux/hugetlb.h | 6 include/linux/instruction_pointer.h | 8 include/linux/kallsyms.h | 21 - include/linux/kernel.h | 39 -- include/linux/list.h | 4 include/linux/llist.h | 4 include/linux/pagemap.h | 50 ++ include/linux/plist.h | 5 include/linux/radix-tree.h | 4 include/linux/rwsem.h | 1 include/linux/sbitmap.h | 11 include/linux/seq_file.h | 19 + include/linux/signal.h | 1 include/linux/smp.h | 1 include/linux/spinlock.h | 1 include/linux/stackdepot.h | 5 include/linux/string_helpers.h | 1 include/media/media-entity.h | 3 init/main.c | 4 ipc/ipc_sysctl.c | 42 +- ipc/shm.c | 8 kernel/extable.c | 33 - kernel/fork.c | 9 kernel/kcov.c | 40 +- kernel/locking/lockdep.c | 3 kernel/resource.c | 54 ++- kernel/trace/ftrace.c | 2 lib/scatterlist.c | 11 lib/stackdepot.c | 46 ++ lib/vsprintf.c | 3 mm/Kconfig | 7 mm/filemap.c | 8 mm/kasan/report.c | 17 - mm/memfd.c | 4 mm/mmap.c | 3 mm/page_owner.c | 18 - mm/truncate.c | 19 + mm/vmscan.c | 7 mm/workingset.c | 10 net/sysctl_net.c | 2 scripts/checkpatch.pl | 33 + scripts/const_structs.checkpatch | 4 scripts/gdb/linux/symbols.py | 3 tools/testing/selftests/kselftest/runner.sh | 28 + tools/testing/selftests/proc/.gitignore | 1 tools/testing/selftests/proc/Makefile | 2 tools/testing/selftests/proc/proc-tid0.c | 81 ++++ 132 files changed, 1206 insertions(+), 681 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-11-05 20:34 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-11-05 20:34 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 262 patches, based on 8bb7eca972ad531c9b149c0a51ab43a417385813 Subsystems affected by this patch series: scripts ocfs2 vfs mm/slab-generic mm/slab mm/slub mm/kconfig mm/dax mm/kasan mm/debug mm/pagecache mm/gup mm/swap mm/memcg mm/pagemap mm/mprotect mm/mremap mm/iomap mm/tracing mm/vmalloc mm/pagealloc mm/memory-failure mm/hugetlb mm/userfaultfd mm/vmscan mm/tools mm/memblock mm/oom-kill mm/hugetlbfs mm/migration mm/thp mm/readahead mm/nommu mm/ksm mm/vmstat mm/madvise mm/memory-hotplug mm/rmap mm/zsmalloc mm/highmem mm/zram mm/cleanups mm/kfence mm/damon Subsystem: scripts Colin Ian King <colin.king@canonical.com>: scripts/spelling.txt: add more spellings to spelling.txt Sven Eckelmann <sven@narfation.org>: scripts/spelling.txt: fix "mistake" version of "synchronization" weidonghui <weidonghui@allwinnertech.com>: scripts/decodecode: fix faulting instruction no print when opps.file is DOS format Subsystem: ocfs2 Chenyuan Mi <cymi20@fudan.edu.cn>: ocfs2: fix handle refcount leak in two exception handling paths Valentin Vidic <vvidic@valentin-vidic.from.hr>: ocfs2: cleanup journal init and shutdown Colin Ian King <colin.king@canonical.com>: ocfs2/dlm: remove redundant assignment of variable ret Jan Kara <jack@suse.cz>: Patch series "ocfs2: Truncate data corruption fix": ocfs2: fix data corruption on truncate ocfs2: do not zero pages beyond i_size Subsystem: vfs Arnd Bergmann <arnd@arndb.de>: fs/posix_acl.c: avoid -Wempty-body warning Jia He <justin.he@arm.com>: d_path: fix Kernel doc validator complaining Subsystem: mm/slab-generic "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm: move kvmalloc-related functions to slab.h Subsystem: mm/slab Shi Lei <shi_lei@massclouds.com>: mm/slab.c: remove useless lines in enable_cpucache() Subsystem: mm/slub Kefeng Wang <wangkefeng.wang@huawei.com>: slub: add back check for free nonslab objects Vlastimil Babka <vbabka@suse.cz>: mm, slub: change percpu partial accounting from objects to pages mm/slub: increase default cpu partial list sizes Hyeonggon Yoo <42.hyeyoo@gmail.com>: mm, slub: use prefetchw instead of prefetch Subsystem: mm/kconfig Sebastian Andrzej Siewior <bigeasy@linutronix.de>: mm: disable NUMA_BALANCING_DEFAULT_ENABLED and TRANSPARENT_HUGEPAGE on PREEMPT_RT Subsystem: mm/dax Christoph Hellwig <hch@lst.de>: mm: don't include <linux/dax.h> in <linux/mempolicy.h> Subsystem: mm/kasan Marco Elver <elver@google.com>: Patch series "stackdepot, kasan, workqueue: Avoid expanding stackdepot slabs when holding raw_spin_lock", v2: lib/stackdepot: include gfp.h lib/stackdepot: remove unused function argument lib/stackdepot: introduce __stack_depot_save() kasan: common: provide can_alloc in kasan_save_stack() kasan: generic: introduce kasan_record_aux_stack_noalloc() workqueue, kasan: avoid alloc_pages() when recording stack "Matthew Wilcox (Oracle)" <willy@infradead.org>: kasan: fix tag for large allocations when using CONFIG_SLAB Peter Collingbourne <pcc@google.com>: kasan: test: add memcpy test that avoids out-of-bounds write Subsystem: mm/debug Peter Xu <peterx@redhat.com>: Patch series "mm/smaps: Fixes and optimizations on shmem swap handling": mm/smaps: fix shmem pte hole swap calculation mm/smaps: use vma->vm_pgoff directly when counting partial swap mm/smaps: simplify shmem handling of pte holes Guo Ren <guoren@linux.alibaba.com>: mm: debug_vm_pgtable: don't use __P000 directly Kees Cook <keescook@chromium.org>: kasan: test: bypass __alloc_size checks Patch series "Add __alloc_size()", v3: rapidio: avoid bogus __alloc_size warning Compiler Attributes: add __alloc_size() for better bounds checking slab: clean up function prototypes slab: add __alloc_size attributes for better bounds checking mm/kvmalloc: add __alloc_size attributes for better bounds checking mm/vmalloc: add __alloc_size attributes for better bounds checking mm/page_alloc: add __alloc_size attributes for better bounds checking percpu: add __alloc_size attributes for better bounds checking Yinan Zhang <zhangyinan2019@email.szu.edu.cn>: mm/page_ext.c: fix a comment Subsystem: mm/pagecache David Howells <dhowells@redhat.com>: mm: stop filemap_read() from grabbing a superfluous page Christoph Hellwig <hch@lst.de>: Patch series "simplify bdi unregistation": mm: export bdi_unregister mtd: call bdi_unregister explicitly fs: explicitly unregister per-superblock BDIs mm: don't automatically unregister bdis mm: simplify bdi refcounting Jens Axboe <axboe@kernel.dk>: mm: don't read i_size of inode unless we need it "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm/filemap.c: remove bogus VM_BUG_ON Jens Axboe <axboe@kernel.dk>: mm: move more expensive part of XA setup out of mapping check Subsystem: mm/gup John Hubbard <jhubbard@nvidia.com>: mm/gup: further simplify __gup_device_huge() Subsystem: mm/swap Xu Wang <vulab@iscas.ac.cn>: mm/swapfile: remove needless request_queue NULL pointer check Rafael Aquini <aquini@redhat.com>: mm/swapfile: fix an integer overflow in swap_show() "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm: optimise put_pages_list() Subsystem: mm/memcg Peter Xu <peterx@redhat.com>: mm/memcg: drop swp_entry_t* in mc_handle_file_pte() Shakeel Butt <shakeelb@google.com>: memcg: flush stats only if updated memcg: unify memcg stat flushing Waiman Long <longman@redhat.com>: mm/memcg: remove obsolete memcg_free_kmem() Len Baker <len.baker@gmx.com>: mm/list_lru.c: prefer struct_size over open coded arithmetic Shakeel Butt <shakeelb@google.com>: memcg, kmem: further deprecate kmem.limit_in_bytes Muchun Song <songmuchun@bytedance.com>: mm: list_lru: remove holding lru lock mm: list_lru: fix the return value of list_lru_count_one() mm: memcontrol: remove kmemcg_id reparenting mm: memcontrol: remove the kmem states mm: list_lru: only add memcg-aware lrus to the global lru list Vasily Averin <vvs@virtuozzo.com>: Patch series "memcg: prohibit unconditional exceeding the limit of dying tasks", v3: mm, oom: pagefault_out_of_memory: don't force global OOM for dying tasks Michal Hocko <mhocko@suse.com>: mm, oom: do not trigger out_of_memory from the #PF Vasily Averin <vvs@virtuozzo.com>: memcg: prohibit unconditional exceeding the limit of dying tasks Subsystem: mm/pagemap Peng Liu <liupeng256@huawei.com>: mm/mmap.c: fix a data race of mm->total_vm Rolf Eike Beer <eb@emlix.com>: mm: use __pfn_to_section() instead of open coding it Amit Daniel Kachhap <amit.kachhap@arm.com>: mm/memory.c: avoid unnecessary kernel/user pointer conversion Nadav Amit <namit@vmware.com>: mm/memory.c: use correct VMA flags when freeing page-tables Peter Xu <peterx@redhat.com>: Patch series "mm: A few cleanup patches around zap, shmem and uffd", v4: mm/shmem: unconditionally set pte dirty in mfill_atomic_install_pte mm: clear vmf->pte after pte_unmap_same() returns mm: drop first_index/last_index in zap_details mm: add zap_skip_check_mapping() helper Qi Zheng <zhengqi.arch@bytedance.com>: Patch series "Do some code cleanups related to mm", v3: mm: introduce pmd_install() helper mm: remove redundant smp_wmb() Tiberiu A Georgescu <tiberiu.georgescu@nutanix.com>: Documentation: update pagemap with shmem exceptions Nicholas Piggin <npiggin@gmail.com>: Patch series "shoot lazy tlbs", v4: lazy tlb: introduce lazy mm refcount helper functions lazy tlb: allow lazy tlb mm refcounting to be configurable lazy tlb: shoot lazies, a non-refcounting lazy tlb option powerpc/64s: enable MMU_LAZY_TLB_SHOOTDOWN Lukas Bulwahn <lukas.bulwahn@gmail.com>: memory: remove unused CONFIG_MEM_BLOCK_SIZE Subsystem: mm/mprotect Liu Song <liu.song11@zte.com.cn>: mm/mprotect.c: avoid repeated assignment in do_mprotect_pkey() Subsystem: mm/mremap Dmitry Safonov <dima@arista.com>: mm/mremap: don't account pages in vma_to_resize() Subsystem: mm/iomap Lucas De Marchi <lucas.demarchi@intel.com>: include/linux/io-mapping.h: remove fallback for writecombine Subsystem: mm/tracing Gang Li <ligang.bdlg@bytedance.com>: mm: mmap_lock: remove redundant newline in TP_printk mm: mmap_lock: use DECLARE_EVENT_CLASS and DEFINE_EVENT_FN Subsystem: mm/vmalloc Vasily Averin <vvs@virtuozzo.com>: mm/vmalloc: repair warn_alloc()s in __vmalloc_area_node() Peter Zijlstra <peterz@infradead.org>: mm/vmalloc: don't allow VM_NO_GUARD on vmap() Eric Dumazet <edumazet@google.com>: mm/vmalloc: make show_numa_info() aware of hugepage mappings mm/vmalloc: make sure to dump unpurged areas in /proc/vmallocinfo "Uladzislau Rezki (Sony)" <urezki@gmail.com>: mm/vmalloc: do not adjust the search size for alignment overhead mm/vmalloc: check various alignments when debugging Vasily Averin <vvs@virtuozzo.com>: vmalloc: back off when the current task is OOM-killed Kefeng Wang <wangkefeng.wang@huawei.com>: vmalloc: choose a better start address in vm_area_register_early() arm64: support page mapping percpu first chunk allocator kasan: arm64: fix pcpu_page_first_chunk crash with KASAN_VMALLOC Michal Hocko <mhocko@suse.com>: mm/vmalloc: be more explicit about supported gfp flags Chen Wandun <chenwandun@huawei.com>: mm/vmalloc: introduce alloc_pages_bulk_array_mempolicy to accelerate memory allocation Changcheng Deng <deng.changcheng@zte.com.cn>: lib/test_vmalloc.c: use swap() to make code cleaner Subsystem: mm/pagealloc Eric Dumazet <edumazet@google.com>: mm/large system hash: avoid possible NULL deref in alloc_large_system_hash Miaohe Lin <linmiaohe@huawei.com>: Patch series "Cleanups and fixup for page_alloc", v2: mm/page_alloc.c: remove meaningless VM_BUG_ON() in pindex_to_order() mm/page_alloc.c: simplify the code by using macro K() mm/page_alloc.c: fix obsolete comment in free_pcppages_bulk() mm/page_alloc.c: use helper function zone_spans_pfn() mm/page_alloc.c: avoid allocating highmem pages via alloc_pages_exact[_nid] Bharata B Rao <bharata@amd.com>: Patch series "Fix NUMA nodes fallback list ordering": mm/page_alloc: print node fallback order Krupa Ramakrishnan <krupa.ramakrishnan@amd.com>: mm/page_alloc: use accumulated load when building node fallback list Geert Uytterhoeven <geert+renesas@glider.be>: Patch series "Fix NUMA without SMP": mm: move node_reclaim_distance to fix NUMA without SMP mm: move fold_vm_numa_events() to fix NUMA without SMP Eric Dumazet <edumazet@google.com>: mm/page_alloc.c: do not acquire zone lock in is_free_buddy_page() Feng Tang <feng.tang@intel.com>: mm/page_alloc: detect allocation forbidden by cpuset and bail out early Liangcai Fan <liangcaifan19@gmail.com>: mm/page_alloc.c: show watermark_boost of zone in zoneinfo Christophe Leroy <christophe.leroy@csgroup.eu>: mm: create a new system state and fix core_kernel_text() mm: make generic arch_is_kernel_initmem_freed() do what it says powerpc: use generic version of arch_is_kernel_initmem_freed() s390: use generic version of arch_is_kernel_initmem_freed() Sebastian Andrzej Siewior <bigeasy@linutronix.de>: mm: page_alloc: use migrate_disable() in drain_local_pages_wq() Wang ShaoBo <bobo.shaobowang@huawei.com>: mm/page_alloc: use clamp() to simplify code Subsystem: mm/memory-failure Marco Elver <elver@google.com>: mm: fix data race in PagePoisoned() Rikard Falkeborn <rikard.falkeborn@gmail.com>: mm/memory_failure: constify static mm_walk_ops Yang Shi <shy828301@gmail.com>: Patch series "Solve silent data loss caused by poisoned page cache (shmem/tmpfs)", v5: mm: filemap: coding style cleanup for filemap_map_pmd() mm: hwpoison: refactor refcount check handling mm: shmem: don't truncate page if memory failure happens mm: hwpoison: handle non-anonymous THP correctly Subsystem: mm/hugetlb Peter Xu <peterx@redhat.com>: mm/hugetlb: drop __unmap_hugepage_range definition from hugetlb.h Mike Kravetz <mike.kravetz@oracle.com>: Patch series "hugetlb: add demote/split page functionality", v4: hugetlb: add demote hugetlb page sysfs interfaces mm/cma: add cma_pages_valid to determine if pages are in CMA hugetlb: be sure to free demoted CMA pages to CMA hugetlb: add demote bool to gigantic page routines hugetlb: add hugetlb demote page support Liangcai Fan <liangcaifan19@gmail.com>: mm: khugepaged: recalculate min_free_kbytes after stopping khugepaged Mina Almasry <almasrymina@google.com>: mm, hugepages: add mremap() support for hugepage backed vma mm, hugepages: add hugetlb vma mremap() test Baolin Wang <baolin.wang@linux.alibaba.com>: hugetlb: support node specified when using cma for gigantic hugepages Ran Jianping <ran.jianping@zte.com.cn>: mm: remove duplicate include in hugepage-mremap.c Baolin Wang <baolin.wang@linux.alibaba.com>: Patch series "Some cleanups and improvements for hugetlb": hugetlb_cgroup: remove unused hugetlb_cgroup_from_counter macro hugetlb: replace the obsolete hugetlb_instantiation_mutex in the comments hugetlb: remove redundant validation in has_same_uncharge_info() hugetlb: remove redundant VM_BUG_ON() in add_reservation_in_range() Mike Kravetz <mike.kravetz@oracle.com>: hugetlb: remove unnecessary set_page_count in prep_compound_gigantic_page Subsystem: mm/userfaultfd Axel Rasmussen <axelrasmussen@google.com>: Patch series "Small userfaultfd selftest fixups", v2: userfaultfd/selftests: don't rely on GNU extensions for random numbers userfaultfd/selftests: fix feature support detection userfaultfd/selftests: fix calculation of expected ioctls Subsystem: mm/vmscan Miaohe Lin <linmiaohe@huawei.com>: mm/page_isolation: fix potential missing call to unset_migratetype_isolate() mm/page_isolation: guard against possible putback unisolated page Kai Song <songkai01@inspur.com>: mm/vmscan.c: fix -Wunused-but-set-variable warning Mel Gorman <mgorman@techsingularity.net>: Patch series "Remove dependency on congestion_wait in mm/", v5. Patch series: mm/vmscan: throttle reclaim until some writeback completes if congested mm/vmscan: throttle reclaim and compaction when too may pages are isolated mm/vmscan: throttle reclaim when no progress is being made mm/writeback: throttle based on page writeback instead of congestion mm/page_alloc: remove the throttling logic from the page allocator mm/vmscan: centralise timeout values for reclaim_throttle mm/vmscan: increase the timeout if page reclaim is not making progress mm/vmscan: delay waking of tasks throttled on NOPROGRESS Yuanzheng Song <songyuanzheng@huawei.com>: mm/vmpressure: fix data-race with memcg->socket_pressure Subsystem: mm/tools Zhenliang Wei <weizhenliang@huawei.com>: tools/vm/page_owner_sort.c: count and sort by mem Naoya Horiguchi <naoya.horiguchi@nec.com>: Patch series "tools/vm/page-types.c: a few improvements": tools/vm/page-types.c: make walk_file() aware of address range option tools/vm/page-types.c: move show_file() to summary output tools/vm/page-types.c: print file offset in hexadecimal Subsystem: mm/memblock Mike Rapoport <rppt@linux.ibm.com>: Patch series "memblock: cleanup memblock_free interface", v2: arch_numa: simplify numa_distance allocation xen/x86: free_p2m_page: use memblock_free_ptr() to free a virtual pointer memblock: drop memblock_free_early_nid() and memblock_free_early() memblock: stop aliasing __memblock_free_late with memblock_free_late memblock: rename memblock_free to memblock_phys_free memblock: use memblock_free for freeing virtual pointers Subsystem: mm/oom-kill Sultan Alsawaf <sultan@kerneltoast.com>: mm: mark the OOM reaper thread as freezable Subsystem: mm/hugetlbfs Zhenguo Yao <yaozhenguo1@gmail.com>: hugetlbfs: extend the definition of hugepages parameter to support node allocation Subsystem: mm/migration John Hubbard <jhubbard@nvidia.com>: mm/migrate: de-duplicate migrate_reason strings Yang Shi <shy828301@gmail.com>: mm: migrate: make demotion knob depend on migration Subsystem: mm/thp "George G. Davis" <davis.george@siemens.com>: selftests/vm/transhuge-stress: fix ram size thinko Rongwei Wang <rongwei.wang@linux.alibaba.com>: Patch series "fix two bugs for file THP": mm, thp: lock filemap when truncating page cache mm, thp: fix incorrect unmap behavior for private pages Subsystem: mm/readahead Lin Feng <linf@wangsu.com>: mm/readahead.c: fix incorrect comments for get_init_ra_size Subsystem: mm/nommu Kefeng Wang <wangkefeng.wang@huawei.com>: mm: nommu: kill arch_get_unmapped_area() Subsystem: mm/ksm "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>: selftest/vm: fix ksm selftest to run with different NUMA topologies Pedro Demarchi Gomes <pedrodemargomes@gmail.com>: selftests: vm: add KSM huge pages merging time test Subsystem: mm/vmstat Liu Shixin <liushixin2@huawei.com>: mm/vmstat: annotate data race for zone->free_area[order].nr_free Lin Feng <linf@wangsu.com>: mm: vmstat.c: make extfrag_index show more pretty Subsystem: mm/madvise David Hildenbrand <david@redhat.com>: selftests/vm: make MADV_POPULATE_(READ|WRITE) use in-tree headers Subsystem: mm/memory-hotplug Tang Yizhou <tangyizhou@huawei.com>: mm/memory_hotplug: add static qualifier for online_policy_to_str() David Hildenbrand <david@redhat.com>: Patch series "memory-hotplug.rst: document the "auto-movable" online policy": memory-hotplug.rst: fix two instances of "movablecore" that should be "movable_node" memory-hotplug.rst: fix wrong /sys/module/memory_hotplug/parameters/ path memory-hotplug.rst: document the "auto-movable" online policy Patch series "mm/memory_hotplug: Kconfig and 32 bit cleanups": mm/memory_hotplug: remove CONFIG_X86_64_ACPI_NUMA dependency from CONFIG_MEMORY_HOTPLUG mm/memory_hotplug: remove CONFIG_MEMORY_HOTPLUG_SPARSE mm/memory_hotplug: restrict CONFIG_MEMORY_HOTPLUG to 64 bit mm/memory_hotplug: remove HIGHMEM leftovers mm/memory_hotplug: remove stale function declarations x86: remove memory hotplug support on X86_32 Patch series "mm/memory_hotplug: full support for add_memory_driver_managed() with CONFIG_ARCH_KEEP_MEMBLOCK", v2: mm/memory_hotplug: handle memblock_add_node() failures in add_memory_resource() memblock: improve MEMBLOCK_HOTPLUG documentation memblock: allow to specify flags with memblock_add_node() memblock: add MEMBLOCK_DRIVER_MANAGED to mimic IORESOURCE_SYSRAM_DRIVER_MANAGED mm/memory_hotplug: indicate MEMBLOCK_DRIVER_MANAGED with IORESOURCE_SYSRAM_DRIVER_MANAGED Subsystem: mm/rmap Alistair Popple <apopple@nvidia.com>: mm/rmap.c: avoid double faults migrating device private pages Subsystem: mm/zsmalloc Miaohe Lin <linmiaohe@huawei.com>: mm/zsmalloc.c: close race window between zs_pool_dec_isolated() and zs_unregister_migration() Subsystem: mm/highmem Ira Weiny <ira.weiny@intel.com>: mm/highmem: remove deprecated kmap_atomic Subsystem: mm/zram Jaewon Kim <jaewon31.kim@samsung.com>: zram_drv: allow reclaim on bio_alloc Dan Carpenter <dan.carpenter@oracle.com>: zram: off by one in read_block_state() Brian Geffon <bgeffon@google.com>: zram: introduce an aged idle interface Subsystem: mm/cleanups Stephen Kitt <steve@sk2.org>: mm: remove HARDENED_USERCOPY_FALLBACK Mianhan Liu <liumh1@shanghaitech.edu.cn>: include/linux/mm.h: move nr_free_buffer_pages from swap.h to mm.h Subsystem: mm/kfence Marco Elver <elver@google.com>: stacktrace: move filter_irq_stacks() to kernel/stacktrace.c kfence: count unexpectedly skipped allocations kfence: move saving stack trace of allocations into __kfence_alloc() kfence: limit currently covered allocations when pool nearly full kfence: add note to documentation about skipping covered allocations kfence: test: use kunit_skip() to skip tests kfence: shorten critical sections of alloc/free kfence: always use static branches to guard kfence_alloc() kfence: default to dynamic branch instead of static keys mode Subsystem: mm/damon Geert Uytterhoeven <geert@linux-m68k.org>: mm/damon: grammar s/works/work/ SeongJae Park <sjpark@amazon.de>: Documentation/vm: move user guides to admin-guide/mm/ SeongJae Park <sj@kernel.org>: MAINTAINERS: update SeongJae's email address SeongJae Park <sjpark@amazon.de>: docs/vm/damon: remove broken reference include/linux/damon.h: fix kernel-doc comments for 'damon_callback' SeongJae Park <sj@kernel.org>: mm/damon/core: print kdamond start log in debug mode only Changbin Du <changbin.du@gmail.com>: mm/damon: remove unnecessary do_exit() from kdamond mm/damon: needn't hold kdamond_lock to print pid of kdamond Colin Ian King <colin.king@canonical.com>: mm/damon/core: nullify pointer ctx->kdamond with a NULL SeongJae Park <sj@kernel.org>: Patch series "Implement Data Access Monitoring-based Memory Operation Schemes": mm/damon/core: account age of target regions mm/damon/core: implement DAMON-based Operation Schemes (DAMOS) mm/damon/vaddr: support DAMON-based Operation Schemes mm/damon/dbgfs: support DAMON-based Operation Schemes mm/damon/schemes: implement statistics feature selftests/damon: add 'schemes' debugfs tests Docs/admin-guide/mm/damon: document DAMON-based Operation Schemes Patch series "DAMON: Support Physical Memory Address Space Monitoring:: mm/damon/dbgfs: allow users to set initial monitoring target regions mm/damon/dbgfs-test: add a unit test case for 'init_regions' Docs/admin-guide/mm/damon: document 'init_regions' feature mm/damon/vaddr: separate commonly usable functions mm/damon: implement primitives for physical address space monitoring mm/damon/dbgfs: support physical memory monitoring Docs/DAMON: document physical memory monitoring support Rikard Falkeborn <rikard.falkeborn@gmail.com>: mm/damon/vaddr: constify static mm_walk_ops Rongwei Wang <rongwei.wang@linux.alibaba.com>: mm/damon/dbgfs: remove unnecessary variables SeongJae Park <sj@kernel.org>: mm/damon/paddr: support the pageout scheme mm/damon/schemes: implement size quota for schemes application speed control mm/damon/schemes: skip already charged targets and regions mm/damon/schemes: implement time quota mm/damon/dbgfs: support quotas of schemes mm/damon/selftests: support schemes quotas mm/damon/schemes: prioritize regions within the quotas mm/damon/vaddr,paddr: support pageout prioritization mm/damon/dbgfs: support prioritization weights tools/selftests/damon: update for regions prioritization of schemes mm/damon/schemes: activate schemes based on a watermarks mechanism mm/damon/dbgfs: support watermarks selftests/damon: support watermarks mm/damon: introduce DAMON-based Reclamation (DAMON_RECLAIM) Documentation/admin-guide/mm/damon: add a document for DAMON_RECLAIM Xin Hao <xhao@linux.alibaba.com>: Patch series "mm/damon: Fix some small bugs", v4: mm/damon: remove unnecessary variable initialization mm/damon/dbgfs: add adaptive_targets list check before enable monitor_on SeongJae Park <sj@kernel.org>: Patch series "Fix trivial nits in Documentation/admin-guide/mm": Docs/admin-guide/mm/damon/start: fix wrong example commands Docs/admin-guide/mm/damon/start: fix a wrong link Docs/admin-guide/mm/damon/start: simplify the content Docs/admin-guide/mm/pagemap: wordsmith page flags descriptions Changbin Du <changbin.du@gmail.com>: mm/damon: simplify stop mechanism Colin Ian King <colin.i.king@googlemail.com>: mm/damon: fix a few spelling mistakes in comments and a pr_debug message Changbin Du <changbin.du@gmail.com>: mm/damon: remove return value from before_terminate callback a/Documentation/admin-guide/blockdev/zram.rst | 8 a/Documentation/admin-guide/cgroup-v1/memory.rst | 11 a/Documentation/admin-guide/kernel-parameters.txt | 14 a/Documentation/admin-guide/mm/damon/index.rst | 1 a/Documentation/admin-guide/mm/damon/reclaim.rst | 235 +++ a/Documentation/admin-guide/mm/damon/start.rst | 140 + a/Documentation/admin-guide/mm/damon/usage.rst | 117 + a/Documentation/admin-guide/mm/hugetlbpage.rst | 42 a/Documentation/admin-guide/mm/memory-hotplug.rst | 147 +- a/Documentation/admin-guide/mm/pagemap.rst | 75 - a/Documentation/core-api/memory-hotplug.rst | 3 a/Documentation/dev-tools/kfence.rst | 23 a/Documentation/translations/zh_CN/core-api/memory-hotplug.rst | 4 a/Documentation/vm/damon/design.rst | 29 a/Documentation/vm/damon/faq.rst | 5 a/Documentation/vm/damon/index.rst | 1 a/Documentation/vm/page_owner.rst | 23 a/MAINTAINERS | 2 a/Makefile | 15 a/arch/Kconfig | 28 a/arch/alpha/kernel/core_irongate.c | 6 a/arch/arc/mm/init.c | 6 a/arch/arm/mach-hisi/platmcpm.c | 2 a/arch/arm/mach-rpc/ecard.c | 2 a/arch/arm/mm/init.c | 2 a/arch/arm64/Kconfig | 4 a/arch/arm64/mm/kasan_init.c | 16 a/arch/arm64/mm/mmu.c | 4 a/arch/ia64/mm/contig.c | 2 a/arch/ia64/mm/init.c | 2 a/arch/m68k/mm/mcfmmu.c | 3 a/arch/m68k/mm/motorola.c | 6 a/arch/mips/loongson64/init.c | 4 a/arch/mips/mm/init.c | 6 a/arch/mips/sgi-ip27/ip27-memory.c | 3 a/arch/mips/sgi-ip30/ip30-setup.c | 6 a/arch/powerpc/Kconfig | 1 a/arch/powerpc/configs/skiroot_defconfig | 1 a/arch/powerpc/include/asm/machdep.h | 2 a/arch/powerpc/include/asm/sections.h | 13 a/arch/powerpc/kernel/dt_cpu_ftrs.c | 8 a/arch/powerpc/kernel/paca.c | 8 a/arch/powerpc/kernel/setup-common.c | 4 a/arch/powerpc/kernel/setup_64.c | 6 a/arch/powerpc/kernel/smp.c | 2 a/arch/powerpc/mm/book3s64/radix_tlb.c | 4 a/arch/powerpc/mm/hugetlbpage.c | 9 a/arch/powerpc/platforms/powernv/pci-ioda.c | 4 a/arch/powerpc/platforms/powernv/setup.c | 4 a/arch/powerpc/platforms/pseries/setup.c | 2 a/arch/powerpc/platforms/pseries/svm.c | 9 a/arch/riscv/kernel/setup.c | 10 a/arch/s390/include/asm/sections.h | 12 a/arch/s390/kernel/setup.c | 11 a/arch/s390/kernel/smp.c | 6 a/arch/s390/kernel/uv.c | 2 a/arch/s390/mm/init.c | 3 a/arch/s390/mm/kasan_init.c | 2 a/arch/sh/boards/mach-ap325rxa/setup.c | 2 a/arch/sh/boards/mach-ecovec24/setup.c | 4 a/arch/sh/boards/mach-kfr2r09/setup.c | 2 a/arch/sh/boards/mach-migor/setup.c | 2 a/arch/sh/boards/mach-se/7724/setup.c | 4 a/arch/sparc/kernel/smp_64.c | 4 a/arch/um/kernel/mem.c | 4 a/arch/x86/Kconfig | 6 a/arch/x86/kernel/setup.c | 4 a/arch/x86/kernel/setup_percpu.c | 2 a/arch/x86/mm/init.c | 2 a/arch/x86/mm/init_32.c | 31 a/arch/x86/mm/kasan_init_64.c | 4 a/arch/x86/mm/numa.c | 2 a/arch/x86/mm/numa_emulation.c | 2 a/arch/x86/xen/mmu_pv.c | 8 a/arch/x86/xen/p2m.c | 4 a/arch/x86/xen/setup.c | 6 a/drivers/base/Makefile | 2 a/drivers/base/arch_numa.c | 96 + a/drivers/base/node.c | 9 a/drivers/block/zram/zram_drv.c | 66 a/drivers/firmware/efi/memmap.c | 2 a/drivers/hwmon/occ/p9_sbe.c | 1 a/drivers/macintosh/smu.c | 2 a/drivers/mmc/core/mmc_test.c | 1 a/drivers/mtd/mtdcore.c | 1 a/drivers/of/kexec.c | 4 a/drivers/of/of_reserved_mem.c | 5 a/drivers/rapidio/devices/rio_mport_cdev.c | 9 a/drivers/s390/char/sclp_early.c | 4 a/drivers/usb/early/xhci-dbc.c | 10 a/drivers/virtio/Kconfig | 2 a/drivers/xen/swiotlb-xen.c | 4 a/fs/d_path.c | 8 a/fs/exec.c | 4 a/fs/ocfs2/alloc.c | 21 a/fs/ocfs2/dlm/dlmrecovery.c | 1 a/fs/ocfs2/file.c | 8 a/fs/ocfs2/inode.c | 4 a/fs/ocfs2/journal.c | 28 a/fs/ocfs2/journal.h | 3 a/fs/ocfs2/super.c | 40 a/fs/open.c | 16 a/fs/posix_acl.c | 3 a/fs/proc/task_mmu.c | 28 a/fs/super.c | 3 a/include/asm-generic/sections.h | 14 a/include/linux/backing-dev-defs.h | 3 a/include/linux/backing-dev.h | 1 a/include/linux/cma.h | 1 a/include/linux/compiler-gcc.h | 8 a/include/linux/compiler_attributes.h | 10 a/include/linux/compiler_types.h | 12 a/include/linux/cpuset.h | 17 a/include/linux/damon.h | 258 +++ a/include/linux/fs.h | 1 a/include/linux/gfp.h | 8 a/include/linux/highmem.h | 28 a/include/linux/hugetlb.h | 36 a/include/linux/io-mapping.h | 6 a/include/linux/kasan.h | 8 a/include/linux/kernel.h | 1 a/include/linux/kfence.h | 21 a/include/linux/memblock.h | 48 a/include/linux/memcontrol.h | 9 a/include/linux/memory.h | 26 a/include/linux/memory_hotplug.h | 3 a/include/linux/mempolicy.h | 5 a/include/linux/migrate.h | 23 a/include/linux/migrate_mode.h | 13 a/include/linux/mm.h | 57 a/include/linux/mm_types.h | 2 a/include/linux/mmzone.h | 41 a/include/linux/node.h | 4 a/include/linux/page-flags.h | 2 a/include/linux/percpu.h | 6 a/include/linux/sched/mm.h | 25 a/include/linux/slab.h | 181 +- a/include/linux/slub_def.h | 13 a/include/linux/stackdepot.h | 8 a/include/linux/stacktrace.h | 1 a/include/linux/swap.h | 1 a/include/linux/vmalloc.h | 24 a/include/trace/events/mmap_lock.h | 50 a/include/trace/events/vmscan.h | 42 a/include/trace/events/writeback.h | 7 a/init/Kconfig | 2 a/init/initramfs.c | 4 a/init/main.c | 6 a/kernel/cgroup/cpuset.c | 23 a/kernel/cpu.c | 2 a/kernel/dma/swiotlb.c | 6 a/kernel/exit.c | 2 a/kernel/extable.c | 2 a/kernel/fork.c | 51 a/kernel/kexec_file.c | 5 a/kernel/kthread.c | 21 a/kernel/locking/lockdep.c | 15 a/kernel/printk/printk.c | 4 a/kernel/sched/core.c | 37 a/kernel/sched/sched.h | 4 a/kernel/sched/topology.c | 1 a/kernel/stacktrace.c | 30 a/kernel/tsacct.c | 2 a/kernel/workqueue.c | 2 a/lib/Kconfig.debug | 2 a/lib/Kconfig.kfence | 26 a/lib/bootconfig.c | 2 a/lib/cpumask.c | 6 a/lib/stackdepot.c | 76 - a/lib/test_kasan.c | 26 a/lib/test_kasan_module.c | 2 a/lib/test_vmalloc.c | 6 a/mm/Kconfig | 10 a/mm/backing-dev.c | 65 a/mm/cma.c | 26 a/mm/compaction.c | 12 a/mm/damon/Kconfig | 24 a/mm/damon/Makefile | 4 a/mm/damon/core.c | 500 ++++++- a/mm/damon/dbgfs-test.h | 56 a/mm/damon/dbgfs.c | 486 +++++- a/mm/damon/paddr.c | 275 +++ a/mm/damon/prmtv-common.c | 133 + a/mm/damon/prmtv-common.h | 20 a/mm/damon/reclaim.c | 356 ++++ a/mm/damon/vaddr-test.h | 2 a/mm/damon/vaddr.c | 167 +- a/mm/debug.c | 20 a/mm/debug_vm_pgtable.c | 7 a/mm/filemap.c | 78 - a/mm/gup.c | 5 a/mm/highmem.c | 6 a/mm/hugetlb.c | 713 +++++++++- a/mm/hugetlb_cgroup.c | 3 a/mm/internal.h | 26 a/mm/kasan/common.c | 8 a/mm/kasan/generic.c | 16 a/mm/kasan/kasan.h | 2 a/mm/kasan/shadow.c | 5 a/mm/kfence/core.c | 214 ++- a/mm/kfence/kfence.h | 2 a/mm/kfence/kfence_test.c | 14 a/mm/khugepaged.c | 10 a/mm/list_lru.c | 58 a/mm/memblock.c | 35 a/mm/memcontrol.c | 217 +-- a/mm/memory-failure.c | 117 + a/mm/memory.c | 166 +- a/mm/memory_hotplug.c | 57 a/mm/mempolicy.c | 143 +- a/mm/migrate.c | 61 a/mm/mmap.c | 2 a/mm/mprotect.c | 5 a/mm/mremap.c | 86 - a/mm/nommu.c | 6 a/mm/oom_kill.c | 27 a/mm/page-writeback.c | 13 a/mm/page_alloc.c | 119 - a/mm/page_ext.c | 2 a/mm/page_isolation.c | 29 a/mm/percpu.c | 24 a/mm/readahead.c | 2 a/mm/rmap.c | 8 a/mm/shmem.c | 44 a/mm/slab.c | 16 a/mm/slab_common.c | 8 a/mm/slub.c | 117 - a/mm/sparse-vmemmap.c | 2 a/mm/sparse.c | 6 a/mm/swap.c | 23 a/mm/swapfile.c | 6 a/mm/userfaultfd.c | 8 a/mm/vmalloc.c | 107 + a/mm/vmpressure.c | 2 a/mm/vmscan.c | 194 ++ a/mm/vmstat.c | 76 - a/mm/zsmalloc.c | 7 a/net/ipv4/tcp.c | 1 a/net/ipv4/udp.c | 1 a/net/netfilter/ipvs/ip_vs_ctl.c | 1 a/net/openvswitch/meter.c | 1 a/net/sctp/protocol.c | 1 a/scripts/checkpatch.pl | 3 a/scripts/decodecode | 2 a/scripts/spelling.txt | 18 a/security/Kconfig | 14 a/tools/testing/selftests/damon/debugfs_attrs.sh | 25 a/tools/testing/selftests/memory-hotplug/config | 1 a/tools/testing/selftests/vm/.gitignore | 1 a/tools/testing/selftests/vm/Makefile | 1 a/tools/testing/selftests/vm/hugepage-mremap.c | 161 ++ a/tools/testing/selftests/vm/ksm_tests.c | 154 ++ a/tools/testing/selftests/vm/madv_populate.c | 15 a/tools/testing/selftests/vm/run_vmtests.sh | 11 a/tools/testing/selftests/vm/transhuge-stress.c | 2 a/tools/testing/selftests/vm/userfaultfd.c | 157 +- a/tools/vm/page-types.c | 38 a/tools/vm/page_owner_sort.c | 94 + b/Documentation/admin-guide/mm/index.rst | 2 b/Documentation/vm/index.rst | 26 260 files changed, 6448 insertions(+), 2327 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-10-28 21:35 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-10-28 21:35 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 11 patches, based on 411a44c24a561e449b592ff631b7ae321f1eb559. Subsystems affected by this patch series: mm/memcg mm/memory-failure mm/oom-kill ocfs2 mm/secretmem mm/vmalloc mm/hugetlb mm/damon mm/tools Subsystem: mm/memcg Shakeel Butt <shakeelb@google.com>: memcg: page_alloc: skip bulk allocator for __GFP_ACCOUNT Subsystem: mm/memory-failure Yang Shi <shy828301@gmail.com>: mm: hwpoison: remove the unnecessary THP check mm: filemap: check if THP has hwpoisoned subpage for PMD page fault Subsystem: mm/oom-kill Suren Baghdasaryan <surenb@google.com>: mm/oom_kill.c: prevent a race between process_mrelease and exit_mmap Subsystem: ocfs2 Gautham Ananthakrishna <gautham.ananthakrishna@oracle.com>: ocfs2: fix race between searching chunks and release journal_head from buffer_head Subsystem: mm/secretmem Kees Cook <keescook@chromium.org>: mm/secretmem: avoid letting secretmem_users drop to zero Subsystem: mm/vmalloc Chen Wandun <chenwandun@huawei.com>: mm/vmalloc: fix numa spreading for large hash tables Subsystem: mm/hugetlb Rongwei Wang <rongwei.wang@linux.alibaba.com>: mm, thp: bail out early in collapse_file for writeback page Yang Shi <shy828301@gmail.com>: mm: khugepaged: skip huge page collapse for special files Subsystem: mm/damon SeongJae Park <sj@kernel.org>: mm/damon/core-test: fix wrong expectations for 'damon_split_regions_of()' Subsystem: mm/tools David Yang <davidcomponentone@gmail.com>: tools/testing/selftests/vm/split_huge_page_test.c: fix application of sizeof to pointer fs/ocfs2/suballoc.c | 22 ++++++++++------- include/linux/page-flags.h | 23 ++++++++++++++++++ mm/damon/core-test.h | 4 +-- mm/huge_memory.c | 2 + mm/khugepaged.c | 26 +++++++++++++------- mm/memory-failure.c | 28 +++++++++++----------- mm/memory.c | 9 +++++++ mm/oom_kill.c | 23 +++++++++--------- mm/page_alloc.c | 8 +++++- mm/secretmem.c | 2 - mm/vmalloc.c | 15 +++++++---- tools/testing/selftests/vm/split_huge_page_test.c | 2 - 12 files changed, 110 insertions(+), 54 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-10-18 22:14 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-10-18 22:14 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 19 patches, based on 519d81956ee277b4419c723adfb154603c2565ba. Subsystems affected by this patch series: mm/userfaultfd mm/migration ocfs2 mm/memblock mm/mempolicy mm/slub binfmt vfs mm/secretmem mm/thp misc Subsystem: mm/userfaultfd Peter Xu <peterx@redhat.com>: mm/userfaultfd: selftests: fix memory corruption with thp enabled Nadav Amit <namit@vmware.com>: userfaultfd: fix a race between writeprotect and exit_mmap() Subsystem: mm/migration Dave Hansen <dave.hansen@linux.intel.com>: Patch series "mm/migrate: 5.15 fixes for automatic demotion", v2: mm/migrate: optimize hotplug-time demotion order updates mm/migrate: add CPU hotplug to demotion #ifdef Huang Ying <ying.huang@intel.com>: mm/migrate: fix CPUHP state to update node demotion order Subsystem: ocfs2 Jan Kara <jack@suse.cz>: ocfs2: fix data corruption after conversion from inline format Valentin Vidic <vvidic@valentin-vidic.from.hr>: ocfs2: mount fails with buffer overflow in strlen Subsystem: mm/memblock Peng Fan <peng.fan@nxp.com>: memblock: check memory total_size Subsystem: mm/mempolicy Eric Dumazet <edumazet@google.com>: mm/mempolicy: do not allow illegal MPOL_F_NUMA_BALANCING | MPOL_LOCAL in mbind() Subsystem: mm/slub Miaohe Lin <linmiaohe@huawei.com>: Patch series "Fixups for slub": mm, slub: fix two bugs in slab_debug_trace_open() mm, slub: fix mismatch between reconstructed freelist depth and cnt mm, slub: fix potential memoryleak in kmem_cache_open() mm, slub: fix potential use-after-free in slab_debugfs_fops mm, slub: fix incorrect memcg slab count for bulk free Subsystem: binfmt Lukas Bulwahn <lukas.bulwahn@gmail.com>: elfcore: correct reference to CONFIG_UML Subsystem: vfs "Matthew Wilcox (Oracle)" <willy@infradead.org>: vfs: check fd has read access in kernel_read_file_from_fd() Subsystem: mm/secretmem Sean Christopherson <seanjc@google.com>: mm/secretmem: fix NULL page->mapping dereference in page_is_secretmem() Subsystem: mm/thp Marek Szyprowski <m.szyprowski@samsung.com>: mm/thp: decrease nr_thps in file's mapping on THP split Subsystem: misc Andrej Shadura <andrew.shadura@collabora.co.uk>: mailmap: add Andrej Shadura .mailmap | 2 + fs/kernel_read_file.c | 2 - fs/ocfs2/alloc.c | 46 ++++++----------------- fs/ocfs2/super.c | 14 +++++-- fs/userfaultfd.c | 12 ++++-- include/linux/cpuhotplug.h | 4 ++ include/linux/elfcore.h | 2 - include/linux/memory.h | 5 ++ include/linux/secretmem.h | 2 - mm/huge_memory.c | 6 ++- mm/memblock.c | 2 - mm/mempolicy.c | 16 ++------ mm/migrate.c | 62 ++++++++++++++++++------------- mm/page_ext.c | 4 -- mm/slab.c | 4 +- mm/slub.c | 31 ++++++++++++--- tools/testing/selftests/vm/userfaultfd.c | 23 ++++++++++- 17 files changed, 138 insertions(+), 99 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-09-24 22:42 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-09-24 22:42 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 16 patches, based on 7d42e98182586f57f376406d033f05fe135edb75. Subsystems affected by this patch series: mm/memory-failure mm/kasan mm/damon xtensa mm/shmem ocfs2 scripts mm/tools lib mm/pagecache mm/debug sh mm/kasan mm/memory-failure mm/pagemap Subsystem: mm/memory-failure Naoya Horiguchi <naoya.horiguchi@nec.com>: mm, hwpoison: add is_free_buddy_page() in HWPoisonHandlable() Subsystem: mm/kasan Marco Elver <elver@google.com>: kasan: fix Kconfig check of CC_HAS_WORKING_NOSANITIZE_ADDRESS Subsystem: mm/damon Adam Borowski <kilobyte@angband.pl>: mm/damon: don't use strnlen() with known-bogus source length Subsystem: xtensa Guenter Roeck <linux@roeck-us.net>: xtensa: increase size of gcc stack frame check Subsystem: mm/shmem Liu Yuntao <liuyuntao10@huawei.com>: mm/shmem.c: fix judgment error in shmem_is_huge() Subsystem: ocfs2 Wengang Wang <wen.gang.wang@oracle.com>: ocfs2: drop acl cache for directories too Subsystem: scripts Miles Chen <miles.chen@mediatek.com>: scripts/sorttable: riscv: fix undeclared identifier 'EM_RISCV' error Subsystem: mm/tools Changbin Du <changbin.du@gmail.com>: tools/vm/page-types: remove dependency on opt_file for idle page tracking Subsystem: lib Paul Menzel <pmenzel@molgen.mpg.de>: lib/zlib_inflate/inffast: check config in C to avoid unused function warning Subsystem: mm/pagecache Minchan Kim <minchan@kernel.org>: mm: fs: invalidate bh_lrus for only cold path Subsystem: mm/debug Weizhao Ouyang <o451686892@gmail.com>: mm/debug: sync up MR_CONTIG_RANGE and MR_LONGTERM_PIN mm/debug: sync up latest migrate_reason to migrate_reason_names Subsystem: sh Geert Uytterhoeven <geert+renesas@glider.be>: sh: pgtable-3level: fix cast to pointer from integer of different size Subsystem: mm/kasan Nathan Chancellor <nathan@kernel.org>: kasan: always respect CONFIG_KASAN_STACK Subsystem: mm/memory-failure Qi Zheng <zhengqi.arch@bytedance.com>: mm/memory_failure: fix the missing pte_unmap() call Subsystem: mm/pagemap Chen Jun <chenjun102@huawei.com>: mm: fix uninitialized use in overcommit_policy_handler arch/sh/include/asm/pgtable-3level.h | 2 +- fs/buffer.c | 8 ++++++-- fs/ocfs2/dlmglue.c | 3 ++- include/linux/buffer_head.h | 4 ++-- include/linux/migrate.h | 6 +++++- lib/Kconfig.debug | 2 +- lib/Kconfig.kasan | 2 ++ lib/zlib_inflate/inffast.c | 13 ++++++------- mm/damon/dbgfs-test.h | 16 ++++++++-------- mm/debug.c | 4 +++- mm/memory-failure.c | 12 ++++++------ mm/shmem.c | 4 ++-- mm/swap.c | 19 ++++++++++++++++--- mm/util.c | 4 ++-- scripts/Makefile.kasan | 3 ++- scripts/sorttable.c | 4 ++++ tools/vm/page-types.c | 2 +- 17 files changed, 69 insertions(+), 39 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-09-10 3:09 Andrew Morton 2021-09-10 17:11 ` incoming Kees Cook 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2021-09-10 3:09 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits More post linux-next material. 9 patches, based on f154c806676ad7153c6e161f30c53a44855329d6. Subsystems affected by this patch series: mm/slab-generic rapidio mm/debug Subsystem: mm/slab-generic "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm: move kvmalloc-related functions to slab.h Subsystem: rapidio Kees Cook <keescook@chromium.org>: rapidio: avoid bogus __alloc_size warning Subsystem: mm/debug Kees Cook <keescook@chromium.org>: Patch series "Add __alloc_size() for better bounds checking", v2: Compiler Attributes: add __alloc_size() for better bounds checking checkpatch: add __alloc_size() to known $Attribute slab: clean up function declarations slab: add __alloc_size attributes for better bounds checking mm/page_alloc: add __alloc_size attributes for better bounds checking percpu: add __alloc_size attributes for better bounds checking mm/vmalloc: add __alloc_size attributes for better bounds checking Makefile | 15 +++ drivers/of/kexec.c | 1 drivers/rapidio/devices/rio_mport_cdev.c | 9 +- include/linux/compiler_attributes.h | 6 + include/linux/gfp.h | 2 include/linux/mm.h | 34 -------- include/linux/percpu.h | 3 include/linux/slab.h | 122 ++++++++++++++++++++++--------- include/linux/vmalloc.h | 11 ++ scripts/checkpatch.pl | 3 10 files changed, 132 insertions(+), 74 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2021-09-10 3:09 incoming Andrew Morton @ 2021-09-10 17:11 ` Kees Cook 2021-09-10 20:13 ` incoming Kees Cook 0 siblings, 1 reply; 370+ messages in thread From: Kees Cook @ 2021-09-10 17:11 UTC (permalink / raw) To: Linus Torvalds, Andrew Morton; +Cc: linux-mm, mm-commits On Thu, Sep 09, 2021 at 08:09:48PM -0700, Andrew Morton wrote: > > More post linux-next material. > > 9 patches, based on f154c806676ad7153c6e161f30c53a44855329d6. > > Subsystems affected by this patch series: > > mm/slab-generic > rapidio > mm/debug > > Subsystem: mm/slab-generic > > "Matthew Wilcox (Oracle)" <willy@infradead.org>: > mm: move kvmalloc-related functions to slab.h > > Subsystem: rapidio > > Kees Cook <keescook@chromium.org>: > rapidio: avoid bogus __alloc_size warning > > Subsystem: mm/debug > > Kees Cook <keescook@chromium.org>: > Patch series "Add __alloc_size() for better bounds checking", v2: > Compiler Attributes: add __alloc_size() for better bounds checking > checkpatch: add __alloc_size() to known $Attribute > slab: clean up function declarations > slab: add __alloc_size attributes for better bounds checking > mm/page_alloc: add __alloc_size attributes for better bounds checking > percpu: add __alloc_size attributes for better bounds checking > mm/vmalloc: add __alloc_size attributes for better bounds checking Hi, FYI, in overnight build testing I found yet another corner case in GCC's handling of the __alloc_size attribute. It's the gift that keeps on giving. The fix is here: https://lore.kernel.org/lkml/20210910165851.3296624-1-keescook@chromium.org/ > > Makefile | 15 +++ > drivers/of/kexec.c | 1 > drivers/rapidio/devices/rio_mport_cdev.c | 9 +- > include/linux/compiler_attributes.h | 6 + > include/linux/gfp.h | 2 > include/linux/mm.h | 34 -------- > include/linux/percpu.h | 3 > include/linux/slab.h | 122 ++++++++++++++++++++++--------- > include/linux/vmalloc.h | 11 ++ > scripts/checkpatch.pl | 3 > 10 files changed, 132 insertions(+), 74 deletions(-) > -- Kees Cook ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2021-09-10 17:11 ` incoming Kees Cook @ 2021-09-10 20:13 ` Kees Cook 0 siblings, 0 replies; 370+ messages in thread From: Kees Cook @ 2021-09-10 20:13 UTC (permalink / raw) To: linux-kernel; +Cc: Linus Torvalds, Andrew Morton, linux-mm, mm-commits On Fri, Sep 10, 2021 at 10:11:53AM -0700, Kees Cook wrote: > On Thu, Sep 09, 2021 at 08:09:48PM -0700, Andrew Morton wrote: > > > > More post linux-next material. > > > > 9 patches, based on f154c806676ad7153c6e161f30c53a44855329d6. > > > > Subsystems affected by this patch series: > > > > mm/slab-generic > > rapidio > > mm/debug > > > > Subsystem: mm/slab-generic > > > > "Matthew Wilcox (Oracle)" <willy@infradead.org>: > > mm: move kvmalloc-related functions to slab.h > > > > Subsystem: rapidio > > > > Kees Cook <keescook@chromium.org>: > > rapidio: avoid bogus __alloc_size warning > > > > Subsystem: mm/debug > > > > Kees Cook <keescook@chromium.org>: > > Patch series "Add __alloc_size() for better bounds checking", v2: > > Compiler Attributes: add __alloc_size() for better bounds checking > > checkpatch: add __alloc_size() to known $Attribute > > slab: clean up function declarations > > slab: add __alloc_size attributes for better bounds checking > > mm/page_alloc: add __alloc_size attributes for better bounds checking > > percpu: add __alloc_size attributes for better bounds checking > > mm/vmalloc: add __alloc_size attributes for better bounds checking > > Hi, > > FYI, in overnight build testing I found yet another corner case in > GCC's handling of the __alloc_size attribute. It's the gift that keeps > on giving. The fix is here: > > https://lore.kernel.org/lkml/20210910165851.3296624-1-keescook@chromium.org/ I'm so glad it's Friday. Here's the v2 fix... *sigh* https://lore.kernel.org/lkml/20210910201132.3809437-1-keescook@chromium.org/ -Kees > > > > > Makefile | 15 +++ > > drivers/of/kexec.c | 1 > > drivers/rapidio/devices/rio_mport_cdev.c | 9 +- > > include/linux/compiler_attributes.h | 6 + > > include/linux/gfp.h | 2 > > include/linux/mm.h | 34 -------- > > include/linux/percpu.h | 3 > > include/linux/slab.h | 122 ++++++++++++++++++++++--------- > > include/linux/vmalloc.h | 11 ++ > > scripts/checkpatch.pl | 3 > > 10 files changed, 132 insertions(+), 74 deletions(-) > > > > -- > Kees Cook -- Kees Cook ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-09-09 1:08 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-09-09 1:08 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm A bunch of hotfixes, mostly cc:stable. 8 patches, based on 2d338201d5311bcd79d42f66df4cecbcbc5f4f2c. Subsystems affected by this patch series: mm/hmm mm/hugetlb mm/vmscan mm/pagealloc mm/pagemap mm/kmemleak mm/mempolicy mm/memblock Subsystem: mm/hmm Li Zhijian <lizhijian@cn.fujitsu.com>: mm/hmm: bypass devmap pte when all pfn requested flags are fulfilled Subsystem: mm/hugetlb Liu Zixian <liuzixian4@huawei.com>: mm/hugetlb: initialize hugetlb_usage in mm_init Subsystem: mm/vmscan Rik van Riel <riel@surriel.com>: mm,vmscan: fix divide by zero in get_scan_count Subsystem: mm/pagealloc Miaohe Lin <linmiaohe@huawei.com>: mm/page_alloc.c: avoid accessing uninitialized pcp page migratetype Subsystem: mm/pagemap Liam Howlett <liam.howlett@oracle.com>: mmap_lock: change trace and locking order Subsystem: mm/kmemleak Naohiro Aota <naohiro.aota@wdc.com>: mm/kmemleak: allow __GFP_NOLOCKDEP passed to kmemleak's gfp Subsystem: mm/mempolicy yanghui <yanghui.def@bytedance.com>: mm/mempolicy: fix a race between offset_il_node and mpol_rebind_task Subsystem: mm/memblock Mike Rapoport <rppt@linux.ibm.com>: nds32/setup: remove unused memblock_region variable in setup_memory() arch/nds32/kernel/setup.c | 1 - include/linux/hugetlb.h | 9 +++++++++ include/linux/mmap_lock.h | 8 ++++---- kernel/fork.c | 1 + mm/hmm.c | 5 ++++- mm/kmemleak.c | 3 ++- mm/mempolicy.c | 17 +++++++++++++---- mm/page_alloc.c | 4 +++- mm/vmscan.c | 2 +- 9 files changed, 37 insertions(+), 13 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-09-08 22:17 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-09-08 22:17 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits This is the post-linux-next material, so it is based upon latest upstream to catch the now-merged dependencies. 10 patches, based on 2d338201d5311bcd79d42f66df4cecbcbc5f4f2c. Subsystems affected by this patch series: mm/vmstat mm/migration compat Subsystem: mm/vmstat Ingo Molnar <mingo@elte.hu>: mm/vmstat: protect per cpu variables with preempt disable on RT Subsystem: mm/migration Baolin Wang <baolin.wang@linux.alibaba.com>: mm: migrate: introduce a local variable to get the number of pages mm: migrate: fix the incorrect function name in comments mm: migrate: change to use bool type for 'page_was_mapped' Subsystem: compat Arnd Bergmann <arnd@arndb.de>: Patch series "compat: remove compat_alloc_user_space", v5: kexec: move locking into do_kexec_load kexec: avoid compat_alloc_user_space mm: simplify compat_sys_move_pages mm: simplify compat numa syscalls compat: remove some compat entry points arch: remove compat_alloc_user_space arch/arm64/include/asm/compat.h | 5 arch/arm64/include/asm/uaccess.h | 11 - arch/arm64/include/asm/unistd32.h | 10 - arch/arm64/lib/Makefile | 2 arch/arm64/lib/copy_in_user.S | 77 ---------- arch/mips/cavium-octeon/octeon-memcpy.S | 2 arch/mips/include/asm/compat.h | 8 - arch/mips/include/asm/uaccess.h | 26 --- arch/mips/kernel/syscalls/syscall_n32.tbl | 10 - arch/mips/kernel/syscalls/syscall_o32.tbl | 10 - arch/mips/lib/memcpy.S | 11 - arch/parisc/include/asm/compat.h | 6 arch/parisc/include/asm/uaccess.h | 2 arch/parisc/kernel/syscalls/syscall.tbl | 8 - arch/parisc/lib/memcpy.c | 9 - arch/powerpc/include/asm/compat.h | 16 -- arch/powerpc/kernel/syscalls/syscall.tbl | 10 - arch/s390/include/asm/compat.h | 10 - arch/s390/include/asm/uaccess.h | 3 arch/s390/kernel/syscalls/syscall.tbl | 10 - arch/s390/lib/uaccess.c | 63 -------- arch/sparc/include/asm/compat.h | 19 -- arch/sparc/kernel/process_64.c | 2 arch/sparc/kernel/signal32.c | 12 - arch/sparc/kernel/signal_64.c | 8 - arch/sparc/kernel/syscalls/syscall.tbl | 10 - arch/x86/entry/syscalls/syscall_32.tbl | 4 arch/x86/entry/syscalls/syscall_64.tbl | 2 arch/x86/include/asm/compat.h | 13 - arch/x86/include/asm/uaccess_64.h | 7 include/linux/compat.h | 39 +---- include/linux/uaccess.h | 10 - include/uapi/asm-generic/unistd.h | 10 - kernel/compat.c | 21 -- kernel/kexec.c | 105 +++++--------- kernel/sys_ni.c | 5 mm/mempolicy.c | 213 +++++++----------------------- mm/migrate.c | 69 +++++---- mm/vmstat.c | 48 ++++++ 39 files changed, 243 insertions(+), 663 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-09-08 2:52 Andrew Morton 2021-09-08 8:57 ` incoming Vlastimil Babka 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2021-09-08 2:52 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 147 patches, based on 7d2a07b769330c34b4deabeed939325c77a7ec2f. Subsystems affected by this patch series: mm/slub mm/memory-hotplug mm/rmap mm/ioremap mm/highmem mm/cleanups mm/secretmem mm/kfence mm/damon alpha percpu procfs misc core-kernel MAINTAINERS lib bitops checkpatch epoll init nilfs2 coredump fork pids criu kconfig selftests ipc mm/vmscan scripts Subsystem: mm/slub Vlastimil Babka <vbabka@suse.cz>: Patch series "SLUB: reduce irq disabled scope and make it RT compatible", v6: mm, slub: don't call flush_all() from slab_debug_trace_open() mm, slub: allocate private object map for debugfs listings mm, slub: allocate private object map for validate_slab_cache() mm, slub: don't disable irq for debug_check_no_locks_freed() mm, slub: remove redundant unfreeze_partials() from put_cpu_partial() mm, slub: extract get_partial() from new_slab_objects() mm, slub: dissolve new_slab_objects() into ___slab_alloc() mm, slub: return slab page from get_partial() and set c->page afterwards mm, slub: restructure new page checks in ___slab_alloc() mm, slub: simplify kmem_cache_cpu and tid setup mm, slub: move disabling/enabling irqs to ___slab_alloc() mm, slub: do initial checks in ___slab_alloc() with irqs enabled mm, slub: move disabling irqs closer to get_partial() in ___slab_alloc() mm, slub: restore irqs around calling new_slab() mm, slub: validate slab from partial list or page allocator before making it cpu slab mm, slub: check new pages with restored irqs mm, slub: stop disabling irqs around get_partial() mm, slub: move reset of c->page and freelist out of deactivate_slab() mm, slub: make locking in deactivate_slab() irq-safe mm, slub: call deactivate_slab() without disabling irqs mm, slub: move irq control into unfreeze_partials() mm, slub: discard slabs in unfreeze_partials() without irqs disabled mm, slub: detach whole partial list at once in unfreeze_partials() mm, slub: separate detaching of partial list in unfreeze_partials() from unfreezing mm, slub: only disable irq with spin_lock in __unfreeze_partials() mm, slub: don't disable irqs in slub_cpu_dead() mm, slab: split out the cpu offline variant of flush_slab() Sebastian Andrzej Siewior <bigeasy@linutronix.de>: mm: slub: move flush_cpu_slab() invocations __free_slab() invocations out of IRQ context mm: slub: make object_map_lock a raw_spinlock_t Vlastimil Babka <vbabka@suse.cz>: mm, slub: make slab_lock() disable irqs with PREEMPT_RT mm, slub: protect put_cpu_partial() with disabled irqs instead of cmpxchg mm, slub: use migrate_disable() on PREEMPT_RT mm, slub: convert kmem_cpu_slab protection to local_lock Subsystem: mm/memory-hotplug David Hildenbrand <david@redhat.com>: Patch series "memory-hotplug.rst: complete admin-guide overhaul", v3: memory-hotplug.rst: remove locking details from admin-guide memory-hotplug.rst: complete admin-guide overhaul Mike Rapoport <rppt@linux.ibm.com>: Patch series "mm: remove pfn_valid_within() and CONFIG_HOLES_IN_ZONE": mm: remove pfn_valid_within() and CONFIG_HOLES_IN_ZONE mm: memory_hotplug: cleanup after removal of pfn_valid_within() David Hildenbrand <david@redhat.com>: Patch series "mm/memory_hotplug: preparatory patches for new online policy and memory": mm/memory_hotplug: use "unsigned long" for PFN in zone_for_pfn_range() mm/memory_hotplug: remove nid parameter from arch_remove_memory() mm/memory_hotplug: remove nid parameter from remove_memory() and friends ACPI: memhotplug: memory resources cannot be enabled yet Patch series "mm/memory_hotplug: "auto-movable" online policy and memory groups", v3: mm: track present early pages per zone mm/memory_hotplug: introduce "auto-movable" online policy drivers/base/memory: introduce "memory groups" to logically group memory blocks mm/memory_hotplug: track present pages in memory groups ACPI: memhotplug: use a single static memory group for a single memory device dax/kmem: use a single static memory group for a single probed unit virtio-mem: use a single dynamic memory group for a single virtio-mem device mm/memory_hotplug: memory group aware "auto-movable" online policy mm/memory_hotplug: improved dynamic memory group aware "auto-movable" online policy Miaohe Lin <linmiaohe@huawei.com>: Patch series "Cleanup and fixups for memory hotplug": mm/memory_hotplug: use helper zone_is_zone_device() to simplify the code Subsystem: mm/rmap Muchun Song <songmuchun@bytedance.com>: mm: remove redundant compound_head() calling Subsystem: mm/ioremap Christoph Hellwig <hch@lst.de>: riscv: only select GENERIC_IOREMAP if MMU support is enabled Patch series "small ioremap cleanups": mm: move ioremap_page_range to vmalloc.c mm: don't allow executable ioremap mappings Weizhao Ouyang <o451686892@gmail.com>: mm/early_ioremap.c: remove redundant early_ioremap_shutdown() Subsystem: mm/highmem Sebastian Andrzej Siewior <bigeasy@linutronix.de>: highmem: don't disable preemption on RT in kmap_atomic() Subsystem: mm/cleanups Changbin Du <changbin.du@gmail.com>: mm: in_irq() cleanup Muchun Song <songmuchun@bytedance.com>: mm: introduce PAGEFLAGS_MASK to replace ((1UL << NR_PAGEFLAGS) - 1) Subsystem: mm/secretmem Jordy Zomer <jordy@jordyzomer.github.io>: mm/secretmem: use refcount_t instead of atomic_t Subsystem: mm/kfence Marco Elver <elver@google.com>: kfence: show cpu and timestamp in alloc/free info kfence: test: fail fast if disabled at boot Subsystem: mm/damon SeongJae Park <sjpark@amazon.de>: Patch series "Introduce Data Access MONitor (DAMON)", v34: mm: introduce Data Access MONitor (DAMON) mm/damon/core: implement region-based sampling mm/damon: adaptively adjust regions mm/idle_page_tracking: make PG_idle reusable mm/damon: implement primitives for the virtual memory address spaces mm/damon: add a tracepoint mm/damon: implement a debugfs-based user space interface mm/damon/dbgfs: export kdamond pid to the user space mm/damon/dbgfs: support multiple contexts Documentation: add documents for DAMON mm/damon: add kunit tests mm/damon: add user space selftests MAINTAINERS: update for DAMON Subsystem: alpha Randy Dunlap <rdunlap@infradead.org>: alpha: agp: make empty macros use do-while-0 style alpha: pci-sysfs: fix all kernel-doc warnings Subsystem: percpu Greg Kroah-Hartman <gregkh@linuxfoundation.org>: percpu: remove export of pcpu_base_addr Subsystem: procfs Feng Zhou <zhoufeng.zf@bytedance.com>: fs/proc/kcore.c: add mmap interface Christoph Hellwig <hch@lst.de>: proc: stop using seq_get_buf in proc_task_name Ohhoon Kwon <ohoono.kwon@samsung.com>: connector: send event on write to /proc/[pid]/comm Subsystem: misc Colin Ian King <colin.king@canonical.com>: arch: Kconfig: fix spelling mistake "seperate" -> "separate" Andy Shevchenko <andriy.shevchenko@linux.intel.com>: include/linux/once.h: fix trivia typo Not -> Note Daniel Lezcano <daniel.lezcano@linaro.org>: Patch series "Add Hz macros", v3: units: change from 'L' to 'UL' units: add the HZ macros thermal/drivers/devfreq_cooling: use HZ macros devfreq: use HZ macros iio/drivers/as73211: use HZ macros hwmon/drivers/mr75203: use HZ macros iio/drivers/hid-sensor: use HZ macros i2c/drivers/ov02q10: use HZ macros mtd/drivers/nand: use HZ macros phy/drivers/stm32: use HZ macros Subsystem: core-kernel Yang Yang <yang.yang29@zte.com.cn>: kernel/acct.c: use dedicated helper to access rlimit values Pavel Skripkin <paskripkin@gmail.com>: profiling: fix shift-out-of-bounds bugs Subsystem: MAINTAINERS Nathan Chancellor <nathan@kernel.org>: MAINTAINERS: update ClangBuiltLinux mailing list Documentation/llvm: update mailing list Documentation/llvm: update IRC location Subsystem: lib Geert Uytterhoeven <geert@linux-m68k.org>: Patch series "math: RATIONAL and RATIONAL_KUNIT_TEST improvements": math: make RATIONAL tristate math: RATIONAL_KUNIT_TEST should depend on RATIONAL instead of selecting it Matteo Croce <mcroce@microsoft.com>: Patch series "lib/string: optimized mem* functions", v2: lib/string: optimized memcpy lib/string: optimized memmove lib/string: optimized memset Daniel Latypov <dlatypov@google.com>: lib/test: convert test_sort.c to use KUnit Randy Dunlap <rdunlap@infradead.org>: lib/dump_stack: correct kernel-doc notation lib/iov_iter.c: fix kernel-doc warnings Subsystem: bitops Yury Norov <yury.norov@gmail.com>: Patch series "Resend bitmap patches": bitops: protect find_first_{,zero}_bit properly bitops: move find_bit_*_le functions from le.h to find.h include: move find.h from asm_generic to linux arch: remove GENERIC_FIND_FIRST_BIT entirely lib: add find_first_and_bit() cpumask: use find_first_and_bit() all: replace find_next{,_zero}_bit with find_first{,_zero}_bit where appropriate tools: sync tools/bitmap with mother linux cpumask: replace cpumask_next_* with cpumask_first_* where appropriate include/linux: move for_each_bit() macros from bitops.h to find.h find: micro-optimize for_each_{set,clear}_bit() bitops: replace for_each_*_bit_from() with for_each_*_bit() where appropriate Andy Shevchenko <andriy.shevchenko@linux.intel.com>: tools: rename bitmap_alloc() to bitmap_zalloc() Yury Norov <yury.norov@gmail.com>: mm/percpu: micro-optimize pcpu_is_populated() bitmap: unify find_bit operations lib: bitmap: add performance test for bitmap_print_to_pagebuf vsprintf: rework bitmap_list_string Subsystem: checkpatch Joe Perches <joe@perches.com>: checkpatch: support wide strings Mimi Zohar <zohar@linux.ibm.com>: checkpatch: make email address check case insensitive Joe Perches <joe@perches.com>: checkpatch: improve GIT_COMMIT_ID test Subsystem: epoll Nicholas Piggin <npiggin@gmail.com>: fs/epoll: use a per-cpu counter for user's watches count Subsystem: init Rasmus Villemoes <linux@rasmusvillemoes.dk>: init: move usermodehelper_enable() to populate_rootfs() Kefeng Wang <wangkefeng.wang@huawei.com>: trap: cleanup trap_init() Subsystem: nilfs2 Nanyong Sun <sunnanyong@huawei.com>: Patch series "nilfs2: fix incorrect usage of kobject": nilfs2: fix memory leak in nilfs_sysfs_create_device_group nilfs2: fix NULL pointer in nilfs_##name##_attr_release nilfs2: fix memory leak in nilfs_sysfs_create_##name##_group nilfs2: fix memory leak in nilfs_sysfs_delete_##name##_group nilfs2: fix memory leak in nilfs_sysfs_create_snapshot_group nilfs2: fix memory leak in nilfs_sysfs_delete_snapshot_group Zhen Lei <thunder.leizhen@huawei.com>: nilfs2: use refcount_dec_and_lock() to fix potential UAF Subsystem: coredump David Oberhollenzer <david.oberhollenzer@sigma-star.at>: fs/coredump.c: log if a core dump is aborted due to changed file permissions QiuXi <qiuxi1@huawei.com>: coredump: fix memleak in dump_vma_snapshot() Subsystem: fork Christoph Hellwig <hch@lst.de>: kernel/fork.c: unexport get_{mm,task}_exe_file Subsystem: pids Takahiro Itazuri <itazur@amazon.com>: pid: cleanup the stale comment mentioning pidmap_init(). Subsystem: criu Cyrill Gorcunov <gorcunov@gmail.com>: prctl: allow to setup brk for et_dyn executables Subsystem: kconfig Zenghui Yu <yuzenghui@huawei.com>: configs: remove the obsolete CONFIG_INPUT_POLLDEV Lukas Bulwahn <lukas.bulwahn@gmail.com>: Kconfig.debug: drop selecting non-existing HARDLOCKUP_DETECTOR_ARCH Subsystem: selftests Greg Thelen <gthelen@google.com>: selftests/memfd: remove unused variable Subsystem: ipc Rafael Aquini <aquini@redhat.com>: ipc: replace costly bailout check in sysvipc_find_ipc() Subsystem: mm/vmscan Randy Dunlap <rdunlap@infradead.org>: mm/workingset: correct kernel-doc notations Subsystem: scripts Randy Dunlap <rdunlap@infradead.org>: scripts: check_extable: fix typo in user error message a/Documentation/admin-guide/mm/damon/index.rst | 15 a/Documentation/admin-guide/mm/damon/start.rst | 114 + a/Documentation/admin-guide/mm/damon/usage.rst | 112 + a/Documentation/admin-guide/mm/index.rst | 1 a/Documentation/admin-guide/mm/memory-hotplug.rst | 842 ++++++----- a/Documentation/dev-tools/kfence.rst | 98 - a/Documentation/kbuild/llvm.rst | 5 a/Documentation/vm/damon/api.rst | 20 a/Documentation/vm/damon/design.rst | 166 ++ a/Documentation/vm/damon/faq.rst | 51 a/Documentation/vm/damon/index.rst | 30 a/Documentation/vm/index.rst | 1 a/MAINTAINERS | 17 a/arch/Kconfig | 2 a/arch/alpha/include/asm/agp.h | 4 a/arch/alpha/include/asm/bitops.h | 2 a/arch/alpha/kernel/pci-sysfs.c | 12 a/arch/arc/Kconfig | 1 a/arch/arc/include/asm/bitops.h | 1 a/arch/arc/kernel/traps.c | 5 a/arch/arm/configs/dove_defconfig | 1 a/arch/arm/configs/pxa_defconfig | 1 a/arch/arm/include/asm/bitops.h | 1 a/arch/arm/kernel/traps.c | 5 a/arch/arm64/Kconfig | 1 a/arch/arm64/include/asm/bitops.h | 1 a/arch/arm64/mm/mmu.c | 3 a/arch/csky/include/asm/bitops.h | 1 a/arch/h8300/include/asm/bitops.h | 1 a/arch/h8300/kernel/traps.c | 4 a/arch/hexagon/include/asm/bitops.h | 1 a/arch/hexagon/kernel/traps.c | 4 a/arch/ia64/include/asm/bitops.h | 2 a/arch/ia64/mm/init.c | 3 a/arch/m68k/include/asm/bitops.h | 2 a/arch/mips/Kconfig | 1 a/arch/mips/configs/lemote2f_defconfig | 1 a/arch/mips/configs/pic32mzda_defconfig | 1 a/arch/mips/configs/rt305x_defconfig | 1 a/arch/mips/configs/xway_defconfig | 1 a/arch/mips/include/asm/bitops.h | 1 a/arch/nds32/kernel/traps.c | 5 a/arch/nios2/kernel/traps.c | 5 a/arch/openrisc/include/asm/bitops.h | 1 a/arch/openrisc/kernel/traps.c | 5 a/arch/parisc/configs/generic-32bit_defconfig | 1 a/arch/parisc/include/asm/bitops.h | 2 a/arch/parisc/kernel/traps.c | 4 a/arch/powerpc/include/asm/bitops.h | 2 a/arch/powerpc/include/asm/cputhreads.h | 2 a/arch/powerpc/kernel/traps.c | 5 a/arch/powerpc/mm/mem.c | 3 a/arch/powerpc/platforms/pasemi/dma_lib.c | 4 a/arch/powerpc/platforms/pseries/hotplug-memory.c | 9 a/arch/riscv/Kconfig | 2 a/arch/riscv/include/asm/bitops.h | 1 a/arch/riscv/kernel/traps.c | 5 a/arch/s390/Kconfig | 1 a/arch/s390/include/asm/bitops.h | 1 a/arch/s390/kvm/kvm-s390.c | 2 a/arch/s390/mm/init.c | 3 a/arch/sh/include/asm/bitops.h | 1 a/arch/sh/mm/init.c | 3 a/arch/sparc/include/asm/bitops_32.h | 1 a/arch/sparc/include/asm/bitops_64.h | 2 a/arch/um/kernel/trap.c | 4 a/arch/x86/Kconfig | 1 a/arch/x86/configs/i386_defconfig | 1 a/arch/x86/configs/x86_64_defconfig | 1 a/arch/x86/include/asm/bitops.h | 2 a/arch/x86/kernel/apic/vector.c | 4 a/arch/x86/mm/init_32.c | 3 a/arch/x86/mm/init_64.c | 3 a/arch/x86/um/Kconfig | 1 a/arch/xtensa/include/asm/bitops.h | 1 a/block/blk-mq.c | 2 a/drivers/acpi/acpi_memhotplug.c | 46 a/drivers/base/memory.c | 231 ++- a/drivers/base/node.c | 2 a/drivers/block/rnbd/rnbd-clt.c | 2 a/drivers/dax/kmem.c | 43 a/drivers/devfreq/devfreq.c | 2 a/drivers/dma/ti/edma.c | 2 a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c | 4 a/drivers/hwmon/ltc2992.c | 3 a/drivers/hwmon/mr75203.c | 2 a/drivers/iio/adc/ad7124.c | 2 a/drivers/iio/common/hid-sensors/hid-sensor-attributes.c | 3 a/drivers/iio/light/as73211.c | 3 a/drivers/infiniband/hw/irdma/hw.c | 16 a/drivers/media/cec/core/cec-core.c | 2 a/drivers/media/i2c/ov02a10.c | 2 a/drivers/media/mc/mc-devnode.c | 2 a/drivers/mmc/host/renesas_sdhi_core.c | 2 a/drivers/mtd/nand/raw/intel-nand-controller.c | 2 a/drivers/net/virtio_net.c | 2 a/drivers/pci/controller/dwc/pci-dra7xx.c | 2 a/drivers/phy/st/phy-stm32-usbphyc.c | 2 a/drivers/scsi/lpfc/lpfc_sli.c | 10 a/drivers/soc/fsl/qbman/bman_portal.c | 2 a/drivers/soc/fsl/qbman/qman_portal.c | 2 a/drivers/soc/ti/k3-ringacc.c | 4 a/drivers/thermal/devfreq_cooling.c | 2 a/drivers/tty/n_tty.c | 2 a/drivers/virt/acrn/ioreq.c | 3 a/drivers/virtio/virtio_mem.c | 26 a/fs/coredump.c | 15 a/fs/eventpoll.c | 18 a/fs/f2fs/segment.c | 8 a/fs/nilfs2/sysfs.c | 26 a/fs/nilfs2/the_nilfs.c | 9 a/fs/ocfs2/cluster/heartbeat.c | 2 a/fs/ocfs2/dlm/dlmdomain.c | 4 a/fs/ocfs2/dlm/dlmmaster.c | 18 a/fs/ocfs2/dlm/dlmrecovery.c | 2 a/fs/ocfs2/dlm/dlmthread.c | 2 a/fs/proc/array.c | 18 a/fs/proc/base.c | 5 a/fs/proc/kcore.c | 73 a/include/asm-generic/bitops.h | 1 a/include/asm-generic/bitops/find.h | 198 -- a/include/asm-generic/bitops/le.h | 64 a/include/asm-generic/early_ioremap.h | 6 a/include/linux/bitmap.h | 34 a/include/linux/bitops.h | 34 a/include/linux/cpumask.h | 46 a/include/linux/damon.h | 290 +++ a/include/linux/find.h | 134 + a/include/linux/highmem-internal.h | 27 a/include/linux/memory.h | 55 a/include/linux/memory_hotplug.h | 40 a/include/linux/mmzone.h | 19 a/include/linux/once.h | 2 a/include/linux/page-flags.h | 17 a/include/linux/page_ext.h | 2 a/include/linux/page_idle.h | 6 a/include/linux/pagemap.h | 7 a/include/linux/sched/user.h | 3 a/include/linux/slub_def.h | 6 a/include/linux/threads.h | 2 a/include/linux/units.h | 10 a/include/linux/vmalloc.h | 3 a/include/trace/events/damon.h | 43 a/include/trace/events/mmflags.h | 2 a/include/trace/events/page_ref.h | 4 a/init/initramfs.c | 2 a/init/main.c | 3 a/init/noinitramfs.c | 2 a/ipc/util.c | 16 a/kernel/acct.c | 2 a/kernel/fork.c | 2 a/kernel/profile.c | 21 a/kernel/sys.c | 7 a/kernel/time/clocksource.c | 4 a/kernel/user.c | 25 a/lib/Kconfig | 3 a/lib/Kconfig.debug | 9 a/lib/dump_stack.c | 3 a/lib/find_bit.c | 21 a/lib/find_bit_benchmark.c | 21 a/lib/genalloc.c | 2 a/lib/iov_iter.c | 8 a/lib/math/Kconfig | 2 a/lib/math/rational.c | 3 a/lib/string.c | 130 + a/lib/test_bitmap.c | 37 a/lib/test_printf.c | 2 a/lib/test_sort.c | 40 a/lib/vsprintf.c | 26 a/mm/Kconfig | 15 a/mm/Makefile | 4 a/mm/compaction.c | 20 a/mm/damon/Kconfig | 68 a/mm/damon/Makefile | 5 a/mm/damon/core-test.h | 253 +++ a/mm/damon/core.c | 748 ++++++++++ a/mm/damon/dbgfs-test.h | 126 + a/mm/damon/dbgfs.c | 631 ++++++++ a/mm/damon/vaddr-test.h | 329 ++++ a/mm/damon/vaddr.c | 672 +++++++++ a/mm/early_ioremap.c | 5 a/mm/highmem.c | 2 a/mm/ioremap.c | 25 a/mm/kfence/core.c | 3 a/mm/kfence/kfence.h | 2 a/mm/kfence/kfence_test.c | 3 a/mm/kfence/report.c | 19 a/mm/kmemleak.c | 2 a/mm/memory_hotplug.c | 396 ++++- a/mm/memremap.c | 5 a/mm/page_alloc.c | 27 a/mm/page_ext.c | 12 a/mm/page_idle.c | 10 a/mm/page_isolation.c | 7 a/mm/page_owner.c | 14 a/mm/percpu.c | 36 a/mm/rmap.c | 6 a/mm/secretmem.c | 9 a/mm/slab_common.c | 2 a/mm/slub.c | 1023 +++++++++----- a/mm/vmalloc.c | 24 a/mm/workingset.c | 2 a/net/ncsi/ncsi-manage.c | 4 a/scripts/check_extable.sh | 2 a/scripts/checkpatch.pl | 93 - a/tools/include/linux/bitmap.h | 4 a/tools/perf/bench/find-bit-bench.c | 2 a/tools/perf/builtin-c2c.c | 6 a/tools/perf/builtin-record.c | 2 a/tools/perf/tests/bitmap.c | 2 a/tools/perf/tests/mem2node.c | 2 a/tools/perf/util/affinity.c | 4 a/tools/perf/util/header.c | 4 a/tools/perf/util/metricgroup.c | 2 a/tools/perf/util/mmap.c | 4 a/tools/testing/selftests/damon/Makefile | 7 a/tools/testing/selftests/damon/_chk_dependency.sh | 28 a/tools/testing/selftests/damon/debugfs_attrs.sh | 75 + a/tools/testing/selftests/kvm/dirty_log_perf_test.c | 2 a/tools/testing/selftests/kvm/dirty_log_test.c | 4 a/tools/testing/selftests/kvm/x86_64/vmx_dirty_log_test.c | 2 a/tools/testing/selftests/memfd/memfd_test.c | 2 b/MAINTAINERS | 2 b/tools/include/asm-generic/bitops.h | 1 b/tools/include/linux/bitmap.h | 7 b/tools/include/linux/find.h | 81 + b/tools/lib/find_bit.c | 20 227 files changed, 6695 insertions(+), 1875 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2021-09-08 2:52 incoming Andrew Morton @ 2021-09-08 8:57 ` Vlastimil Babka 0 siblings, 0 replies; 370+ messages in thread From: Vlastimil Babka @ 2021-09-08 8:57 UTC (permalink / raw) To: Andrew Morton, Linus Torvalds Cc: linux-mm, mm-commits, Mike Galbraith, Mel Gorman On 9/8/21 04:52, Andrew Morton wrote: > Subsystem: mm/slub > > Vlastimil Babka <vbabka@suse.cz>: > Patch series "SLUB: reduce irq disabled scope and make it RT compatible", v6: > mm, slub: don't call flush_all() from slab_debug_trace_open() > mm, slub: allocate private object map for debugfs listings > mm, slub: allocate private object map for validate_slab_cache() > mm, slub: don't disable irq for debug_check_no_locks_freed() > mm, slub: remove redundant unfreeze_partials() from put_cpu_partial() > mm, slub: extract get_partial() from new_slab_objects() > mm, slub: dissolve new_slab_objects() into ___slab_alloc() > mm, slub: return slab page from get_partial() and set c->page afterwards > mm, slub: restructure new page checks in ___slab_alloc() > mm, slub: simplify kmem_cache_cpu and tid setup > mm, slub: move disabling/enabling irqs to ___slab_alloc() > mm, slub: do initial checks in ___slab_alloc() with irqs enabled > mm, slub: move disabling irqs closer to get_partial() in ___slab_alloc() > mm, slub: restore irqs around calling new_slab() > mm, slub: validate slab from partial list or page allocator before making it cpu slab > mm, slub: check new pages with restored irqs > mm, slub: stop disabling irqs around get_partial() > mm, slub: move reset of c->page and freelist out of deactivate_slab() > mm, slub: make locking in deactivate_slab() irq-safe > mm, slub: call deactivate_slab() without disabling irqs > mm, slub: move irq control into unfreeze_partials() > mm, slub: discard slabs in unfreeze_partials() without irqs disabled > mm, slub: detach whole partial list at once in unfreeze_partials() > mm, slub: separate detaching of partial list in unfreeze_partials() from unfreezing > mm, slub: only disable irq with spin_lock in __unfreeze_partials() > mm, slub: don't disable irqs in slub_cpu_dead() > mm, slab: split out the cpu offline variant of flush_slab() > > Sebastian Andrzej Siewior <bigeasy@linutronix.de>: > mm: slub: move flush_cpu_slab() invocations __free_slab() invocations out of IRQ context > mm: slub: make object_map_lock a raw_spinlock_t > > Vlastimil Babka <vbabka@suse.cz>: > mm, slub: make slab_lock() disable irqs with PREEMPT_RT > mm, slub: protect put_cpu_partial() with disabled irqs instead of cmpxchg > mm, slub: use migrate_disable() on PREEMPT_RT > mm, slub: convert kmem_cpu_slab protection to local_lock For my own piece of mind, I've checked that this part (patches 1 to 33) are identical to the v6 posting [1] and git version [2] that Mel and Mike tested (replies to [1]). [1] https://lore.kernel.org/all/20210904105003.11688-1-vbabka@suse.cz/ [2] git://git.kernel.org/pub/scm/linux/kernel/git/vbabka/linux.git tags/mm-slub-5.15-rc1 ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-09-02 21:48 Andrew Morton 2021-09-02 21:49 ` incoming Andrew Morton 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2021-09-02 21:48 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 212 patches, based on 4a3bb4200a5958d76cc26ebe4db4257efa56812b. Subsystems affected by this patch series: ia64 ocfs2 block mm/slub mm/debug mm/pagecache mm/gup mm/swap mm/shmem mm/memcg mm/selftests mm/pagemap mm/mremap mm/bootmem mm/sparsemem mm/vmalloc mm/kasan mm/pagealloc mm/memory-failure mm/hugetlb mm/userfaultfd mm/vmscan mm/compaction mm/mempolicy mm/memblock mm/oom-kill mm/migration mm/ksm mm/percpu mm/vmstat mm/madvise Subsystem: ia64 Jason Wang <wangborong@cdjrlc.com>: ia64: fix typo in a comment Geert Uytterhoeven <geert+renesas@glider.be>: Patch series "ia64: Miscellaneous fixes and cleanups": ia64: fix #endif comment for reserve_elfcorehdr() ia64: make reserve_elfcorehdr() static ia64: make num_rsvd_regions static Subsystem: ocfs2 Dan Carpenter <dan.carpenter@oracle.com>: ocfs2: remove an unnecessary condition Tuo Li <islituo@gmail.com>: ocfs2: quota_local: fix possible uninitialized-variable access in ocfs2_local_read_info() Gang He <ghe@suse.com>: ocfs2: ocfs2_downconvert_lock failure results in deadlock Subsystem: block kernel test robot <lkp@intel.com>: arch/csky/kernel/probes/kprobes.c: fix bugon.cocci warnings Subsystem: mm/slub Vlastimil Babka <vbabka@suse.cz>: Patch series "SLUB: reduce irq disabled scope and make it RT compatible", v4: mm, slub: don't call flush_all() from slab_debug_trace_open() mm, slub: allocate private object map for debugfs listings mm, slub: allocate private object map for validate_slab_cache() mm, slub: don't disable irq for debug_check_no_locks_freed() mm, slub: remove redundant unfreeze_partials() from put_cpu_partial() mm, slub: unify cmpxchg_double_slab() and __cmpxchg_double_slab() mm, slub: extract get_partial() from new_slab_objects() mm, slub: dissolve new_slab_objects() into ___slab_alloc() mm, slub: return slab page from get_partial() and set c->page afterwards mm, slub: restructure new page checks in ___slab_alloc() mm, slub: simplify kmem_cache_cpu and tid setup mm, slub: move disabling/enabling irqs to ___slab_alloc() mm, slub: do initial checks in ___slab_alloc() with irqs enabled mm, slub: move disabling irqs closer to get_partial() in ___slab_alloc() mm, slub: restore irqs around calling new_slab() mm, slub: validate slab from partial list or page allocator before making it cpu slab mm, slub: check new pages with restored irqs mm, slub: stop disabling irqs around get_partial() mm, slub: move reset of c->page and freelist out of deactivate_slab() mm, slub: make locking in deactivate_slab() irq-safe mm, slub: call deactivate_slab() without disabling irqs mm, slub: move irq control into unfreeze_partials() mm, slub: discard slabs in unfreeze_partials() without irqs disabled mm, slub: detach whole partial list at once in unfreeze_partials() mm, slub: separate detaching of partial list in unfreeze_partials() from unfreezing mm, slub: only disable irq with spin_lock in __unfreeze_partials() mm, slub: don't disable irqs in slub_cpu_dead() mm, slab: make flush_slab() possible to call with irqs enabled Sebastian Andrzej Siewior <bigeasy@linutronix.de>: mm: slub: move flush_cpu_slab() invocations __free_slab() invocations out of IRQ context mm: slub: make object_map_lock a raw_spinlock_t Vlastimil Babka <vbabka@suse.cz>: mm, slub: optionally save/restore irqs in slab_[un]lock()/ mm, slub: make slab_lock() disable irqs with PREEMPT_RT mm, slub: protect put_cpu_partial() with disabled irqs instead of cmpxchg mm, slub: use migrate_disable() on PREEMPT_RT mm, slub: convert kmem_cpu_slab protection to local_lock Subsystem: mm/debug Gavin Shan <gshan@redhat.com>: Patch series "mm/debug_vm_pgtable: Enhancements", v6: mm/debug_vm_pgtable: introduce struct pgtable_debug_args mm/debug_vm_pgtable: use struct pgtable_debug_args in basic tests mm/debug_vm_pgtable: use struct pgtable_debug_args in leaf and savewrite tests mm/debug_vm_pgtable: use struct pgtable_debug_args in protnone and devmap tests mm/debug_vm_pgtable: use struct pgtable_debug_args in soft_dirty and swap tests mm/debug_vm_pgtable: use struct pgtable_debug_args in migration and thp tests mm/debug_vm_pgtable: use struct pgtable_debug_args in PTE modifying tests mm/debug_vm_pgtable: use struct pgtable_debug_args in PMD modifying tests mm/debug_vm_pgtable: use struct pgtable_debug_args in PUD modifying tests mm/debug_vm_pgtable: use struct pgtable_debug_args in PGD and P4D modifying tests mm/debug_vm_pgtable: remove unused code mm/debug_vm_pgtable: fix corrupted page flag "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm: report a more useful address for reclaim acquisition liuhailong <liuhailong@oppo.com>: mm: add kernel_misc_reclaimable in show_free_areas Subsystem: mm/pagecache Jan Kara <jack@suse.cz>: Patch series "writeback: Fix bandwidth estimates", v4: writeback: track number of inodes under writeback writeback: reliably update bandwidth estimation writeback: fix bandwidth estimate for spiky workload writeback: rename domain_update_bandwidth() writeback: use READ_ONCE for unlocked reads of writeback stats Johannes Weiner <hannes@cmpxchg.org>: mm: remove irqsave/restore locking from contexts with irqs enabled fs: drop_caches: fix skipping over shadow cache inodes fs: inode: count invalidated shadow pages in pginodesteal Shakeel Butt <shakeelb@google.com>: writeback: memcg: simplify cgroup_writeback_by_id Jing Yangyang <jing.yangyang@zte.com.cn>: include/linux/buffer_head.h: fix boolreturn.cocci warnings Subsystem: mm/gup Miaohe Lin <linmiaohe@huawei.com>: Patch series "Cleanups and fixup for gup": mm: gup: remove set but unused local variable major mm: gup: remove unneed local variable orig_refs mm: gup: remove useless BUG_ON in __get_user_pages() mm: gup: fix potential pgmap refcnt leak in __gup_device_huge() mm: gup: use helper PAGE_ALIGNED in populate_vma_page_range() John Hubbard <jhubbard@nvidia.com>: Patch series "A few gup refactorings and documentation updates", v3: mm/gup: documentation corrections for gup/pup mm/gup: small refactoring: simplify try_grab_page() mm/gup: remove try_get_page(), call try_get_compound_head() directly Subsystem: mm/swap Hugh Dickins <hughd@google.com>: fs, mm: fix race in unlinking swapfile John Hubbard <jhubbard@nvidia.com>: mm: delete unused get_kernel_page() Subsystem: mm/shmem Sebastian Andrzej Siewior <bigeasy@linutronix.de>: shmem: use raw_spinlock_t for ->stat_lock Miaohe Lin <linmiaohe@huawei.com>: Patch series "Cleanups for shmem": shmem: remove unneeded variable ret shmem: remove unneeded header file shmem: remove unneeded function forward declaration shmem: include header file to declare swap_info Hugh Dickins <hughd@google.com>: Patch series "huge tmpfs: shmem_is_huge() fixes and cleanups": huge tmpfs: fix fallocate(vanilla) advance over huge pages huge tmpfs: fix split_huge_page() after FALLOC_FL_KEEP_SIZE huge tmpfs: remove shrinklist addition from shmem_setattr() huge tmpfs: revert shmem's use of transhuge_vma_enabled() huge tmpfs: move shmem_huge_enabled() upwards huge tmpfs: SGP_NOALLOC to stop collapse_file() on race huge tmpfs: shmem_is_huge(vma, inode, index) huge tmpfs: decide stat.st_blksize by shmem_is_huge() shmem: shmem_writepage() split unlikely i915 THP Subsystem: mm/memcg Suren Baghdasaryan <surenb@google.com>: mm, memcg: add mem_cgroup_disabled checks in vmpressure and swap-related functions mm, memcg: inline mem_cgroup_{charge/uncharge} to improve disabled memcg config mm, memcg: inline swap-related functions to improve disabled memcg config Vasily Averin <vvs@virtuozzo.com>: memcg: enable accounting for pids in nested pid namespaces Shakeel Butt <shakeelb@google.com>: memcg: switch lruvec stats to rstat memcg: infrastructure to flush memcg stats Yutian Yang <nglaive@gmail.com>: memcg: charge fs_context and legacy_fs_context Vasily Averin <vvs@virtuozzo.com>: Patch series "memcg accounting from OpenVZ", v7: memcg: enable accounting for mnt_cache entries memcg: enable accounting for pollfd and select bits arrays memcg: enable accounting for file lock caches memcg: enable accounting for fasync_cache memcg: enable accounting for new namesapces and struct nsproxy memcg: enable accounting of ipc resources memcg: enable accounting for signals memcg: enable accounting for posix_timers_cache slab memcg: enable accounting for ldt_struct objects Shakeel Butt <shakeelb@google.com>: memcg: cleanup racy sum avoidance code Vasily Averin <vvs@virtuozzo.com>: memcg: replace in_interrupt() by !in_task() in active_memcg() Baolin Wang <baolin.wang@linux.alibaba.com>: mm: memcontrol: set the correct memcg swappiness restriction Miaohe Lin <linmiaohe@huawei.com>: mm, memcg: remove unused functions mm, memcg: save some atomic ops when flush is already true Michal Hocko <mhocko@suse.com>: memcg: fix up drain_local_stock comment Shakeel Butt <shakeelb@google.com>: memcg: make memcg->event_list_lock irqsafe Subsystem: mm/selftests Po-Hsu Lin <po-hsu.lin@canonical.com>: selftests/vm: use kselftest skip code for skipped tests Colin Ian King <colin.king@canonical.com>: selftests: Fix spelling mistake "cann't" -> "cannot" Subsystem: mm/pagemap Nicholas Piggin <npiggin@gmail.com>: Patch series "shoot lazy tlbs", v4: lazy tlb: introduce lazy mm refcount helper functions lazy tlb: allow lazy tlb mm refcounting to be configurable lazy tlb: shoot lazies, a non-refcounting lazy tlb option powerpc/64s: enable MMU_LAZY_TLB_SHOOTDOWN Christoph Hellwig <hch@lst.de>: Patch series "_kernel_dcache_page fixes and removal": mmc: JZ4740: remove the flush_kernel_dcache_page call in jz4740_mmc_read_data mmc: mmc_spi: replace flush_kernel_dcache_page with flush_dcache_page scatterlist: replace flush_kernel_dcache_page with flush_dcache_page mm: remove flush_kernel_dcache_page Huang Ying <ying.huang@intel.com>: mm,do_huge_pmd_numa_page: remove unnecessary TLB flushing code Greg Kroah-Hartman <gregkh@linuxfoundation.org>: mm: change fault_in_pages_* to have an unsigned size parameter Luigi Rizzo <lrizzo@google.com>: mm/pagemap: add mmap_assert_locked() annotations to find_vma*() "Liam R. Howlett" <Liam.Howlett@Oracle.com>: remap_file_pages: Use vma_lookup() instead of find_vma() Subsystem: mm/mremap Chen Wandun <chenwandun@huawei.com>: mm/mremap: fix memory account on do_munmap() failure Subsystem: mm/bootmem Muchun Song <songmuchun@bytedance.com>: mm/bootmem_info.c: mark __init on register_page_bootmem_info_section Subsystem: mm/sparsemem Ohhoon Kwon <ohoono.kwon@samsung.com>: Patch series "mm: sparse: remove __section_nr() function", v4: mm: sparse: pass section_nr to section_mark_present mm: sparse: pass section_nr to find_memory_block mm: sparse: remove __section_nr() function Naoya Horiguchi <naoya.horiguchi@nec.com>: mm/sparse: set SECTION_NID_SHIFT to 6 Matthew Wilcox <willy@infradead.org>: include/linux/mmzone.h: avoid a warning in sparse memory support Miles Chen <miles.chen@mediatek.com>: mm/sparse: clarify pgdat_to_phys Subsystem: mm/vmalloc "Uladzislau Rezki (Sony)" <urezki@gmail.com>: mm/vmalloc: use batched page requests in bulk-allocator mm/vmalloc: remove gfpflags_allow_blocking() check lib/test_vmalloc.c: add a new 'nr_pages' parameter Chen Wandun <chenwandun@huawei.com>: mm/vmalloc: fix wrong behavior in vread Subsystem: mm/kasan Woody Lin <woodylin@google.com>: mm/kasan: move kasan.fault to mm/kasan/report.c Andrey Konovalov <andreyknvl@gmail.com>: Patch series "kasan: test: avoid crashing the kernel with HW_TAGS", v2: kasan: test: rework kmalloc_oob_right kasan: test: avoid writing invalid memory kasan: test: avoid corrupting memory via memset kasan: test: disable kmalloc_memmove_invalid_size for HW_TAGS kasan: test: only do kmalloc_uaf_memset for generic mode kasan: test: clean up ksize_uaf kasan: test: avoid corrupting memory in copy_user_test kasan: test: avoid corrupting memory in kasan_rcu_uaf Subsystem: mm/pagealloc Mike Rapoport <rppt@linux.ibm.com>: Patch series "mm: ensure consistency of memory map poisoning": mm/page_alloc: always initialize memory map for the holes microblaze: simplify pte_alloc_one_kernel() mm: introduce memmap_alloc() to unify memory map allocation memblock: stop poisoning raw allocations Nico Pache <npache@redhat.com>: mm/page_alloc.c: fix 'zone_id' may be used uninitialized in this function warning Mike Rapoport <rppt@linux.ibm.com>: mm/page_alloc: make alloc_node_mem_map() __init rather than __ref Vasily Averin <vvs@virtuozzo.com>: mm/page_alloc.c: use in_task() "George G. Davis" <davis.george@siemens.com>: mm/page_isolation: tracing: trace all test_pages_isolated failures Subsystem: mm/memory-failure Miaohe Lin <linmiaohe@huawei.com>: Patch series "Cleanups and fixup for hwpoison": mm/hwpoison: remove unneeded variable unmap_success mm/hwpoison: fix potential pte_unmap_unlock pte error mm/hwpoison: change argument struct page **hpagep to *hpage mm/hwpoison: fix some obsolete comments Yang Shi <shy828301@gmail.com>: mm: hwpoison: don't drop slab caches for offlining non-LRU page doc: hwpoison: correct the support for hugepage mm: hwpoison: dump page for unhandlable page Michael Wang <yun.wang@linux.alibaba.com>: mm: fix panic caused by __page_handle_poison() Subsystem: mm/hugetlb Mike Kravetz <mike.kravetz@oracle.com>: hugetlb: simplify prep_compound_gigantic_page ref count racing code hugetlb: drop ref count earlier after page allocation hugetlb: before freeing hugetlb page set dtor to appropriate value hugetlb: fix hugetlb cgroup refcounting during vma split Subsystem: mm/userfaultfd Nadav Amit <namit@vmware.com>: Patch series "userfaultfd: minor bug fixes": userfaultfd: change mmap_changing to atomic userfaultfd: prevent concurrent API initialization selftests/vm/userfaultfd: wake after copy failure Subsystem: mm/vmscan Dave Hansen <dave.hansen@linux.intel.com>: Patch series "Migrate Pages in lieu of discard", v11: mm/numa: automatically generate node migration order mm/migrate: update node demotion order on hotplug events Yang Shi <yang.shi@linux.alibaba.com>: mm/migrate: enable returning precise migrate_pages() success count Dave Hansen <dave.hansen@linux.intel.com>: mm/migrate: demote pages during reclaim Yang Shi <yang.shi@linux.alibaba.com>: mm/vmscan: add page demotion counter Dave Hansen <dave.hansen@linux.intel.com>: mm/vmscan: add helper for querying ability to age anonymous pages Keith Busch <kbusch@kernel.org>: mm/vmscan: Consider anonymous pages without swap Dave Hansen <dave.hansen@linux.intel.com>: mm/vmscan: never demote for memcg reclaim Huang Ying <ying.huang@intel.com>: mm/migrate: add sysfs interface to enable reclaim migration Hui Su <suhui@zeku.com>: mm/vmpressure: replace vmpressure_to_css() with vmpressure_to_memcg() Miaohe Lin <linmiaohe@huawei.com>: Patch series "Cleanups for vmscan", v2: mm/vmscan: remove the PageDirty check after MADV_FREE pages are page_ref_freezed mm/vmscan: remove misleading setting to sc->priority mm/vmscan: remove unneeded return value of kswapd_run() mm/vmscan: add 'else' to remove check_pending label Vlastimil Babka <vbabka@suse.cz>: mm, vmscan: guarantee drop_slab_node() termination Subsystem: mm/compaction Charan Teja Reddy <charante@codeaurora.org>: mm: compaction: optimize proactive compaction deferrals mm: compaction: support triggering of proactive compaction by user Subsystem: mm/mempolicy Baolin Wang <baolin.wang@linux.alibaba.com>: mm/mempolicy: use readable NUMA_NO_NODE macro instead of magic number Dave Hansen <dave.hansen@linux.intel.com>: Patch series "Introduce multi-preference mempolicy", v7: mm/mempolicy: add MPOL_PREFERRED_MANY for multiple preferred nodes Feng Tang <feng.tang@intel.com>: mm/memplicy: add page allocation function for MPOL_PREFERRED_MANY policy Ben Widawsky <ben.widawsky@intel.com>: mm/hugetlb: add support for mempolicy MPOL_PREFERRED_MANY mm/mempolicy: advertise new MPOL_PREFERRED_MANY Feng Tang <feng.tang@intel.com>: mm/mempolicy: unify the create() func for bind/interleave/prefer-many policies Vasily Averin <vvs@virtuozzo.com>: mm/mempolicy.c: use in_task() in mempolicy_slab_node() Subsystem: mm/memblock Mike Rapoport <rppt@linux.ibm.com>: memblock: make memblock_find_in_range method private Subsystem: mm/oom-kill Suren Baghdasaryan <surenb@google.com>: mm: introduce process_mrelease system call mm: wire up syscall process_mrelease Subsystem: mm/migration Randy Dunlap <rdunlap@infradead.org>: mm/migrate: correct kernel-doc notation Subsystem: mm/ksm Zhansaya Bagdauletkyzy <zhansayabagdaulet@gmail.com>: Patch series "add KSM selftests": selftests: vm: add KSM merge test selftests: vm: add KSM unmerge test selftests: vm: add KSM zero page merging test selftests: vm: add KSM merging across nodes test mm: KSM: fix data type Patch series "add KSM performance tests", v3: selftests: vm: add KSM merging time test selftests: vm: add COW time test for KSM pages Subsystem: mm/percpu Jing Xiangfeng <jingxiangfeng@huawei.com>: mm/percpu,c: remove obsolete comments of pcpu_chunk_populated() Subsystem: mm/vmstat Miaohe Lin <linmiaohe@huawei.com>: Patch series "Cleanup for vmstat": mm/vmstat: correct some wrong comments mm/vmstat: simplify the array size calculation mm/vmstat: remove unneeded return value Subsystem: mm/madvise zhangkui <zhangkui@oppo.com>: mm/madvise: add MADV_WILLNEED to process_madvise() Documentation/ABI/testing/sysfs-kernel-mm-numa | 24 Documentation/admin-guide/mm/numa_memory_policy.rst | 15 Documentation/admin-guide/sysctl/vm.rst | 3 Documentation/core-api/cachetlb.rst | 86 - Documentation/dev-tools/kasan.rst | 13 Documentation/translations/zh_CN/core-api/cachetlb.rst | 9 Documentation/vm/hwpoison.rst | 1 arch/Kconfig | 28 arch/alpha/kernel/syscalls/syscall.tbl | 2 arch/arm/include/asm/cacheflush.h | 4 arch/arm/kernel/setup.c | 20 arch/arm/mach-rpc/ecard.c | 2 arch/arm/mm/flush.c | 33 arch/arm/mm/nommu.c | 6 arch/arm/tools/syscall.tbl | 2 arch/arm64/include/asm/unistd.h | 2 arch/arm64/include/asm/unistd32.h | 2 arch/arm64/kvm/hyp/reserved_mem.c | 9 arch/arm64/mm/init.c | 38 arch/csky/abiv1/cacheflush.c | 11 arch/csky/abiv1/inc/abi/cacheflush.h | 4 arch/csky/kernel/probes/kprobes.c | 3 arch/ia64/include/asm/meminit.h | 2 arch/ia64/kernel/acpi.c | 2 arch/ia64/kernel/setup.c | 55 arch/ia64/kernel/syscalls/syscall.tbl | 2 arch/m68k/kernel/syscalls/syscall.tbl | 2 arch/microblaze/include/asm/page.h | 3 arch/microblaze/include/asm/pgtable.h | 2 arch/microblaze/kernel/syscalls/syscall.tbl | 2 arch/microblaze/mm/init.c | 12 arch/microblaze/mm/pgtable.c | 17 arch/mips/include/asm/cacheflush.h | 8 arch/mips/kernel/setup.c | 14 arch/mips/kernel/syscalls/syscall_n32.tbl | 2 arch/mips/kernel/syscalls/syscall_n64.tbl | 2 arch/mips/kernel/syscalls/syscall_o32.tbl | 2 arch/nds32/include/asm/cacheflush.h | 3 arch/nds32/mm/cacheflush.c | 9 arch/parisc/include/asm/cacheflush.h | 8 arch/parisc/kernel/cache.c | 3 arch/parisc/kernel/syscalls/syscall.tbl | 2 arch/powerpc/Kconfig | 1 arch/powerpc/kernel/smp.c | 2 arch/powerpc/kernel/syscalls/syscall.tbl | 2 arch/powerpc/mm/book3s64/radix_tlb.c | 4 arch/powerpc/platforms/pseries/hotplug-memory.c | 4 arch/riscv/mm/init.c | 44 arch/s390/kernel/setup.c | 9 arch/s390/kernel/syscalls/syscall.tbl | 2 arch/s390/mm/fault.c | 2 arch/sh/include/asm/cacheflush.h | 8 arch/sh/kernel/syscalls/syscall.tbl | 2 arch/sparc/kernel/syscalls/syscall.tbl | 2 arch/x86/entry/syscalls/syscall_32.tbl | 1 arch/x86/entry/syscalls/syscall_64.tbl | 1 arch/x86/kernel/aperture_64.c | 5 arch/x86/kernel/ldt.c | 6 arch/x86/mm/init.c | 23 arch/x86/mm/numa.c | 5 arch/x86/mm/numa_emulation.c | 5 arch/x86/realmode/init.c | 2 arch/xtensa/kernel/syscalls/syscall.tbl | 2 block/blk-map.c | 2 drivers/acpi/tables.c | 5 drivers/base/arch_numa.c | 5 drivers/base/memory.c | 4 drivers/mmc/host/jz4740_mmc.c | 4 drivers/mmc/host/mmc_spi.c | 2 drivers/of/of_reserved_mem.c | 12 fs/drop_caches.c | 3 fs/exec.c | 12 fs/fcntl.c | 3 fs/fs-writeback.c | 28 fs/fs_context.c | 4 fs/inode.c | 2 fs/locks.c | 6 fs/namei.c | 8 fs/namespace.c | 7 fs/ocfs2/dlmglue.c | 14 fs/ocfs2/quota_global.c | 1 fs/ocfs2/quota_local.c | 2 fs/pipe.c | 2 fs/select.c | 4 fs/userfaultfd.c | 116 - include/linux/backing-dev-defs.h | 2 include/linux/backing-dev.h | 19 include/linux/buffer_head.h | 2 include/linux/compaction.h | 2 include/linux/highmem.h | 5 include/linux/hugetlb_cgroup.h | 12 include/linux/memblock.h | 2 include/linux/memcontrol.h | 118 + include/linux/memory.h | 2 include/linux/mempolicy.h | 16 include/linux/migrate.h | 14 include/linux/mm.h | 17 include/linux/mmzone.h | 4 include/linux/page-flags.h | 9 include/linux/pagemap.h | 4 include/linux/sched/mm.h | 35 include/linux/shmem_fs.h | 25 include/linux/slub_def.h | 6 include/linux/swap.h | 28 include/linux/syscalls.h | 1 include/linux/userfaultfd_k.h | 8 include/linux/vm_event_item.h | 2 include/linux/vmpressure.h | 2 include/linux/writeback.h | 4 include/trace/events/migrate.h | 3 include/uapi/asm-generic/unistd.h | 4 include/uapi/linux/mempolicy.h | 1 ipc/msg.c | 2 ipc/namespace.c | 2 ipc/sem.c | 9 ipc/shm.c | 2 kernel/cgroup/namespace.c | 2 kernel/cpu.c | 2 kernel/exit.c | 2 kernel/fork.c | 51 kernel/kthread.c | 21 kernel/nsproxy.c | 2 kernel/pid_namespace.c | 5 kernel/sched/core.c | 37 kernel/sched/sched.h | 4 kernel/signal.c | 2 kernel/sys_ni.c | 1 kernel/sysctl.c | 2 kernel/time/namespace.c | 4 kernel/time/posix-timers.c | 4 kernel/user_namespace.c | 2 lib/scatterlist.c | 5 lib/test_kasan.c | 80 - lib/test_kasan_module.c | 20 lib/test_vmalloc.c | 5 mm/backing-dev.c | 11 mm/bootmem_info.c | 4 mm/compaction.c | 69 - mm/debug_vm_pgtable.c | 982 +++++++++------ mm/filemap.c | 15 mm/gup.c | 109 - mm/huge_memory.c | 32 mm/hugetlb.c | 173 ++ mm/hwpoison-inject.c | 2 mm/internal.h | 9 mm/kasan/hw_tags.c | 43 mm/kasan/kasan.h | 1 mm/kasan/report.c | 29 mm/khugepaged.c | 2 mm/ksm.c | 8 mm/madvise.c | 1 mm/memblock.c | 22 mm/memcontrol.c | 234 +-- mm/memory-failure.c | 53 mm/memory_hotplug.c | 2 mm/mempolicy.c | 207 ++- mm/migrate.c | 319 ++++ mm/mmap.c | 7 mm/mremap.c | 2 mm/oom_kill.c | 70 + mm/page-writeback.c | 133 +- mm/page_alloc.c | 62 mm/page_isolation.c | 13 mm/percpu.c | 3 mm/shmem.c | 309 ++-- mm/slab_common.c | 2 mm/slub.c | 1085 ++++++++++------- mm/sparse.c | 46 mm/swap.c | 22 mm/swapfile.c | 14 mm/truncate.c | 28 mm/userfaultfd.c | 15 mm/vmalloc.c | 79 - mm/vmpressure.c | 10 mm/vmscan.c | 220 ++- mm/vmstat.c | 25 security/tomoyo/domain.c | 13 tools/testing/scatterlist/linux/mm.h | 1 tools/testing/selftests/vm/.gitignore | 1 tools/testing/selftests/vm/Makefile | 3 tools/testing/selftests/vm/charge_reserved_hugetlb.sh | 5 tools/testing/selftests/vm/hugetlb_reparenting_test.sh | 5 tools/testing/selftests/vm/ksm_tests.c | 696 ++++++++++ tools/testing/selftests/vm/mlock-random-test.c | 2 tools/testing/selftests/vm/run_vmtests.sh | 98 + tools/testing/selftests/vm/userfaultfd.c | 13 186 files changed, 4488 insertions(+), 2281 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2021-09-02 21:48 incoming Andrew Morton @ 2021-09-02 21:49 ` Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-09-02 21:49 UTC (permalink / raw) To: Linus Torvalds, linux-mm, mm-commits On Thu, 2 Sep 2021 14:48:20 -0700 Andrew Morton <akpm@linux-foundation.org> wrote: > 212 patches, based on 4a3bb4200a5958d76cc26ebe4db4257efa56812b. Make that "based on 7d2a07b769330c34b4deabeed939325c77a7ec2f". ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-08-25 19:17 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-08-25 19:17 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 2 patches, based on 6e764bcd1cf72a2846c0e53d3975a09b242c04c9. Subsystems affected by this patch series: mm/memory-hotplug MAINTAINERS Subsystem: mm/memory-hotplug Miaohe Lin <linmiaohe@huawei.com>: mm/memory_hotplug: fix potential permanent lru cache disable Subsystem: MAINTAINERS Namjae Jeon <namjae.jeon@samsung.com>: MAINTAINERS: exfat: update my email address MAINTAINERS | 2 +- mm/memory_hotplug.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-08-20 2:03 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-08-20 2:03 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 10 patches, based on 614cb2751d3150850d459bee596c397f344a7936. Subsystems affected by this patch series: mm/shmem mm/pagealloc mm/tracing MAINTAINERS mm/memcg mm/memory-failure mm/vmscan mm/kfence mm/hugetlb Subsystem: mm/shmem Yang Shi <shy828301@gmail.com>: Revert "mm/shmem: fix shmem_swapin() race with swapoff" Revert "mm: swap: check if swap backing device is congested or not" Subsystem: mm/pagealloc Doug Berger <opendmb@gmail.com>: mm/page_alloc: don't corrupt pcppage_migratetype Subsystem: mm/tracing Mike Rapoport <rppt@linux.ibm.com>: mmflags.h: add missing __GFP_ZEROTAGS and __GFP_SKIP_KASAN_POISON names Subsystem: MAINTAINERS Nathan Chancellor <nathan@kernel.org>: MAINTAINERS: update ClangBuiltLinux IRC chat Subsystem: mm/memcg Johannes Weiner <hannes@cmpxchg.org>: mm: memcontrol: fix occasional OOMs due to proportional memory.low reclaim Subsystem: mm/memory-failure Naoya Horiguchi <naoya.horiguchi@nec.com>: mm/hwpoison: retry with shake_page() for unhandlable pages Subsystem: mm/vmscan Johannes Weiner <hannes@cmpxchg.org>: mm: vmscan: fix missing psi annotation for node_reclaim() Subsystem: mm/kfence Marco Elver <elver@google.com>: kfence: fix is_kfence_address() for addresses below KFENCE_POOL_SIZE Subsystem: mm/hugetlb Mike Kravetz <mike.kravetz@oracle.com>: hugetlb: don't pass page cache pages to restore_reserve_on_error MAINTAINERS | 2 +- include/linux/kfence.h | 7 ++++--- include/linux/memcontrol.h | 29 +++++++++++++++-------------- include/trace/events/mmflags.h | 4 +++- mm/hugetlb.c | 19 ++++++++++++++----- mm/memory-failure.c | 12 +++++++++--- mm/page_alloc.c | 25 ++++++++++++------------- mm/shmem.c | 14 +------------- mm/swap_state.c | 7 ------- mm/vmscan.c | 30 ++++++++++++++++++++++-------- 10 files changed, 81 insertions(+), 68 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-08-13 23:53 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-08-13 23:53 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 7 patches, based on f8e6dfc64f6135d1b6c5215c14cd30b9b60a0008. Subsystems affected by this patch series: mm/kasan mm/slub mm/madvise mm/memcg lib Subsystem: mm/kasan Kuan-Ying Lee <Kuan-Ying.Lee@mediatek.com>: Patch series "kasan, slub: reset tag when printing address", v3: kasan, kmemleak: reset tags when scanning block kasan, slub: reset tag when printing address Subsystem: mm/slub Shakeel Butt <shakeelb@google.com>: slub: fix kmalloc_pagealloc_invalid_free unit test Vlastimil Babka <vbabka@suse.cz>: mm: slub: fix slub_debug disabling for list of slabs Subsystem: mm/madvise David Hildenbrand <david@redhat.com>: mm/madvise: report SIGBUS as -EFAULT for MADV_POPULATE_(READ|WRITE) Subsystem: mm/memcg Waiman Long <longman@redhat.com>: mm/memcg: fix incorrect flushing of lruvec data in obj_stock Subsystem: lib Liang Wang <wangliang101@huawei.com>: lib: use PFN_PHYS() in devmem_is_allowed() lib/devmem_is_allowed.c | 2 +- mm/gup.c | 7 +++++-- mm/kmemleak.c | 6 +++--- mm/madvise.c | 4 +++- mm/memcontrol.c | 6 ++++-- mm/slub.c | 25 ++++++++++++++----------- 6 files changed, 30 insertions(+), 20 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-07-29 21:52 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-07-29 21:52 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 7 patches, based on 7e96bf476270aecea66740a083e51b38c1371cd2. Subsystems affected by this patch series: lib ocfs2 mm/memcg mm/migration mm/slub mm/memcg Subsystem: lib Matteo Croce <mcroce@microsoft.com>: lib/test_string.c: move string selftest in the Runtime Testing menu Subsystem: ocfs2 Junxiao Bi <junxiao.bi@oracle.com>: ocfs2: fix zero out valid data ocfs2: issue zeroout to EOF blocks Subsystem: mm/memcg Johannes Weiner <hannes@cmpxchg.org>: mm: memcontrol: fix blocking rstat function called from atomic cgroup1 thresholding code Subsystem: mm/migration "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>: mm/migrate: fix NR_ISOLATED corruption on 64-bit Subsystem: mm/slub Shakeel Butt <shakeelb@google.com>: slub: fix unreclaimable slab stat for bulk free Subsystem: mm/memcg Wang Hai <wanghai38@huawei.com>: mm/memcg: fix NULL pointer dereference in memcg_slab_free_hook() fs/ocfs2/file.c | 103 ++++++++++++++++++++++++++++++++---------------------- lib/Kconfig | 3 - lib/Kconfig.debug | 3 + mm/memcontrol.c | 3 + mm/migrate.c | 2 - mm/slab.h | 2 - mm/slub.c | 22 ++++++----- 7 files changed, 81 insertions(+), 57 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-07-23 22:49 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-07-23 22:49 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 15 patches, based on 704f4cba43d4ed31ef4beb422313f1263d87bc55. Subsystems affected by this patch series: mm/userfaultfd mm/kfence mm/highmem mm/pagealloc mm/memblock mm/pagecache mm/secretmem mm/pagemap mm/hugetlbfs Subsystem: mm/userfaultfd Peter Collingbourne <pcc@google.com>: Patch series "userfaultfd: do not untag user pointers", v5: userfaultfd: do not untag user pointers selftest: use mmap instead of posix_memalign to allocate memory Subsystem: mm/kfence Weizhao Ouyang <o451686892@gmail.com>: kfence: defer kfence_test_init to ensure that kunit debugfs is created Alexander Potapenko <glider@google.com>: kfence: move the size check to the beginning of __kfence_alloc() kfence: skip all GFP_ZONEMASK allocations Subsystem: mm/highmem Christoph Hellwig <hch@lst.de>: mm: call flush_dcache_page() in memcpy_to_page() and memzero_page() mm: use kmap_local_page in memzero_page Subsystem: mm/pagealloc Sergei Trofimovich <slyfox@gentoo.org>: mm: page_alloc: fix page_poison=1 / INIT_ON_ALLOC_DEFAULT_ON interaction Subsystem: mm/memblock Mike Rapoport <rppt@linux.ibm.com>: memblock: make for_each_mem_range() traverse MEMBLOCK_HOTPLUG regions Subsystem: mm/pagecache Roman Gushchin <guro@fb.com>: writeback, cgroup: remove wb from offline list before releasing refcnt writeback, cgroup: do not reparent dax inodes Subsystem: mm/secretmem Mike Rapoport <rppt@linux.ibm.com>: mm/secretmem: wire up ->set_page_dirty Subsystem: mm/pagemap Muchun Song <songmuchun@bytedance.com>: mm: mmap_lock: fix disabling preemption directly Qi Zheng <zhengqi.arch@bytedance.com>: mm: fix the deadlock in finish_fault() Subsystem: mm/hugetlbfs Mike Kravetz <mike.kravetz@oracle.com>: hugetlbfs: fix mount mode command line processing Documentation/arm64/tagged-address-abi.rst | 26 ++++++++++++++++++-------- fs/fs-writeback.c | 3 +++ fs/hugetlbfs/inode.c | 2 +- fs/userfaultfd.c | 26 ++++++++++++-------------- include/linux/highmem.h | 6 ++++-- include/linux/memblock.h | 4 ++-- mm/backing-dev.c | 2 +- mm/kfence/core.c | 19 ++++++++++++++++--- mm/kfence/kfence_test.c | 2 +- mm/memblock.c | 3 ++- mm/memory.c | 11 ++++++++++- mm/mmap_lock.c | 4 ++-- mm/page_alloc.c | 29 ++++++++++++++++------------- mm/secretmem.c | 1 + tools/testing/selftests/vm/userfaultfd.c | 6 ++++-- 15 files changed, 93 insertions(+), 51 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-07-15 4:26 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-07-15 4:26 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 13 patches, based on 40226a3d96ef8ab8980f032681c8bfd46d63874e. Subsystems affected by this patch series: mm/kasan mm/pagealloc mm/rmap mm/hmm hfs mm/hugetlb Subsystem: mm/kasan Marco Elver <elver@google.com>: mm: move helper to check slub_debug_enabled Yee Lee <yee.lee@mediatek.com>: kasan: add memzero init for unaligned size at DEBUG Marco Elver <elver@google.com>: kasan: fix build by including kernel.h Subsystem: mm/pagealloc Matteo Croce <mcroce@microsoft.com>: Revert "mm/page_alloc: make should_fail_alloc_page() static" Mel Gorman <mgorman@techsingularity.net>: mm/page_alloc: avoid page allocator recursion with pagesets.lock held Yanfei Xu <yanfei.xu@windriver.com>: mm/page_alloc: correct return value when failing at preparing Chuck Lever <chuck.lever@oracle.com>: mm/page_alloc: further fix __alloc_pages_bulk() return value Subsystem: mm/rmap Christoph Hellwig <hch@lst.de>: mm: fix the try_to_unmap prototype for !CONFIG_MMU Subsystem: mm/hmm Alistair Popple <apopple@nvidia.com>: lib/test_hmm: remove set but unused page variable Subsystem: hfs Desmond Cheong Zhi Xi <desmondcheongzx@gmail.com>: Patch series "hfs: fix various errors", v2: hfs: add missing clean-up in hfs_fill_super hfs: fix high memory mapping in hfs_bnode_read hfs: add lock nesting notation to hfs_find_init Subsystem: mm/hugetlb Joao Martins <joao.m.martins@oracle.com>: mm/hugetlb: fix refs calculation from unaligned @vaddr fs/hfs/bfind.c | 14 +++++++++++++- fs/hfs/bnode.c | 25 ++++++++++++++++++++----- fs/hfs/btree.h | 7 +++++++ fs/hfs/super.c | 10 +++++----- include/linux/kasan.h | 1 + include/linux/rmap.h | 4 +++- lib/test_hmm.c | 2 -- mm/hugetlb.c | 5 +++-- mm/kasan/kasan.h | 12 ++++++++++++ mm/page_alloc.c | 30 ++++++++++++++++++++++-------- mm/slab.h | 15 +++++++++++---- mm/slub.c | 14 -------------- 12 files changed, 97 insertions(+), 42 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-07-08 0:59 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-07-08 0:59 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 54 patches, based on a931dd33d370896a683236bba67c0d6f3d01144d. Subsystems affected by this patch series: lib mm/slub mm/secretmem mm/cleanups mm/init debug mm/pagemap mm/mremap Subsystem: lib Zhen Lei <thunder.leizhen@huawei.com>: lib/test: fix spelling mistakes lib: fix spelling mistakes lib: fix spelling mistakes in header files Subsystem: mm/slub Nathan Chancellor <nathan@kernel.org>: Patch series "hexagon: Fix build error with CONFIG_STACKDEPOT and select CONFIG_ARCH_WANT_LD_ORPHAN_WARN": hexagon: handle {,SOFT}IRQENTRY_TEXT in linker script hexagon: use common DISCARDS macro hexagon: select ARCH_WANT_LD_ORPHAN_WARN Oliver Glitta <glittao@gmail.com>: mm/slub: use stackdepot to save stack trace in objects Subsystem: mm/secretmem Mike Rapoport <rppt@linux.ibm.com>: Patch series "mm: introduce memfd_secret system call to create "secret" memory areas", v20: mmap: make mlock_future_check() global riscv/Kconfig: make direct map manipulation options depend on MMU set_memory: allow querying whether set_direct_map_*() is actually enabled mm: introduce memfd_secret system call to create "secret" memory areas PM: hibernate: disable when there are active secretmem users arch, mm: wire up memfd_secret system call where relevant secretmem: test: add basic selftest for memfd_secret(2) Subsystem: mm/cleanups Zhen Lei <thunder.leizhen@huawei.com>: mm: fix spelling mistakes in header files Subsystem: mm/init Kefeng Wang <wangkefeng.wang@huawei.com>: Patch series "init_mm: cleanup ARCH's text/data/brk setup code", v3: mm: add setup_initial_init_mm() helper arc: convert to setup_initial_init_mm() arm: convert to setup_initial_init_mm() arm64: convert to setup_initial_init_mm() csky: convert to setup_initial_init_mm() h8300: convert to setup_initial_init_mm() m68k: convert to setup_initial_init_mm() nds32: convert to setup_initial_init_mm() nios2: convert to setup_initial_init_mm() openrisc: convert to setup_initial_init_mm() powerpc: convert to setup_initial_init_mm() riscv: convert to setup_initial_init_mm() s390: convert to setup_initial_init_mm() sh: convert to setup_initial_init_mm() x86: convert to setup_initial_init_mm() Subsystem: debug Stephen Boyd <swboyd@chromium.org>: Patch series "Add build ID to stacktraces", v6: buildid: only consider GNU notes for build ID parsing buildid: add API to parse build ID out of buffer buildid: stash away kernels build ID on init dump_stack: add vmlinux build ID to stack traces module: add printk formats to add module build ID to stacktraces arm64: stacktrace: use %pSb for backtrace printing x86/dumpstack: use %pSb/%pBb for backtrace printing scripts/decode_stacktrace.sh: support debuginfod scripts/decode_stacktrace.sh: silence stderr messages from addr2line/nm scripts/decode_stacktrace.sh: indicate 'auto' can be used for base path buildid: mark some arguments const buildid: fix kernel-doc notation kdump: use vmlinux_build_id to simplify Subsystem: mm/pagemap "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>: mm: rename pud_page_vaddr to pud_pgtable and make it return pmd_t * mm: rename p4d_page_vaddr to p4d_pgtable and make it return pud_t * Subsystem: mm/mremap "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>: Patch series "mrermap fixes", v2: selftest/mremap_test: update the test to handle pagesize other than 4K selftest/mremap_test: avoid crash with static build mm/mremap: convert huge PUD move to separate helper mm/mremap: don't enable optimized PUD move if page table levels is 2 mm/mremap: use pmd/pud_poplulate to update page table entries mm/mremap: hold the rmap lock in write mode when moving page table entries. Patch series "Speedup mremap on ppc64", v8: mm/mremap: allow arch runtime override powerpc/book3s64/mm: update flush_tlb_range to flush page walk cache powerpc/mm: enable HAVE_MOVE_PMD support Documentation/core-api/printk-formats.rst | 11 arch/alpha/include/asm/pgtable.h | 8 arch/arc/mm/init.c | 5 arch/arm/include/asm/pgtable-3level.h | 2 arch/arm/kernel/setup.c | 5 arch/arm64/include/asm/Kbuild | 1 arch/arm64/include/asm/cacheflush.h | 6 arch/arm64/include/asm/kfence.h | 2 arch/arm64/include/asm/pgtable.h | 8 arch/arm64/include/asm/set_memory.h | 17 + arch/arm64/include/uapi/asm/unistd.h | 1 arch/arm64/kernel/machine_kexec.c | 1 arch/arm64/kernel/setup.c | 5 arch/arm64/kernel/stacktrace.c | 2 arch/arm64/mm/mmu.c | 7 arch/arm64/mm/pageattr.c | 13 arch/csky/kernel/setup.c | 5 arch/h8300/kernel/setup.c | 5 arch/hexagon/Kconfig | 1 arch/hexagon/kernel/vmlinux.lds.S | 9 arch/ia64/include/asm/pgtable.h | 4 arch/m68k/include/asm/motorola_pgtable.h | 2 arch/m68k/kernel/setup_mm.c | 5 arch/m68k/kernel/setup_no.c | 5 arch/mips/include/asm/pgtable-64.h | 8 arch/nds32/kernel/setup.c | 5 arch/nios2/kernel/setup.c | 5 arch/openrisc/kernel/setup.c | 5 arch/parisc/include/asm/pgtable.h | 4 arch/powerpc/include/asm/book3s/64/pgtable.h | 11 arch/powerpc/include/asm/book3s/64/tlbflush-radix.h | 2 arch/powerpc/include/asm/nohash/64/pgtable-4k.h | 6 arch/powerpc/include/asm/nohash/64/pgtable.h | 6 arch/powerpc/include/asm/tlb.h | 6 arch/powerpc/kernel/setup-common.c | 5 arch/powerpc/mm/book3s64/radix_hugetlbpage.c | 8 arch/powerpc/mm/book3s64/radix_pgtable.c | 6 arch/powerpc/mm/book3s64/radix_tlb.c | 44 +- arch/powerpc/mm/pgtable_64.c | 4 arch/powerpc/platforms/Kconfig.cputype | 2 arch/riscv/Kconfig | 4 arch/riscv/include/asm/pgtable-64.h | 4 arch/riscv/include/asm/unistd.h | 1 arch/riscv/kernel/setup.c | 5 arch/s390/kernel/setup.c | 5 arch/sh/include/asm/pgtable-3level.h | 4 arch/sh/kernel/setup.c | 5 arch/sparc/include/asm/pgtable_32.h | 6 arch/sparc/include/asm/pgtable_64.h | 10 arch/um/include/asm/pgtable-3level.h | 2 arch/x86/entry/syscalls/syscall_32.tbl | 1 arch/x86/entry/syscalls/syscall_64.tbl | 1 arch/x86/include/asm/pgtable.h | 8 arch/x86/kernel/dumpstack.c | 2 arch/x86/kernel/setup.c | 5 arch/x86/mm/init_64.c | 4 arch/x86/mm/pat/set_memory.c | 4 arch/x86/mm/pgtable.c | 2 include/asm-generic/pgtable-nop4d.h | 2 include/asm-generic/pgtable-nopmd.h | 2 include/asm-generic/pgtable-nopud.h | 4 include/linux/bootconfig.h | 4 include/linux/buildid.h | 10 include/linux/compaction.h | 4 include/linux/cpumask.h | 2 include/linux/crash_core.h | 12 include/linux/debugobjects.h | 2 include/linux/hmm.h | 2 include/linux/hugetlb.h | 6 include/linux/kallsyms.h | 21 + include/linux/list_lru.h | 4 include/linux/lru_cache.h | 8 include/linux/mm.h | 3 include/linux/mmu_notifier.h | 8 include/linux/module.h | 9 include/linux/nodemask.h | 6 include/linux/percpu-defs.h | 2 include/linux/percpu-refcount.h | 2 include/linux/pgtable.h | 4 include/linux/scatterlist.h | 2 include/linux/secretmem.h | 54 +++ include/linux/set_memory.h | 12 include/linux/shrinker.h | 2 include/linux/syscalls.h | 1 include/linux/vmalloc.h | 4 include/uapi/asm-generic/unistd.h | 7 include/uapi/linux/magic.h | 1 init/Kconfig | 1 init/main.c | 2 kernel/crash_core.c | 50 --- kernel/kallsyms.c | 104 +++++-- kernel/module.c | 42 ++ kernel/power/hibernate.c | 5 kernel/sys_ni.c | 2 lib/Kconfig.debug | 17 - lib/asn1_encoder.c | 2 lib/buildid.c | 80 ++++- lib/devres.c | 2 lib/dump_stack.c | 13 lib/dynamic_debug.c | 2 lib/fonts/font_pearl_8x8.c | 2 lib/kfifo.c | 2 lib/list_sort.c | 2 lib/nlattr.c | 4 lib/oid_registry.c | 2 lib/pldmfw/pldmfw.c | 2 lib/reed_solomon/test_rslib.c | 2 lib/refcount.c | 2 lib/rhashtable.c | 2 lib/sbitmap.c | 2 lib/scatterlist.c | 4 lib/seq_buf.c | 2 lib/sort.c | 2 lib/stackdepot.c | 2 lib/test_bitops.c | 2 lib/test_bpf.c | 2 lib/test_kasan.c | 2 lib/test_kmod.c | 6 lib/test_scanf.c | 2 lib/vsprintf.c | 10 mm/Kconfig | 4 mm/Makefile | 1 mm/gup.c | 12 mm/init-mm.c | 9 mm/internal.h | 3 mm/mlock.c | 3 mm/mmap.c | 5 mm/mremap.c | 108 ++++++- mm/secretmem.c | 254 +++++++++++++++++ mm/slub.c | 79 +++-- scripts/checksyscalls.sh | 4 scripts/decode_stacktrace.sh | 89 +++++- tools/testing/selftests/vm/.gitignore | 1 tools/testing/selftests/vm/Makefile | 3 tools/testing/selftests/vm/memfd_secret.c | 296 ++++++++++++++++++++ tools/testing/selftests/vm/mremap_test.c | 116 ++++--- tools/testing/selftests/vm/run_vmtests.sh | 17 + 137 files changed, 1470 insertions(+), 442 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-07-01 1:46 Andrew Morton 2021-07-03 0:28 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2021-07-01 1:46 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits This is the rest of the -mm tree, less 66 patches which are dependent on things which are (or were recently) in linux-next. I'll trickle that material over next week. 192 patches, based on 7cf3dead1ad70c72edb03e2d98e1f3dcd332cdb2 plus the June 28 sendings. Subsystems affected by this patch series: mm/hugetlb mm/userfaultfd mm/vmscan mm/kconfig mm/proc mm/z3fold mm/zbud mm/ras mm/mempolicy mm/memblock mm/migration mm/thp mm/nommu mm/kconfig mm/madvise mm/memory-hotplug mm/zswap mm/zsmalloc mm/zram mm/cleanups mm/kfence mm/hmm procfs sysctl misc core-kernel lib lz4 checkpatch init kprobes nilfs2 hfs signals exec kcov selftests compress/decompress ipc Subsystem: mm/hugetlb Muchun Song <songmuchun@bytedance.com>: Patch series "Free some vmemmap pages of HugeTLB page", v23: mm: memory_hotplug: factor out bootmem core functions to bootmem_info.c mm: hugetlb: introduce a new config HUGETLB_PAGE_FREE_VMEMMAP mm: hugetlb: gather discrete indexes of tail page mm: hugetlb: free the vmemmap pages associated with each HugeTLB page mm: hugetlb: defer freeing of HugeTLB pages mm: hugetlb: alloc the vmemmap pages associated with each HugeTLB page mm: hugetlb: add a kernel parameter hugetlb_free_vmemmap mm: memory_hotplug: disable memmap_on_memory when hugetlb_free_vmemmap enabled mm: hugetlb: introduce nr_free_vmemmap_pages in the struct hstate Shixin Liu <liushixin2@huawei.com>: mm/debug_vm_pgtable: move {pmd/pud}_huge_tests out of CONFIG_TRANSPARENT_HUGEPAGE mm/debug_vm_pgtable: remove redundant pfn_{pmd/pte}() and fix one comment mistake Miaohe Lin <linmiaohe@huawei.com>: Patch series "Cleanup and fixup for huge_memory:, v3: mm/huge_memory.c: remove dedicated macro HPAGE_CACHE_INDEX_MASK mm/huge_memory.c: use page->deferred_list mm/huge_memory.c: add missing read-only THP checking in transparent_hugepage_enabled() mm/huge_memory.c: remove unnecessary tlb_remove_page_size() for huge zero pmd mm/huge_memory.c: don't discard hugepage if other processes are mapping it Christophe Leroy <christophe.leroy@csgroup.eu>: Patch series "Subject: [PATCH v2 0/5] Implement huge VMAP and VMALLOC on powerpc 8xx", v2: mm/hugetlb: change parameters of arch_make_huge_pte() mm/pgtable: add stubs for {pmd/pub}_{set/clear}_huge mm/vmalloc: enable mapping of huge pages at pte level in vmap mm/vmalloc: enable mapping of huge pages at pte level in vmalloc powerpc/8xx: add support for huge pages on VMAP and VMALLOC Nanyong Sun <sunnanyong@huawei.com>: khugepaged: selftests: remove debug_cow Mina Almasry <almasrymina@google.com>: mm, hugetlb: fix racy resv_huge_pages underflow on UFFDIO_COPY Muchun Song <songmuchun@bytedance.com>: Patch series "Split huge PMD mapping of vmemmap pages", v4: mm: sparsemem: split the huge PMD mapping of vmemmap pages mm: sparsemem: use huge PMD mapping for vmemmap pages mm: hugetlb: introduce CONFIG_HUGETLB_PAGE_FREE_VMEMMAP_DEFAULT_ON Mike Kravetz <mike.kravetz@oracle.com>: Patch series "Fix prep_compound_gigantic_page ref count adjustment": hugetlb: remove prep_compound_huge_page cleanup hugetlb: address ref count racing in prep_compound_gigantic_page Naoya Horiguchi <naoya.horiguchi@nec.com>: mm/hwpoison: disable pcp for page_handle_poison() Subsystem: mm/userfaultfd Peter Xu <peterx@redhat.com>: Patch series "userfaultfd/selftests: A few cleanups", v2: userfaultfd/selftests: use user mode only userfaultfd/selftests: remove the time() check on delayed uffd userfaultfd/selftests: dropping VERIFY check in locking_thread userfaultfd/selftests: only dump counts if mode enabled userfaultfd/selftests: unify error handling Patch series "mm/uffd: Misc fix for uffd-wp and one more test": mm/thp: simplify copying of huge zero page pmd when fork mm/userfaultfd: fix uffd-wp special cases for fork() mm/userfaultfd: fail uffd-wp registration if not supported mm/pagemap: export uffd-wp protection information userfaultfd/selftests: add pagemap uffd-wp test Axel Rasmussen <axelrasmussen@google.com>: Patch series "userfaultfd: add minor fault handling for shmem", v6: userfaultfd/shmem: combine shmem_{mcopy_atomic,mfill_zeropage}_pte userfaultfd/shmem: support minor fault registration for shmem userfaultfd/shmem: support UFFDIO_CONTINUE for shmem userfaultfd/shmem: advertise shmem minor fault support userfaultfd/shmem: modify shmem_mfill_atomic_pte to use install_pte() userfaultfd/selftests: use memfd_create for shmem test type userfaultfd/selftests: create alias mappings in the shmem test userfaultfd/selftests: reinitialize test context in each test userfaultfd/selftests: exercise minor fault handling shmem support Subsystem: mm/vmscan Yu Zhao <yuzhao@google.com>: mm/vmscan.c: fix potential deadlock in reclaim_pages() include/trace/events/vmscan.h: remove mm_vmscan_inactive_list_is_low Miaohe Lin <linmiaohe@huawei.com>: mm: workingset: define macro WORKINGSET_SHIFT Subsystem: mm/kconfig Kefeng Wang <wangkefeng.wang@huawei.com>: mm/kconfig: move HOLES_IN_ZONE into mm Subsystem: mm/proc Mike Rapoport <rppt@linux.ibm.com>: docs: proc.rst: meminfo: briefly describe gaps in memory accounting David Hildenbrand <david@redhat.com>: Patch series "fs/proc/kcore: don't read offline sections, logically offline pages and hwpoisoned pages", v3: fs/proc/kcore: drop KCORE_REMAP and KCORE_OTHER fs/proc/kcore: pfn_is_ram check only applies to KCORE_RAM fs/proc/kcore: don't read offline sections, logically offline pages and hwpoisoned pages mm: introduce page_offline_(begin|end|freeze|thaw) to synchronize setting PageOffline() virtio-mem: use page_offline_(start|end) when setting PageOffline() fs/proc/kcore: use page_offline_(freeze|thaw) Subsystem: mm/z3fold Miaohe Lin <linmiaohe@huawei.com>: Patch series "Cleanup and fixup for z3fold": mm/z3fold: define macro NCHUNKS as TOTAL_CHUNKS - ZHDR_CHUNKS mm/z3fold: avoid possible underflow in z3fold_alloc() mm/z3fold: remove magic number in z3fold_create_pool() mm/z3fold: remove unused function handle_to_z3fold_header() mm/z3fold: fix potential memory leak in z3fold_destroy_pool() mm/z3fold: use release_z3fold_page_locked() to release locked z3fold page Subsystem: mm/zbud Miaohe Lin <linmiaohe@huawei.com>: Patch series "Cleanups for zbud", v2: mm/zbud: reuse unbuddied[0] as buddied in zbud_pool mm/zbud: don't export any zbud API Subsystem: mm/ras YueHaibing <yuehaibing@huawei.com>: mm/compaction: use DEVICE_ATTR_WO macro Liu Xiang <liu.xiang@zlingsmart.com>: mm: compaction: remove duplicate !list_empty(&sublist) check Wonhyuk Yang <vvghjk1234@gmail.com>: mm/compaction: fix 'limit' in fast_isolate_freepages Subsystem: mm/mempolicy Feng Tang <feng.tang@intel.com>: Patch series "mm/mempolicy: some fix and semantics cleanup", v4: mm/mempolicy: cleanup nodemask intersection check for oom mm/mempolicy: don't handle MPOL_LOCAL like a fake MPOL_PREFERRED policy mm/mempolicy: unify the parameter sanity check for mbind and set_mempolicy Yang Shi <shy828301@gmail.com>: mm: mempolicy: don't have to split pmd for huge zero page Ben Widawsky <ben.widawsky@intel.com>: mm/mempolicy: use unified 'nodes' for bind/interleave/prefer policies Subsystem: mm/memblock Mike Rapoport <rppt@linux.ibm.com>: Patch series "arm64: drop pfn_valid_within() and simplify pfn_valid()", v4: include/linux/mmzone.h: add documentation for pfn_valid() memblock: update initialization of reserved pages arm64: decouple check whether pfn is in linear map from pfn_valid() arm64: drop pfn_valid_within() and simplify pfn_valid() Anshuman Khandual <anshuman.khandual@arm.com>: arm64/mm: drop HAVE_ARCH_PFN_VALID Subsystem: mm/migration Muchun Song <songmuchun@bytedance.com>: mm: migrate: fix missing update page_private to hugetlb_page_subpool Subsystem: mm/thp Collin Fijalkovich <cfijalkovich@google.com>: mm, thp: relax the VM_DENYWRITE constraint on file-backed THPs Yang Shi <shy828301@gmail.com>: mm: memory: add orig_pmd to struct vm_fault mm: memory: make numa_migrate_prep() non-static mm: thp: refactor NUMA fault handling mm: migrate: account THP NUMA migration counters correctly mm: migrate: don't split THP for misplaced NUMA page mm: migrate: check mapcount for THP instead of refcount mm: thp: skip make PMD PROT_NONE if THP migration is not supported Anshuman Khandual <anshuman.khandual@arm.com>: mm/thp: make ARCH_ENABLE_SPLIT_PMD_PTLOCK dependent on PGTABLE_LEVELS > 2 Yang Shi <shy828301@gmail.com>: mm: rmap: make try_to_unmap() void function Hugh Dickins <hughd@google.com>: mm/thp: remap_page() is only needed on anonymous THP mm: hwpoison_user_mappings() try_to_unmap() with TTU_SYNC "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm/thp: fix strncpy warning Subsystem: mm/nommu Chen Li <chenli@uniontech.com>: nommu: remove __GFP_HIGHMEM in vmalloc/vzalloc Liam Howlett <liam.howlett@oracle.com>: mm/nommu: unexport do_munmap() Subsystem: mm/kconfig Kefeng Wang <wangkefeng.wang@huawei.com>: mm: generalize ZONE_[DMA|DMA32] Subsystem: mm/madvise David Hildenbrand <david@redhat.com>: Patch series "mm/madvise: introduce MADV_POPULATE_(READ|WRITE) to prefault page tables", v2: mm: make variable names for populate_vma_page_range() consistent mm/madvise: introduce MADV_POPULATE_(READ|WRITE) to prefault page tables MAINTAINERS: add tools/testing/selftests/vm/ to MEMORY MANAGEMENT selftests/vm: add protection_keys_32 / protection_keys_64 to gitignore selftests/vm: add test for MADV_POPULATE_(READ|WRITE) Subsystem: mm/memory-hotplug Liam Mark <lmark@codeaurora.org>: mm/memory_hotplug: rate limit page migration warnings Oscar Salvador <osalvador@suse.de>: mm,memory_hotplug: drop unneeded locking Subsystem: mm/zswap Miaohe Lin <linmiaohe@huawei.com>: Patch series "Cleanup and fixup for zswap": mm/zswap.c: remove unused function zswap_debugfs_exit() mm/zswap.c: avoid unnecessary copy-in at map time mm/zswap.c: fix two bugs in zswap_writeback_entry() Subsystem: mm/zsmalloc Zhaoyang Huang <zhaoyang.huang@unisoc.com>: mm: zram: amend SLAB_RECLAIM_ACCOUNT on zspage_cachep Miaohe Lin <linmiaohe@huawei.com>: Patch series "Cleanup for zsmalloc": mm/zsmalloc.c: remove confusing code in obj_free() mm/zsmalloc.c: improve readability for async_free_zspage() Subsystem: mm/zram Yue Hu <huyue2@yulong.com>: zram: move backing_dev under macro CONFIG_ZRAM_WRITEBACK Subsystem: mm/cleanups Hyeonggon Yoo <42.hyeyoo@gmail.com>: mm: fix typos and grammar error in comments Anshuman Khandual <anshuman.khandual@arm.com>: mm: define default value for FIRST_USER_ADDRESS Zhen Lei <thunder.leizhen@huawei.com>: mm: fix spelling mistakes Mel Gorman <mgorman@techsingularity.net>: Patch series "Clean W=1 build warnings for mm/": mm/vmscan: remove kerneldoc-like comment from isolate_lru_pages mm/vmalloc: include header for prototype of set_iounmap_nonlazy mm/page_alloc: make should_fail_alloc_page() static mm/mapping_dirty_helpers: remove double Note in kerneldoc mm/memcontrol.c: fix kerneldoc comment for mem_cgroup_calculate_protection mm/memory_hotplug: fix kerneldoc comment for __try_online_node mm/memory_hotplug: fix kerneldoc comment for __remove_memory mm/zbud: add kerneldoc fields for zbud_pool mm/z3fold: add kerneldoc fields for z3fold_pool mm/swap: make swap_address_space an inline function mm/mmap_lock: remove dead code for !CONFIG_TRACING configurations mm/page_alloc: move prototype for find_suitable_fallback mm/swap: make NODE_DATA an inline function on CONFIG_FLATMEM Anshuman Khandual <anshuman.khandual@arm.com>: mm/thp: define default pmd_pgtable() Subsystem: mm/kfence Marco Elver <elver@google.com>: kfence: unconditionally use unbound work queue Subsystem: mm/hmm Alistair Popple <apopple@nvidia.com>: Patch series "Add support for SVM atomics in Nouveau", v11: mm: remove special swap entry functions mm/swapops: rework swap entry manipulation code mm/rmap: split try_to_munlock from try_to_unmap mm/rmap: split migration into its own function mm: rename migrate_pgmap_owner mm/memory.c: allow different return codes for copy_nonpresent_pte() mm: device exclusive memory access mm: selftests for exclusive device memory nouveau/svm: refactor nouveau_range_fault nouveau/svm: implement atomic SVM access Subsystem: procfs Marcelo Henrique Cerri <marcelo.cerri@canonical.com>: proc: Avoid mixing integer types in mem_rw() ZHOUFENG <zhoufeng.zf@bytedance.com>: fs/proc/kcore.c: add mmap interface Kalesh Singh <kaleshsingh@google.com>: procfs: allow reading fdinfo with PTRACE_MODE_READ procfs/dmabuf: add inode number to /proc/*/fdinfo Subsystem: sysctl Jiapeng Chong <jiapeng.chong@linux.alibaba.com>: sysctl: remove redundant assignment to first Subsystem: misc Andy Shevchenko <andriy.shevchenko@linux.intel.com>: drm: include only needed headers in ascii85.h Subsystem: core-kernel Andy Shevchenko <andriy.shevchenko@linux.intel.com>: kernel.h: split out panic and oops helpers Subsystem: lib Zhen Lei <thunder.leizhen@huawei.com>: lib: decompress_bunzip2: remove an unneeded semicolon Andy Shevchenko <andriy.shevchenko@linux.intel.com>: Patch series "lib/string_helpers: get rid of ugly *_escape_mem_ascii()", v3: lib/string_helpers: switch to use BIT() macro lib/string_helpers: move ESCAPE_NP check inside 'else' branch in a loop lib/string_helpers: drop indentation level in string_escape_mem() lib/string_helpers: introduce ESCAPE_NA for escaping non-ASCII lib/string_helpers: introduce ESCAPE_NAP to escape non-ASCII and non-printable lib/string_helpers: allow to append additional characters to be escaped lib/test-string_helpers: print flags in hexadecimal format lib/test-string_helpers: get rid of trailing comma in terminators lib/test-string_helpers: add test cases for new features MAINTAINERS: add myself as designated reviewer for generic string library seq_file: introduce seq_escape_mem() seq_file: add seq_escape_str() as replica of string_escape_str() seq_file: convert seq_escape() to use seq_escape_str() nfsd: avoid non-flexible API in seq_quote_mem() seq_file: drop unused *_escape_mem_ascii() Trent Piepho <tpiepho@gmail.com>: lib/math/rational.c: fix divide by zero lib/math/rational: add Kunit test cases Zhen Lei <thunder.leizhen@huawei.com>: lib/decompressors: fix spelling mistakes lib/mpi: fix spelling mistakes Alexey Dobriyan <adobriyan@gmail.com>: lib: memscan() fixlet lib: uninline simple_strtoull() Matteo Croce <mcroce@microsoft.com>: lib/test_string.c: allow module removal Andy Shevchenko <andriy.shevchenko@linux.intel.com>: kernel.h: split out kstrtox() and simple_strtox() to a separate header Subsystem: lz4 Rajat Asthana <thisisrast7@gmail.com>: lz4_decompress: declare LZ4_decompress_safe_withPrefix64k static Dimitri John Ledkov <dimitri.ledkov@canonical.com>: lib/decompress_unlz4.c: correctly handle zero-padding around initrds. Subsystem: checkpatch Guenter Roeck <linux@roeck-us.net>: checkpatch: scripts/spdxcheck.py now requires python3 Joe Perches <joe@perches.com>: checkpatch: improve the indented label test Guenter Roeck <linux@roeck-us.net>: checkpatch: do not complain about positive return values starting with EPOLL Subsystem: init Andrew Halaney <ahalaney@redhat.com>: init: print out unknown kernel parameters Subsystem: kprobes Barry Song <song.bao.hua@hisilicon.com>: kprobes: remove duplicated strong free_insn_page in x86 and s390 Subsystem: nilfs2 Colin Ian King <colin.king@canonical.com>: nilfs2: remove redundant continue statement in a while-loop Subsystem: hfs Zhen Lei <thunder.leizhen@huawei.com>: hfsplus: remove unnecessary oom message Chung-Chiang Cheng <shepjeng@gmail.com>: hfsplus: report create_date to kstat.btime Subsystem: signals Al Viro <viro@zeniv.linux.org.uk>: x86: signal: don't do sas_ss_reset() until we are certain that sigframe won't be abandoned Subsystem: exec Alexey Dobriyan <adobriyan@gmail.com>: exec: remove checks in __register_bimfmt() Subsystem: kcov Marco Elver <elver@google.com>: kcov: add __no_sanitize_coverage to fix noinstr for all architectures Subsystem: selftests Dave Hansen <dave.hansen@linux.intel.com>: Patch series "selftests/vm/pkeys: Bug fixes and a new test": selftests/vm/pkeys: fix alloc_random_pkey() to make it really, really random selftests/vm/pkeys: handle negative sys_pkey_alloc() return code selftests/vm/pkeys: refill shadow register after implicit kernel write selftests/vm/pkeys: exercise x86 XSAVE init state Subsystem: compress/decompress Yu Kuai <yukuai3@huawei.com>: lib/decompressors: remove set but not used variabled 'level' Subsystem: ipc Vasily Averin <vvs@virtuozzo.com>: Patch series "ipc: allocations cleanup", v2: ipc sem: use kvmalloc for sem_undo allocation ipc: use kmalloc for msg_queue and shmid_kernel Manfred Spraul <manfred@colorfullife.com>: ipc/sem.c: use READ_ONCE()/WRITE_ONCE() for use_global_lock ipc/util.c: use binary search for max_idx Documentation/admin-guide/kernel-parameters.txt | 35 Documentation/admin-guide/mm/hugetlbpage.rst | 11 Documentation/admin-guide/mm/memory-hotplug.rst | 13 Documentation/admin-guide/mm/pagemap.rst | 2 Documentation/admin-guide/mm/userfaultfd.rst | 3 Documentation/core-api/kernel-api.rst | 7 Documentation/filesystems/proc.rst | 48 Documentation/vm/hmm.rst | 19 Documentation/vm/unevictable-lru.rst | 33 MAINTAINERS | 10 arch/alpha/Kconfig | 5 arch/alpha/include/asm/pgalloc.h | 1 arch/alpha/include/asm/pgtable.h | 1 arch/alpha/include/uapi/asm/mman.h | 3 arch/alpha/kernel/setup.c | 2 arch/arc/include/asm/pgalloc.h | 2 arch/arc/include/asm/pgtable.h | 8 arch/arm/Kconfig | 3 arch/arm/include/asm/pgalloc.h | 1 arch/arm64/Kconfig | 15 arch/arm64/include/asm/hugetlb.h | 3 arch/arm64/include/asm/memory.h | 2 arch/arm64/include/asm/page.h | 4 arch/arm64/include/asm/pgalloc.h | 1 arch/arm64/include/asm/pgtable.h | 2 arch/arm64/kernel/setup.c | 1 arch/arm64/kvm/mmu.c | 2 arch/arm64/mm/hugetlbpage.c | 5 arch/arm64/mm/init.c | 51 arch/arm64/mm/ioremap.c | 4 arch/arm64/mm/mmu.c | 22 arch/csky/include/asm/pgalloc.h | 2 arch/csky/include/asm/pgtable.h | 1 arch/hexagon/include/asm/pgtable.h | 4 arch/ia64/Kconfig | 7 arch/ia64/include/asm/pal.h | 1 arch/ia64/include/asm/pgalloc.h | 1 arch/ia64/include/asm/pgtable.h | 1 arch/m68k/Kconfig | 5 arch/m68k/include/asm/mcf_pgalloc.h | 2 arch/m68k/include/asm/mcf_pgtable.h | 2 arch/m68k/include/asm/motorola_pgalloc.h | 1 arch/m68k/include/asm/motorola_pgtable.h | 2 arch/m68k/include/asm/pgtable_mm.h | 1 arch/m68k/include/asm/sun3_pgalloc.h | 1 arch/microblaze/Kconfig | 4 arch/microblaze/include/asm/pgalloc.h | 2 arch/microblaze/include/asm/pgtable.h | 2 arch/mips/Kconfig | 10 arch/mips/include/asm/pgalloc.h | 1 arch/mips/include/asm/pgtable-32.h | 1 arch/mips/include/asm/pgtable-64.h | 1 arch/mips/include/uapi/asm/mman.h | 3 arch/mips/kernel/relocate.c | 1 arch/mips/sgi-ip22/ip22-reset.c | 1 arch/mips/sgi-ip32/ip32-reset.c | 1 arch/nds32/include/asm/pgalloc.h | 5 arch/nios2/include/asm/pgalloc.h | 1 arch/nios2/include/asm/pgtable.h | 2 arch/openrisc/include/asm/pgalloc.h | 2 arch/openrisc/include/asm/pgtable.h | 1 arch/parisc/include/asm/pgalloc.h | 1 arch/parisc/include/asm/pgtable.h | 2 arch/parisc/include/uapi/asm/mman.h | 3 arch/parisc/kernel/pdc_chassis.c | 1 arch/powerpc/Kconfig | 6 arch/powerpc/include/asm/book3s/pgtable.h | 1 arch/powerpc/include/asm/nohash/32/hugetlb-8xx.h | 5 arch/powerpc/include/asm/nohash/32/mmu-8xx.h | 43 arch/powerpc/include/asm/nohash/32/pgtable.h | 1 arch/powerpc/include/asm/nohash/64/pgtable.h | 2 arch/powerpc/include/asm/pgalloc.h | 5 arch/powerpc/include/asm/pgtable.h | 6 arch/powerpc/kernel/setup-common.c | 1 arch/powerpc/platforms/Kconfig.cputype | 1 arch/riscv/Kconfig | 5 arch/riscv/include/asm/pgalloc.h | 2 arch/riscv/include/asm/pgtable.h | 2 arch/s390/Kconfig | 6 arch/s390/include/asm/pgalloc.h | 3 arch/s390/include/asm/pgtable.h | 5 arch/s390/kernel/ipl.c | 1 arch/s390/kernel/kprobes.c | 5 arch/s390/mm/pgtable.c | 2 arch/sh/include/asm/pgalloc.h | 1 arch/sh/include/asm/pgtable.h | 2 arch/sparc/Kconfig | 5 arch/sparc/include/asm/pgalloc_32.h | 1 arch/sparc/include/asm/pgalloc_64.h | 1 arch/sparc/include/asm/pgtable_32.h | 3 arch/sparc/include/asm/pgtable_64.h | 8 arch/sparc/kernel/sstate.c | 1 arch/sparc/mm/hugetlbpage.c | 6 arch/sparc/mm/init_64.c | 1 arch/um/drivers/mconsole_kern.c | 1 arch/um/include/asm/pgalloc.h | 1 arch/um/include/asm/pgtable-2level.h | 1 arch/um/include/asm/pgtable-3level.h | 1 arch/um/kernel/um_arch.c | 1 arch/x86/Kconfig | 17 arch/x86/include/asm/desc.h | 1 arch/x86/include/asm/pgalloc.h | 2 arch/x86/include/asm/pgtable_types.h | 2 arch/x86/kernel/cpu/mshyperv.c | 1 arch/x86/kernel/kprobes/core.c | 6 arch/x86/kernel/setup.c | 1 arch/x86/mm/init_64.c | 21 arch/x86/mm/pgtable.c | 34 arch/x86/purgatory/purgatory.c | 2 arch/x86/xen/enlighten.c | 1 arch/xtensa/include/asm/pgalloc.h | 2 arch/xtensa/include/asm/pgtable.h | 1 arch/xtensa/include/uapi/asm/mman.h | 3 arch/xtensa/platforms/iss/setup.c | 1 drivers/block/zram/zram_drv.h | 2 drivers/bus/brcmstb_gisb.c | 1 drivers/char/ipmi/ipmi_msghandler.c | 1 drivers/clk/analogbits/wrpll-cln28hpc.c | 4 drivers/edac/altera_edac.c | 1 drivers/firmware/google/gsmi.c | 1 drivers/gpu/drm/nouveau/include/nvif/if000c.h | 1 drivers/gpu/drm/nouveau/nouveau_svm.c | 162 ++- drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.h | 1 drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgp100.c | 6 drivers/hv/vmbus_drv.c | 1 drivers/hwtracing/coresight/coresight-cpu-debug.c | 1 drivers/leds/trigger/ledtrig-activity.c | 1 drivers/leds/trigger/ledtrig-heartbeat.c | 1 drivers/leds/trigger/ledtrig-panic.c | 1 drivers/misc/bcm-vk/bcm_vk_dev.c | 1 drivers/misc/ibmasm/heartbeat.c | 1 drivers/misc/pvpanic/pvpanic.c | 1 drivers/net/ipa/ipa_smp2p.c | 1 drivers/parisc/power.c | 1 drivers/power/reset/ltc2952-poweroff.c | 1 drivers/remoteproc/remoteproc_core.c | 1 drivers/s390/char/con3215.c | 1 drivers/s390/char/con3270.c | 1 drivers/s390/char/sclp.c | 1 drivers/s390/char/sclp_con.c | 1 drivers/s390/char/sclp_vt220.c | 1 drivers/s390/char/zcore.c | 1 drivers/soc/bcm/brcmstb/pm/pm-arm.c | 1 drivers/staging/olpc_dcon/olpc_dcon.c | 1 drivers/video/fbdev/hyperv_fb.c | 1 drivers/virtio/virtio_mem.c | 2 fs/Kconfig | 15 fs/exec.c | 3 fs/hfsplus/inode.c | 5 fs/hfsplus/xattr.c | 1 fs/nfsd/nfs4state.c | 2 fs/nilfs2/btree.c | 1 fs/open.c | 13 fs/proc/base.c | 6 fs/proc/fd.c | 20 fs/proc/kcore.c | 136 ++ fs/proc/task_mmu.c | 34 fs/seq_file.c | 43 fs/userfaultfd.c | 15 include/asm-generic/bug.h | 3 include/linux/ascii85.h | 3 include/linux/bootmem_info.h | 68 + include/linux/compat.h | 2 include/linux/compiler-clang.h | 17 include/linux/compiler-gcc.h | 6 include/linux/compiler_types.h | 2 include/linux/huge_mm.h | 74 - include/linux/hugetlb.h | 80 + include/linux/hugetlb_cgroup.h | 19 include/linux/kcore.h | 3 include/linux/kernel.h | 227 ---- include/linux/kprobes.h | 1 include/linux/kstrtox.h | 155 ++ include/linux/memblock.h | 4 include/linux/memory_hotplug.h | 27 include/linux/mempolicy.h | 9 include/linux/memremap.h | 2 include/linux/migrate.h | 27 include/linux/mm.h | 18 include/linux/mm_types.h | 2 include/linux/mmu_notifier.h | 26 include/linux/mmzone.h | 27 include/linux/mpi.h | 4 include/linux/page-flags.h | 22 include/linux/panic.h | 98 + include/linux/panic_notifier.h | 12 include/linux/pgtable.h | 44 include/linux/rmap.h | 13 include/linux/seq_file.h | 10 include/linux/shmem_fs.h | 19 include/linux/signal.h | 2 include/linux/string.h | 7 include/linux/string_helpers.h | 31 include/linux/sunrpc/cache.h | 1 include/linux/swap.h | 19 include/linux/swapops.h | 171 +-- include/linux/thread_info.h | 1 include/linux/userfaultfd_k.h | 5 include/linux/vmalloc.h | 15 include/linux/zbud.h | 23 include/trace/events/vmscan.h | 41 include/uapi/asm-generic/mman-common.h | 3 include/uapi/linux/mempolicy.h | 1 include/uapi/linux/userfaultfd.h | 7 init/main.c | 42 ipc/msg.c | 6 ipc/sem.c | 25 ipc/shm.c | 6 ipc/util.c | 44 ipc/util.h | 3 kernel/hung_task.c | 1 kernel/kexec_core.c | 1 kernel/kprobes.c | 2 kernel/panic.c | 1 kernel/rcu/tree.c | 2 kernel/signal.c | 14 kernel/sysctl.c | 4 kernel/trace/trace.c | 1 lib/Kconfig.debug | 12 lib/decompress_bunzip2.c | 6 lib/decompress_unlz4.c | 8 lib/decompress_unlzo.c | 3 lib/decompress_unxz.c | 2 lib/decompress_unzstd.c | 4 lib/kstrtox.c | 5 lib/lz4/lz4_decompress.c | 2 lib/math/Makefile | 1 lib/math/rational-test.c | 56 + lib/math/rational.c | 16 lib/mpi/longlong.h | 4 lib/mpi/mpicoder.c | 6 lib/mpi/mpiutil.c | 2 lib/parser.c | 1 lib/string.c | 2 lib/string_helpers.c | 142 +- lib/test-string_helpers.c | 157 ++- lib/test_hmm.c | 127 ++ lib/test_hmm_uapi.h | 2 lib/test_string.c | 5 lib/vsprintf.c | 1 lib/xz/xz_dec_bcj.c | 2 lib/xz/xz_dec_lzma2.c | 8 lib/zlib_inflate/inffast.c | 2 lib/zstd/huf.h | 2 mm/Kconfig | 16 mm/Makefile | 2 mm/bootmem_info.c | 127 ++ mm/compaction.c | 20 mm/debug_vm_pgtable.c | 109 -- mm/gup.c | 58 + mm/hmm.c | 12 mm/huge_memory.c | 269 ++--- mm/hugetlb.c | 369 +++++-- mm/hugetlb_vmemmap.c | 332 ++++++ mm/hugetlb_vmemmap.h | 53 - mm/internal.h | 29 mm/kfence/core.c | 4 mm/khugepaged.c | 20 mm/madvise.c | 66 + mm/mapping_dirty_helpers.c | 2 mm/memblock.c | 28 mm/memcontrol.c | 4 mm/memory-failure.c | 38 mm/memory.c | 239 +++- mm/memory_hotplug.c | 161 --- mm/mempolicy.c | 323 ++---- mm/migrate.c | 268 +---- mm/mlock.c | 12 mm/mmap_lock.c | 59 - mm/mprotect.c | 18 mm/nommu.c | 5 mm/oom_kill.c | 2 mm/page_alloc.c | 5 mm/page_vma_mapped.c | 15 mm/rmap.c | 644 +++++++++--- mm/shmem.c | 125 -- mm/sparse-vmemmap.c | 432 +++++++- mm/sparse.c | 1 mm/swap.c | 2 mm/swapfile.c | 2 mm/userfaultfd.c | 249 ++-- mm/util.c | 40 mm/vmalloc.c | 37 mm/vmscan.c | 20 mm/workingset.c | 10 mm/z3fold.c | 39 mm/zbud.c | 235 ++-- mm/zsmalloc.c | 5 mm/zswap.c | 26 scripts/checkpatch.pl | 16 tools/testing/selftests/vm/.gitignore | 3 tools/testing/selftests/vm/Makefile | 5 tools/testing/selftests/vm/hmm-tests.c | 158 +++ tools/testing/selftests/vm/khugepaged.c | 4 tools/testing/selftests/vm/madv_populate.c | 342 ++++++ tools/testing/selftests/vm/pkey-x86.h | 1 tools/testing/selftests/vm/protection_keys.c | 85 + tools/testing/selftests/vm/run_vmtests.sh | 16 tools/testing/selftests/vm/userfaultfd.c | 1094 ++++++++++----------- 299 files changed, 6277 insertions(+), 3183 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2021-07-01 1:46 incoming Andrew Morton @ 2021-07-03 0:28 ` Linus Torvalds 2021-07-03 1:06 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Linus Torvalds @ 2021-07-03 0:28 UTC (permalink / raw) To: Andrew Morton; +Cc: Linux-MM, mm-commits On Wed, Jun 30, 2021 at 6:46 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > This is the rest of the -mm tree, less 66 patches which are dependent on > things which are (or were recently) in linux-next. I'll trickle that > material over next week. I haven't bisected this yet, but with the current -git I'm getting watchdog: BUG: soft lockup - CPU#41 stuck for 49s! and the common call chain seems to be in flush_tlb_mm_range -> on_each_cpu_cond_mask. Commit e058a84bfddc42ba356a2316f2cf1141974625c9 is good, and looking at the pulls and merges I've done since, this -mm series looks like the obvious culprit. I'll go start bisection, but I thought I'd give a heads-up in case somebody else has seen TLB-flush-related lockups and already figured out the guilty party.. Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2021-07-03 0:28 ` incoming Linus Torvalds @ 2021-07-03 1:06 ` Linus Torvalds 0 siblings, 0 replies; 370+ messages in thread From: Linus Torvalds @ 2021-07-03 1:06 UTC (permalink / raw) To: Andrew Morton; +Cc: Linux-MM, mm-commits On Fri, Jul 2, 2021 at 5:28 PM Linus Torvalds <torvalds@linux-foundation.org> wrote: > > Commit e058a84bfddc42ba356a2316f2cf1141974625c9 is good, and looking > at the pulls and merges I've done since, this -mm series looks like > the obvious culprit. No, unless my bisection is wrong, the -mm branch is innocent, and was discarded from the suspects on the very first bisection trial. So never mind. Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-06-29 2:32 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-06-29 2:32 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 192 patches, based on 7cf3dead1ad70c72edb03e2d98e1f3dcd332cdb2. Subsystems affected by this patch series: mm/gup mm/pagealloc kthread ia64 scripts ntfs squashfs ocfs2 z kernel/watchdog mm/slab mm/slub mm/kmemleak mm/dax mm/debug mm/pagecache mm/gup mm/swap mm/memcg mm/pagemap mm/mprotect mm/bootmem mm/dma mm/tracing mm/vmalloc mm/kasan mm/initialization mm/pagealloc mm/memory-failure Subsystem: mm/gup Jann Horn <jannh@google.com>: mm/gup: fix try_grab_compound_head() race with split_huge_page() Subsystem: mm/pagealloc Mike Rapoport <rppt@linux.ibm.com>: mm/page_alloc: fix memory map initialization for descending nodes Mel Gorman <mgorman@techsingularity.net>: mm/page_alloc: correct return value of populated elements if bulk array is populated Subsystem: kthread Jonathan Neuschäfer <j.neuschaefer@gmx.net>: kthread: switch to new kerneldoc syntax for named variable macro argument Petr Mladek <pmladek@suse.com>: kthread_worker: fix return value when kthread_mod_delayed_work() races with kthread_cancel_delayed_work_sync() Subsystem: ia64 Randy Dunlap <rdunlap@infradead.org>: ia64: headers: drop duplicated words Arnd Bergmann <arnd@arndb.de>: ia64: mca_drv: fix incorrect array size calculation Subsystem: scripts "Steven Rostedt (VMware)" <rostedt@goodmis.org>: Patch series "streamline_config.pl: Fix Perl spacing": streamline_config.pl: make spacing consistent streamline_config.pl: add softtabstop=4 for vim users Colin Ian King <colin.king@canonical.com>: scripts/spelling.txt: add more spellings to spelling.txt Subsystem: ntfs Desmond Cheong Zhi Xi <desmondcheongzx@gmail.com>: ntfs: fix validity check for file name attribute Subsystem: squashfs Vincent Whitchurch <vincent.whitchurch@axis.com>: squashfs: add option to panic on errors Subsystem: ocfs2 Yang Yingliang <yangyingliang@huawei.com>: ocfs2: remove unnecessary INIT_LIST_HEAD() Subsystem: z Dan Carpenter <dan.carpenter@oracle.com>: ocfs2: fix snprintf() checking Colin Ian King <colin.king@canonical.com>: ocfs2: remove redundant assignment to pointer queue Wan Jiabing <wanjiabing@vivo.com>: ocfs2: remove repeated uptodate check for buffer Chen Huang <chenhuang5@huawei.com>: ocfs2: replace simple_strtoull() with kstrtoull() Colin Ian King <colin.king@canonical.com>: ocfs2: remove redundant initialization of variable ret Subsystem: kernel/watchdog Wang Qing <wangqing@vivo.com>: kernel: watchdog: modify the explanation related to watchdog thread doc: watchdog: modify the explanation related to watchdog thread doc: watchdog: modify the doc related to "watchdog/%u" Subsystem: mm/slab gumingtao <gumingtao1225@gmail.com>: slab: use __func__ to trace function name Subsystem: mm/slub Vlastimil Babka <vbabka@suse.cz>: kunit: make test->lock irq safe Oliver Glitta <glittao@gmail.com>: mm/slub, kunit: add a KUnit test for SLUB debugging functionality slub: remove resiliency_test() function Hyeonggon Yoo <42.hyeyoo@gmail.com>: mm, slub: change run-time assertion in kmalloc_index() to compile-time Stephen Boyd <swboyd@chromium.org>: slub: restore slub_debug=- behavior slub: actually use 'message' in restore_bytes() Joe Perches <joe@perches.com>: slub: indicate slab_fix() uses printf formats Stephen Boyd <swboyd@chromium.org>: slub: force on no_hash_pointers when slub_debug is enabled Faiyaz Mohammed <faiyazm@codeaurora.org>: mm: slub: move sysfs slab alloc/free interfaces to debugfs Georgi Djakov <quic_c_gdjako@quicinc.com>: mm/slub: add taint after the errors are printed Subsystem: mm/kmemleak Yanfei Xu <yanfei.xu@windriver.com>: mm/kmemleak: fix possible wrong memory scanning period Subsystem: mm/dax Jan Kara <jack@suse.cz>: dax: fix ENOMEM handling in grab_mapping_entry() Subsystem: mm/debug Tang Bin <tangbin@cmss.chinamobile.com>: tools/vm/page_owner_sort.c: check malloc() return Anshuman Khandual <anshuman.khandual@arm.com>: mm/debug_vm_pgtable: ensure THP availability via has_transparent_hugepage() Nicolas Saenz Julienne <nsaenzju@redhat.com>: mm: mmap_lock: use local locks instead of disabling preemption Gavin Shan <gshan@redhat.com>: Patch series "mm/page_reporting: Make page reporting work on arm64 with 64KB page size", v4: mm/page_reporting: fix code style in __page_reporting_request() mm/page_reporting: export reporting order as module parameter mm/page_reporting: allow driver to specify reporting order virtio_balloon: specify page reporting order if needed Subsystem: mm/pagecache Kefeng Wang <wangkefeng.wang@huawei.com>: mm: page-writeback: kill get_writeback_state() comments Chi Wu <wuchi.zero@gmail.com>: mm/page-writeback: Fix performance when BDI's share of ratio is 0. mm/page-writeback: update the comment of Dirty position control mm/page-writeback: use __this_cpu_inc() in account_page_dirtied() Roman Gushchin <guro@fb.com>: Patch series "cgroup, blkcg: prevent dirty inodes to pin dying memory cgroups", v9: writeback, cgroup: do not switch inodes with I_WILL_FREE flag writeback, cgroup: add smp_mb() to cgroup_writeback_umount() writeback, cgroup: increment isw_nr_in_flight before grabbing an inode writeback, cgroup: switch to rcu_work API in inode_switch_wbs() writeback, cgroup: keep list of inodes attached to bdi_writeback writeback, cgroup: split out the functional part of inode_switch_wbs_work_fn() writeback, cgroup: support switching multiple inodes at once writeback, cgroup: release dying cgwbs by switching attached inodes Christoph Hellwig <hch@lst.de>: Patch series "remove the implicit .set_page_dirty default": fs: unexport __set_page_dirty fs: move ramfs_aops to libfs mm: require ->set_page_dirty to be explicitly wired up "Matthew Wilcox (Oracle)" <willy@infradead.org>: Patch series "Further set_page_dirty cleanups": mm/writeback: move __set_page_dirty() to core mm mm/writeback: use __set_page_dirty in __set_page_dirty_nobuffers iomap: use __set_page_dirty_nobuffers fs: remove anon_set_page_dirty() fs: remove noop_set_page_dirty() mm: move page dirtying prototypes from mm.h Subsystem: mm/gup Peter Xu <peterx@redhat.com>: Patch series "mm/gup: Fix pin page write cache bouncing on has_pinned", v2: mm/gup_benchmark: support threading Andrea Arcangeli <aarcange@redhat.com>: mm: gup: allow FOLL_PIN to scale in SMP mm: gup: pack has_pinned in MMF_HAS_PINNED Christophe Leroy <christophe.leroy@csgroup.eu>: mm: pagewalk: fix walk for hugepage tables Subsystem: mm/swap Miaohe Lin <linmiaohe@huawei.com>: Patch series "close various race windows for swap", v6: mm/swapfile: use percpu_ref to serialize against concurrent swapoff swap: fix do_swap_page() race with swapoff mm/swap: remove confusing checking for non_swap_entry() in swap_ra_info() mm/shmem: fix shmem_swapin() race with swapoff Patch series "Cleanups for swap", v2: mm/swapfile: move get_swap_page_of_type() under CONFIG_HIBERNATION mm/swap: remove unused local variable nr_shadows mm/swap_slots.c: delete meaningless forward declarations Huang Ying <ying.huang@intel.com>: mm, swap: remove unnecessary smp_rmb() in swap_type_to_swap_info() mm: free idle swap cache page after COW swap: check mapping_empty() for swap cache before being freed Subsystem: mm/memcg Waiman Long <longman@redhat.com>: Patch series "mm/memcg: Reduce kmemcache memory accounting overhead", v6: mm/memcg: move mod_objcg_state() to memcontrol.c mm/memcg: cache vmstat data in percpu memcg_stock_pcp mm/memcg: improve refill_obj_stock() performance mm/memcg: optimize user context object stock access Patch series "mm: memcg/slab: Fix objcg pointer array handling problem", v4: mm: memcg/slab: properly set up gfp flags for objcg pointer array mm: memcg/slab: create a new set of kmalloc-cg-<n> caches mm: memcg/slab: disable cache merging for KMALLOC_NORMAL caches Muchun Song <songmuchun@bytedance.com>: mm: memcontrol: fix root_mem_cgroup charging Patch series "memcontrol code cleanup and simplification", v3: mm: memcontrol: fix page charging in page replacement mm: memcontrol: bail out early when !mm in get_mem_cgroup_from_mm mm: memcontrol: remove the pgdata parameter of mem_cgroup_page_lruvec mm: memcontrol: simplify lruvec_holds_page_lru_lock mm: memcontrol: rename lruvec_holds_page_lru_lock to page_matches_lruvec mm: memcontrol: simplify the logic of objcg pinning memcg mm: memcontrol: move obj_cgroup_uncharge_pages() out of css_set_lock mm: vmscan: remove noinline_for_stack wenhuizhang <wenhui@gwmail.gwu.edu>: memcontrol: use flexible-array member Dan Schatzberg <schatzberg.dan@gmail.com>: Patch series "Charge loop device i/o to issuing cgroup", v14: loop: use worker per cgroup instead of kworker mm: charge active memcg when no mm is set loop: charge i/o to mem and blk cg Huilong Deng <denghuilong@cdjrlc.com>: mm: memcontrol: remove trailing semicolon in macros Subsystem: mm/pagemap David Hildenbrand <david@redhat.com>: Patch series "perf/binfmt/mm: remove in-tree usage of MAP_EXECUTABLE": perf: MAP_EXECUTABLE does not indicate VM_MAYEXEC binfmt: remove in-tree usage of MAP_EXECUTABLE mm: ignore MAP_EXECUTABLE in ksys_mmap_pgoff() Gonzalo Matias Juarez Tello <gmjuareztello@gmail.com>: mm/mmap.c: logic of find_vma_intersection repeated in __do_munmap Liam Howlett <liam.howlett@oracle.com>: mm/mmap: introduce unlock_range() for code cleanup mm/mmap: use find_vma_intersection() in do_mmap() for overlap Liu Xiang <liu.xiang@zlingsmart.com>: mm/memory.c: fix comment of finish_mkwrite_fault() Liam Howlett <liam.howlett@oracle.com>: Patch series "mm: Add vma_lookup()", v2: mm: add vma_lookup(), update find_vma_intersection() comments drm/i915/selftests: use vma_lookup() in __igt_mmap() arch/arc/kernel/troubleshoot: use vma_lookup() instead of find_vma() arch/arm64/kvm: use vma_lookup() instead of find_vma_intersection() arch/powerpc/kvm/book3s_hv_uvmem: use vma_lookup() instead of find_vma_intersection() arch/powerpc/kvm/book3s: use vma_lookup() in kvmppc_hv_setup_htab_rma() arch/mips/kernel/traps: use vma_lookup() instead of find_vma() arch/m68k/kernel/sys_m68k: use vma_lookup() in sys_cacheflush() x86/sgx: use vma_lookup() in sgx_encl_find() virt/kvm: use vma_lookup() instead of find_vma_intersection() vfio: use vma_lookup() instead of find_vma_intersection() net/ipv5/tcp: use vma_lookup() in tcp_zerocopy_receive() drm/amdgpu: use vma_lookup() in amdgpu_ttm_tt_get_user_pages() media: videobuf2: use vma_lookup() in get_vaddr_frames() misc/sgi-gru/grufault: use vma_lookup() in gru_find_vma() kernel/events/uprobes: use vma_lookup() in find_active_uprobe() lib/test_hmm: use vma_lookup() in dmirror_migrate() mm/ksm: use vma_lookup() in find_mergeable_vma() mm/migrate: use vma_lookup() in do_pages_stat_array() mm/mremap: use vma_lookup() in vma_to_resize() mm/memory.c: use vma_lookup() in __access_remote_vm() mm/mempolicy: use vma_lookup() in __access_remote_vm() Chen Li <chenli@uniontech.com>: mm: update legacy flush_tlb_* to use vma Subsystem: mm/mprotect Peter Collingbourne <pcc@google.com>: mm: improve mprotect(R|W) efficiency on pages referenced once Subsystem: mm/bootmem Souptick Joarder <jrdr.linux@gmail.com>: h8300: remove unused variable Subsystem: mm/dma YueHaibing <yuehaibing@huawei.com>: mm/dmapool: use DEVICE_ATTR_RO macro Subsystem: mm/tracing Vincent Whitchurch <vincent.whitchurch@axis.com>: mm, tracing: unify PFN format strings Subsystem: mm/vmalloc "Uladzislau Rezki (Sony)" <urezki@gmail.com>: Patch series "vmalloc() vs bulk allocator", v2: mm/page_alloc: add an alloc_pages_bulk_array_node() helper mm/vmalloc: switch to bulk allocator in __vmalloc_area_node() mm/vmalloc: print a warning message first on failure mm/vmalloc: remove quoted strings split across lines Uladzislau Rezki <urezki@gmail.com>: mm/vmalloc: fallback to a single page allocator Rafael Aquini <aquini@redhat.com>: mm: vmalloc: add cond_resched() in __vunmap() Subsystem: mm/kasan Alexander Potapenko <glider@google.com>: printk: introduce dump_stack_lvl() kasan: use dump_stack_lvl(KERN_ERR) to print stacks David Gow <davidgow@google.com>: kasan: test: improve failure message in KUNIT_EXPECT_KASAN_FAIL() Daniel Axtens <dja@axtens.net>: Patch series "KASAN core changes for ppc64 radix KASAN", v16: kasan: allow an architecture to disable inline instrumentation kasan: allow architectures to provide an outline readiness check mm: define default MAX_PTRS_PER_* in include/pgtable.h kasan: use MAX_PTRS_PER_* for early shadow tables Kuan-Ying Lee <Kuan-Ying.Lee@mediatek.com>: Patch series "kasan: add memory corruption identification support for hw tag-based kasan", v4: kasan: rename CONFIG_KASAN_SW_TAGS_IDENTIFY to CONFIG_KASAN_TAGS_IDENTIFY kasan: integrate the common part of two KASAN tag-based modes kasan: add memory corruption identification support for hardware tag-based mode Subsystem: mm/initialization Jungseung Lee <js07.lee@samsung.com>: mm: report which part of mem is being freed on initmem case Subsystem: mm/pagealloc Mike Rapoport <rppt@linux.ibm.com>: mm/mmzone.h: simplify is_highmem_idx() "Matthew Wilcox (Oracle)" <willy@infradead.org>: Patch series "Constify struct page arguments": mm: make __dump_page static Aaron Tomlin <atomlin@redhat.com>: mm/page_alloc: bail out on fatal signal during reclaim/compaction retry attempt "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm/debug: factor PagePoisoned out of __dump_page mm/page_owner: constify dump_page_owner mm: make compound_head const-preserving mm: constify get_pfnblock_flags_mask and get_pfnblock_migratetype mm: constify page_count and page_ref_count mm: optimise nth_page for contiguous memmap Heiner Kallweit <hkallweit1@gmail.com>: mm/page_alloc: switch to pr_debug Andrii Nakryiko <andrii@kernel.org>: kbuild: skip per-CPU BTF generation for pahole v1.18-v1.21 Mel Gorman <mgorman@techsingularity.net>: mm/page_alloc: split per cpu page lists and zone stats mm/page_alloc: convert per-cpu list protection to local_lock mm/vmstat: convert NUMA statistics to basic NUMA counters mm/vmstat: inline NUMA event counter updates mm/page_alloc: batch the accounting updates in the bulk allocator mm/page_alloc: reduce duration that IRQs are disabled for VM counters mm/page_alloc: explicitly acquire the zone lock in __free_pages_ok mm/page_alloc: avoid conflating IRQs disabled with zone->lock mm/page_alloc: update PGFREE outside the zone lock in __free_pages_ok Minchan Kim <minchan@kernel.org>: mm: page_alloc: dump migrate-failed pages only at -EBUSY Mel Gorman <mgorman@techsingularity.net>: Patch series "Calculate pcp->high based on zone sizes and active CPUs", v2: mm/page_alloc: delete vm.percpu_pagelist_fraction mm/page_alloc: disassociate the pcp->high from pcp->batch mm/page_alloc: adjust pcp->high after CPU hotplug events mm/page_alloc: scale the number of pages that are batch freed mm/page_alloc: limit the number of pages on PCP lists when reclaim is active mm/page_alloc: introduce vm.percpu_pagelist_high_fraction Dong Aisheng <aisheng.dong@nxp.com>: mm: drop SECTION_SHIFT in code comments mm/page_alloc: improve memmap_pages dbg msg Liu Shixin <liushixin2@huawei.com>: mm/page_alloc: fix counting of managed_pages Mel Gorman <mgorman@techsingularity.net>: Patch series "Allow high order pages to be stored on PCP", v2: mm/page_alloc: move free_the_page Mike Rapoport <rppt@linux.ibm.com>: Patch series "Remove DISCONTIGMEM memory model", v3: alpha: remove DISCONTIGMEM and NUMA arc: update comment about HIGHMEM implementation arc: remove support for DISCONTIGMEM m68k: remove support for DISCONTIGMEM mm: remove CONFIG_DISCONTIGMEM arch, mm: remove stale mentions of DISCONIGMEM docs: remove description of DISCONTIGMEM mm: replace CONFIG_NEED_MULTIPLE_NODES with CONFIG_NUMA mm: replace CONFIG_FLAT_NODE_MEM_MAP with CONFIG_FLATMEM Mel Gorman <mgorman@techsingularity.net>: mm/page_alloc: allow high-order pages to be stored on the per-cpu lists mm/page_alloc: split pcp->high across all online CPUs for cpuless nodes Subsystem: mm/memory-failure Naoya Horiguchi <naoya.horiguchi@nec.com>: mm,hwpoison: send SIGBUS with error virutal address mm,hwpoison: make get_hwpoison_page() call get_any_page() Documentation/admin-guide/kernel-parameters.txt | 6 Documentation/admin-guide/lockup-watchdogs.rst | 4 Documentation/admin-guide/sysctl/kernel.rst | 10 Documentation/admin-guide/sysctl/vm.rst | 52 - Documentation/dev-tools/kasan.rst | 9 Documentation/vm/memory-model.rst | 45 arch/alpha/Kconfig | 22 arch/alpha/include/asm/machvec.h | 6 arch/alpha/include/asm/mmzone.h | 100 -- arch/alpha/include/asm/pgtable.h | 4 arch/alpha/include/asm/topology.h | 39 arch/alpha/kernel/core_marvel.c | 53 - arch/alpha/kernel/core_wildfire.c | 29 arch/alpha/kernel/pci_iommu.c | 29 arch/alpha/kernel/proto.h | 8 arch/alpha/kernel/setup.c | 16 arch/alpha/kernel/sys_marvel.c | 5 arch/alpha/kernel/sys_wildfire.c | 5 arch/alpha/mm/Makefile | 2 arch/alpha/mm/init.c | 3 arch/alpha/mm/numa.c | 223 ---- arch/arc/Kconfig | 13 arch/arc/include/asm/mmzone.h | 40 arch/arc/kernel/troubleshoot.c | 8 arch/arc/mm/init.c | 21 arch/arm/include/asm/tlbflush.h | 13 arch/arm/mm/tlb-v6.S | 2 arch/arm/mm/tlb-v7.S | 2 arch/arm64/Kconfig | 2 arch/arm64/kvm/mmu.c | 2 arch/h8300/kernel/setup.c | 2 arch/ia64/Kconfig | 2 arch/ia64/include/asm/pal.h | 2 arch/ia64/include/asm/spinlock.h | 2 arch/ia64/include/asm/uv/uv_hub.h | 2 arch/ia64/kernel/efi_stub.S | 2 arch/ia64/kernel/mca_drv.c | 2 arch/ia64/kernel/topology.c | 5 arch/ia64/mm/numa.c | 5 arch/m68k/Kconfig.cpu | 10 arch/m68k/include/asm/mmzone.h | 10 arch/m68k/include/asm/page.h | 2 arch/m68k/include/asm/page_mm.h | 35 arch/m68k/include/asm/tlbflush.h | 2 arch/m68k/kernel/sys_m68k.c | 4 arch/m68k/mm/init.c | 20 arch/mips/Kconfig | 2 arch/mips/include/asm/mmzone.h | 8 arch/mips/include/asm/page.h | 2 arch/mips/kernel/traps.c | 4 arch/mips/mm/init.c | 7 arch/nds32/include/asm/memory.h | 6 arch/openrisc/include/asm/tlbflush.h | 2 arch/powerpc/Kconfig | 2 arch/powerpc/include/asm/mmzone.h | 4 arch/powerpc/kernel/setup_64.c | 2 arch/powerpc/kernel/smp.c | 2 arch/powerpc/kexec/core.c | 4 arch/powerpc/kvm/book3s_hv.c | 4 arch/powerpc/kvm/book3s_hv_uvmem.c | 2 arch/powerpc/mm/Makefile | 2 arch/powerpc/mm/mem.c | 4 arch/riscv/Kconfig | 2 arch/s390/Kconfig | 2 arch/s390/include/asm/pgtable.h | 2 arch/sh/include/asm/mmzone.h | 4 arch/sh/kernel/topology.c | 2 arch/sh/mm/Kconfig | 2 arch/sh/mm/init.c | 2 arch/sparc/Kconfig | 2 arch/sparc/include/asm/mmzone.h | 4 arch/sparc/kernel/smp_64.c | 2 arch/sparc/mm/init_64.c | 12 arch/x86/Kconfig | 2 arch/x86/ia32/ia32_aout.c | 4 arch/x86/kernel/cpu/mce/core.c | 13 arch/x86/kernel/cpu/sgx/encl.h | 4 arch/x86/kernel/setup_percpu.c | 6 arch/x86/mm/init_32.c | 4 arch/xtensa/include/asm/page.h | 4 arch/xtensa/include/asm/tlbflush.h | 4 drivers/base/node.c | 18 drivers/block/loop.c | 270 ++++- drivers/block/loop.h | 15 drivers/dax/device.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 4 drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c | 2 drivers/media/common/videobuf2/frame_vector.c | 2 drivers/misc/sgi-gru/grufault.c | 4 drivers/vfio/vfio_iommu_type1.c | 2 drivers/virtio/virtio_balloon.c | 17 fs/adfs/inode.c | 1 fs/affs/file.c | 2 fs/bfs/file.c | 1 fs/binfmt_aout.c | 4 fs/binfmt_elf.c | 2 fs/binfmt_elf_fdpic.c | 11 fs/binfmt_flat.c | 2 fs/block_dev.c | 1 fs/buffer.c | 25 fs/configfs/inode.c | 8 fs/dax.c | 3 fs/ecryptfs/mmap.c | 13 fs/exfat/inode.c | 1 fs/ext2/inode.c | 4 fs/ext4/inode.c | 2 fs/fat/inode.c | 1 fs/fs-writeback.c | 366 +++++--- fs/fuse/dax.c | 3 fs/gfs2/aops.c | 2 fs/gfs2/meta_io.c | 2 fs/hfs/inode.c | 2 fs/hfsplus/inode.c | 2 fs/hpfs/file.c | 1 fs/iomap/buffered-io.c | 27 fs/jfs/inode.c | 1 fs/kernfs/inode.c | 8 fs/libfs.c | 44 fs/minix/inode.c | 1 fs/nilfs2/mdt.c | 1 fs/ntfs/inode.c | 2 fs/ocfs2/aops.c | 4 fs/ocfs2/cluster/heartbeat.c | 7 fs/ocfs2/cluster/nodemanager.c | 2 fs/ocfs2/dlm/dlmmaster.c | 2 fs/ocfs2/filecheck.c | 6 fs/ocfs2/stackglue.c | 8 fs/omfs/file.c | 1 fs/proc/task_mmu.c | 2 fs/ramfs/inode.c | 9 fs/squashfs/block.c | 5 fs/squashfs/squashfs_fs_sb.h | 1 fs/squashfs/super.c | 86 + fs/sysv/itree.c | 1 fs/udf/file.c | 1 fs/udf/inode.c | 1 fs/ufs/inode.c | 1 fs/xfs/xfs_aops.c | 4 fs/zonefs/super.c | 4 include/asm-generic/memory_model.h | 37 include/asm-generic/pgtable-nop4d.h | 1 include/asm-generic/topology.h | 2 include/kunit/test.h | 5 include/linux/backing-dev-defs.h | 20 include/linux/cpuhotplug.h | 2 include/linux/fs.h | 6 include/linux/gfp.h | 13 include/linux/iomap.h | 1 include/linux/kasan.h | 7 include/linux/kernel.h | 2 include/linux/kthread.h | 2 include/linux/memblock.h | 6 include/linux/memcontrol.h | 60 - include/linux/mm.h | 53 - include/linux/mm_types.h | 10 include/linux/mman.h | 2 include/linux/mmdebug.h | 3 include/linux/mmzone.h | 96 +- include/linux/page-flags.h | 10 include/linux/page_owner.h | 6 include/linux/page_ref.h | 4 include/linux/page_reporting.h | 3 include/linux/pageblock-flags.h | 2 include/linux/pagemap.h | 4 include/linux/pgtable.h | 22 include/linux/printk.h | 5 include/linux/sched/coredump.h | 8 include/linux/slab.h | 59 + include/linux/swap.h | 19 include/linux/swapops.h | 5 include/linux/vmstat.h | 69 - include/linux/writeback.h | 1 include/trace/events/cma.h | 4 include/trace/events/filemap.h | 2 include/trace/events/kmem.h | 12 include/trace/events/page_pool.h | 4 include/trace/events/pagemap.h | 4 include/trace/events/vmscan.h | 2 kernel/cgroup/cgroup.c | 1 kernel/crash_core.c | 4 kernel/events/core.c | 2 kernel/events/uprobes.c | 4 kernel/fork.c | 1 kernel/kthread.c | 19 kernel/sysctl.c | 16 kernel/watchdog.c | 12 lib/Kconfig.debug | 15 lib/Kconfig.kasan | 16 lib/Makefile | 1 lib/dump_stack.c | 20 lib/kunit/test.c | 18 lib/slub_kunit.c | 152 +++ lib/test_hmm.c | 5 lib/test_kasan.c | 11 lib/vsprintf.c | 2 mm/Kconfig | 38 mm/backing-dev.c | 66 + mm/compaction.c | 2 mm/debug.c | 27 mm/debug_vm_pgtable.c | 63 + mm/dmapool.c | 5 mm/filemap.c | 2 mm/gup.c | 81 + mm/hugetlb.c | 2 mm/internal.h | 9 mm/kasan/Makefile | 4 mm/kasan/common.c | 6 mm/kasan/generic.c | 3 mm/kasan/hw_tags.c | 22 mm/kasan/init.c | 6 mm/kasan/kasan.h | 12 mm/kasan/report.c | 6 mm/kasan/report_hw_tags.c | 5 mm/kasan/report_sw_tags.c | 45 mm/kasan/report_tags.c | 51 + mm/kasan/shadow.c | 6 mm/kasan/sw_tags.c | 45 mm/kasan/tags.c | 59 + mm/kfence/kfence_test.c | 5 mm/kmemleak.c | 18 mm/ksm.c | 6 mm/memblock.c | 8 mm/memcontrol.c | 385 ++++++-- mm/memory-failure.c | 344 +++++-- mm/memory.c | 22 mm/memory_hotplug.c | 6 mm/mempolicy.c | 4 mm/migrate.c | 4 mm/mmap.c | 54 - mm/mmap_lock.c | 33 mm/mprotect.c | 52 + mm/mremap.c | 5 mm/nommu.c | 2 mm/page-writeback.c | 89 + mm/page_alloc.c | 950 +++++++++++++-------- mm/page_ext.c | 2 mm/page_owner.c | 2 mm/page_reporting.c | 19 mm/page_reporting.h | 5 mm/pagewalk.c | 58 + mm/shmem.c | 18 mm/slab.h | 24 mm/slab_common.c | 60 - mm/slub.c | 420 +++++---- mm/sparse.c | 2 mm/swap.c | 4 mm/swap_slots.c | 2 mm/swap_state.c | 20 mm/swapfile.c | 177 +-- mm/vmalloc.c | 181 ++-- mm/vmscan.c | 43 mm/vmstat.c | 282 ++---- mm/workingset.c | 2 net/ipv4/tcp.c | 4 scripts/kconfig/streamline_config.pl | 76 - scripts/link-vmlinux.sh | 4 scripts/spelling.txt | 16 tools/testing/selftests/vm/gup_test.c | 96 +- tools/vm/page_owner_sort.c | 4 virt/kvm/kvm_main.c | 2 260 files changed, 3989 insertions(+), 2996 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-06-25 1:38 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-06-25 1:38 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 24 patches, based on 4a09d388f2ab382f217a764e6a152b3f614246f6. Subsystems affected by this patch series: mm/thp nilfs2 mm/vmalloc kthread mm/hugetlb mm/memory-failure mm/pagealloc MAINTAINERS mailmap Subsystem: mm/thp Hugh Dickins <hughd@google.com>: Patch series "mm: page_vma_mapped_walk() cleanup and THP fixes": mm: page_vma_mapped_walk(): use page for pvmw->page mm: page_vma_mapped_walk(): settle PageHuge on entry mm: page_vma_mapped_walk(): use pmde for *pvmw->pmd mm: page_vma_mapped_walk(): prettify PVMW_MIGRATION block mm: page_vma_mapped_walk(): crossing page table boundary mm: page_vma_mapped_walk(): add a level of indentation mm: page_vma_mapped_walk(): use goto instead of while (1) mm: page_vma_mapped_walk(): get vma_address_end() earlier mm/thp: fix page_vma_mapped_walk() if THP mapped by ptes mm/thp: another PVMW_SYNC fix in page_vma_mapped_walk() Subsystem: nilfs2 Pavel Skripkin <paskripkin@gmail.com>: nilfs2: fix memory leak in nilfs_sysfs_delete_device_group Subsystem: mm/vmalloc Claudio Imbrenda <imbrenda@linux.ibm.com>: Patch series "mm: add vmalloc_no_huge and use it", v4: mm/vmalloc: add vmalloc_no_huge KVM: s390: prepare for hugepage vmalloc Daniel Axtens <dja@axtens.net>: mm/vmalloc: unbreak kasan vmalloc support Subsystem: kthread Petr Mladek <pmladek@suse.com>: Patch series "kthread_worker: Fix race between kthread_mod_delayed_work(): kthread_worker: split code for canceling the delayed work timer kthread: prevent deadlock when kthread_mod_delayed_work() races with kthread_cancel_delayed_work_sync() Subsystem: mm/hugetlb Hugh Dickins <hughd@google.com>: mm, futex: fix shared futex pgoff on shmem huge page Subsystem: mm/memory-failure Tony Luck <tony.luck@intel.com>: Patch series "mm,hwpoison: fix sending SIGBUS for Action Required MCE", v5: mm/memory-failure: use a mutex to avoid memory_failure() races Aili Yao <yaoaili@kingsoft.com>: mm,hwpoison: return -EHWPOISON to denote that the page has already been poisoned Naoya Horiguchi <naoya.horiguchi@nec.com>: mm/hwpoison: do not lock page again when me_huge_page() successfully recovers Subsystem: mm/pagealloc Rasmus Villemoes <linux@rasmusvillemoes.dk>: mm/page_alloc: __alloc_pages_bulk(): do bounds check before accessing array Mel Gorman <mgorman@techsingularity.net>: mm/page_alloc: do bulk array bounds check after checking populated elements Subsystem: MAINTAINERS Marek Behún <kabel@kernel.org>: MAINTAINERS: fix Marek's identity again Subsystem: mailmap Marek Behún <kabel@kernel.org>: mailmap: add Marek's other e-mail address and identity without diacritics .mailmap | 2 MAINTAINERS | 4 arch/s390/kvm/pv.c | 7 + fs/nilfs2/sysfs.c | 1 include/linux/hugetlb.h | 16 --- include/linux/pagemap.h | 13 +- include/linux/vmalloc.h | 1 kernel/futex.c | 3 kernel/kthread.c | 81 ++++++++++------ mm/hugetlb.c | 5 - mm/memory-failure.c | 83 +++++++++++------ mm/page_alloc.c | 6 + mm/page_vma_mapped.c | 233 +++++++++++++++++++++++++++--------------------- mm/vmalloc.c | 41 ++++++-- 14 files changed, 297 insertions(+), 199 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-06-16 1:22 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-06-16 1:22 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 18 patches, based on 94f0b2d4a1d0c52035aef425da5e022bd2cb1c71. Subsystems affected by this patch series: mm/memory-failure mm/swap mm/slub mm/hugetlb mm/memory-failure coredump mm/slub mm/thp mm/sparsemem Subsystem: mm/memory-failure Naoya Horiguchi <naoya.horiguchi@nec.com>: mm,hwpoison: fix race with hugetlb page allocation Subsystem: mm/swap Peter Xu <peterx@redhat.com>: mm/swap: fix pte_same_as_swp() not removing uffd-wp bit when compare Subsystem: mm/slub Kees Cook <keescook@chromium.org>: Patch series "Actually fix freelist pointer vs redzoning", v4: mm/slub: clarify verification reporting mm/slub: fix redzoning for small allocations mm/slub: actually fix freelist pointer vs redzoning Subsystem: mm/hugetlb Mike Kravetz <mike.kravetz@oracle.com>: mm/hugetlb: expand restore_reserve_on_error functionality Subsystem: mm/memory-failure yangerkun <yangerkun@huawei.com>: mm/memory-failure: make sure wait for page writeback in memory_failure Subsystem: coredump Pingfan Liu <kernelfans@gmail.com>: crash_core, vmcoreinfo: append 'SECTION_SIZE_BITS' to vmcoreinfo Subsystem: mm/slub Andrew Morton <akpm@linux-foundation.org>: mm/slub.c: include swab.h Subsystem: mm/thp Xu Yu <xuyu@linux.alibaba.com>: mm, thp: use head page in __migration_entry_wait() Hugh Dickins <hughd@google.com>: Patch series "mm/thp: fix THP splitting unmap BUGs and related", v10: mm/thp: fix __split_huge_pmd_locked() on shmem migration entry mm/thp: make is_huge_zero_pmd() safe and quicker mm/thp: try_to_unmap() use TTU_SYNC for safe splitting mm/thp: fix vma_address() if virtual address below file offset Jue Wang <juew@google.com>: mm/thp: fix page_address_in_vma() on file THP tails Hugh Dickins <hughd@google.com>: mm/thp: unmap_mapping_page() to fix THP truncate_cleanup_page() Yang Shi <shy828301@gmail.com>: mm: thp: replace DEBUG_VM BUG with VM_WARN when unmap fails for split Subsystem: mm/sparsemem Miles Chen <miles.chen@mediatek.com>: mm/sparse: fix check_usemap_section_nr warnings Documentation/vm/slub.rst | 10 +-- fs/hugetlbfs/inode.c | 1 include/linux/huge_mm.h | 8 ++ include/linux/hugetlb.h | 8 ++ include/linux/mm.h | 3 + include/linux/rmap.h | 1 include/linux/swapops.h | 15 +++-- kernel/crash_core.c | 1 mm/huge_memory.c | 58 ++++++++++--------- mm/hugetlb.c | 137 +++++++++++++++++++++++++++++++++++++--------- mm/internal.h | 51 ++++++++++++----- mm/memory-failure.c | 36 +++++++++++- mm/memory.c | 41 +++++++++++++ mm/migrate.c | 1 mm/page_vma_mapped.c | 27 +++++---- mm/pgtable-generic.c | 5 - mm/rmap.c | 41 +++++++++---- mm/slab_common.c | 3 - mm/slub.c | 37 +++++------- mm/sparse.c | 13 +++- mm/swapfile.c | 2 mm/truncate.c | 43 ++++++-------- 22 files changed, 388 insertions(+), 154 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-06-05 3:00 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-06-05 3:00 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 13 patches, based on 16f0596fc1d78a1f3ae4628cff962bb297dc908c. Subsystems affected by this patch series: mips mm/kfence init mm/debug mm/pagealloc mm/memory-hotplug mm/hugetlb proc mm/kasan mm/hugetlb lib ocfs2 mailmap Subsystem: mips Thomas Bogendoerfer <tsbogend@alpha.franken.de>: Revert "MIPS: make userspace mapping young by default" Subsystem: mm/kfence Marco Elver <elver@google.com>: kfence: use TASK_IDLE when awaiting allocation Subsystem: init Mark Rutland <mark.rutland@arm.com>: pid: take a reference when initializing `cad_pid` Subsystem: mm/debug Gerald Schaefer <gerald.schaefer@linux.ibm.com>: mm/debug_vm_pgtable: fix alignment for pmd/pud_advanced_tests() Subsystem: mm/pagealloc Ding Hui <dinghui@sangfor.com.cn>: mm/page_alloc: fix counting of free pages after take off from buddy Subsystem: mm/memory-hotplug David Hildenbrand <david@redhat.com>: drivers/base/memory: fix trying offlining memory blocks with memory holes on aarch64 Subsystem: mm/hugetlb Naoya Horiguchi <naoya.horiguchi@nec.com>: hugetlb: pass head page to remove_hugetlb_page() Subsystem: proc David Matlack <dmatlack@google.com>: proc: add .gitignore for proc-subset-pid selftest Subsystem: mm/kasan Yu Kuai <yukuai3@huawei.com>: mm/kasan/init.c: fix doc warning Subsystem: mm/hugetlb Mina Almasry <almasrymina@google.com>: mm, hugetlb: fix simple resv_huge_pages underflow on UFFDIO_COPY Subsystem: lib YueHaibing <yuehaibing@huawei.com>: lib: crc64: fix kernel-doc warning Subsystem: ocfs2 Junxiao Bi <junxiao.bi@oracle.com>: ocfs2: fix data corruption by fallocate Subsystem: mailmap Michel Lespinasse <michel@lespinasse.org>: mailmap: use private address for Michel Lespinasse .mailmap | 3 + arch/mips/mm/cache.c | 30 ++++++++--------- drivers/base/memory.c | 6 +-- fs/ocfs2/file.c | 55 +++++++++++++++++++++++++++++--- include/linux/pgtable.h | 8 ++++ init/main.c | 2 - lib/crc64.c | 2 - mm/debug_vm_pgtable.c | 4 +- mm/hugetlb.c | 16 +++++++-- mm/kasan/init.c | 4 +- mm/kfence/core.c | 6 +-- mm/memory.c | 4 ++ mm/page_alloc.c | 2 + tools/testing/selftests/proc/.gitignore | 1 14 files changed, 107 insertions(+), 36 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-05-23 0:41 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-05-23 0:41 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 10 patches, based on 4ff2473bdb4cf2bb7d208ccf4418d3d7e6b1652c. Subsystems affected by this patch series: mm/pagealloc mm/gup ipc selftests mm/kasan kernel/watchdog bitmap procfs lib mm/userfaultfd Subsystem: mm/pagealloc Arnd Bergmann <arnd@arndb.de>: mm/shuffle: fix section mismatch warning Subsystem: mm/gup Michal Hocko <mhocko@suse.com>: Revert "mm/gup: check page posion status for coredump." Subsystem: ipc Varad Gautam <varad.gautam@suse.com>: ipc/mqueue, msg, sem: avoid relying on a stack reference past its expiry Subsystem: selftests Yang Yingliang <yangyingliang@huawei.com>: tools/testing/selftests/exec: fix link error Subsystem: mm/kasan Alexander Potapenko <glider@google.com>: kasan: slab: always reset the tag in get_freepointer_safe() Subsystem: kernel/watchdog Petr Mladek <pmladek@suse.com>: watchdog: reliable handling of timestamps Subsystem: bitmap Rikard Falkeborn <rikard.falkeborn@gmail.com>: linux/bits.h: fix compilation error with GENMASK Subsystem: procfs Alexey Dobriyan <adobriyan@gmail.com>: proc: remove Alexey from MAINTAINERS Subsystem: lib Zhen Lei <thunder.leizhen@huawei.com>: lib: kunit: suppress a compilation warning of frame size Subsystem: mm/userfaultfd Mike Kravetz <mike.kravetz@oracle.com>: userfaultfd: hugetlbfs: fix new flag usage in error path MAINTAINERS | 1 - fs/hugetlbfs/inode.c | 2 +- include/linux/bits.h | 2 +- include/linux/const.h | 8 ++++++++ include/linux/minmax.h | 10 ++-------- ipc/mqueue.c | 6 ++++-- ipc/msg.c | 6 ++++-- ipc/sem.c | 6 ++++-- kernel/watchdog.c | 34 ++++++++++++++++++++-------------- lib/Makefile | 1 + mm/gup.c | 4 ---- mm/internal.h | 20 -------------------- mm/shuffle.h | 4 ++-- mm/slub.c | 1 + mm/userfaultfd.c | 28 ++++++++++++++-------------- tools/include/linux/bits.h | 2 +- tools/include/linux/const.h | 8 ++++++++ tools/testing/selftests/exec/Makefile | 6 +++--- 18 files changed, 74 insertions(+), 75 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-05-15 0:26 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-05-15 0:26 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 13 patches, based on bd3c9cdb21a2674dd0db70199df884828e37abd4. Subsystems affected by this patch series: mm/hugetlb mm/slub resource squashfs mm/userfaultfd mm/ksm mm/pagealloc mm/kasan mm/pagemap hfsplus modprobe mm/ioremap Subsystem: mm/hugetlb Peter Xu <peterx@redhat.com>: Patch series "mm/hugetlb: Fix issues on file sealing and fork", v2: mm/hugetlb: fix F_SEAL_FUTURE_WRITE mm/hugetlb: fix cow where page writtable in child Subsystem: mm/slub Vlastimil Babka <vbabka@suse.cz>: mm, slub: move slub_debug static key enabling outside slab_mutex Subsystem: resource Alistair Popple <apopple@nvidia.com>: kernel/resource: fix return code check in __request_free_mem_region Subsystem: squashfs Phillip Lougher <phillip@squashfs.org.uk>: squashfs: fix divide error in calculate_skip() Subsystem: mm/userfaultfd Axel Rasmussen <axelrasmussen@google.com>: userfaultfd: release page in error path to avoid BUG_ON Subsystem: mm/ksm Hugh Dickins <hughd@google.com>: ksm: revert "use GET_KSM_PAGE_NOLOCK to get ksm page in remove_rmap_item_from_tree()" Subsystem: mm/pagealloc "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm: fix struct page layout on 32-bit systems Subsystem: mm/kasan Peter Collingbourne <pcc@google.com>: kasan: fix unit tests with CONFIG_UBSAN_LOCAL_BOUNDS enabled Subsystem: mm/pagemap "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm/filemap: fix readahead return types Subsystem: hfsplus Jouni Roivas <jouni.roivas@tuxera.com>: hfsplus: prevent corruption in shrinking truncate Subsystem: modprobe Rasmus Villemoes <linux@rasmusvillemoes.dk>: docs: admin-guide: update description for kernel.modprobe sysctl Subsystem: mm/ioremap Christophe Leroy <christophe.leroy@csgroup.eu>: mm/ioremap: fix iomap_max_page_shift Documentation/admin-guide/sysctl/kernel.rst | 9 ++++--- fs/hfsplus/extents.c | 7 +++-- fs/hugetlbfs/inode.c | 5 ++++ fs/iomap/buffered-io.c | 4 +-- fs/squashfs/file.c | 6 ++-- include/linux/mm.h | 32 ++++++++++++++++++++++++++ include/linux/mm_types.h | 4 +-- include/linux/pagemap.h | 6 ++-- include/net/page_pool.h | 12 +++++++++ kernel/resource.c | 2 - lib/test_kasan.c | 29 ++++++++++++++++++----- mm/hugetlb.c | 1 mm/ioremap.c | 6 ++-- mm/ksm.c | 3 +- mm/shmem.c | 34 ++++++++++++---------------- mm/slab_common.c | 10 ++++++++ mm/slub.c | 9 ------- net/core/page_pool.c | 12 +++++---- 18 files changed, 129 insertions(+), 62 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-05-07 1:01 Andrew Morton 2021-05-07 7:12 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2021-05-07 1:01 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm This is everything else from -mm for this merge window, with the possible exception of Mike Rapoport's "secretmem" syscall patch series (https://lkml.kernel.org/r/20210303162209.8609-1-rppt@kernel.org). I've been wobbly about the secretmem patches due to doubts about whether the feature is sufficiently useful to justify inclusion, but developers are now weighing in with helpful information and I've asked Mike for an extensively updated [0/n] changelog. This will take a few days to play out so it is possible that I will prevail upon you for a post-rc1 merge. If that's a problem, there's always 5.13-rc1. 91 patches, based on 8ca5297e7e38f2dc8c753d33a5092e7be181fff0, plus previously sent patches. Thanks. Subsystems affected by this patch series: alpha procfs sysctl misc core-kernel bitmap lib compat checkpatch epoll isofs nilfs2 hpfs exit fork kexec gcov panic delayacct gdb resource selftests async initramfs ipc mm/cleanups drivers/char mm/slub spelling Subsystem: alpha Randy Dunlap <rdunlap@infradead.org>: alpha: eliminate old-style function definitions alpha: csum_partial_copy.c: add function prototypes from <net/checksum.h> Subsystem: procfs Colin Ian King <colin.king@canonical.com>: fs/proc/generic.c: fix incorrect pde_is_permanent check Alexey Dobriyan <adobriyan@gmail.com>: proc: save LOC in __xlate_proc_name() proc: mandate ->proc_lseek in "struct proc_ops" proc: delete redundant subset=pid check selftests: proc: test subset=pid Subsystem: sysctl zhouchuangao <zhouchuangao@vivo.com>: proc/sysctl: fix function name error in comments Subsystem: misc "Matthew Wilcox (Oracle)" <willy@infradead.org>: include: remove pagemap.h from blkdev.h Andy Shevchenko <andriy.shevchenko@linux.intel.com>: kernel.h: drop inclusion in bitmap.h Wan Jiabing <wanjiabing@vivo.com>: linux/profile.h: remove unnecessary declaration Subsystem: core-kernel Rasmus Villemoes <linux@rasmusvillemoes.dk>: kernel/async.c: fix pr_debug statement kernel/cred.c: make init_groups static Subsystem: bitmap Yury Norov <yury.norov@gmail.com>: Patch series "lib/find_bit: fast path for small bitmaps", v6: tools: disable -Wno-type-limits tools: bitmap: sync function declarations with the kernel tools: sync BITMAP_LAST_WORD_MASK() macro with the kernel arch: rearrange headers inclusion order in asm/bitops for m68k, sh and h8300 lib: extend the scope of small_const_nbits() macro tools: sync small_const_nbits() macro with the kernel lib: inline _find_next_bit() wrappers tools: sync find_next_bit implementation lib: add fast path for find_next_*_bit() lib: add fast path for find_first_*_bit() and find_last_bit() tools: sync lib/find_bit implementation MAINTAINERS: add entry for the bitmap API Subsystem: lib Bhaskar Chowdhury <unixbhaskar@gmail.com>: lib/bch.c: fix a typo in the file bch.c Wang Qing <wangqing@vivo.com>: lib: fix inconsistent indenting in process_bit1() ToastC <mrtoastcheng@gmail.com>: lib/list_sort.c: fix typo in function description Bhaskar Chowdhury <unixbhaskar@gmail.com>: lib/genalloc.c: Fix a typo Richard Fitzgerald <rf@opensource.cirrus.com>: lib: crc8: pointer to data block should be const Zqiang <qiang.zhang@windriver.com>: lib: stackdepot: turn depot_lock spinlock to raw_spinlock Alex Shi <alexs@kernel.org>: lib/percpu_counter: tame kernel-doc compile warning lib/genalloc: add parameter description to fix doc compile warning Randy Dunlap <rdunlap@infradead.org>: lib: parser: clean up kernel-doc Subsystem: compat Masahiro Yamada <masahiroy@kernel.org>: include/linux/compat.h: remove unneeded declaration from COMPAT_SYSCALL_DEFINEx() Subsystem: checkpatch Joe Perches <joe@perches.com>: checkpatch: warn when missing newline in return sysfs_emit() formats Vincent Mailhol <mailhol.vincent@wanadoo.fr>: checkpatch: exclude four preprocessor sub-expressions from MACRO_ARG_REUSE Christophe JAILLET <christophe.jaillet@wanadoo.fr>: checkpatch: improve ALLOC_ARRAY_ARGS test Subsystem: epoll Davidlohr Bueso <dave@stgolabs.net>: Patch series "fs/epoll: restore user-visible behavior upon event ready": kselftest: introduce new epoll test case fs/epoll: restore waking from ep_done_scan() Subsystem: isofs "Gustavo A. R. Silva" <gustavoars@kernel.org>: isofs: fix fall-through warnings for Clang Subsystem: nilfs2 Liu xuzhi <liu.xuzhi@zte.com.cn>: fs/nilfs2: fix misspellings using codespell tool Lu Jialin <lujialin4@huawei.com>: nilfs2: fix typos in comments Subsystem: hpfs "Gustavo A. R. Silva" <gustavoars@kernel.org>: hpfs: replace one-element array with flexible-array member Subsystem: exit Jim Newsome <jnewsome@torproject.org>: do_wait: make PIDTYPE_PID case O(1) instead of O(n) Subsystem: fork Rolf Eike Beer <eb@emlix.com>: kernel/fork.c: simplify copy_mm() Xiaofeng Cao <cxfcosmos@gmail.com>: kernel/fork.c: fix typos Subsystem: kexec Saeed Mirzamohammadi <saeed.mirzamohammadi@oracle.com>: kernel/crash_core: add crashkernel=auto for vmcore creation Joe LeVeque <jolevequ@microsoft.com>: kexec: Add kexec reboot string Jia-Ju Bai <baijiaju1990@gmail.com>: kernel: kexec_file: fix error return code of kexec_calculate_store_digests() Pavel Tatashin <pasha.tatashin@soleen.com>: kexec: dump kmessage before machine_kexec Subsystem: gcov Johannes Berg <johannes.berg@intel.com>: gcov: combine common code gcov: simplify buffer allocation gcov: use kvmalloc() Nick Desaulniers <ndesaulniers@google.com>: gcov: clang: drop support for clang-10 and older Subsystem: panic He Ying <heying24@huawei.com>: smp: kernel/panic.c - silence warnings Subsystem: delayacct Yafang Shao <laoar.shao@gmail.com>: delayacct: clear right task's flag after blkio completes Subsystem: gdb Johannes Berg <johannes.berg@intel.com>: gdb: lx-symbols: store the abspath() Barry Song <song.bao.hua@hisilicon.com>: Patch series "scripts/gdb: clarify the platforms supporting lx_current and add arm64 support", v2: scripts/gdb: document lx_current is only supported by x86 scripts/gdb: add lx_current support for arm64 Subsystem: resource David Hildenbrand <david@redhat.com>: Patch series "kernel/resource: make walk_system_ram_res() and walk_mem_res() search the whole tree", v2: kernel/resource: make walk_system_ram_res() find all busy IORESOURCE_SYSTEM_RAM resources kernel/resource: make walk_mem_res() find all busy IORESOURCE_MEM resources kernel/resource: remove first_lvl / siblings_only logic Alistair Popple <apopple@nvidia.com>: kernel/resource: allow region_intersects users to hold resource_lock kernel/resource: refactor __request_region to allow external locking kernel/resource: fix locking in request_free_mem_region Subsystem: selftests Zhang Yunkai <zhang.yunkai@zte.com.cn>: selftests: remove duplicate include Subsystem: async Rasmus Villemoes <linux@rasmusvillemoes.dk>: kernel/async.c: stop guarding pr_debug() statements kernel/async.c: remove async_unregister_domain() Subsystem: initramfs Rasmus Villemoes <linux@rasmusvillemoes.dk>: Patch series "background initramfs unpacking, and CONFIG_MODPROBE_PATH", v3: init/initramfs.c: do unpacking asynchronously modules: add CONFIG_MODPROBE_PATH Subsystem: ipc Bhaskar Chowdhury <unixbhaskar@gmail.com>: ipc/sem.c: mundane typo fixes Subsystem: mm/cleanups Shijie Luo <luoshijie1@huawei.com>: mm: fix some typos and code style problems Subsystem: drivers/char David Hildenbrand <david@redhat.com>: Patch series "drivers/char: remove /dev/kmem for good": drivers/char: remove /dev/kmem for good mm: remove xlate_dev_kmem_ptr() mm/vmalloc: remove vwrite() Subsystem: mm/slub Maninder Singh <maninder1.s@samsung.com>: arm: print alloc free paths for address in registers Subsystem: spelling Drew Fustini <drew@beagleboard.org>: scripts/spelling.txt: add "overlfow" zuoqilin <zuoqilin@yulong.com>: scripts/spelling.txt: Add "diabled" typo Drew Fustini <drew@beagleboard.org>: scripts/spelling.txt: add "overflw" Colin Ian King <colin.king@canonical.com>: mm/slab.c: fix spelling mistake "disired" -> "desired" Bhaskar Chowdhury <unixbhaskar@gmail.com>: include/linux/pgtable.h: few spelling fixes zhouchuangao <zhouchuangao@vivo.com>: kernel/umh.c: fix some spelling mistakes Xiaofeng Cao <cxfcosmos@gmail.com>: kernel/user_namespace.c: fix typos Bhaskar Chowdhury <unixbhaskar@gmail.com>: kernel/up.c: fix typo Xiaofeng Cao <caoxiaofeng@yulong.com>: kernel/sys.c: fix typo dingsenjie <dingsenjie@yulong.com>: fs: fat: fix spelling typo of values Bhaskar Chowdhury <unixbhaskar@gmail.com>: ipc/sem.c: spelling fix Masahiro Yamada <masahiroy@kernel.org>: treewide: remove editor modelines and cruft Ingo Molnar <mingo@kernel.org>: mm: fix typos in comments Lu Jialin <lujialin4@huawei.com>: mm: fix typos in comments Documentation/admin-guide/devices.txt | 2 Documentation/admin-guide/kdump/kdump.rst | 3 Documentation/admin-guide/kernel-parameters.txt | 18 Documentation/dev-tools/gdb-kernel-debugging.rst | 4 MAINTAINERS | 16 arch/Kconfig | 20 arch/alpha/include/asm/io.h | 5 arch/alpha/kernel/pc873xx.c | 4 arch/alpha/lib/csum_partial_copy.c | 1 arch/arm/configs/dove_defconfig | 1 arch/arm/configs/magician_defconfig | 1 arch/arm/configs/moxart_defconfig | 1 arch/arm/configs/mps2_defconfig | 1 arch/arm/configs/mvebu_v5_defconfig | 1 arch/arm/configs/xcep_defconfig | 1 arch/arm/include/asm/bug.h | 1 arch/arm/include/asm/io.h | 5 arch/arm/kernel/process.c | 11 arch/arm/kernel/traps.c | 1 arch/h8300/include/asm/bitops.h | 8 arch/hexagon/configs/comet_defconfig | 1 arch/hexagon/include/asm/io.h | 1 arch/ia64/include/asm/io.h | 1 arch/ia64/include/asm/uaccess.h | 18 arch/m68k/atari/time.c | 7 arch/m68k/configs/amcore_defconfig | 1 arch/m68k/include/asm/bitops.h | 6 arch/m68k/include/asm/io_mm.h | 5 arch/mips/include/asm/io.h | 5 arch/openrisc/configs/or1ksim_defconfig | 1 arch/parisc/include/asm/io.h | 5 arch/parisc/include/asm/pdc_chassis.h | 1 arch/powerpc/include/asm/io.h | 5 arch/s390/include/asm/io.h | 5 arch/sh/configs/edosk7705_defconfig | 1 arch/sh/configs/se7206_defconfig | 1 arch/sh/configs/sh2007_defconfig | 1 arch/sh/configs/sh7724_generic_defconfig | 1 arch/sh/configs/sh7770_generic_defconfig | 1 arch/sh/configs/sh7785lcr_32bit_defconfig | 1 arch/sh/include/asm/bitops.h | 5 arch/sh/include/asm/io.h | 5 arch/sparc/configs/sparc64_defconfig | 1 arch/sparc/include/asm/io_64.h | 5 arch/um/drivers/cow.h | 7 arch/xtensa/configs/xip_kc705_defconfig | 1 block/blk-settings.c | 1 drivers/auxdisplay/panel.c | 7 drivers/base/firmware_loader/main.c | 2 drivers/block/brd.c | 1 drivers/block/loop.c | 1 drivers/char/Kconfig | 10 drivers/char/mem.c | 231 -------- drivers/gpu/drm/qxl/qxl_drv.c | 1 drivers/isdn/capi/kcapi_proc.c | 1 drivers/md/bcache/super.c | 1 drivers/media/usb/pwc/pwc-uncompress.c | 3 drivers/net/ethernet/adaptec/starfire.c | 8 drivers/net/ethernet/amd/atarilance.c | 8 drivers/net/ethernet/amd/pcnet32.c | 7 drivers/net/wireless/intersil/hostap/hostap_proc.c | 1 drivers/net/wireless/intersil/orinoco/orinoco_nortel.c | 8 drivers/net/wireless/intersil/orinoco/orinoco_pci.c | 8 drivers/net/wireless/intersil/orinoco/orinoco_plx.c | 8 drivers/net/wireless/intersil/orinoco/orinoco_tmd.c | 8 drivers/nvdimm/btt.c | 1 drivers/nvdimm/pmem.c | 1 drivers/parport/parport_ip32.c | 12 drivers/platform/x86/dell/dell_rbu.c | 3 drivers/scsi/53c700.c | 1 drivers/scsi/53c700.h | 1 drivers/scsi/ch.c | 6 drivers/scsi/esas2r/esas2r_main.c | 1 drivers/scsi/ips.c | 20 drivers/scsi/ips.h | 20 drivers/scsi/lasi700.c | 1 drivers/scsi/megaraid/mbox_defs.h | 2 drivers/scsi/megaraid/mega_common.h | 2 drivers/scsi/megaraid/megaraid_mbox.c | 2 drivers/scsi/megaraid/megaraid_mbox.h | 2 drivers/scsi/qla1280.c | 12 drivers/scsi/scsicam.c | 1 drivers/scsi/sni_53c710.c | 1 drivers/video/fbdev/matrox/matroxfb_base.c | 9 drivers/video/fbdev/vga16fb.c | 10 fs/configfs/configfs_internal.h | 4 fs/configfs/dir.c | 4 fs/configfs/file.c | 4 fs/configfs/inode.c | 4 fs/configfs/item.c | 4 fs/configfs/mount.c | 4 fs/configfs/symlink.c | 4 fs/eventpoll.c | 6 fs/fat/fatent.c | 2 fs/hpfs/hpfs.h | 3 fs/isofs/rock.c | 1 fs/nfs/dir.c | 7 fs/nfs/nfs4proc.c | 6 fs/nfs/nfs4renewd.c | 6 fs/nfs/nfs4state.c | 6 fs/nfs/nfs4xdr.c | 6 fs/nfsd/nfs4proc.c | 6 fs/nfsd/nfs4xdr.c | 6 fs/nfsd/xdr4.h | 6 fs/nilfs2/cpfile.c | 2 fs/nilfs2/ioctl.c | 4 fs/nilfs2/segment.c | 4 fs/nilfs2/the_nilfs.c | 2 fs/ocfs2/acl.c | 4 fs/ocfs2/acl.h | 4 fs/ocfs2/alloc.c | 4 fs/ocfs2/alloc.h | 4 fs/ocfs2/aops.c | 4 fs/ocfs2/aops.h | 4 fs/ocfs2/blockcheck.c | 4 fs/ocfs2/blockcheck.h | 4 fs/ocfs2/buffer_head_io.c | 4 fs/ocfs2/buffer_head_io.h | 4 fs/ocfs2/cluster/heartbeat.c | 4 fs/ocfs2/cluster/heartbeat.h | 4 fs/ocfs2/cluster/masklog.c | 4 fs/ocfs2/cluster/masklog.h | 4 fs/ocfs2/cluster/netdebug.c | 4 fs/ocfs2/cluster/nodemanager.c | 4 fs/ocfs2/cluster/nodemanager.h | 4 fs/ocfs2/cluster/ocfs2_heartbeat.h | 4 fs/ocfs2/cluster/ocfs2_nodemanager.h | 4 fs/ocfs2/cluster/quorum.c | 4 fs/ocfs2/cluster/quorum.h | 4 fs/ocfs2/cluster/sys.c | 4 fs/ocfs2/cluster/sys.h | 4 fs/ocfs2/cluster/tcp.c | 4 fs/ocfs2/cluster/tcp.h | 4 fs/ocfs2/cluster/tcp_internal.h | 4 fs/ocfs2/dcache.c | 4 fs/ocfs2/dcache.h | 4 fs/ocfs2/dir.c | 4 fs/ocfs2/dir.h | 4 fs/ocfs2/dlm/dlmapi.h | 4 fs/ocfs2/dlm/dlmast.c | 4 fs/ocfs2/dlm/dlmcommon.h | 4 fs/ocfs2/dlm/dlmconvert.c | 4 fs/ocfs2/dlm/dlmconvert.h | 4 fs/ocfs2/dlm/dlmdebug.c | 4 fs/ocfs2/dlm/dlmdebug.h | 4 fs/ocfs2/dlm/dlmdomain.c | 4 fs/ocfs2/dlm/dlmdomain.h | 4 fs/ocfs2/dlm/dlmlock.c | 4 fs/ocfs2/dlm/dlmmaster.c | 4 fs/ocfs2/dlm/dlmrecovery.c | 4 fs/ocfs2/dlm/dlmthread.c | 4 fs/ocfs2/dlm/dlmunlock.c | 4 fs/ocfs2/dlmfs/dlmfs.c | 4 fs/ocfs2/dlmfs/userdlm.c | 4 fs/ocfs2/dlmfs/userdlm.h | 4 fs/ocfs2/dlmglue.c | 4 fs/ocfs2/dlmglue.h | 4 fs/ocfs2/export.c | 4 fs/ocfs2/export.h | 4 fs/ocfs2/extent_map.c | 4 fs/ocfs2/extent_map.h | 4 fs/ocfs2/file.c | 4 fs/ocfs2/file.h | 4 fs/ocfs2/filecheck.c | 4 fs/ocfs2/filecheck.h | 4 fs/ocfs2/heartbeat.c | 4 fs/ocfs2/heartbeat.h | 4 fs/ocfs2/inode.c | 4 fs/ocfs2/inode.h | 4 fs/ocfs2/journal.c | 4 fs/ocfs2/journal.h | 4 fs/ocfs2/localalloc.c | 4 fs/ocfs2/localalloc.h | 4 fs/ocfs2/locks.c | 4 fs/ocfs2/locks.h | 4 fs/ocfs2/mmap.c | 4 fs/ocfs2/move_extents.c | 4 fs/ocfs2/move_extents.h | 4 fs/ocfs2/namei.c | 4 fs/ocfs2/namei.h | 4 fs/ocfs2/ocfs1_fs_compat.h | 4 fs/ocfs2/ocfs2.h | 4 fs/ocfs2/ocfs2_fs.h | 4 fs/ocfs2/ocfs2_ioctl.h | 4 fs/ocfs2/ocfs2_lockid.h | 4 fs/ocfs2/ocfs2_lockingver.h | 4 fs/ocfs2/refcounttree.c | 4 fs/ocfs2/refcounttree.h | 4 fs/ocfs2/reservations.c | 4 fs/ocfs2/reservations.h | 4 fs/ocfs2/resize.c | 4 fs/ocfs2/resize.h | 4 fs/ocfs2/slot_map.c | 4 fs/ocfs2/slot_map.h | 4 fs/ocfs2/stack_o2cb.c | 4 fs/ocfs2/stack_user.c | 4 fs/ocfs2/stackglue.c | 4 fs/ocfs2/stackglue.h | 4 fs/ocfs2/suballoc.c | 4 fs/ocfs2/suballoc.h | 4 fs/ocfs2/super.c | 4 fs/ocfs2/super.h | 4 fs/ocfs2/symlink.c | 4 fs/ocfs2/symlink.h | 4 fs/ocfs2/sysfile.c | 4 fs/ocfs2/sysfile.h | 4 fs/ocfs2/uptodate.c | 4 fs/ocfs2/uptodate.h | 4 fs/ocfs2/xattr.c | 4 fs/ocfs2/xattr.h | 4 fs/proc/generic.c | 13 fs/proc/inode.c | 18 fs/proc/proc_sysctl.c | 2 fs/reiserfs/procfs.c | 10 include/asm-generic/bitops/find.h | 108 +++ include/asm-generic/bitops/le.h | 38 + include/asm-generic/bitsperlong.h | 12 include/asm-generic/io.h | 11 include/linux/align.h | 15 include/linux/async.h | 1 include/linux/bitmap.h | 11 include/linux/bitops.h | 12 include/linux/blkdev.h | 1 include/linux/compat.h | 1 include/linux/configfs.h | 4 include/linux/crc8.h | 2 include/linux/cred.h | 1 include/linux/delayacct.h | 20 include/linux/fs.h | 2 include/linux/genl_magic_func.h | 1 include/linux/genl_magic_struct.h | 1 include/linux/gfp.h | 2 include/linux/init_task.h | 1 include/linux/initrd.h | 2 include/linux/kernel.h | 9 include/linux/mm.h | 2 include/linux/mmzone.h | 2 include/linux/pgtable.h | 10 include/linux/proc_fs.h | 1 include/linux/profile.h | 3 include/linux/smp.h | 8 include/linux/swap.h | 1 include/linux/vmalloc.h | 7 include/uapi/linux/if_bonding.h | 11 include/uapi/linux/nfs4.h | 6 include/xen/interface/elfnote.h | 10 include/xen/interface/hvm/hvm_vcpu.h | 10 include/xen/interface/io/xenbus.h | 10 init/Kconfig | 12 init/initramfs.c | 38 + init/main.c | 1 ipc/sem.c | 12 kernel/async.c | 68 -- kernel/configs/android-base.config | 1 kernel/crash_core.c | 7 kernel/cred.c | 2 kernel/exit.c | 67 ++ kernel/fork.c | 23 kernel/gcov/Kconfig | 1 kernel/gcov/base.c | 49 + kernel/gcov/clang.c | 282 ---------- kernel/gcov/fs.c | 146 ++++- kernel/gcov/gcc_4_7.c | 173 ------ kernel/gcov/gcov.h | 14 kernel/kexec_core.c | 4 kernel/kexec_file.c | 4 kernel/kmod.c | 2 kernel/resource.c | 198 ++++--- kernel/sys.c | 14 kernel/umh.c | 8 kernel/up.c | 2 kernel/user_namespace.c | 6 lib/bch.c | 2 lib/crc8.c | 2 lib/decompress_unlzma.c | 2 lib/find_bit.c | 68 -- lib/genalloc.c | 7 lib/list_sort.c | 2 lib/parser.c | 61 +- lib/percpu_counter.c | 2 lib/stackdepot.c | 6 mm/balloon_compaction.c | 4 mm/compaction.c | 4 mm/filemap.c | 2 mm/gup.c | 2 mm/highmem.c | 2 mm/huge_memory.c | 6 mm/hugetlb.c | 6 mm/internal.h | 2 mm/kasan/kasan.h | 8 mm/kasan/quarantine.c | 4 mm/kasan/shadow.c | 4 mm/kfence/report.c | 2 mm/khugepaged.c | 2 mm/ksm.c | 6 mm/madvise.c | 4 mm/memcontrol.c | 18 mm/memory-failure.c | 2 mm/memory.c | 18 mm/mempolicy.c | 6 mm/migrate.c | 8 mm/mmap.c | 4 mm/mprotect.c | 2 mm/mremap.c | 2 mm/nommu.c | 10 mm/oom_kill.c | 2 mm/page-writeback.c | 4 mm/page_alloc.c | 16 mm/page_owner.c | 2 mm/page_vma_mapped.c | 2 mm/percpu-internal.h | 2 mm/percpu.c | 2 mm/pgalloc-track.h | 6 mm/rmap.c | 2 mm/slab.c | 8 mm/slub.c | 2 mm/swap.c | 4 mm/swap_slots.c | 2 mm/swap_state.c | 2 mm/vmalloc.c | 124 ---- mm/vmstat.c | 2 mm/z3fold.c | 2 mm/zpool.c | 2 mm/zsmalloc.c | 6 samples/configfs/configfs_sample.c | 2 scripts/checkpatch.pl | 15 scripts/gdb/linux/cpus.py | 23 scripts/gdb/linux/symbols.py | 3 scripts/spelling.txt | 3 tools/include/asm-generic/bitops/find.h | 85 ++- tools/include/asm-generic/bitsperlong.h | 3 tools/include/linux/bitmap.h | 18 tools/lib/bitmap.c | 4 tools/lib/find_bit.c | 56 - tools/scripts/Makefile.include | 1 tools/testing/selftests/filesystems/epoll/epoll_wakeup_test.c | 44 + tools/testing/selftests/kvm/lib/sparsebit.c | 1 tools/testing/selftests/mincore/mincore_selftest.c | 1 tools/testing/selftests/powerpc/mm/tlbie_test.c | 1 tools/testing/selftests/proc/Makefile | 1 tools/testing/selftests/proc/proc-subset-pid.c | 121 ++++ tools/testing/selftests/proc/read.c | 4 tools/usb/hcd-tests.sh | 2 343 files changed, 1383 insertions(+), 2119 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2021-05-07 1:01 incoming Andrew Morton @ 2021-05-07 7:12 ` Linus Torvalds 0 siblings, 0 replies; 370+ messages in thread From: Linus Torvalds @ 2021-05-07 7:12 UTC (permalink / raw) To: Andrew Morton; +Cc: mm-commits, Linux-MM On Thu, May 6, 2021 at 6:01 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > I've been wobbly about the secretmem patches due to doubts about > whether the feature is sufficiently useful to justify inclusion, but > developers are now weighing in with helpful information and I've asked Mike > for an extensively updated [0/n] changelog. This will take a few days > to play out so it is possible that I will prevail upon you for a post-rc1 > merge. Oh, much too late for this release by now. > If that's a problem, there's always 5.13-rc1. 5.13-rc1 is two days from now, it would be for 5.14-rc1.. How time - and version numbers - fly. Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-05-05 1:32 Andrew Morton 2021-05-05 1:47 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2021-05-05 1:32 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits The remainder of the main mm/ queue. 143 patches, based on 8ca5297e7e38f2dc8c753d33a5092e7be181fff0, plus previously sent patches. Subsystems affected by this patch series: mm/pagecache mm/hugetlb mm/userfaultfd mm/vmscan mm/compaction mm/migration mm/cma mm/ksm mm/vmstat mm/mmap mm/kconfig mm/util mm/memory-hotplug mm/zswap mm/zsmalloc mm/highmem mm/cleanups mm/kfence Subsystem: mm/pagecache "Matthew Wilcox (Oracle)" <willy@infradead.org>: Patch series "Remove nrexceptional tracking", v2: mm: introduce and use mapping_empty() mm: stop accounting shadow entries dax: account DAX entries as nrpages mm: remove nrexceptional from inode Hugh Dickins <hughd@google.com>: mm: remove nrexceptional from inode: remove BUG_ON Subsystem: mm/hugetlb Peter Xu <peterx@redhat.com>: Patch series "hugetlb: Disable huge pmd unshare for uffd-wp", v4: hugetlb: pass vma into huge_pte_alloc() and huge_pmd_share() hugetlb/userfaultfd: forbid huge pmd sharing when uffd enabled mm/hugetlb: move flush_hugetlb_tlb_range() into hugetlb.h hugetlb/userfaultfd: unshare all pmds for hugetlbfs when register wp Miaohe Lin <linmiaohe@huawei.com>: mm/hugetlb: remove redundant reservation check condition in alloc_huge_page() Anshuman Khandual <anshuman.khandual@arm.com>: mm: generalize HUGETLB_PAGE_SIZE_VARIABLE Miaohe Lin <linmiaohe@huawei.com>: Patch series "Some cleanups for hugetlb": mm/hugetlb: use some helper functions to cleanup code mm/hugetlb: optimize the surplus state transfer code in move_hugetlb_state() mm/hugetlb_cgroup: remove unnecessary VM_BUG_ON_PAGE in hugetlb_cgroup_migrate() mm/hugetlb: simplify the code when alloc_huge_page() failed in hugetlb_no_page() mm/hugetlb: avoid calculating fault_mutex_hash in truncate_op case Patch series "Cleanup and fixup for khugepaged", v2: khugepaged: remove unneeded return value of khugepaged_collapse_pte_mapped_thps() khugepaged: reuse the smp_wmb() inside __SetPageUptodate() khugepaged: use helper khugepaged_test_exit() in __khugepaged_enter() khugepaged: fix wrong result value for trace_mm_collapse_huge_page_isolate() mm/huge_memory.c: remove unnecessary local variable ret2 Patch series "Some cleanups for huge_memory", v3: mm/huge_memory.c: rework the function vma_adjust_trans_huge() mm/huge_memory.c: make get_huge_zero_page() return bool mm/huge_memory.c: rework the function do_huge_pmd_numa_page() slightly mm/huge_memory.c: remove redundant PageCompound() check mm/huge_memory.c: remove unused macro TRANSPARENT_HUGEPAGE_DEBUG_COW_FLAG mm/huge_memory.c: use helper function migration_entry_to_page() Yanfei Xu <yanfei.xu@windriver.com>: mm/khugepaged.c: replace barrier() with READ_ONCE() for a selective variable Miaohe Lin <linmiaohe@huawei.com>: Patch series "Cleanup for khugepaged": khugepaged: use helper function range_in_vma() in collapse_pte_mapped_thp() khugepaged: remove unnecessary out label in collapse_huge_page() khugepaged: remove meaningless !pte_present() check in khugepaged_scan_pmd() Zi Yan <ziy@nvidia.com>: mm: huge_memory: a new debugfs interface for splitting THP tests mm: huge_memory: debugfs for file-backed THP split Miaohe Lin <linmiaohe@huawei.com>: Patch series "Cleanup and fixup for hugetlb", v2: mm/hugeltb: remove redundant VM_BUG_ON() in region_add() mm/hugeltb: simplify the return code of __vma_reservation_common() mm/hugeltb: clarify (chg - freed) won't go negative in hugetlb_unreserve_pages() mm/hugeltb: handle the error case in hugetlb_fix_reserve_counts() mm/hugetlb: remove unused variable pseudo_vma in remove_inode_hugepages() Mike Kravetz <mike.kravetz@oracle.com>: Patch series "make hugetlb put_page safe for all calling contexts", v5: mm/cma: change cma mutex to irq safe spinlock hugetlb: no need to drop hugetlb_lock to call cma_release hugetlb: add per-hstate mutex to synchronize user adjustments hugetlb: create remove_hugetlb_page() to separate functionality hugetlb: call update_and_free_page without hugetlb_lock hugetlb: change free_pool_huge_page to remove_pool_huge_page hugetlb: make free_huge_page irq safe hugetlb: add lockdep_assert_held() calls for hugetlb_lock Oscar Salvador <osalvador@suse.de>: Patch series "Make alloc_contig_range handle Hugetlb pages", v10: mm,page_alloc: bail out earlier on -ENOMEM in alloc_contig_migrate_range mm,compaction: let isolate_migratepages_{range,block} return error codes mm,hugetlb: drop clearing of flag from prep_new_huge_page mm,hugetlb: split prep_new_huge_page functionality mm: make alloc_contig_range handle free hugetlb pages mm: make alloc_contig_range handle in-use hugetlb pages mm,page_alloc: drop unnecessary checks from pfn_range_valid_contig Subsystem: mm/userfaultfd Axel Rasmussen <axelrasmussen@google.com>: Patch series "userfaultfd: add minor fault handling", v9: userfaultfd: add minor fault registration mode userfaultfd: disable huge PMD sharing for MINOR registered VMAs userfaultfd: hugetlbfs: only compile UFFD helpers if config enabled userfaultfd: add UFFDIO_CONTINUE ioctl userfaultfd: update documentation to describe minor fault handling userfaultfd/selftests: add test exercising minor fault handling Subsystem: mm/vmscan Dave Hansen <dave.hansen@linux.intel.com>: mm/vmscan: move RECLAIM* bits to uapi header mm/vmscan: replace implicit RECLAIM_ZONE checks with explicit checks Yang Shi <shy828301@gmail.com>: Patch series "Make shrinker's nr_deferred memcg aware", v10: mm: vmscan: use nid from shrink_control for tracepoint mm: vmscan: consolidate shrinker_maps handling code mm: vmscan: use shrinker_rwsem to protect shrinker_maps allocation mm: vmscan: remove memcg_shrinker_map_size mm: vmscan: use kvfree_rcu instead of call_rcu mm: memcontrol: rename shrinker_map to shrinker_info mm: vmscan: add shrinker_info_protected() helper mm: vmscan: use a new flag to indicate shrinker is registered mm: vmscan: add per memcg shrinker nr_deferred mm: vmscan: use per memcg nr_deferred of shrinker mm: vmscan: don't need allocate shrinker->nr_deferred for memcg aware shrinkers mm: memcontrol: reparent nr_deferred when memcg offline mm: vmscan: shrink deferred objects proportional to priority Subsystem: mm/compaction Pintu Kumar <pintu@codeaurora.org>: mm/compaction: remove unused variable sysctl_compact_memory Charan Teja Reddy <charante@codeaurora.org>: mm: compaction: update the COMPACT[STALL|FAIL] events properly Subsystem: mm/migration Minchan Kim <minchan@kernel.org>: mm: disable LRU pagevec during the migration temporarily mm: replace migrate_[prep|finish] with lru_cache_[disable|enable] mm: fs: invalidate BH LRU during page migration Miaohe Lin <linmiaohe@huawei.com>: Patch series "Cleanup and fixup for mm/migrate.c", v3: mm/migrate.c: make putback_movable_page() static mm/migrate.c: remove unnecessary rc != MIGRATEPAGE_SUCCESS check in 'else' case mm/migrate.c: fix potential indeterminate pte entry in migrate_vma_insert_page() mm/migrate.c: use helper migrate_vma_collect_skip() in migrate_vma_collect_hole() Revert "mm: migrate: skip shared exec THP for NUMA balancing" Subsystem: mm/cma Minchan Kim <minchan@kernel.org>: mm: vmstat: add cma statistics Baolin Wang <baolin.wang@linux.alibaba.com>: mm: cma: use pr_err_ratelimited for CMA warning Liam Mark <lmark@codeaurora.org>: mm: cma: add trace events for CMA alloc perf testing Minchan Kim <minchan@kernel.org>: mm: cma: support sysfs mm: cma: add the CMA instance name to cma trace events mm: use proper type for cma_[alloc|release] Subsystem: mm/ksm Miaohe Lin <linmiaohe@huawei.com>: Patch series "Cleanup and fixup for ksm": ksm: remove redundant VM_BUG_ON_PAGE() on stable_tree_search() ksm: use GET_KSM_PAGE_NOLOCK to get ksm page in remove_rmap_item_from_tree() ksm: remove dedicated macro KSM_FLAG_MASK ksm: fix potential missing rmap_item for stable_node Chengyang Fan <cy.fan@huawei.com>: mm/ksm: remove unused parameter from remove_trailing_rmap_items() Subsystem: mm/vmstat Hugh Dickins <hughd@google.com>: mm: restore node stat checking in /proc/sys/vm/stat_refresh mm: no more EINVAL from /proc/sys/vm/stat_refresh mm: /proc/sys/vm/stat_refresh skip checking known negative stats mm: /proc/sys/vm/stat_refresh stop checking monotonic numa stats Saravanan D <saravanand@fb.com>: x86/mm: track linear mapping split events Subsystem: mm/mmap Liam Howlett <liam.howlett@oracle.com>: mm/mmap.c: don't unlock VMAs in remap_file_pages() Subsystem: mm/kconfig Anshuman Khandual <anshuman.khandual@arm.com>: Patch series "mm: some config cleanups", v2: mm: generalize ARCH_HAS_CACHE_LINE_SIZE mm: generalize SYS_SUPPORTS_HUGETLBFS (rename as ARCH_SUPPORTS_HUGETLBFS) mm: generalize ARCH_ENABLE_MEMORY_[HOTPLUG|HOTREMOVE] mm: drop redundant ARCH_ENABLE_[HUGEPAGE|THP]_MIGRATION mm: drop redundant ARCH_ENABLE_SPLIT_PMD_PTLOCK mm: drop redundant HAVE_ARCH_TRANSPARENT_HUGEPAGE Subsystem: mm/util Joe Perches <joe@perches.com>: mm/util.c: reduce mem_dump_obj() object size Bhaskar Chowdhury <unixbhaskar@gmail.com>: mm/util.c: fix typo Subsystem: mm/memory-hotplug Pavel Tatashin <pasha.tatashin@soleen.com>: Patch series "prohibit pinning pages in ZONE_MOVABLE", v11: mm/gup: don't pin migrated cma pages in movable zone mm/gup: check every subpage of a compound page during isolation mm/gup: return an error on migration failure mm/gup: check for isolation errors mm cma: rename PF_MEMALLOC_NOCMA to PF_MEMALLOC_PIN mm: apply per-task gfp constraints in fast path mm: honor PF_MEMALLOC_PIN for all movable pages mm/gup: do not migrate zero page mm/gup: migrate pinned pages out of movable zone memory-hotplug.rst: add a note about ZONE_MOVABLE and page pinning mm/gup: change index type to long as it counts pages mm/gup: longterm pin migration cleanup selftests/vm: gup_test: fix test flag selftests/vm: gup_test: test faulting in kernel, and verify pinnable pages Mel Gorman <mgorman@techsingularity.net>: mm/memory_hotplug: remove broken locking of zone PCP structures during hot remove Oscar Salvador <osalvador@suse.de>: Patch series "Allocate memmap from hotadded memory (per device)", v10: drivers/base/memory: introduce memory_block_{online,offline} mm,memory_hotplug: relax fully spanned sections check David Hildenbrand <david@redhat.com>: mm,memory_hotplug: factor out adjusting present pages into adjust_present_page_count() Oscar Salvador <osalvador@suse.de>: mm,memory_hotplug: allocate memmap from the added memory range acpi,memhotplug: enable MHP_MEMMAP_ON_MEMORY when supported mm,memory_hotplug: add kernel boot option to enable memmap_on_memory x86/Kconfig: introduce ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE arm64/Kconfig: introduce ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE Subsystem: mm/zswap Zhiyuan Dai <daizhiyuan@phytium.com.cn>: mm/zswap.c: switch from strlcpy to strscpy Subsystem: mm/zsmalloc zhouchuangao <zhouchuangao@vivo.com>: mm/zsmalloc: use BUG_ON instead of if condition followed by BUG. Subsystem: mm/highmem Ira Weiny <ira.weiny@intel.com>: Patch series "btrfs: Convert kmap/memset/kunmap to memzero_user()": iov_iter: lift memzero_page() to highmem.h btrfs: use memzero_page() instead of open coded kmap pattern songqiang <songqiang@uniontech.com>: mm/highmem.c: fix coding style issue Subsystem: mm/cleanups Zhiyuan Dai <daizhiyuan@phytium.com.cn>: mm/mempool: minor coding style tweaks Zhang Yunkai <zhang.yunkai@zte.com.cn>: mm/process_vm_access.c: remove duplicate include Subsystem: mm/kfence Marco Elver <elver@google.com>: kfence: zero guard page after out-of-bounds access Patch series "kfence: optimize timer scheduling", v2: kfence: await for allocation using wait_event kfence: maximize allocation wait timeout duration kfence: use power-efficient work queue to run delayed work Documentation/ABI/testing/sysfs-kernel-mm-cma | 25 Documentation/admin-guide/kernel-parameters.txt | 17 Documentation/admin-guide/mm/memory-hotplug.rst | 9 Documentation/admin-guide/mm/userfaultfd.rst | 105 +- arch/arc/Kconfig | 9 arch/arm/Kconfig | 10 arch/arm64/Kconfig | 34 arch/arm64/mm/hugetlbpage.c | 7 arch/ia64/Kconfig | 14 arch/ia64/mm/hugetlbpage.c | 3 arch/mips/Kconfig | 6 arch/mips/mm/hugetlbpage.c | 4 arch/parisc/Kconfig | 5 arch/parisc/mm/hugetlbpage.c | 2 arch/powerpc/Kconfig | 17 arch/powerpc/mm/hugetlbpage.c | 3 arch/powerpc/platforms/Kconfig.cputype | 16 arch/riscv/Kconfig | 5 arch/s390/Kconfig | 12 arch/s390/mm/hugetlbpage.c | 2 arch/sh/Kconfig | 7 arch/sh/mm/Kconfig | 8 arch/sh/mm/hugetlbpage.c | 2 arch/sparc/mm/hugetlbpage.c | 2 arch/x86/Kconfig | 33 arch/x86/mm/pat/set_memory.c | 8 drivers/acpi/acpi_memhotplug.c | 5 drivers/base/memory.c | 105 ++ fs/Kconfig | 5 fs/block_dev.c | 2 fs/btrfs/compression.c | 5 fs/btrfs/extent_io.c | 22 fs/btrfs/inode.c | 33 fs/btrfs/reflink.c | 6 fs/btrfs/zlib.c | 5 fs/btrfs/zstd.c | 5 fs/buffer.c | 36 fs/dax.c | 8 fs/gfs2/glock.c | 3 fs/hugetlbfs/inode.c | 9 fs/inode.c | 11 fs/proc/task_mmu.c | 3 fs/userfaultfd.c | 149 +++ include/linux/buffer_head.h | 4 include/linux/cma.h | 4 include/linux/compaction.h | 1 include/linux/fs.h | 2 include/linux/gfp.h | 2 include/linux/highmem.h | 7 include/linux/huge_mm.h | 3 include/linux/hugetlb.h | 37 include/linux/memcontrol.h | 27 include/linux/memory.h | 8 include/linux/memory_hotplug.h | 15 include/linux/memremap.h | 2 include/linux/migrate.h | 11 include/linux/mm.h | 28 include/linux/mmzone.h | 20 include/linux/pagemap.h | 5 include/linux/pgtable.h | 12 include/linux/sched.h | 2 include/linux/sched/mm.h | 27 include/linux/shrinker.h | 7 include/linux/swap.h | 21 include/linux/userfaultfd_k.h | 55 + include/linux/vm_event_item.h | 8 include/trace/events/cma.h | 92 +- include/trace/events/migrate.h | 25 include/trace/events/mmflags.h | 7 include/uapi/linux/mempolicy.h | 7 include/uapi/linux/userfaultfd.h | 36 init/Kconfig | 5 kernel/sysctl.c | 2 lib/Kconfig.kfence | 1 lib/iov_iter.c | 8 mm/Kconfig | 28 mm/Makefile | 6 mm/cma.c | 70 + mm/cma.h | 25 mm/cma_debug.c | 8 mm/cma_sysfs.c | 112 ++ mm/compaction.c | 113 ++ mm/filemap.c | 24 mm/frontswap.c | 12 mm/gup.c | 264 +++--- mm/gup_test.c | 29 mm/gup_test.h | 3 mm/highmem.c | 11 mm/huge_memory.c | 326 +++++++- mm/hugetlb.c | 843 ++++++++++++++-------- mm/hugetlb_cgroup.c | 9 mm/internal.h | 10 mm/kfence/core.c | 61 + mm/khugepaged.c | 63 - mm/ksm.c | 17 mm/list_lru.c | 6 mm/memcontrol.c | 137 --- mm/memory_hotplug.c | 220 +++++ mm/mempolicy.c | 16 mm/mempool.c | 2 mm/migrate.c | 103 -- mm/mlock.c | 4 mm/mmap.c | 18 mm/oom_kill.c | 2 mm/page_alloc.c | 83 +- mm/process_vm_access.c | 1 mm/shmem.c | 2 mm/sparse.c | 4 mm/swap.c | 69 + mm/swap_state.c | 4 mm/swapfile.c | 4 mm/truncate.c | 19 mm/userfaultfd.c | 39 - mm/util.c | 26 mm/vmalloc.c | 2 mm/vmscan.c | 543 +++++++++----- mm/vmstat.c | 45 - mm/workingset.c | 1 mm/zsmalloc.c | 6 mm/zswap.c | 2 tools/testing/selftests/vm/.gitignore | 1 tools/testing/selftests/vm/Makefile | 1 tools/testing/selftests/vm/gup_test.c | 38 tools/testing/selftests/vm/split_huge_page_test.c | 400 ++++++++++ tools/testing/selftests/vm/userfaultfd.c | 164 ++++ 125 files changed, 3596 insertions(+), 1668 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2021-05-05 1:32 incoming Andrew Morton @ 2021-05-05 1:47 ` Linus Torvalds 2021-05-05 3:16 ` incoming Andrew Morton 0 siblings, 1 reply; 370+ messages in thread From: Linus Torvalds @ 2021-05-05 1:47 UTC (permalink / raw) To: Andrew Morton; +Cc: Linux-MM, mm-commits On Tue, May 4, 2021 at 6:32 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > 143 patches Hmm. Only 140 seem to have made it to the list, with 103, 106 and 107 missing. Maybe just some mail delay? But at least right now https://lore.kernel.org/mm-commits/ doesn't show them (and thus 'b4' doesn't work). I'll check again later. Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2021-05-05 1:47 ` incoming Linus Torvalds @ 2021-05-05 3:16 ` Andrew Morton 2021-05-05 17:10 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2021-05-05 3:16 UTC (permalink / raw) To: Linus Torvalds; +Cc: Linux-MM, mm-commits On Tue, 4 May 2021 18:47:19 -0700 Linus Torvalds <torvalds@linux-foundation.org> wrote: > On Tue, May 4, 2021 at 6:32 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > > > 143 patches > > Hmm. Only 140 seem to have made it to the list, with 103, 106 and 107 missing. > > Maybe just some mail delay? But at least right now > > https://lore.kernel.org/mm-commits/ > > doesn't show them (and thus 'b4' doesn't work). > > I'll check again later. > Well that's strange. I see all three via cc:me, but not on linux-mm or mm-commits. Let me resend right now with the same in-reply-to. Hopefully they will land in the correct place. ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2021-05-05 3:16 ` incoming Andrew Morton @ 2021-05-05 17:10 ` Linus Torvalds 2021-05-05 17:44 ` incoming Andrew Morton 0 siblings, 1 reply; 370+ messages in thread From: Linus Torvalds @ 2021-05-05 17:10 UTC (permalink / raw) To: Andrew Morton, Konstantin Ryabitsev; +Cc: Linux-MM, mm-commits On Tue, May 4, 2021 at 8:16 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > Let me resend right now with the same in-reply-to. Hopefully they will > land in the correct place. Well, you re-sent it twice, and I have three copies in my own mailbox, bot they still don't show up on the mm-commits mailing list. So the list hates them for some odd reason. I've picked them up locally, but adding Konstantin to the participants to see if he can see what's up. Konstantin: patches 103/106/107 are missing on lore out of Andrew's series of 143. Odd. Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2021-05-05 17:10 ` incoming Linus Torvalds @ 2021-05-05 17:44 ` Andrew Morton 2021-05-06 3:19 ` incoming Anshuman Khandual 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2021-05-05 17:44 UTC (permalink / raw) To: Linus Torvalds; +Cc: Konstantin Ryabitsev, Linux-MM, mm-commits [-- Attachment #1: Type: text/plain, Size: 1387 bytes --] On Wed, 5 May 2021 10:10:33 -0700 Linus Torvalds <torvalds@linux-foundation.org> wrote: > On Tue, May 4, 2021 at 8:16 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > > > Let me resend right now with the same in-reply-to. Hopefully they will > > land in the correct place. > > Well, you re-sent it twice, and I have three copies in my own mailbox, > bot they still don't show up on the mm-commits mailing list. > > So the list hates them for some odd reason. > > I've picked them up locally, but adding Konstantin to the participants > to see if he can see what's up. > > Konstantin: patches 103/106/107 are missing on lore out of Andrew's > series of 143. Odd. It's weird. They don't turn up on linux-mm either, and that's running at kvack.org, also majordomo. They don't get through when sent with either heirloom-mailx or with sylpheed. Also, it seems that when Anshuman originally sent the patch, linux-mm and linux-kernel didn't send it back out. So perhaps a spam filter triggered? I'm seeing https://lore.kernel.org/linux-arm-kernel/1615278790-18053-3-git-send-email-anshuman.khandual@arm.com/ which is via linux-arm-kernel@lists.infradead.org but the linux-kernel server massacred that patch series. Searching https://lkml.org/lkml/2021/3/9 for "anshuman" only shows 3 of the 7 email series. One of the emails (as sent my me) is attached, if that helps. [-- Attachment #2: x.txt --] [-- Type: text/plain, Size: 21048 bytes --] Return-Path: <akpm@linux-foundation.org> X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on y X-Spam-Level: (none) X-Spam-Status: No, score=-101.5 required=2.5 tests=BAYES_00,T_DKIM_INVALID, USER_IN_WHITELIST autolearn=ham autolearn_force=no version=3.4.1 Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.15.2/8.15.2/Debian-8ubuntu1) with ESMTP id 1453H2fk032202 for <akpm@localhost>; Tue, 4 May 2021 20:17:03 -0700 Received: from imap.fastmail.com [66.111.4.135] by localhost.localdomain with IMAP (fetchmail-6.3.26) for <akpm@localhost> (single-drop); Tue, 04 May 2021 20:17:03 -0700 (PDT) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by sloti11d1t06 (Cyrus 3.5.0-alpha0-442-g5daca166b9-fm-20210428.001-g5daca166) with LMTPA; Tue, 04 May 2021 23:16:31 -0400 X-Cyrus-Session-Id: sloti11d1t06-1620184591-1699471-2-6359664467419938249 X-Sieve: CMU Sieve 3.0 X-Resolved-to: akpm@mbx.kernel.org X-Delivered-to: akpm@mbx.kernel.org X-Mail-from: akpm@linux-foundation.org Received: from mx6 ([10.202.2.205]) by compute1.internal (LMTPProxy); Tue, 04 May 2021 23:16:31 -0400 Received: from mx6.messagingengine.com (localhost [127.0.0.1]) by mailmx.nyi.internal (Postfix) with ESMTP id 40796C800E1 for <akpm@mbx.kernel.org>; Tue, 4 May 2021 23:16:31 -0400 (EDT) Received: from mx6.messagingengine.com (localhost [127.0.0.1]) by mx6.messagingengine.com (Authentication Milter) with ESMTP id 14870833D7F; Tue, 4 May 2021 23:16:31 -0400 ARC-Seal: i=2; a=rsa-sha256; cv=pass; d=messagingengine.com; s=fm2; t= 1620184591; b=FBo7Gf3JFN+4QYg5Byan0oNm6RESv+sIf5HcaslVNsUd9SOTGS yI0+IsXr1CUpGH783hE6fmgEq9SyfOwQVZjdikLaJS1+7u0JtfAYQFU3RORCtXlr djJWrScfjVa8nAHX4rQCtzvtPYuzx5w7cTgGgeILgoJMxgLj7EC9xcT8BIf68+9W Lw+ohAmcuiKhL2ez+de4SMuwdh3dh2FwAIHQOsSjEU1/NV+WGxMLwYbxWgTrqQGH RQIzFNdq30qslW9huK47+e80uHOX2tXwxtshwbThFEn458bdV5LL6Y8Oh4ZWMbv1 tFgTt515DVedonZknxc07XsXtAjaJyB8bfHw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=date:from:to:subject:message-id :in-reply-to; s=fm2; t=1620184591; bh=LuH7mbm3+zp863vKBEqKeoZtnp uFxYpIb5oTVwf56Es=; b=m5E1fbz2b+an/X406oY3BuG0Zm4/W05vWAki8Lsnud gPCc1LfPUFSuXaMppcEDPbLKprp4hH3T52itK4pivXMQCLEOyme7kVStaLMVTiky Xxqh5ZdhOWvygBfda/GjfuLBSbbj2gfm8HPKpbL7CA5foelknIBhJHDzGkJyxetZ YagZfVvtdo2OEwnC1mmjUCpKPO5+m5kaZO0ol6rPdl+TV0MKGhjLg+/i6Ia+0nFp zDwV4VeACvVcGb2xY7KG5Z+BtqVxeVFn+w5JcqpWUtxEKoSBR4bWARzjwHg6eouh 7psOOKPTt/NzDKk+3f49lso5KlPiTF2xEU/+5SIttCkQ== ARC-Authentication-Results: i=2; mx6.messagingengine.com; arc=pass (as.1.google.com=pass, ams.1.google.com=pass) smtp.remote-ip=209.85.215.198; bimi=skipped (DMARC did not pass); dkim=pass (1024-bit rsa key sha256) header.d=linux-foundation.org header.i=@linux-foundation.org header.b=Gdz/3wY9 header.a=rsa-sha256 header.s=korg x-bits=1024; dmarc=none policy.published-domain-policy=none policy.applied-disposition=none policy.evaluated-disposition=none (p=none,d=none,d.eval=none) policy.policy-from=p header.from=linux-foundation.org; iprev=pass smtp.remote-ip=209.85.215.198 (mail-pg1-f198.google.com); spf=pass smtp.mailfrom=akpm@linux-foundation.org smtp.helo=mail-pg1-f198.google.com; x-aligned-from=pass (Address match); x-arc-spf=pass (google.com: domain of akpm@linux-foundation.org designates 198.145.29.99 as permitted sender) smtp.mailfrom=akpm@linux-foundation.org x-arc-instance=1 x-arc-domain=google.com (Trusted from aar.1.google.com); x-csa=none; x-google-dkim=fail (message has been altered, 2048-bit rsa key) header.d=1e100.net header.i=@1e100.net header.b=VZuDOxUf; x-me-sender=none; x-ptr=pass smtp.helo=mail-pg1-f198.google.com policy.ptr=mail-pg1-f198.google.com; x-return-mx=pass header.domain=linux-foundation.org policy.is_org=yes (MX Records found: ASPMX.L.GOOGLE.COM,ALT1.ASPMX.L.GOOGLE.COM,ALT2.ASPMX.L.GOOGLE.COM,ALT3.ASPMX.L.GOOGLE.COM,ALT4.ASPMX.L.GOOGLE.COM); x-return-mx=pass smtp.domain=linux-foundation.org policy.is_org=yes (MX Records found: ASPMX.L.GOOGLE.COM,ALT1.ASPMX.L.GOOGLE.COM,ALT2.ASPMX.L.GOOGLE.COM,ALT3.ASPMX.L.GOOGLE.COM,ALT4.ASPMX.L.GOOGLE.COM); x-tls=pass smtp.version=TLSv1.3 smtp.cipher=TLS_AES_256_GCM_SHA384 smtp.bits=256/256; x-vs=clean score=40 state=0 Authentication-Results: mx6.messagingengine.com; arc=pass (as.1.google.com=pass, ams.1.google.com=pass) smtp.remote-ip=209.85.215.198; bimi=skipped (DMARC did not pass); dkim=pass (1024-bit rsa key sha256) header.d=linux-foundation.org header.i=@linux-foundation.org header.b=Gdz/3wY9 header.a=rsa-sha256 header.s=korg x-bits=1024; dmarc=none policy.published-domain-policy=none policy.applied-disposition=none policy.evaluated-disposition=none (p=none,d=none,d.eval=none) policy.policy-from=p header.from=linux-foundation.org; iprev=pass smtp.remote-ip=209.85.215.198 (mail-pg1-f198.google.com); spf=pass smtp.mailfrom=akpm@linux-foundation.org smtp.helo=mail-pg1-f198.google.com; x-aligned-from=pass (Address match); x-arc-spf=pass (google.com: domain of akpm@linux-foundation.org designates 198.145.29.99 as permitted sender) smtp.mailfrom=akpm@linux-foundation.org x-arc-instance=1 x-arc-domain=google.com (Trusted from aar.1.google.com); x-csa=none; x-google-dkim=fail (message has been altered, 2048-bit rsa key) header.d=1e100.net header.i=@1e100.net header.b=VZuDOxUf; x-me-sender=none; x-ptr=pass smtp.helo=mail-pg1-f198.google.com policy.ptr=mail-pg1-f198.google.com; x-return-mx=pass header.domain=linux-foundation.org policy.is_org=yes (MX Records found: ASPMX.L.GOOGLE.COM,ALT1.ASPMX.L.GOOGLE.COM,ALT2.ASPMX.L.GOOGLE.COM,ALT3.ASPMX.L.GOOGLE.COM,ALT4.ASPMX.L.GOOGLE.COM); x-return-mx=pass smtp.domain=linux-foundation.org policy.is_org=yes (MX Records found: ASPMX.L.GOOGLE.COM,ALT1.ASPMX.L.GOOGLE.COM,ALT2.ASPMX.L.GOOGLE.COM,ALT3.ASPMX.L.GOOGLE.COM,ALT4.ASPMX.L.GOOGLE.COM); x-tls=pass smtp.version=TLSv1.3 smtp.cipher=TLS_AES_256_GCM_SHA384 smtp.bits=256/256; x-vs=clean score=40 state=0 X-ME-VSCause: gggruggvucftvghtrhhoucdtuddrgeduledrvdefjedgieegucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucgoufhorhhtvggutfgvtg hiphdvucdlgedtmdenucfjughrpeffhffvuffkjggfsedttdertddtredtnecuhfhrohhm peetnhgurhgvficuofhorhhtohhnuceorghkphhmsehlihhnuhigqdhfohhunhgurghtih honhdrohhrgheqnecuggftrfgrthhtvghrnhepjeevfeduveffvddvudetkefhgeduveeu geevvdfhhfevhfekkedtieefgfduheeinecuffhomhgrihhnpehkvghrnhgvlhdrohhrgh enucfkphepvddtledrkeehrddvudehrdduleekpdduleekrddugeehrddvledrleelnecu uegrugftvghpuhhtkfhppeduleekrddugeehrddvledrleelnecuvehluhhsthgvrhfuih iivgeptdenucfrrghrrghmpehinhgvthepvddtledrkeehrddvudehrdduleekpdhhvghl ohepmhgrihhlqdhpghduqdhfudelkedrghhoohhglhgvrdgtohhmpdhmrghilhhfrhhomh epoegrkhhpmheslhhinhhugidqfhhouhhnuggrthhiohhnrdhorhhgqe X-ME-VSScore: 40 X-ME-VSCategory: clean X-ME-CSA: none Received-SPF: pass (linux-foundation.org: Sender is authorized to use 'akpm@linux-foundation.org' in 'mfrom' identity (mechanism 'include:_spf.google.com' matched)) receiver=mx6.messagingengine.com; identity=mailfrom; envelope-from="akpm@linux-foundation.org"; helo=mail-pg1-f198.google.com; client-ip=209.85.215.198 Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx6.messagingengine.com (Postfix) with ESMTPS for <akpm@mbx.kernel.org>; Tue, 4 May 2021 23:16:31 -0400 (EDT) Received: by mail-pg1-f198.google.com with SMTP id g5-20020a63f4050000b02901f6c7b9a6d0so593624pgi.5 for <akpm@mbx.kernel.org>; Tue, 04 May 2021 20:16:30 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:date:from:to:subject:message-id :in-reply-to:user-agent; bh=LuH7mbm3+zp863vKBEqKeoZtnpuFxYpIb5oTVwf56Es=; b=VZuDOxUfeHXJz1/CiFfcxuMVHkmW5RznvqYS+Py8Ub6nHHXprQJGE9Ze3WgH+1ylSe NJLEC7xgv15SR9A+e/MT4RTj3OVOwtd1Zi2vPav39a9K4tP+2uL2Ei+5d7FtT3LLZsjo feek/DqCGSkJ/EC5woLyU9BBkfLUuQ9/2HiDCk10BMetEfWdor69Slb39NOXES8br02X 25Btabu9ZCWroyjQj7W5gwGr5Z6Hs2nbnnfAb+e92FalcUD/4ql77lNzRcWGi4/9TT8s ntqI2g46Xv+k5LURaRH5CRBpxkkKgzcrioRPYFUHkEgOEWy1hPzg9QPk8ZO35Xm9R9d2 vl3Q== X-Gm-Message-State: AOAM531IlYUTVWcMrsTunnxZWB7SKeeOmoZj5mZ1A5tl7N/JlZUueN8L tvyRKnvxHr6a5mDaGHN9Tb1N/iCzT0U5oQgRVTxTnj1qFGibRa9+leLQNKX0aGlNg9JiaMfromb xyOlCUpVXOlVvchuwTUSTn7rXum+Hh3PWQZm5II/EX+0AkzKqez62Z8U= X-Received: by 2002:a17:90a:a581:: with SMTP id b1mr32203271pjq.53.1620184589161; Tue, 04 May 2021 20:16:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxffoGdRqAjUagWoMVD5p/Lk1KTEDftEhkWh8ewatgDmZLlxh0lO1hxYIdYYwoO5dsJ/i0z X-Received: by 2002:a17:90a:a581:: with SMTP id b1mr32203198pjq.53.1620184588109; Tue, 04 May 2021 20:16:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620184588; cv=none; d=google.com; s=arc-20160816; b=Fr2b2AMXJr6OeNpSql45tq1korkuDOunp7t+DpARuEBnwvQnKfagyipQ93jywsRf/c /i/mP2eTmJwOLWNORClh1MGF/0VfBx1ULoB9W4CI3LpVgGFXGGFis8LTcvUYD5yvhlsV 50rm2j34iS9lyo04FB/hbhGkwLtUhz2PGkLGuqHspTd+pUpUCf5SLxGJbZC5uCcUEsbO 8WSDBWyvaCPjFzJQZK60gK70ticKW+fCG1xHtOG4qsFCbqEpFKBy8eVK83OBazo/dQDr DOheWNWyw2o/WMP4GpZMvZuj30dx3j8xnBahIpnMIQJaog6wLMcVX9pkQ8UJym3/PGNm pO/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=user-agent:in-reply-to:message-id:subject:to:from:date :dkim-signature; bh=LuH7mbm3+zp863vKBEqKeoZtnpuFxYpIb5oTVwf56Es=; b=vVN16NPMKjoxSJQ6b36VXFCkZqnmG7wABfilgE069txZqmHpEMyZb8lRStkHy557LM Kn7UfJFP3xwsP8ZTCipVDZ6tpFW/hYFU9o4th9G8asWs+MOf9xpWX2LQZ1FTmaao2Fg5 uCHypz39cnAh0Z1EJfNsTcaTGIrkbBd6zje+mtBgs8hnfH8HcWBYTPCHCCx950Z928tb XOPd/Igs7yzD1ioBiGXZj/ciwPbWVTaZXBg4JOZSApxkDMfuMyfyLLOs++EVkyxJHUme TmgwvLkixcwEtKF7gIeqEhwvOUSVvilLuJLFVaLumwTcjJ1amVfGcJhBE7LIM9C3SMpA rOOg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux-foundation.org header.s=korg header.b="Gdz/3wY9"; spf=pass (google.com: domain of akpm@linux-foundation.org designates 198.145.29.99 as permitted sender) smtp.mailfrom=akpm@linux-foundation.org Received: from mail.kernel.org (mail.kernel.org. [198.145.29.99]) by mx.google.com with ESMTPS id c85si20173199pfb.8.2021.05.04.20.16.27 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 04 May 2021 20:16:28 -0700 (PDT) Received-SPF: pass (google.com: domain of akpm@linux-foundation.org designates 198.145.29.99 as permitted sender) client-ip=198.145.29.99; Authentication-Results: mx.google.com; dkim=pass header.i=@linux-foundation.org header.s=korg header.b="Gdz/3wY9"; spf=pass (google.com: domain of akpm@linux-foundation.org designates 198.145.29.99 as permitted sender) smtp.mailfrom=akpm@linux-foundation.org Received: by mail.kernel.org (Postfix) with ESMTPSA id A4DB4610D2; Wed, 5 May 2021 03:16:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linux-foundation.org; s=korg; t=1620184587; bh=TxN4wgKcKf2UUem+5pL09m9GL/7U592mEalo2U6vwAU=; h=Date:From:To:Subject:In-Reply-To:From; b=Gdz/3wY9ktH3hOmn2DAOkfh0JXwPdMJ8xsNQFa9eI25K39Z3iHdRGo9jX3QtMDtog D4Zakt52CQCYsV91c9oCai8KnCTkkAjJq/Ez7p8UHpz97Go3yYYxqg6DDl6d8HCQvN H47dTaZAgeH2sw29bjB9fRzNuTx7k4RAPlqZIpiE= Date: Tue, 04 May 2021 20:16:26 -0700 From: Andrew Morton <akpm@linux-foundation.org> To: akpm@linux-foundation.org, anshuman.khandual@arm.com, aou@eecs.berkeley.edu, arnd@arndb.de, benh@kernel.crashing.org, borntraeger@de.ibm.com, bp@alien8.de, catalin.marinas@arm.com, dalias@libc.org, deller@gmx.de, gor@linux.ibm.com, hca@linux.ibm.com, hpa@zytor.com, James.Bottomley@HansenPartnership.com, linux-mm@kvack.org, linux@armlinux.org.uk, mingo@redhat.com, mm-commits@vger.kernel.org, mpe@ellerman.id.au, palmerdabbelt@google.com, paul.walmsley@sifive.com, paulus@samba.org, tglx@linutronix.de, torvalds@linux-foundation.org, tsbogend@alpha.franken.de, vgupta@synopsys.com, viro@zeniv.linux.org.uk, will@kernel.org, ysato@users.osdn.me Subject: [patch 103/143] mm: generalize SYS_SUPPORTS_HUGETLBFS (rename as ARCH_SUPPORTS_HUGETLBFS) Message-ID: <20210505031626.c8o4WL7KE%akpm@linux-foundation.org> In-Reply-To: <20210504183219.a3cc46aee4013d77402276c5@linux-foundation.org> User-Agent: s-nail v14.8.16 X-Gm-Original-To: akpm@linux-foundation.org From: Anshuman Khandual <anshuman.khandual@arm.com> Subject: mm: generalize SYS_SUPPORTS_HUGETLBFS (rename as ARCH_SUPPORTS_HUGETLBFS) SYS_SUPPORTS_HUGETLBFS config has duplicate definitions on platforms that subscribe it. Instead, just make it a generic option which can be selected on applicable platforms. Also rename it as ARCH_SUPPORTS_HUGETLBFS instead. This reduces code duplication and makes it cleaner. Link: https://lkml.kernel.org/r/1617259448-22529-3-git-send-email-anshuman.khandual@arm.com Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> Acked-by: Catalin Marinas <catalin.marinas@arm.com> [arm64] Acked-by: Palmer Dabbelt <palmerdabbelt@google.com> [riscv] Acked-by: Michael Ellerman <mpe@ellerman.id.au> [powerpc] Cc: Russell King <linux@armlinux.org.uk> Cc: Will Deacon <will@kernel.org> Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de> Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com> Cc: Helge Deller <deller@gmx.de> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Paul Walmsley <paul.walmsley@sifive.com> Cc: Albert Ou <aou@eecs.berkeley.edu> Cc: Yoshinori Sato <ysato@users.sourceforge.jp> Cc: Rich Felker <dalias@libc.org> Cc: Alexander Viro <viro@zeniv.linux.org.uk> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Borislav Petkov <bp@alien8.de> Cc: Christian Borntraeger <borntraeger@de.ibm.com> Cc: Heiko Carstens <hca@linux.ibm.com> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Vasily Gorbik <gor@linux.ibm.com> Cc: Vineet Gupta <vgupta@synopsys.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- arch/arm/Kconfig | 5 +---- arch/arm64/Kconfig | 4 +--- arch/mips/Kconfig | 6 +----- arch/parisc/Kconfig | 5 +---- arch/powerpc/Kconfig | 3 --- arch/powerpc/platforms/Kconfig.cputype | 6 +++--- arch/riscv/Kconfig | 5 +---- arch/sh/Kconfig | 5 +---- fs/Kconfig | 5 ++++- 9 files changed, 13 insertions(+), 31 deletions(-) --- a/arch/arm64/Kconfig~mm-generalize-sys_supports_hugetlbfs-rename-as-arch_supports_hugetlbfs +++ a/arch/arm64/Kconfig @@ -73,6 +73,7 @@ config ARM64 select ARCH_USE_QUEUED_SPINLOCKS select ARCH_USE_SYM_ANNOTATIONS select ARCH_SUPPORTS_DEBUG_PAGEALLOC + select ARCH_SUPPORTS_HUGETLBFS select ARCH_SUPPORTS_MEMORY_FAILURE select ARCH_SUPPORTS_SHADOW_CALL_STACK if CC_HAVE_SHADOW_CALL_STACK select ARCH_SUPPORTS_LTO_CLANG if CPU_LITTLE_ENDIAN @@ -1072,9 +1073,6 @@ config HW_PERF_EVENTS def_bool y depends on ARM_PMU -config SYS_SUPPORTS_HUGETLBFS - def_bool y - config ARCH_HAS_FILTER_PGPROT def_bool y --- a/arch/arm/Kconfig~mm-generalize-sys_supports_hugetlbfs-rename-as-arch_supports_hugetlbfs +++ a/arch/arm/Kconfig @@ -31,6 +31,7 @@ config ARM select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX select ARCH_OPTIONAL_KERNEL_RWX_DEFAULT if CPU_V7 select ARCH_SUPPORTS_ATOMIC_RMW + select ARCH_SUPPORTS_HUGETLBFS if ARM_LPAE select ARCH_USE_BUILTIN_BSWAP select ARCH_USE_CMPXCHG_LOCKREF select ARCH_USE_MEMTEST @@ -1511,10 +1512,6 @@ config HW_PERF_EVENTS def_bool y depends on ARM_PMU -config SYS_SUPPORTS_HUGETLBFS - def_bool y - depends on ARM_LPAE - config HAVE_ARCH_TRANSPARENT_HUGEPAGE def_bool y depends on ARM_LPAE --- a/arch/mips/Kconfig~mm-generalize-sys_supports_hugetlbfs-rename-as-arch_supports_hugetlbfs +++ a/arch/mips/Kconfig @@ -19,6 +19,7 @@ config MIPS select ARCH_USE_MEMTEST select ARCH_USE_QUEUED_RWLOCKS select ARCH_USE_QUEUED_SPINLOCKS + select ARCH_SUPPORTS_HUGETLBFS if CPU_SUPPORTS_HUGEPAGES select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU select ARCH_WANT_IPC_PARSE_VERSION select ARCH_WANT_LD_ORPHAN_WARN @@ -1287,11 +1288,6 @@ config SYS_SUPPORTS_BIG_ENDIAN config SYS_SUPPORTS_LITTLE_ENDIAN bool -config SYS_SUPPORTS_HUGETLBFS - bool - depends on CPU_SUPPORTS_HUGEPAGES - default y - config MIPS_HUGE_TLB_SUPPORT def_bool HUGETLB_PAGE || TRANSPARENT_HUGEPAGE --- a/arch/parisc/Kconfig~mm-generalize-sys_supports_hugetlbfs-rename-as-arch_supports_hugetlbfs +++ a/arch/parisc/Kconfig @@ -12,6 +12,7 @@ config PARISC select ARCH_HAS_STRICT_KERNEL_RWX select ARCH_HAS_UBSAN_SANITIZE_ALL select ARCH_NO_SG_CHAIN + select ARCH_SUPPORTS_HUGETLBFS if PA20 select ARCH_SUPPORTS_MEMORY_FAILURE select DMA_OPS select RTC_CLASS @@ -138,10 +139,6 @@ config PGTABLE_LEVELS default 3 if 64BIT && PARISC_PAGE_SIZE_4KB default 2 -config SYS_SUPPORTS_HUGETLBFS - def_bool y if PA20 - - menu "Processor type and features" choice --- a/arch/powerpc/Kconfig~mm-generalize-sys_supports_hugetlbfs-rename-as-arch_supports_hugetlbfs +++ a/arch/powerpc/Kconfig @@ -697,9 +697,6 @@ config ARCH_SPARSEMEM_DEFAULT def_bool y depends on PPC_BOOK3S_64 -config SYS_SUPPORTS_HUGETLBFS - bool - config ILLEGAL_POINTER_VALUE hex # This is roughly half way between the top of user space and the bottom --- a/arch/powerpc/platforms/Kconfig.cputype~mm-generalize-sys_supports_hugetlbfs-rename-as-arch_supports_hugetlbfs +++ a/arch/powerpc/platforms/Kconfig.cputype @@ -40,8 +40,8 @@ config PPC_85xx config PPC_8xx bool "Freescale 8xx" + select ARCH_SUPPORTS_HUGETLBFS select FSL_SOC - select SYS_SUPPORTS_HUGETLBFS select PPC_HAVE_KUEP select PPC_HAVE_KUAP select HAVE_ARCH_VMAP_STACK @@ -95,9 +95,9 @@ config PPC_BOOK3S_64 bool "Server processors" select PPC_FPU select PPC_HAVE_PMU_SUPPORT - select SYS_SUPPORTS_HUGETLBFS select HAVE_ARCH_TRANSPARENT_HUGEPAGE select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE + select ARCH_SUPPORTS_HUGETLBFS select ARCH_SUPPORTS_NUMA_BALANCING select IRQ_WORK select PPC_MM_SLICES @@ -278,9 +278,9 @@ config FSL_BOOKE # this is for common code between PPC32 & PPC64 FSL BOOKE config PPC_FSL_BOOK3E bool + select ARCH_SUPPORTS_HUGETLBFS if PHYS_64BIT || PPC64 select FSL_EMB_PERFMON select PPC_SMP_MUXED_IPI - select SYS_SUPPORTS_HUGETLBFS if PHYS_64BIT || PPC64 select PPC_DOORBELL default y if FSL_BOOKE --- a/arch/riscv/Kconfig~mm-generalize-sys_supports_hugetlbfs-rename-as-arch_supports_hugetlbfs +++ a/arch/riscv/Kconfig @@ -30,6 +30,7 @@ config RISCV select ARCH_HAS_STRICT_KERNEL_RWX if MMU select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX select ARCH_OPTIONAL_KERNEL_RWX_DEFAULT + select ARCH_SUPPORTS_HUGETLBFS if MMU select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU select ARCH_WANT_FRAME_POINTERS select ARCH_WANT_HUGE_PMD_SHARE if 64BIT @@ -165,10 +166,6 @@ config ARCH_WANT_GENERAL_HUGETLB config ARCH_SUPPORTS_UPROBES def_bool y -config SYS_SUPPORTS_HUGETLBFS - depends on MMU - def_bool y - config STACKTRACE_SUPPORT def_bool y --- a/arch/sh/Kconfig~mm-generalize-sys_supports_hugetlbfs-rename-as-arch_supports_hugetlbfs +++ a/arch/sh/Kconfig @@ -101,9 +101,6 @@ config SYS_SUPPORTS_APM_EMULATION bool select ARCH_SUSPEND_POSSIBLE -config SYS_SUPPORTS_HUGETLBFS - bool - config SYS_SUPPORTS_SMP bool @@ -175,12 +172,12 @@ config CPU_SH3 config CPU_SH4 bool + select ARCH_SUPPORTS_HUGETLBFS if MMU select CPU_HAS_INTEVT select CPU_HAS_SR_RB select CPU_HAS_FPU if !CPU_SH4AL_DSP select SH_INTC select SYS_SUPPORTS_SH_TMU - select SYS_SUPPORTS_HUGETLBFS if MMU config CPU_SH4A bool --- a/fs/Kconfig~mm-generalize-sys_supports_hugetlbfs-rename-as-arch_supports_hugetlbfs +++ a/fs/Kconfig @@ -223,10 +223,13 @@ config TMPFS_INODE64 If unsure, say N. +config ARCH_SUPPORTS_HUGETLBFS + def_bool n + config HUGETLBFS bool "HugeTLB file system support" depends on X86 || IA64 || SPARC64 || (S390 && 64BIT) || \ - SYS_SUPPORTS_HUGETLBFS || BROKEN + ARCH_SUPPORTS_HUGETLBFS || BROKEN help hugetlbfs is a filesystem backing for HugeTLB pages, based on ramfs. For architectures that support it, say Y here and read _ ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2021-05-05 17:44 ` incoming Andrew Morton @ 2021-05-06 3:19 ` Anshuman Khandual 0 siblings, 0 replies; 370+ messages in thread From: Anshuman Khandual @ 2021-05-06 3:19 UTC (permalink / raw) To: Andrew Morton, Linus Torvalds; +Cc: Konstantin Ryabitsev, Linux-MM, mm-commits On 5/5/21 11:14 PM, Andrew Morton wrote: > On Wed, 5 May 2021 10:10:33 -0700 Linus Torvalds <torvalds@linux-foundation.org> wrote: > >> On Tue, May 4, 2021 at 8:16 PM Andrew Morton <akpm@linux-foundation.org> wrote: >>> Let me resend right now with the same in-reply-to. Hopefully they will >>> land in the correct place. >> Well, you re-sent it twice, and I have three copies in my own mailbox, >> bot they still don't show up on the mm-commits mailing list. >> >> So the list hates them for some odd reason. >> >> I've picked them up locally, but adding Konstantin to the participants >> to see if he can see what's up. >> >> Konstantin: patches 103/106/107 are missing on lore out of Andrew's >> series of 143. Odd. > It's weird. They don't turn up on linux-mm either, and that's running > at kvack.org, also majordomo. They don't get through when sent with > either heirloom-mailx or with sylpheed. > > Also, it seems that when Anshuman originally sent the patch, linux-mm > and linux-kernel didn't send it back out. So perhaps a spam filter > triggered? > > I'm seeing > > https://lore.kernel.org/linux-arm-kernel/1615278790-18053-3-git-send-email-anshuman.khandual@arm.com/ > > which is via linux-arm-kernel@lists.infradead.org but the linux-kernel > server massacred that patch series. Searching > https://lkml.org/lkml/2021/3/9 for "anshuman" only shows 3 of the 7 > email series. Yeah these patches faced problem from the very beginning getting into the MM/LKML list for some strange reason. ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-04-30 5:52 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-04-30 5:52 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits A few misc subsystems and some of MM. 178 patches, based on 8ca5297e7e38f2dc8c753d33a5092e7be181fff0. Subsystems affected by this patch series: ia64 kbuild scripts sh ocfs2 kfifo vfs kernel/watchdog mm/slab-generic mm/slub mm/kmemleak mm/debug mm/pagecache mm/msync mm/gup mm/memremap mm/memcg mm/pagemap mm/mremap mm/dma mm/sparsemem mm/vmalloc mm/documentation mm/kasan mm/initialization mm/pagealloc mm/memory-failure Subsystem: ia64 Zhang Yunkai <zhang.yunkai@zte.com.cn>: arch/ia64/kernel/head.S: remove duplicate include Bhaskar Chowdhury <unixbhaskar@gmail.com>: arch/ia64/kernel/fsys.S: fix typos arch/ia64/include/asm/pgtable.h: minor typo fixes Valentin Schneider <valentin.schneider@arm.com>: ia64: ensure proper NUMA distance and possible map initialization Sergei Trofimovich <slyfox@gentoo.org>: ia64: drop unused IA64_FW_EMU ifdef ia64: simplify code flow around swiotlb init Bhaskar Chowdhury <unixbhaskar@gmail.com>: ia64: trivial spelling fixes Sergei Trofimovich <slyfox@gentoo.org>: ia64: fix EFI_DEBUG build ia64: mca: always make IA64_MCA_DEBUG an expression ia64: drop marked broken DISCONTIGMEM and VIRTUAL_MEM_MAP ia64: module: fix symbolizer crash on fdescr Subsystem: kbuild Luc Van Oostenryck <luc.vanoostenryck@gmail.com>: include/linux/compiler-gcc.h: sparse can do constant folding of __builtin_bswap*() Subsystem: scripts Tom Saeger <tom.saeger@oracle.com>: scripts/spelling.txt: add entries for recent discoveries Wan Jiabing <wanjiabing@vivo.com>: scripts: a new script for checking duplicate struct declaration Subsystem: sh Zhang Yunkai <zhang.yunkai@zte.com.cn>: arch/sh/include/asm/tlb.h: remove duplicate include Subsystem: ocfs2 Yang Li <yang.lee@linux.alibaba.com>: ocfs2: replace DEFINE_SIMPLE_ATTRIBUTE with DEFINE_DEBUGFS_ATTRIBUTE Joseph Qi <joseph.qi@linux.alibaba.com>: ocfs2: map flags directly in flags_to_o2dlm() Bhaskar Chowdhury <unixbhaskar@gmail.com>: ocfs2: fix a typo Jiapeng Chong <jiapeng.chong@linux.alibaba.com>: ocfs2/dlm: remove unused function Subsystem: kfifo Dan Carpenter <dan.carpenter@oracle.com>: kfifo: fix ternary sign extension bugs Subsystem: vfs Randy Dunlap <rdunlap@infradead.org>: vfs: fs_parser: clean up kernel-doc warnings Subsystem: kernel/watchdog Petr Mladek <pmladek@suse.com>: Patch series "watchdog/softlockup: Report overall time and some cleanup", v2: watchdog: rename __touch_watchdog() to a better descriptive name watchdog: explicitly update timestamp when reporting softlockup watchdog/softlockup: report the overall time of softlockups watchdog/softlockup: remove logic that tried to prevent repeated reports watchdog: fix barriers when printing backtraces from all CPUs watchdog: cleanup handling of false positives Subsystem: mm/slab-generic Rafael Aquini <aquini@redhat.com>: mm/slab_common: provide "slab_merge" option for !IS_ENABLED(CONFIG_SLAB_MERGE_DEFAULT) builds Subsystem: mm/slub Vlastimil Babka <vbabka@suse.cz>: mm, slub: enable slub_debug static key when creating cache with explicit debug flags Oliver Glitta <glittao@gmail.com>: kunit: add a KUnit test for SLUB debugging functionality slub: remove resiliency_test() function Bhaskar Chowdhury <unixbhaskar@gmail.com>: mm/slub.c: trivial typo fixes Subsystem: mm/kmemleak Bhaskar Chowdhury <unixbhaskar@gmail.com>: mm/kmemleak.c: fix a typo Subsystem: mm/debug Georgi Djakov <georgi.djakov@linaro.org>: mm/page_owner: record the timestamp of all pages during free zhongjiang-ali <zhongjiang-ali@linux.alibaba.com>: mm, page_owner: remove unused parameter in __set_page_owner_handle Sergei Trofimovich <slyfox@gentoo.org>: mm: page_owner: fetch backtrace only for tracked pages mm: page_owner: use kstrtobool() to parse bool option mm: page_owner: detect page_owner recursion via task_struct mm: page_poison: print page info when corruption is caught Anshuman Khandual <anshuman.khandual@arm.com>: mm/memtest: add ARCH_USE_MEMTEST Subsystem: mm/pagecache Jens Axboe <axboe@kernel.dk>: Patch series "Improve IOCB_NOWAIT O_DIRECT reads", v3: mm: provide filemap_range_needs_writeback() helper mm: use filemap_range_needs_writeback() for O_DIRECT reads iomap: use filemap_range_needs_writeback() for O_DIRECT reads "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm/filemap: use filemap_read_page in filemap_fault mm/filemap: drop check for truncated page after I/O Johannes Weiner <hannes@cmpxchg.org>: mm: page-writeback: simplify memcg handling in test_clear_page_writeback() "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm: move page_mapping_file to pagemap.h Rui Sun <sunrui26@huawei.com>: mm/filemap: update stale comment Subsystem: mm/msync Nikita Ermakov <sh1r4s3@mail.si-head.nl>: mm/msync: exit early when the flags is an MS_ASYNC and start < vm_start Subsystem: mm/gup Joao Martins <joao.m.martins@oracle.com>: Patch series "mm/gup: page unpining improvements", v4: mm/gup: add compound page list iterator mm/gup: decrement head page once for group of subpages mm/gup: add a range variant of unpin_user_pages_dirty_lock() RDMA/umem: batch page unpin in __ib_umem_release() Yang Shi <shy828301@gmail.com>: mm: gup: remove FOLL_SPLIT Subsystem: mm/memremap Zhiyuan Dai <daizhiyuan@phytium.com.cn>: mm/memremap.c: fix improper SPDX comment style Subsystem: mm/memcg Muchun Song <songmuchun@bytedance.com>: mm: memcontrol: fix kernel stack account Shakeel Butt <shakeelb@google.com>: memcg: cleanup root memcg checks memcg: enable memcg oom-kill for __GFP_NOFAIL Johannes Weiner <hannes@cmpxchg.org>: Patch series "mm: memcontrol: switch to rstat", v3: mm: memcontrol: fix cpuhotplug statistics flushing mm: memcontrol: kill mem_cgroup_nodeinfo() mm: memcontrol: privatize memcg_page_state query functions cgroup: rstat: support cgroup1 cgroup: rstat: punt root-level optimization to individual controllers mm: memcontrol: switch to rstat mm: memcontrol: consolidate lruvec stat flushing kselftests: cgroup: update kmem test for new vmstat implementation Shakeel Butt <shakeelb@google.com>: memcg: charge before adding to swapcache on swapin Muchun Song <songmuchun@bytedance.com>: Patch series "Use obj_cgroup APIs to charge kmem pages", v5: mm: memcontrol: slab: fix obtain a reference to a freeing memcg mm: memcontrol: introduce obj_cgroup_{un}charge_pages mm: memcontrol: directly access page->memcg_data in mm/page_alloc.c mm: memcontrol: change ug->dummy_page only if memcg changed mm: memcontrol: use obj_cgroup APIs to charge kmem pages mm: memcontrol: inline __memcg_kmem_{un}charge() into obj_cgroup_{un}charge_pages() mm: memcontrol: move PageMemcgKmem to the scope of CONFIG_MEMCG_KMEM Wan Jiabing <wanjiabing@vivo.com>: linux/memcontrol.h: remove duplicate struct declaration Johannes Weiner <hannes@cmpxchg.org>: mm: page_counter: mitigate consequences of a page_counter underflow Subsystem: mm/pagemap Wang Qing <wangqing@vivo.com>: mm/memory.c: do_numa_page(): delete bool "migrated" Zhiyuan Dai <daizhiyuan@phytium.com.cn>: mm/interval_tree: add comments to improve code readability Oscar Salvador <osalvador@suse.de>: Patch series "Cleanup and fixups for vmemmap handling", v6: x86/vmemmap: drop handling of 4K unaligned vmemmap range x86/vmemmap: drop handling of 1GB vmemmap ranges x86/vmemmap: handle unpopulated sub-pmd ranges x86/vmemmap: optimize for consecutive sections in partial populated PMDs Ovidiu Panait <ovidiu.panait@windriver.com>: mm, tracing: improve rss_stat tracepoint message Christoph Hellwig <hch@lst.de>: Patch series "add remap_pfn_range_notrack instead of reinventing it in i915", v2: mm: add remap_pfn_range_notrack mm: add a io_mapping_map_user helper i915: use io_mapping_map_user i915: fix remap_io_sg to verify the pgprot Huang Ying <ying.huang@intel.com>: NUMA balancing: reduce TLB flush via delaying mapping on hint page fault Subsystem: mm/mremap Brian Geffon <bgeffon@google.com>: Patch series "mm: Extend MREMAP_DONTUNMAP to non-anonymous mappings", v5: mm: extend MREMAP_DONTUNMAP to non-anonymous mappings Revert "mremap: don't allow MREMAP_DONTUNMAP on special_mappings and aio" selftests: add a MREMAP_DONTUNMAP selftest for shmem Subsystem: mm/dma Zhiyuan Dai <daizhiyuan@phytium.com.cn>: mm/dmapool: switch from strlcpy to strscpy Subsystem: mm/sparsemem Wang Wensheng <wangwensheng4@huawei.com>: mm/sparse: add the missing sparse_buffer_fini() in error branch Subsystem: mm/vmalloc Christoph Hellwig <hch@lst.de>: Patch series "remap_vmalloc_range cleanups": samples/vfio-mdev/mdpy: use remap_vmalloc_range mm: unexport remap_vmalloc_range_partial Serapheim Dimitropoulos <serapheim.dimitro@delphix.com>: mm/vmalloc: use rb_tree instead of list for vread() lookups Nicholas Piggin <npiggin@gmail.com>: Patch series "huge vmalloc mappings", v13: ARM: mm: add missing pud_page define to 2-level page tables mm/vmalloc: fix HUGE_VMAP regression by enabling huge pages in vmalloc_to_page mm: apply_to_pte_range warn and fail if a large pte is encountered mm/vmalloc: rename vmap_*_range vmap_pages_*_range mm/ioremap: rename ioremap_*_range to vmap_*_range mm: HUGE_VMAP arch support cleanup powerpc: inline huge vmap supported functions arm64: inline huge vmap supported functions x86: inline huge vmap supported functions mm/vmalloc: provide fallback arch huge vmap support functions mm: move vmap_range from mm/ioremap.c to mm/vmalloc.c mm/vmalloc: add vmap_range_noflush variant mm/vmalloc: hugepage vmalloc mappings Patch series "mm/vmalloc: cleanup after hugepage series", v2: mm/vmalloc: remove map_kernel_range kernel/dma: remove unnecessary unmap_kernel_range powerpc/xive: remove unnecessary unmap_kernel_range mm/vmalloc: remove unmap_kernel_range mm/vmalloc: improve allocation failure error messages Vijayanand Jitta <vjitta@codeaurora.org>: mm: vmalloc: prevent use after free in _vm_unmap_aliases "Uladzislau Rezki (Sony)" <urezki@gmail.com>: lib/test_vmalloc.c: remove two kvfree_rcu() tests lib/test_vmalloc.c: add a new 'nr_threads' parameter vm/test_vmalloc.sh: adapt for updated driver interface mm/vmalloc: refactor the preloading loagic mm/vmalloc: remove an empty line Subsystem: mm/documentation "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm/doc: fix fault_flag_allow_retry_first kerneldoc mm/doc: fix page_maybe_dma_pinned kerneldoc mm/doc: turn fault flags into an enum mm/doc: add mm.h and mm_types.h to the mm-api document Lukas Bulwahn <lukas.bulwahn@gmail.com>: Patch series "kernel-doc and MAINTAINERS clean-up": MAINTAINERS: assign pagewalk.h to MEMORY MANAGEMENT pagewalk: prefix struct kernel-doc descriptions Subsystem: mm/kasan Zhiyuan Dai <daizhiyuan@phytium.com.cn>: mm/kasan: switch from strlcpy to strscpy Peter Collingbourne <pcc@google.com>: kasan: fix kasan_byte_accessible() to be consistent with actual checks Andrey Konovalov <andreyknvl@google.com>: kasan: initialize shadow to TAG_INVALID for SW_TAGS mm, kasan: don't poison boot memory with tag-based modes Patch series "kasan: integrate with init_on_alloc/free", v3: arm64: kasan: allow to init memory when setting tags kasan: init memory in kasan_(un)poison for HW_TAGS kasan, mm: integrate page_alloc init with HW_TAGS kasan, mm: integrate slab init_on_alloc with HW_TAGS kasan, mm: integrate slab init_on_free with HW_TAGS kasan: docs: clean up sections kasan: docs: update overview section kasan: docs: update usage section kasan: docs: update error reports section kasan: docs: update boot parameters section kasan: docs: update GENERIC implementation details section kasan: docs: update SW_TAGS implementation details section kasan: docs: update HW_TAGS implementation details section kasan: docs: update shadow memory section kasan: docs: update ignoring accesses section kasan: docs: update tests section Walter Wu <walter-zh.wu@mediatek.com>: kasan: record task_work_add() call stack Andrey Konovalov <andreyknvl@google.com>: kasan: detect false-positives in tests Zqiang <qiang.zhang@windriver.com>: irq_work: record irq_work_queue() call stack Subsystem: mm/initialization Kefeng Wang <wangkefeng.wang@huawei.com>: mm: move mem_init_print_info() into mm_init() Subsystem: mm/pagealloc David Hildenbrand <david@redhat.com>: mm/page_alloc: drop pr_info_ratelimited() in alloc_contig_range() Minchan Kim <minchan@kernel.org>: mm: remove lru_add_drain_all in alloc_contig_range Yu Zhao <yuzhao@google.com>: include/linux/page-flags-layout.h: correctly determine LAST_CPUPID_WIDTH include/linux/page-flags-layout.h: cleanups "Matthew Wilcox (Oracle)" <willy@infradead.org>: Patch series "Rationalise __alloc_pages wrappers", v3: mm/page_alloc: rename alloc_mask to alloc_gfp mm/page_alloc: rename gfp_mask to gfp mm/page_alloc: combine __alloc_pages and __alloc_pages_nodemask mm/mempolicy: rename alloc_pages_current to alloc_pages mm/mempolicy: rewrite alloc_pages documentation mm/mempolicy: rewrite alloc_pages_vma documentation mm/mempolicy: fix mpol_misplaced kernel-doc Minchan Kim <minchan@kernel.org>: mm: page_alloc: dump migrate-failed pages Geert Uytterhoeven <geert@linux-m68k.org>: mm/Kconfig: remove default DISCONTIGMEM_MANUAL Kefeng Wang <wangkefeng.wang@huawei.com>: mm, page_alloc: avoid page_to_pfn() in move_freepages() zhouchuangao <zhouchuangao@vivo.com>: mm/page_alloc: duplicate include linux/vmalloc.h Mel Gorman <mgorman@techsingularity.net>: Patch series "Introduce a bulk order-0 page allocator with two in-tree users", v6: mm/page_alloc: rename alloced to allocated mm/page_alloc: add a bulk page allocator mm/page_alloc: add an array-based interface to the bulk page allocator Jesper Dangaard Brouer <brouer@redhat.com>: mm/page_alloc: optimize code layout for __alloc_pages_bulk mm/page_alloc: inline __rmqueue_pcplist Chuck Lever <chuck.lever@oracle.com>: Patch series "SUNRPC consumer for the bulk page allocator": SUNRPC: set rq_page_end differently SUNRPC: refresh rq_pages using a bulk page allocator Jesper Dangaard Brouer <brouer@redhat.com>: net: page_pool: refactor dma_map into own function page_pool_dma_map net: page_pool: use alloc_pages_bulk in refill code path Sergei Trofimovich <slyfox@gentoo.org>: mm: page_alloc: ignore init_on_free=1 for debug_pagealloc=1 huxiang <huxiang@uniontech.com>: mm/page_alloc: redundant definition variables of pfn in for loop Mike Rapoport <rppt@linux.ibm.com>: mm/mmzone.h: fix existing kernel-doc comments and link them to core-api Subsystem: mm/memory-failure Jane Chu <jane.chu@oracle.com>: mm/memory-failure: unnecessary amount of unmapping Documentation/admin-guide/kernel-parameters.txt | 7 Documentation/admin-guide/mm/transhuge.rst | 2 Documentation/core-api/cachetlb.rst | 4 Documentation/core-api/mm-api.rst | 6 Documentation/dev-tools/kasan.rst | 355 +++++----- Documentation/vm/page_owner.rst | 2 Documentation/vm/transhuge.rst | 5 MAINTAINERS | 1 arch/Kconfig | 11 arch/alpha/mm/init.c | 1 arch/arc/mm/init.c | 1 arch/arm/Kconfig | 1 arch/arm/include/asm/pgtable-3level.h | 2 arch/arm/include/asm/pgtable.h | 3 arch/arm/mm/copypage-v4mc.c | 1 arch/arm/mm/copypage-v6.c | 1 arch/arm/mm/copypage-xscale.c | 1 arch/arm/mm/init.c | 2 arch/arm64/Kconfig | 1 arch/arm64/include/asm/memory.h | 4 arch/arm64/include/asm/mte-kasan.h | 39 - arch/arm64/include/asm/vmalloc.h | 38 - arch/arm64/mm/init.c | 4 arch/arm64/mm/mmu.c | 36 - arch/csky/abiv1/cacheflush.c | 1 arch/csky/mm/init.c | 1 arch/h8300/mm/init.c | 2 arch/hexagon/mm/init.c | 1 arch/ia64/Kconfig | 23 arch/ia64/configs/bigsur_defconfig | 1 arch/ia64/include/asm/meminit.h | 11 arch/ia64/include/asm/module.h | 6 arch/ia64/include/asm/page.h | 25 arch/ia64/include/asm/pgtable.h | 7 arch/ia64/kernel/Makefile | 2 arch/ia64/kernel/acpi.c | 7 arch/ia64/kernel/efi.c | 11 arch/ia64/kernel/fsys.S | 4 arch/ia64/kernel/head.S | 6 arch/ia64/kernel/ia64_ksyms.c | 12 arch/ia64/kernel/machine_kexec.c | 2 arch/ia64/kernel/mca.c | 4 arch/ia64/kernel/module.c | 29 arch/ia64/kernel/pal.S | 6 arch/ia64/mm/Makefile | 1 arch/ia64/mm/contig.c | 4 arch/ia64/mm/discontig.c | 21 arch/ia64/mm/fault.c | 15 arch/ia64/mm/init.c | 221 ------ arch/m68k/mm/init.c | 1 arch/microblaze/mm/init.c | 1 arch/mips/Kconfig | 1 arch/mips/loongson64/numa.c | 1 arch/mips/mm/cache.c | 1 arch/mips/mm/init.c | 1 arch/mips/sgi-ip27/ip27-memory.c | 1 arch/nds32/mm/init.c | 1 arch/nios2/mm/cacheflush.c | 1 arch/nios2/mm/init.c | 1 arch/openrisc/mm/init.c | 2 arch/parisc/mm/init.c | 2 arch/powerpc/Kconfig | 1 arch/powerpc/include/asm/vmalloc.h | 34 - arch/powerpc/kernel/isa-bridge.c | 4 arch/powerpc/kernel/pci_64.c | 2 arch/powerpc/mm/book3s64/radix_pgtable.c | 29 arch/powerpc/mm/ioremap.c | 2 arch/powerpc/mm/mem.c | 1 arch/powerpc/sysdev/xive/common.c | 4 arch/riscv/mm/init.c | 1 arch/s390/mm/init.c | 2 arch/sh/include/asm/tlb.h | 10 arch/sh/mm/cache-sh4.c | 1 arch/sh/mm/cache-sh7705.c | 1 arch/sh/mm/init.c | 1 arch/sparc/include/asm/pgtable_32.h | 3 arch/sparc/mm/init_32.c | 2 arch/sparc/mm/init_64.c | 1 arch/sparc/mm/tlb.c | 1 arch/um/kernel/mem.c | 1 arch/x86/Kconfig | 1 arch/x86/include/asm/vmalloc.h | 42 - arch/x86/kernel/cpu/resctrl/pseudo_lock.c | 2 arch/x86/mm/init_32.c | 2 arch/x86/mm/init_64.c | 222 ++++-- arch/x86/mm/ioremap.c | 33 arch/x86/mm/pgtable.c | 13 arch/xtensa/Kconfig | 1 arch/xtensa/mm/init.c | 1 block/blk-cgroup.c | 17 drivers/gpu/drm/i915/Kconfig | 1 drivers/gpu/drm/i915/gem/i915_gem_mman.c | 9 drivers/gpu/drm/i915/i915_drv.h | 3 drivers/gpu/drm/i915/i915_mm.c | 117 --- drivers/infiniband/core/umem.c | 12 drivers/pci/pci.c | 2 fs/aio.c | 5 fs/fs_parser.c | 2 fs/iomap/direct-io.c | 24 fs/ocfs2/blockcheck.c | 2 fs/ocfs2/dlm/dlmrecovery.c | 7 fs/ocfs2/stack_o2cb.c | 36 - fs/ocfs2/stackglue.c | 2 include/linux/compiler-gcc.h | 8 include/linux/fs.h | 2 include/linux/gfp.h | 45 - include/linux/io-mapping.h | 3 include/linux/io.h | 9 include/linux/kasan.h | 51 + include/linux/memcontrol.h | 271 ++++---- include/linux/mm.h | 50 - include/linux/mmzone.h | 43 - include/linux/page-flags-layout.h | 64 - include/linux/pagemap.h | 10 include/linux/pagewalk.h | 4 include/linux/sched.h | 4 include/linux/slab.h | 2 include/linux/slub_def.h | 2 include/linux/vmalloc.h | 73 +- include/linux/vmstat.h | 24 include/net/page_pool.h | 2 include/trace/events/kmem.h | 24 init/main.c | 2 kernel/cgroup/cgroup.c | 34 - kernel/cgroup/rstat.c | 61 + kernel/dma/remap.c | 1 kernel/fork.c | 13 kernel/irq_work.c | 7 kernel/task_work.c | 3 kernel/watchdog.c | 102 +-- lib/Kconfig.debug | 14 lib/Makefile | 1 lib/test_kasan.c | 59 - lib/test_slub.c | 124 +++ lib/test_vmalloc.c | 128 +-- mm/Kconfig | 4 mm/Makefile | 1 mm/debug_vm_pgtable.c | 4 mm/dmapool.c | 2 mm/filemap.c | 61 + mm/gup.c | 145 +++- mm/hugetlb.c | 2 mm/internal.h | 25 mm/interval_tree.c | 2 mm/io-mapping.c | 29 mm/ioremap.c | 361 ++-------- mm/kasan/common.c | 53 - mm/kasan/generic.c | 12 mm/kasan/kasan.h | 28 mm/kasan/report_generic.c | 2 mm/kasan/shadow.c | 10 mm/kasan/sw_tags.c | 12 mm/kmemleak.c | 2 mm/memcontrol.c | 798 ++++++++++++------------ mm/memory-failure.c | 2 mm/memory.c | 191 +++-- mm/mempolicy.c | 78 -- mm/mempool.c | 4 mm/memremap.c | 2 mm/migrate.c | 2 mm/mm_init.c | 4 mm/mmap.c | 6 mm/mremap.c | 6 mm/msync.c | 6 mm/page-writeback.c | 9 mm/page_alloc.c | 430 +++++++++--- mm/page_counter.c | 8 mm/page_owner.c | 68 -- mm/page_poison.c | 6 mm/percpu-vm.c | 7 mm/slab.c | 43 - mm/slab.h | 24 mm/slab_common.c | 10 mm/slub.c | 215 ++---- mm/sparse.c | 1 mm/swap_state.c | 13 mm/util.c | 10 mm/vmalloc.c | 728 ++++++++++++++++----- net/core/page_pool.c | 127 ++- net/sunrpc/svc_xprt.c | 38 - samples/kfifo/bytestream-example.c | 8 samples/kfifo/inttype-example.c | 8 samples/kfifo/record-example.c | 8 samples/vfio-mdev/mdpy.c | 4 scripts/checkdeclares.pl | 53 + scripts/spelling.txt | 26 tools/testing/selftests/cgroup/test_kmem.c | 22 tools/testing/selftests/vm/mremap_dontunmap.c | 52 + tools/testing/selftests/vm/test_vmalloc.sh | 21 189 files changed, 3642 insertions(+), 3013 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-04-23 21:28 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-04-23 21:28 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 5 patches, based on 5bfc75d92efd494db37f5c4c173d3639d4772966. Subsystems affected by this patch series: coda overlayfs mm/pagecache mm/memcg Subsystem: coda Christian König <christian.koenig@amd.com>: coda: fix reference counting in coda_file_mmap error path Subsystem: overlayfs Christian König <christian.koenig@amd.com>: ovl: fix reference counting in ovl_mmap error path Subsystem: mm/pagecache Hugh Dickins <hughd@google.com>: mm/filemap: fix find_lock_entries hang on 32-bit THP mm/filemap: fix mapping_seek_hole_data on THP & 32-bit Subsystem: mm/memcg Vasily Averin <vvs@virtuozzo.com>: tools/cgroup/slabinfo.py: updated to work on current kernel fs/coda/file.c | 6 +++--- fs/overlayfs/file.c | 11 +---------- mm/filemap.c | 31 +++++++++++++++++++------------ tools/cgroup/memcg_slabinfo.py | 8 ++++---- 4 files changed, 27 insertions(+), 29 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-04-16 22:45 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-04-16 22:45 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 12 patches, based on 06c2aac4014c38247256fe49c61b7f55890271e7. Subsystems affected by this patch series: mm/documentation mm/kasan csky ia64 mm/pagemap gcov lib Subsystem: mm/documentation Randy Dunlap <rdunlap@infradead.org>: mm: eliminate "expecting prototype" kernel-doc warnings Subsystem: mm/kasan Arnd Bergmann <arnd@arndb.de>: kasan: fix hwasan build for gcc Walter Wu <walter-zh.wu@mediatek.com>: kasan: remove redundant config option Subsystem: csky Randy Dunlap <rdunlap@infradead.org>: csky: change a Kconfig symbol name to fix e1000 build error Subsystem: ia64 Randy Dunlap <rdunlap@infradead.org>: ia64: remove duplicate entries in generic_defconfig ia64: fix discontig.c section mismatches John Paul Adrian Glaubitz <glaubitz () physik ! fu-berlin ! de>: ia64: tools: remove inclusion of ia64-specific version of errno.h header John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>: ia64: tools: remove duplicate definition of ia64_mf() on ia64 Subsystem: mm/pagemap Zack Rusin <zackr@vmware.com>: mm/mapping_dirty_helpers: guard hugepage pud's usage Christophe Leroy <christophe.leroy@csgroup.eu>: mm: ptdump: fix build failure Subsystem: gcov Johannes Berg <johannes.berg@intel.com>: gcov: clang: fix clang-11+ build Subsystem: lib Randy Dunlap <rdunlap@infradead.org>: lib: remove "expecting prototype" kernel-doc warnings arch/arm64/kernel/sleep.S | 2 +- arch/csky/Kconfig | 2 +- arch/csky/include/asm/page.h | 2 +- arch/ia64/configs/generic_defconfig | 2 -- arch/ia64/mm/discontig.c | 6 +++--- arch/x86/kernel/acpi/wakeup_64.S | 2 +- include/linux/kasan.h | 2 +- kernel/gcov/clang.c | 2 +- lib/Kconfig.kasan | 9 ++------- lib/earlycpio.c | 4 ++-- lib/lru_cache.c | 3 ++- lib/parman.c | 4 ++-- lib/radix-tree.c | 11 ++++++----- mm/kasan/common.c | 2 +- mm/kasan/kasan.h | 2 +- mm/kasan/report_generic.c | 2 +- mm/mapping_dirty_helpers.c | 2 ++ mm/mmu_gather.c | 29 +++++++++++++++++++---------- mm/oom_kill.c | 2 +- mm/ptdump.c | 2 +- mm/shuffle.c | 4 ++-- scripts/Makefile.kasan | 22 ++++++++++++++-------- security/Kconfig.hardening | 4 ++-- tools/arch/ia64/include/asm/barrier.h | 3 --- tools/include/uapi/asm/errno.h | 2 -- 25 files changed, 67 insertions(+), 60 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-04-09 20:26 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-04-09 20:26 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 16 patches, based on 17e7124aad766b3f158943acb51467f86220afe9. Subsystems affected by this patch series: MAINTAINERS mailmap mm/kasan mm/gup nds32 gcov ocfs2 ia64 mm/pagecache mm/kasan mm/kfence lib Subsystem: MAINTAINERS Marek Behún <kabel@kernel.org>: MAINTAINERS: update CZ.NIC's Turris information treewide: change my e-mail address, fix my name Subsystem: mailmap Jordan Crouse <jordan@cosmicpenguin.net>: mailmap: update email address for Jordan Crouse Matthew Wilcox <willy@infradead.org>: .mailmap: fix old email addresses Subsystem: mm/kasan Arnd Bergmann <arnd@arndb.de>: kasan: fix hwasan build for gcc Walter Wu <walter-zh.wu@mediatek.com>: kasan: remove redundant config option Subsystem: mm/gup Aili Yao <yaoaili@kingsoft.com>: mm/gup: check page posion status for coredump. Subsystem: nds32 Mike Rapoport <rppt@linux.ibm.com>: nds32: flush_dcache_page: use page_mapping_file to avoid races with swapoff Subsystem: gcov Nick Desaulniers <ndesaulniers@google.com>: gcov: re-fix clang-11+ support Subsystem: ocfs2 Wengang Wang <wen.gang.wang@oracle.com>: ocfs2: fix deadlock between setattr and dio_end_io_write Subsystem: ia64 Sergei Trofimovich <slyfox@gentoo.org>: ia64: fix user_stack_pointer() for ptrace() Subsystem: mm/pagecache Jack Qiu <jack.qiu@huawei.com>: fs: direct-io: fix missing sdio->boundary Subsystem: mm/kasan Andrey Konovalov <andreyknvl@google.com>: kasan: fix conflict with page poisoning Andrew Morton <akpm@linux-foundation.org>: lib/test_kasan_module.c: suppress unused var warning Subsystem: mm/kfence Marco Elver <elver@google.com>: kfence, x86: fix preemptible warning on KPTI-enabled systems Subsystem: lib Julian Braha <julianbraha@gmail.com>: lib: fix kconfig dependency on ARCH_WANT_FRAME_POINTERS .mailmap | 7 ++ Documentation/ABI/testing/debugfs-moxtet | 4 - Documentation/ABI/testing/debugfs-turris-mox-rwtm | 2 Documentation/ABI/testing/sysfs-bus-moxtet-devices | 6 +- Documentation/ABI/testing/sysfs-class-led-driver-turris-omnia | 2 Documentation/ABI/testing/sysfs-firmware-turris-mox-rwtm | 10 +-- Documentation/devicetree/bindings/leds/cznic,turris-omnia-leds.yaml | 2 MAINTAINERS | 13 +++- arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts | 2 arch/arm64/kernel/sleep.S | 2 arch/ia64/include/asm/ptrace.h | 8 -- arch/nds32/mm/cacheflush.c | 2 arch/x86/include/asm/kfence.h | 7 ++ arch/x86/kernel/acpi/wakeup_64.S | 2 drivers/bus/moxtet.c | 4 - drivers/firmware/turris-mox-rwtm.c | 4 - drivers/gpio/gpio-moxtet.c | 4 - drivers/leds/leds-turris-omnia.c | 4 - drivers/mailbox/armada-37xx-rwtm-mailbox.c | 4 - drivers/watchdog/armada_37xx_wdt.c | 4 - fs/direct-io.c | 5 + fs/ocfs2/aops.c | 11 --- fs/ocfs2/file.c | 8 ++ include/dt-bindings/bus/moxtet.h | 2 include/linux/armada-37xx-rwtm-mailbox.h | 2 include/linux/kasan.h | 2 include/linux/moxtet.h | 2 kernel/gcov/clang.c | 29 ++++++---- lib/Kconfig.debug | 6 +- lib/Kconfig.kasan | 9 --- lib/test_kasan_module.c | 2 mm/gup.c | 4 + mm/internal.h | 20 ++++++ mm/kasan/common.c | 2 mm/kasan/kasan.h | 2 mm/kasan/report_generic.c | 2 mm/page_poison.c | 4 + scripts/Makefile.kasan | 18 ++++-- security/Kconfig.hardening | 4 - 39 files changed, 136 insertions(+), 91 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-03-25 4:36 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-03-25 4:36 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 14 patches, based on 7acac4b3196caee5e21fb5ea53f8bc124e6a16fc. Subsystems affected by this patch series: mm/hugetlb mm/kasan mm/gup mm/selftests mm/z3fold squashfs ia64 gcov mm/kfence mm/memblock mm/highmem mailmap Subsystem: mm/hugetlb Miaohe Lin <linmiaohe@huawei.com>: hugetlb_cgroup: fix imbalanced css_get and css_put pair for shared mappings Subsystem: mm/kasan Andrey Konovalov <andreyknvl@google.com>: kasan: fix per-page tags for non-page_alloc pages Subsystem: mm/gup Sean Christopherson <seanjc@google.com>: mm/mmu_notifiers: ensure range_end() is paired with range_start() Subsystem: mm/selftests Rong Chen <rong.a.chen@intel.com>: selftests/vm: fix out-of-tree build Subsystem: mm/z3fold Thomas Hebb <tommyhebb@gmail.com>: z3fold: prevent reclaim/free race for headless pages Subsystem: squashfs Sean Nyekjaer <sean@geanix.com>: squashfs: fix inode lookup sanity checks Phillip Lougher <phillip@squashfs.org.uk>: squashfs: fix xattr id and id lookup sanity checks Subsystem: ia64 Sergei Trofimovich <slyfox@gentoo.org>: ia64: mca: allocate early mca with GFP_ATOMIC ia64: fix format strings for err_inject Subsystem: gcov Nick Desaulniers <ndesaulniers@google.com>: gcov: fix clang-11+ support Subsystem: mm/kfence Marco Elver <elver@google.com>: kfence: make compatible with kmemleak Subsystem: mm/memblock Mike Rapoport <rppt@linux.ibm.com>: mm: memblock: fix section mismatch warning again Subsystem: mm/highmem Ira Weiny <ira.weiny@intel.com>: mm/highmem: fix CONFIG_DEBUG_KMAP_LOCAL_FORCE_MAP Subsystem: mailmap Andrey Konovalov <andreyknvl@google.com>: mailmap: update Andrey Konovalov's email address .mailmap | 1 arch/ia64/kernel/err_inject.c | 22 +++++------ arch/ia64/kernel/mca.c | 2 - fs/squashfs/export.c | 8 +++- fs/squashfs/id.c | 6 ++- fs/squashfs/squashfs_fs.h | 1 fs/squashfs/xattr_id.c | 6 ++- include/linux/hugetlb_cgroup.h | 15 ++++++- include/linux/memblock.h | 4 +- include/linux/mm.h | 18 +++++++-- include/linux/mmu_notifier.h | 10 ++--- kernel/gcov/clang.c | 69 ++++++++++++++++++++++++++++++++++++ mm/highmem.c | 4 +- mm/hugetlb.c | 41 +++++++++++++++++++-- mm/hugetlb_cgroup.c | 10 ++++- mm/kfence/core.c | 9 ++++ mm/kmemleak.c | 3 + mm/mmu_notifier.c | 23 ++++++++++++ mm/z3fold.c | 16 +++++++- tools/testing/selftests/vm/Makefile | 4 +- 20 files changed, 230 insertions(+), 42 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-03-13 5:06 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-03-13 5:06 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 29 patches, based on f78d76e72a4671ea52d12752d92077788b4f5d50. Subsystems affected by this patch series: mm/memblock core-kernel kconfig mm/pagealloc fork mm/hugetlb mm/highmem binfmt MAINTAINERS kbuild mm/kfence mm/oom-kill mm/madvise mm/kasan mm/userfaultfd mm/memory-failure ia64 mm/memcg mm/zram Subsystem: mm/memblock Arnd Bergmann <arnd@arndb.de>: memblock: fix section mismatch warning Subsystem: core-kernel Arnd Bergmann <arnd@arndb.de>: stop_machine: mark helpers __always_inline Subsystem: kconfig Masahiro Yamada <masahiroy@kernel.org>: init/Kconfig: make COMPILE_TEST depend on HAS_IOMEM Subsystem: mm/pagealloc Mike Rapoport <rppt@linux.ibm.com>: mm/page_alloc.c: refactor initialization of struct page for holes in memory layout Subsystem: fork Fenghua Yu <fenghua.yu@intel.com>: mm/fork: clear PASID for new mm Subsystem: mm/hugetlb Peter Xu <peterx@redhat.com>: Patch series "mm/hugetlb: Early cow on fork, and a few cleanups", v5: hugetlb: dedup the code to add a new file_region hugetlb: break earlier in add_reservation_in_range() when we can mm: introduce page_needs_cow_for_dma() for deciding whether cow mm: use is_cow_mapping() across tree where proper hugetlb: do early cow when page pinned on src mm Subsystem: mm/highmem OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>: mm/highmem.c: fix zero_user_segments() with start > end Subsystem: binfmt Lior Ribak <liorribak@gmail.com>: binfmt_misc: fix possible deadlock in bm_register_write Subsystem: MAINTAINERS Vlastimil Babka <vbabka@suse.cz>: MAINTAINERS: exclude uapi directories in API/ABI section Subsystem: kbuild Arnd Bergmann <arnd@arndb.de>: linux/compiler-clang.h: define HAVE_BUILTIN_BSWAP* Subsystem: mm/kfence Marco Elver <elver@google.com>: kfence: fix printk format for ptrdiff_t kfence, slab: fix cache_alloc_debugcheck_after() for bulk allocations kfence: fix reports if constant function prefixes exist Subsystem: mm/oom-kill "Matthew Wilcox (Oracle)" <willy@infradead.org>: include/linux/sched/mm.h: use rcu_dereference in in_vfork() Subsystem: mm/madvise Suren Baghdasaryan <surenb@google.com>: mm/madvise: replace ptrace attach requirement for process_madvise Subsystem: mm/kasan Andrey Konovalov <andreyknvl@google.com>: kasan, mm: fix crash with HW_TAGS and DEBUG_PAGEALLOC kasan: fix KASAN_STACK dependency for HW_TAGS Subsystem: mm/userfaultfd Nadav Amit <namit@vmware.com>: mm/userfaultfd: fix memory corruption due to writeprotect Subsystem: mm/memory-failure Naoya Horiguchi <naoya.horiguchi@nec.com>: mm, hwpoison: do not lock page again when me_huge_page() successfully recovers Subsystem: ia64 Sergei Trofimovich <slyfox@gentoo.org>: ia64: fix ia64_syscall_get_set_arguments() for break-based syscalls ia64: fix ptrace(PTRACE_SYSCALL_INFO_EXIT) sign Subsystem: mm/memcg Zhou Guanghui <zhouguanghui1@huawei.com>: mm/memcg: rename mem_cgroup_split_huge_fixup to split_page_memcg and add nr_pages argument mm/memcg: set memcg when splitting page Subsystem: mm/zram Minchan Kim <minchan@kernel.org>: zram: fix return value on writeback_store zram: fix broken page writeback MAINTAINERS | 4 arch/ia64/include/asm/syscall.h | 2 arch/ia64/kernel/ptrace.c | 24 +++- drivers/block/zram/zram_drv.c | 17 +- drivers/gpu/drm/vmwgfx/vmwgfx_page_dirty.c | 4 drivers/gpu/drm/vmwgfx/vmwgfx_ttm_glue.c | 2 fs/binfmt_misc.c | 29 ++--- fs/proc/task_mmu.c | 2 include/linux/compiler-clang.h | 6 + include/linux/memblock.h | 4 include/linux/memcontrol.h | 6 - include/linux/mm.h | 21 +++ include/linux/mm_types.h | 1 include/linux/sched/mm.h | 3 include/linux/stop_machine.h | 11 + init/Kconfig | 3 kernel/fork.c | 8 + lib/Kconfig.kasan | 1 mm/highmem.c | 17 ++ mm/huge_memory.c | 10 - mm/hugetlb.c | 123 +++++++++++++++------ mm/internal.h | 5 mm/kfence/report.c | 30 +++-- mm/madvise.c | 13 ++ mm/memcontrol.c | 15 +- mm/memory-failure.c | 4 mm/memory.c | 16 +- mm/page_alloc.c | 167 ++++++++++++++--------------- mm/slab.c | 2 29 files changed, 334 insertions(+), 216 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-02-26 1:14 Andrew Morton 2021-02-26 17:55 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2021-02-26 1:14 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm - The rest of MM. Includes kfence - another runtime memory validator. Not as thorough as KASAN, but it has unmeasurable overhead and is intended to be usable in production builds. - Everything else 118 patches, based on 6fbd6cf85a3be127454a1ad58525a3adcf8612ab. Subsystems affected by this patch series: mm/thp mm/cma mm/vmstat mm/memory-hotplug mm/mlock mm/rmap mm/zswap mm/zsmalloc mm/cleanups mm/kfence mm/kasan2 alpha procfs sysctl misc core-kernel MAINTAINERS lib bitops checkpatch init coredump seq_file gdb ubsan initramfs mm/pagemap2 Subsystem: mm/thp "Matthew Wilcox (Oracle)" <willy@infradead.org>: Patch series "Overhaul multi-page lookups for THP", v4: mm: make pagecache tagged lookups return only head pages mm/shmem: use pagevec_lookup in shmem_unlock_mapping mm/swap: optimise get_shadow_from_swap_cache mm: add FGP_ENTRY mm/filemap: rename find_get_entry to mapping_get_entry mm/filemap: add helper for finding pages mm/filemap: add mapping_seek_hole_data iomap: use mapping_seek_hole_data mm: add and use find_lock_entries mm: add an 'end' parameter to find_get_entries mm: add an 'end' parameter to pagevec_lookup_entries mm: remove nr_entries parameter from pagevec_lookup_entries mm: pass pvec directly to find_get_entries mm: remove pagevec_lookup_entries Rik van Riel <riel@surriel.com>: Patch series "mm,thp,shm: limit shmem THP alloc gfp_mask", v6: mm,thp,shmem: limit shmem THP alloc gfp_mask mm,thp,shm: limit gfp mask to no more than specified mm,thp,shmem: make khugepaged obey tmpfs mount flags mm,shmem,thp: limit shmem THP allocations to requested zones Subsystem: mm/cma Roman Gushchin <guro@fb.com>: mm: cma: allocate cma areas bottom-up David Hildenbrand <david@redhat.com>: mm/cma: expose all pages to the buddy if activation of an area fails mm/page_alloc: count CMA pages per zone and print them in /proc/zoneinfo Patrick Daly <pdaly@codeaurora.org>: mm: cma: print region name on failure Subsystem: mm/vmstat Johannes Weiner <hannes@cmpxchg.org>: mm: vmstat: fix NOHZ wakeups for node stat changes mm: vmstat: add some comments on internal storage of byte items Jiang Biao <benbjiang@tencent.com>: mm/vmstat.c: erase latency in vmstat_shepherd Subsystem: mm/memory-hotplug Dan Williams <dan.j.williams@intel.com>: Patch series "mm: Fix pfn_to_online_page() with respect to ZONE_DEVICE", v4: mm: move pfn_to_online_page() out of line mm: teach pfn_to_online_page() to consider subsection validity mm: teach pfn_to_online_page() about ZONE_DEVICE section collisions mm: fix memory_failure() handling of dax-namespace metadata Anshuman Khandual <anshuman.khandual@arm.com>: mm/memory_hotplug: rename all existing 'memhp' into 'mhp' David Hildenbrand <david@redhat.com>: mm/memory_hotplug: MEMHP_MERGE_RESOURCE -> MHP_MERGE_RESOURCE Miaohe Lin <linmiaohe@huawei.com>: mm/memory_hotplug: use helper function zone_end_pfn() to get end_pfn David Hildenbrand <david@redhat.com>: drivers/base/memory: don't store phys_device in memory blocks Documentation: sysfs/memory: clarify some memory block device properties Anshuman Khandual <anshuman.khandual@arm.com>: Patch series "mm/memory_hotplug: Pre-validate the address range with platform", v5: mm/memory_hotplug: prevalidate the address range being added with platform arm64/mm: define arch_get_mappable_range() s390/mm: define arch_get_mappable_range() David Hildenbrand <david@redhat.com>: virtio-mem: check against mhp_get_pluggable_range() which memory we can hotplug Subsystem: mm/mlock Miaohe Lin <linmiaohe@huawei.com>: mm/mlock: stop counting mlocked pages when none vma is found Subsystem: mm/rmap Miaohe Lin <linmiaohe@huawei.com>: mm/rmap: correct some obsolete comments of anon_vma mm/rmap: remove unneeded semicolon in page_not_mapped() mm/rmap: fix obsolete comment in __page_check_anon_rmap() mm/rmap: use page_not_mapped in try_to_unmap() mm/rmap: correct obsolete comment of page_get_anon_vma() mm/rmap: fix potential pte_unmap on an not mapped pte Subsystem: mm/zswap Randy Dunlap <rdunlap@infradead.org>: mm: zswap: clean up confusing comment Tian Tao <tiantao6@hisilicon.com>: Patch series "Fix the compatibility of zsmalloc and zswap": mm/zswap: add the flag can_sleep_mapped mm: set the sleep_mapped to true for zbud and z3fold Subsystem: mm/zsmalloc Miaohe Lin <linmiaohe@huawei.com>: mm/zsmalloc.c: convert to use kmem_cache_zalloc in cache_alloc_zspage() Rokudo Yan <wu-yan@tcl.com>: zsmalloc: account the number of compacted pages correctly Miaohe Lin <linmiaohe@huawei.com>: mm/zsmalloc.c: use page_private() to access page->private Subsystem: mm/cleanups Guo Ren <guoren@linux.alibaba.com>: mm: page-flags.h: Typo fix (It -> If) Daniel Vetter <daniel.vetter@ffwll.ch>: mm/dmapool: use might_alloc() mm/backing-dev.c: use might_alloc() Stephen Zhang <stephenzhangzsd@gmail.com>: mm/early_ioremap.c: use __func__ instead of function name Subsystem: mm/kfence Alexander Potapenko <glider@google.com>: Patch series "KFENCE: A low-overhead sampling-based memory safety error detector", v7: mm: add Kernel Electric-Fence infrastructure x86, kfence: enable KFENCE for x86 Marco Elver <elver@google.com>: arm64, kfence: enable KFENCE for ARM64 kfence: use pt_regs to generate stack trace on faults Alexander Potapenko <glider@google.com>: mm, kfence: insert KFENCE hooks for SLAB mm, kfence: insert KFENCE hooks for SLUB kfence, kasan: make KFENCE compatible with KASAN Marco Elver <elver@google.com>: kfence, Documentation: add KFENCE documentation kfence: add test suite MAINTAINERS: add entry for KFENCE kfence: report sensitive information based on no_hash_pointers Alexander Potapenko <glider@google.com>: Patch series "Add error_report_end tracepoint to KFENCE and KASAN", v3: tracing: add error_report_end trace point kfence: use error_report_end tracepoint kasan: use error_report_end tracepoint Subsystem: mm/kasan2 Andrey Konovalov <andreyknvl@google.com>: Patch series "kasan: optimizations and fixes for HW_TAGS", v4: kasan, mm: don't save alloc stacks twice kasan, mm: optimize kmalloc poisoning kasan: optimize large kmalloc poisoning kasan: clean up setting free info in kasan_slab_free kasan: unify large kfree checks kasan: rework krealloc tests kasan, mm: fail krealloc on freed objects kasan, mm: optimize krealloc poisoning kasan: ensure poisoning size alignment arm64: kasan: simplify and inline MTE functions kasan: inline HW_TAGS helper functions kasan: clarify that only first bug is reported in HW_TAGS Subsystem: alpha Randy Dunlap <rdunlap@infradead.org>: alpha: remove CONFIG_EXPERIMENTAL from defconfigs Subsystem: procfs Helge Deller <deller@gmx.de>: proc/wchan: use printk format instead of lookup_symbol_name() Josef Bacik <josef@toxicpanda.com>: proc: use kvzalloc for our kernel buffer Subsystem: sysctl Lin Feng <linf@wangsu.com>: sysctl.c: fix underflow value setting risk in vm_table Subsystem: misc Randy Dunlap <rdunlap@infradead.org>: include/linux: remove repeated words Miguel Ojeda <ojeda@kernel.org>: treewide: Miguel has moved Subsystem: core-kernel Hubert Jasudowicz <hubert.jasudowicz@gmail.com>: groups: use flexible-array member in struct group_info groups: simplify struct group_info allocation Randy Dunlap <rdunlap@infradead.org>: kernel: delete repeated words in comments Subsystem: MAINTAINERS Vlastimil Babka <vbabka@suse.cz>: MAINTAINERS: add uapi directories to API/ABI section Subsystem: lib Huang Shijie <sjhuang@iluvatar.ai>: lib/genalloc.c: change return type to unsigned long for bitmap_set_ll Francis Laniel <laniel_francis@privacyrequired.com>: string.h: move fortified functions definitions in a dedicated header. Yogesh Lal <ylal@codeaurora.org>: lib: stackdepot: add support to configure STACK_HASH_SIZE Vijayanand Jitta <vjitta@codeaurora.org>: lib: stackdepot: add support to disable stack depot lib: stackdepot: fix ignoring return value warning Masahiro Yamada <masahiroy@kernel.org>: lib/cmdline: remove an unneeded local variable in next_arg() Subsystem: bitops Geert Uytterhoeven <geert+renesas@glider.be>: include/linux/bitops.h: spelling s/synomyn/synonym/ Subsystem: checkpatch Joe Perches <joe@perches.com>: checkpatch: improve blank line after declaration test Peng Wang <rocking@linux.alibaba.com>: checkpatch: ignore warning designated initializers using NR_CPUS Dwaipayan Ray <dwaipayanray1@gmail.com>: checkpatch: trivial style fixes Joe Perches <joe@perches.com>: checkpatch: prefer ftrace over function entry/exit printks checkpatch: improve TYPECAST_INT_CONSTANT test message Aditya Srivastava <yashsri421@gmail.com>: checkpatch: add warning for avoiding .L prefix symbols in assembly files Joe Perches <joe@perches.com>: checkpatch: add kmalloc_array_node to unnecessary OOM message check Chris Down <chris@chrisdown.name>: checkpatch: don't warn about colon termination in linker scripts Song Liu <songliubraving@fb.com>: checkpatch: do not apply "initialise globals to 0" check to BPF progs Subsystem: init Masahiro Yamada <masahiroy@kernel.org>: init/version.c: remove Version_<LINUX_VERSION_CODE> symbol init: clean up early_param_on_off() macro Bhaskar Chowdhury <unixbhaskar@gmail.com>: init/Kconfig: fix a typo in CC_VERSION_TEXT help text Subsystem: coredump Ira Weiny <ira.weiny@intel.com>: fs/coredump: use kmap_local_page() Subsystem: seq_file NeilBrown <neilb@suse.de>: Patch series "Fix some seq_file users that were recently broken": seq_file: document how per-entry resources are managed. x86: fix seq_file iteration for pat/memtype.c Subsystem: gdb George Prekas <prekageo@amazon.com>: scripts/gdb: fix list_for_each Sumit Garg <sumit.garg@linaro.org>: kgdb: fix to kill breakpoints on initmem after boot Subsystem: ubsan Andrey Ryabinin <ryabinin.a.a@gmail.com>: ubsan: remove overflow checks Subsystem: initramfs Florian Fainelli <f.fainelli@gmail.com>: initramfs: panic with memory information Subsystem: mm/pagemap2 Huang Pei <huangpei@loongson.cn>: MIPS: make userspace mapping young by default .mailmap | 1 CREDITS | 9 Documentation/ABI/testing/sysfs-devices-memory | 58 - Documentation/admin-guide/auxdisplay/cfag12864b.rst | 2 Documentation/admin-guide/auxdisplay/ks0108.rst | 2 Documentation/admin-guide/kernel-parameters.txt | 6 Documentation/admin-guide/mm/memory-hotplug.rst | 20 Documentation/dev-tools/index.rst | 1 Documentation/dev-tools/kasan.rst | 8 Documentation/dev-tools/kfence.rst | 318 +++++++ Documentation/filesystems/seq_file.rst | 6 MAINTAINERS | 26 arch/alpha/configs/defconfig | 1 arch/arm64/Kconfig | 1 arch/arm64/include/asm/cache.h | 1 arch/arm64/include/asm/kasan.h | 1 arch/arm64/include/asm/kfence.h | 26 arch/arm64/include/asm/mte-def.h | 2 arch/arm64/include/asm/mte-kasan.h | 65 + arch/arm64/include/asm/mte.h | 2 arch/arm64/kernel/mte.c | 46 - arch/arm64/lib/mte.S | 16 arch/arm64/mm/fault.c | 8 arch/arm64/mm/mmu.c | 23 arch/mips/mm/cache.c | 30 arch/s390/mm/init.c | 1 arch/s390/mm/vmem.c | 14 arch/x86/Kconfig | 1 arch/x86/include/asm/kfence.h | 76 + arch/x86/mm/fault.c | 10 arch/x86/mm/pat/memtype.c | 4 drivers/auxdisplay/cfag12864b.c | 4 drivers/auxdisplay/cfag12864bfb.c | 4 drivers/auxdisplay/ks0108.c | 4 drivers/base/memory.c | 35 drivers/block/zram/zram_drv.c | 2 drivers/hv/hv_balloon.c | 2 drivers/virtio/virtio_mem.c | 43 drivers/xen/balloon.c | 2 fs/coredump.c | 4 fs/iomap/seek.c | 125 -- fs/proc/base.c | 21 fs/proc/proc_sysctl.c | 4 include/linux/bitops.h | 2 include/linux/cfag12864b.h | 2 include/linux/cred.h | 2 include/linux/fortify-string.h | 302 ++++++ include/linux/gfp.h | 2 include/linux/init.h | 4 include/linux/kasan.h | 25 include/linux/kfence.h | 230 +++++ include/linux/kgdb.h | 2 include/linux/khugepaged.h | 2 include/linux/ks0108.h | 2 include/linux/mdev.h | 2 include/linux/memory.h | 3 include/linux/memory_hotplug.h | 33 include/linux/memremap.h | 6 include/linux/mmzone.h | 49 - include/linux/page-flags.h | 4 include/linux/pagemap.h | 10 include/linux/pagevec.h | 10 include/linux/pgtable.h | 8 include/linux/ptrace.h | 2 include/linux/rmap.h | 3 include/linux/slab_def.h | 3 include/linux/slub_def.h | 3 include/linux/stackdepot.h | 9 include/linux/string.h | 282 ------ include/linux/vmstat.h | 6 include/linux/zpool.h | 3 include/linux/zsmalloc.h | 2 include/trace/events/error_report.h | 74 + include/uapi/linux/firewire-cdev.h | 2 include/uapi/linux/input.h | 2 init/Kconfig | 2 init/initramfs.c | 19 init/main.c | 6 init/version.c | 8 kernel/debug/debug_core.c | 11 kernel/events/core.c | 8 kernel/events/uprobes.c | 2 kernel/groups.c | 7 kernel/locking/rtmutex.c | 4 kernel/locking/rwsem.c | 2 kernel/locking/semaphore.c | 2 kernel/sched/fair.c | 2 kernel/sched/membarrier.c | 2 kernel/sysctl.c | 8 kernel/trace/Makefile | 1 kernel/trace/error_report-traces.c | 12 lib/Kconfig | 9 lib/Kconfig.debug | 1 lib/Kconfig.kfence | 84 + lib/Kconfig.ubsan | 17 lib/cmdline.c | 7 lib/genalloc.c | 3 lib/stackdepot.c | 41 lib/test_kasan.c | 111 ++ lib/test_ubsan.c | 49 - lib/ubsan.c | 68 - mm/Makefile | 1 mm/backing-dev.c | 3 mm/cma.c | 64 - mm/dmapool.c | 3 mm/early_ioremap.c | 12 mm/filemap.c | 361 +++++--- mm/huge_memory.c | 6 mm/internal.h | 6 mm/kasan/common.c | 213 +++- mm/kasan/generic.c | 3 mm/kasan/hw_tags.c | 2 mm/kasan/kasan.h | 97 +- mm/kasan/report.c | 8 mm/kasan/shadow.c | 78 + mm/kfence/Makefile | 6 mm/kfence/core.c | 875 +++++++++++++++++++- mm/kfence/kfence.h | 126 ++ mm/kfence/kfence_test.c | 860 +++++++++++++++++++ mm/kfence/report.c | 350 ++++++-- mm/khugepaged.c | 22 mm/memory-failure.c | 6 mm/memory.c | 4 mm/memory_hotplug.c | 178 +++- mm/memremap.c | 23 mm/mlock.c | 2 mm/page_alloc.c | 1 mm/rmap.c | 24 mm/shmem.c | 160 +-- mm/slab.c | 38 mm/slab_common.c | 29 mm/slub.c | 63 + mm/swap.c | 54 - mm/swap_state.c | 7 mm/truncate.c | 141 --- mm/vmstat.c | 35 mm/z3fold.c | 1 mm/zbud.c | 1 mm/zpool.c | 13 mm/zsmalloc.c | 22 mm/zswap.c | 57 + samples/auxdisplay/cfag12864b-example.c | 2 scripts/Makefile.ubsan | 2 scripts/checkpatch.pl | 152 ++- scripts/gdb/linux/lists.py | 5 145 files changed, 5046 insertions(+), 1682 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2021-02-26 1:14 incoming Andrew Morton @ 2021-02-26 17:55 ` Linus Torvalds 2021-02-26 19:16 ` incoming Andrew Morton 0 siblings, 1 reply; 370+ messages in thread From: Linus Torvalds @ 2021-02-26 17:55 UTC (permalink / raw) To: Andrew Morton; +Cc: mm-commits, Linux-MM On Thu, Feb 25, 2021 at 5:14 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > - The rest of MM. > > Includes kfence - another runtime memory validator. Not as > thorough as KASAN, but it has unmeasurable overhead and is intended > to be usable in production builds. > > - Everything else Just to clarify: you have nothing else really pending? I'm hoping to just do -rc1 this weekend after all - despite my late start due to loss of power for several days. I'll allow late stragglers with good reason through, but the fewer of those there are, the better, of course. Thanks, Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2021-02-26 17:55 ` incoming Linus Torvalds @ 2021-02-26 19:16 ` Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-02-26 19:16 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, Linux-MM On Fri, 26 Feb 2021 09:55:27 -0800 Linus Torvalds <torvalds@linux-foundation.org> wrote: > On Thu, Feb 25, 2021 at 5:14 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > > > - The rest of MM. > > > > Includes kfence - another runtime memory validator. Not as > > thorough as KASAN, but it has unmeasurable overhead and is intended > > to be usable in production builds. > > > > - Everything else > > Just to clarify: you have nothing else really pending? Yes, that's it from me for -rc1. ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-02-24 19:58 Andrew Morton 2021-02-24 21:30 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2021-02-24 19:58 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits A few small subsystems and some of MM. 173 patches, based on c03c21ba6f4e95e406a1a7b4c34ef334b977c194. Subsystems affected by this patch series: hexagon scripts ntfs ocfs2 vfs mm/slab-generic mm/slab mm/slub mm/debug mm/pagecache mm/swap mm/memcg mm/pagemap mm/mprotect mm/mremap mm/page-reporting mm/vmalloc mm/kasan mm/pagealloc mm/memory-failure mm/hugetlb mm/vmscan mm/z3fold mm/compaction mm/mempolicy mm/oom-kill mm/hugetlbfs mm/migration Subsystem: hexagon Randy Dunlap <rdunlap@infradead.org>: hexagon: remove CONFIG_EXPERIMENTAL from defconfigs Subsystem: scripts tangchunyou <tangchunyou@yulong.com>: scripts/spelling.txt: increase error-prone spell checking zuoqilin <zuoqilin@yulong.com>: scripts/spelling.txt: check for "exeeds" dingsenjie <dingsenjie@yulong.com>: scripts/spelling.txt: add "allocted" and "exeeds" typo Colin Ian King <colin.king@canonical.com>: scripts/spelling.txt: add more spellings to spelling.txt Subsystem: ntfs Randy Dunlap <rdunlap@infradead.org>: ntfs: layout.h: delete duplicated words Rustam Kovhaev <rkovhaev@gmail.com>: ntfs: check for valid standard information attribute Subsystem: ocfs2 Yi Li <yili@winhong.com>: ocfs2: remove redundant conditional before iput guozh <guozh88@chinatelecom.cn>: ocfs2: clean up some definitions which are not used any more Dan Carpenter <dan.carpenter@oracle.com>: ocfs2: fix a use after free on error Jiapeng Chong <jiapeng.chong@linux.alibaba.com>: ocfs2: simplify the calculation of variables Subsystem: vfs Randy Dunlap <rdunlap@infradead.org>: fs: delete repeated words in comments Alexey Dobriyan <adobriyan@gmail.com>: ramfs: support O_TMPFILE Subsystem: mm/slab-generic Jacob Wen <jian.w.wen@oracle.com>: mm, tracing: record slab name for kmem_cache_free() Nikolay Borisov <nborisov@suse.com>: mm/sl?b.c: remove ctor argument from kmem_cache_flags Subsystem: mm/slab Zhiyuan Dai <daizhiyuan@phytium.com.cn>: mm/slab: minor coding style tweaks Subsystem: mm/slub Johannes Berg <johannes.berg@intel.com>: mm/slub: disable user tracing for kmemleak caches by default Vlastimil Babka <vbabka@suse.cz>: Patch series "mm, slab, slub: remove cpu and memory hotplug locks": mm, slub: stop freeing kmem_cache_node structures on node offline mm, slab, slub: stop taking memory hotplug lock mm, slab, slub: stop taking cpu hotplug lock mm, slub: splice cpu and page freelists in deactivate_slab() mm, slub: remove slub_memcg_sysfs boot param and CONFIG_SLUB_MEMCG_SYSFS_ON Zhiyuan Dai <daizhiyuan@phytium.com.cn>: mm/slub: minor coding style tweaks Subsystem: mm/debug "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm/debug: improve memcg debugging Anshuman Khandual <anshuman.khandual@arm.com>: Patch series "mm/debug_vm_pgtable: Some minor updates", v3: mm/debug_vm_pgtable/basic: add validation for dirtiness after write protect mm/debug_vm_pgtable/basic: iterate over entire protection_map[] Miaohe Lin <linmiaohe@huawei.com>: mm/page_owner: use helper function zone_end_pfn() to get end_pfn Subsystem: mm/pagecache Baolin Wang <baolin.wang@linux.alibaba.com>: mm/filemap: remove unused parameter and change to void type for replace_page_cache_page() Pavel Begunkov <asml.silence@gmail.com>: mm/filemap: don't revert iter on -EIOCBQUEUED "Matthew Wilcox (Oracle)" <willy@infradead.org>: Patch series "Refactor generic_file_buffered_read", v5: mm/filemap: rename generic_file_buffered_read subfunctions mm/filemap: remove dynamically allocated array from filemap_read mm/filemap: convert filemap_get_pages to take a pagevec mm/filemap: use head pages in generic_file_buffered_read mm/filemap: pass a sleep state to put_and_wait_on_page_locked mm/filemap: support readpage splitting a page mm/filemap: inline __wait_on_page_locked_async into caller mm/filemap: don't call ->readpage if IOCB_WAITQ is set mm/filemap: change filemap_read_page calling conventions mm/filemap: change filemap_create_page calling conventions mm/filemap: convert filemap_update_page to return an errno mm/filemap: move the iocb checks into filemap_update_page mm/filemap: add filemap_range_uptodate mm/filemap: split filemap_readahead out of filemap_get_pages mm/filemap: restructure filemap_get_pages mm/filemap: don't relock the page after calling readpage Christoph Hellwig <hch@lst.de>: mm/filemap: rename generic_file_buffered_read to filemap_read mm/filemap: simplify generic_file_read_iter Yang Guo <guoyang2@huawei.com>: fs/buffer.c: add checking buffer head stat before clear Baolin Wang <baolin.wang@linux.alibaba.com>: mm: backing-dev: Remove duplicated macro definition Subsystem: mm/swap Yang Li <abaci-bugfix@linux.alibaba.com>: mm/swap_slots.c: remove redundant NULL check Stephen Zhang <stephenzhangzsd@gmail.com>: mm/swapfile.c: fix debugging information problem Georgi Djakov <georgi.djakov@linaro.org>: mm/page_io: use pr_alert_ratelimited for swap read/write errors Rikard Falkeborn <rikard.falkeborn@gmail.com>: mm/swap_state: constify static struct attribute_group Yu Zhao <yuzhao@google.com>: mm/swap: don't SetPageWorkingset unconditionally during swapin Subsystem: mm/memcg Roman Gushchin <guro@fb.com>: mm: memcg/slab: pre-allocate obj_cgroups for slab caches with SLAB_ACCOUNT Muchun Song <songmuchun@bytedance.com>: mm: memcontrol: optimize per-lruvec stats counter memory usage Patch series "Convert all THP vmstat counters to pages", v6: mm: memcontrol: fix NR_ANON_THPS accounting in charge moving mm: memcontrol: convert NR_ANON_THPS account to pages mm: memcontrol: convert NR_FILE_THPS account to pages mm: memcontrol: convert NR_SHMEM_THPS account to pages mm: memcontrol: convert NR_SHMEM_PMDMAPPED account to pages mm: memcontrol: convert NR_FILE_PMDMAPPED account to pages mm: memcontrol: make the slab calculation consistent Alex Shi <alex.shi@linux.alibaba.com>: mm/memcg: revise the using condition of lock_page_lruvec function series mm/memcg: remove rcu locking for lock_page_lruvec function series Shakeel Butt <shakeelb@google.com>: mm: memcg: add swapcache stat for memcg v2 Roman Gushchin <guro@fb.com>: mm: kmem: make __memcg_kmem_(un)charge static Feng Tang <feng.tang@intel.com>: mm: page_counter: re-layout structure to reduce false sharing Yang Li <abaci-bugfix@linux.alibaba.com>: mm/memcontrol: remove redundant NULL check Muchun Song <songmuchun@bytedance.com>: mm: memcontrol: replace the loop with a list_for_each_entry() Shakeel Butt <shakeelb@google.com>: mm/list_lru.c: remove kvfree_rcu_local() Johannes Weiner <hannes@cmpxchg.org>: fs: buffer: use raw page_memcg() on locked page Muchun Song <songmuchun@bytedance.com>: mm: memcontrol: fix swap undercounting in cgroup2 mm: memcontrol: fix get_active_memcg return value mm: memcontrol: fix slub memory accounting Subsystem: mm/pagemap Adrian Huang <ahuang12@lenovo.com>: mm/mmap.c: remove unnecessary local variable Miaohe Lin <linmiaohe@huawei.com>: mm/memory.c: fix potential pte_unmap_unlock pte error mm/pgtable-generic.c: simplify the VM_BUG_ON condition in pmdp_huge_clear_flush() mm/pgtable-generic.c: optimize the VM_BUG_ON condition in pmdp_huge_clear_flush() mm/memory.c: fix potential pte_unmap_unlock pte error Subsystem: mm/mprotect Tianjia Zhang <tianjia.zhang@linux.alibaba.com>: mm/mprotect.c: optimize error detection in do_mprotect_pkey() Subsystem: mm/mremap Li Xinhai <lixinhai.lxh@gmail.com>: mm: rmap: explicitly reset vma->anon_vma in unlink_anon_vmas() mm: mremap: unlink anon_vmas when mremap with MREMAP_DONTUNMAP success Subsystem: mm/page-reporting sh <sh_def@163.com>: mm/page_reporting: use list_entry_is_head() in page_reporting_cycle() Subsystem: mm/vmalloc Yang Li <abaci-bugfix@linux.alibaba.com>: vmalloc: remove redundant NULL check Subsystem: mm/kasan Andrey Konovalov <andreyknvl@google.com>: Patch series "kasan: HW_TAGS tests support and fixes", v4: kasan: prefix global functions with kasan_ kasan: clarify HW_TAGS impact on TBI kasan: clean up comments in tests kasan: add macros to simplify checking test constraints kasan: add match-all tag tests kasan, arm64: allow using KUnit tests with HW_TAGS mode kasan: rename CONFIG_TEST_KASAN_MODULE kasan: add compiler barriers to KUNIT_EXPECT_KASAN_FAIL kasan: adapt kmalloc_uaf2 test to HW_TAGS mode kasan: fix memory corruption in kasan_bitops_tags test kasan: move _RET_IP_ to inline wrappers kasan: fix bug detection via ksize for HW_TAGS mode kasan: add proper page allocator tests kasan: add a test for kmem_cache_alloc/free_bulk kasan: don't run tests when KASAN is not enabled Walter Wu <walter-zh.wu@mediatek.com>: kasan: remove redundant config option Subsystem: mm/pagealloc Baoquan He <bhe@redhat.com>: Patch series "mm: clean up names and parameters of memmap_init_xxxx functions", v5: mm: fix prototype warning from kernel test robot mm: rename memmap_init() and memmap_init_zone() mm: simplify parater of function memmap_init_zone() mm: simplify parameter of setup_usemap() mm: remove unneeded local variable in free_area_init_core David Hildenbrand <david@redhat.com>: Patch series "mm: simplify free_highmem_page() and free_reserved_page()": video: fbdev: acornfb: remove free_unused_pages() mm: simplify free_highmem_page() and free_reserved_page() "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm/gfp: add kernel-doc for gfp_t Subsystem: mm/memory-failure Aili Yao <yaoaili@kingsoft.com>: mm,hwpoison: send SIGBUS to PF_MCE_EARLY processes on action required events Subsystem: mm/hugetlb Bibo Mao <maobibo@loongson.cn>: mm/huge_memory.c: update tlb entry if pmd is changed MIPS: do not call flush_tlb_all when setting pmd entry Miaohe Lin <linmiaohe@huawei.com>: mm/hugetlb: fix potential double free in hugetlb_register_node() error path Li Xinhai <lixinhai.lxh@gmail.com>: mm/hugetlb.c: fix unnecessary address expansion of pmd sharing Miaohe Lin <linmiaohe@huawei.com>: mm/hugetlb: avoid unnecessary hugetlb_acct_memory() call mm/hugetlb: use helper huge_page_order and pages_per_huge_page mm/hugetlb: fix use after free when subpool max_hpages accounting is not enabled Jiapeng Zhong <abaci-bugfix@linux.alibaba.com>: mm/hugetlb: simplify the calculation of variables Joao Martins <joao.m.martins@oracle.com>: Patch series "mm/hugetlb: follow_hugetlb_page() improvements", v2: mm/hugetlb: grab head page refcount once for group of subpages mm/hugetlb: refactor subpage recording Miaohe Lin <linmiaohe@huawei.com>: mm/hugetlb: fix some comment typos Yanfei Xu <yanfei.xu@windriver.com>: mm/hugetlb: remove redundant check in preparing and destroying gigantic page Zhiyuan Dai <daizhiyuan@phytium.com.cn>: mm/hugetlb.c: fix typos in comments Miaohe Lin <linmiaohe@huawei.com>: mm/huge_memory.c: remove unused return value of set_huge_zero_page() "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>: mm/pmem: avoid inserting hugepage PTE entry with fsdax if hugepage support is disabled Miaohe Lin <linmiaohe@huawei.com>: hugetlb_cgroup: use helper pages_per_huge_page() in hugetlb_cgroup mm/hugetlb: use helper function range_in_vma() in page_table_shareable() mm/hugetlb: remove unnecessary VM_BUG_ON_PAGE on putback_active_hugepage() mm/hugetlb: use helper huge_page_size() to get hugepage size Mike Kravetz <mike.kravetz@oracle.com>: hugetlb: fix update_and_free_page contig page struct assumption hugetlb: fix copy_huge_page_from_user contig page struct assumption Chen Wandun <chenwandun@huawei.com>: mm/hugetlb: suppress wrong warning info when alloc gigantic page Subsystem: mm/vmscan Alex Shi <alex.shi@linux.alibaba.com>: mm/vmscan: __isolate_lru_page_prepare() cleanup Miaohe Lin <linmiaohe@huawei.com>: mm/workingset.c: avoid unnecessary max_nodes estimation in count_shadow_nodes() Yu Zhao <yuzhao@google.com>: Patch series "mm: lru related cleanups", v2: mm/vmscan.c: use add_page_to_lru_list() include/linux/mm_inline.h: shuffle lru list addition and deletion functions mm: don't pass "enum lru_list" to lru list addition functions mm/swap.c: don't pass "enum lru_list" to trace_mm_lru_insertion() mm/swap.c: don't pass "enum lru_list" to del_page_from_lru_list() mm: add __clear_page_lru_flags() to replace page_off_lru() mm: VM_BUG_ON lru page flags include/linux/mm_inline.h: fold page_lru_base_type() into its sole caller include/linux/mm_inline.h: fold __update_lru_size() into its sole caller mm/vmscan.c: make lruvec_lru_size() static Oscar Salvador <osalvador@suse.de>: mm: workingset: clarify eviction order and distance calculation Mike Kravetz <mike.kravetz@oracle.com>: Patch series "create hugetlb flags to consolidate state", v3: hugetlb: use page.private for hugetlb specific page flags hugetlb: convert page_huge_active() HPageMigratable flag hugetlb: convert PageHugeTemporary() to HPageTemporary flag hugetlb: convert PageHugeFreed to HPageFreed flag include/linux/hugetlb.h: add synchronization information for new hugetlb specific flags hugetlb: fix uninitialized subpool pointer Dave Hansen <dave.hansen@linux.intel.com>: mm/vmscan: restore zone_reclaim_mode ABI Subsystem: mm/z3fold Miaohe Lin <linmiaohe@huawei.com>: z3fold: remove unused attribute for release_z3fold_page z3fold: simplify the zhdr initialization code in init_z3fold_page() Subsystem: mm/compaction Alex Shi <alex.shi@linux.alibaba.com>: mm/compaction: remove rcu_read_lock during page compaction Miaohe Lin <linmiaohe@huawei.com>: mm/compaction: remove duplicated VM_BUG_ON_PAGE !PageLocked Charan Teja Reddy <charante@codeaurora.org>: mm/compaction: correct deferral logic for proactive compaction Wonhyuk Yang <vvghjk1234@gmail.com>: mm/compaction: fix misbehaviors of fast_find_migrateblock() Vlastimil Babka <vbabka@suse.cz>: mm, compaction: make fast_isolate_freepages() stay within zone Subsystem: mm/mempolicy Huang Ying <ying.huang@intel.com>: numa balancing: migrate on fault among multiple bound nodes Miaohe Lin <linmiaohe@huawei.com>: mm/mempolicy: use helper range_in_vma() in queue_pages_test_walk() Subsystem: mm/oom-kill Tang Yizhou <tangyizhou@huawei.com>: mm, oom: fix a comment in dump_task() Subsystem: mm/hugetlbfs Mike Kravetz <mike.kravetz@oracle.com>: mm/hugetlb: change hugetlb_reserve_pages() to type bool hugetlbfs: remove special hugetlbfs_set_page_dirty() Miaohe Lin <linmiaohe@huawei.com>: hugetlbfs: remove useless BUG_ON(!inode) in hugetlbfs_setattr() hugetlbfs: use helper macro default_hstate in init_hugetlbfs_fs hugetlbfs: correct obsolete function name in hugetlbfs_read_iter() hugetlbfs: remove meaningless variable avoid_reserve hugetlbfs: make hugepage size conversion more readable hugetlbfs: correct some obsolete comments about inode i_mutex hugetlbfs: fix some comment typos hugetlbfs: remove unneeded return value of hugetlb_vmtruncate() Subsystem: mm/migration Chengyang Fan <cy.fan@huawei.com>: mm/migrate: remove unneeded semicolons Documentation/admin-guide/cgroup-v2.rst | 4 Documentation/admin-guide/kernel-parameters.txt | 8 Documentation/admin-guide/sysctl/vm.rst | 10 Documentation/core-api/mm-api.rst | 7 Documentation/dev-tools/kasan.rst | 24 Documentation/vm/arch_pgtable_helpers.rst | 8 arch/arm64/include/asm/memory.h | 1 arch/arm64/include/asm/mte-kasan.h | 12 arch/arm64/kernel/mte.c | 12 arch/arm64/kernel/sleep.S | 2 arch/arm64/mm/fault.c | 20 arch/hexagon/configs/comet_defconfig | 1 arch/ia64/include/asm/pgtable.h | 6 arch/ia64/mm/init.c | 18 arch/mips/mm/pgtable-32.c | 1 arch/mips/mm/pgtable-64.c | 1 arch/x86/kernel/acpi/wakeup_64.S | 2 drivers/base/node.c | 33 drivers/video/fbdev/acornfb.c | 34 fs/block_dev.c | 2 fs/btrfs/file.c | 2 fs/buffer.c | 7 fs/dcache.c | 4 fs/direct-io.c | 4 fs/exec.c | 4 fs/fhandle.c | 2 fs/fuse/dev.c | 6 fs/hugetlbfs/inode.c | 72 -- fs/ntfs/inode.c | 6 fs/ntfs/layout.h | 4 fs/ocfs2/cluster/heartbeat.c | 8 fs/ocfs2/dlm/dlmast.c | 10 fs/ocfs2/dlm/dlmcommon.h | 4 fs/ocfs2/refcounttree.c | 2 fs/ocfs2/super.c | 2 fs/pipe.c | 2 fs/proc/meminfo.c | 10 fs/proc/vmcore.c | 7 fs/ramfs/inode.c | 13 include/linux/fs.h | 4 include/linux/gfp.h | 14 include/linux/highmem-internal.h | 5 include/linux/huge_mm.h | 15 include/linux/hugetlb.h | 98 ++ include/linux/kasan-checks.h | 6 include/linux/kasan.h | 39 - include/linux/memcontrol.h | 43 - include/linux/migrate.h | 2 include/linux/mm.h | 28 include/linux/mm_inline.h | 123 +-- include/linux/mmzone.h | 30 include/linux/page-flags.h | 6 include/linux/page_counter.h | 9 include/linux/pagemap.h | 5 include/linux/swap.h | 8 include/trace/events/kmem.h | 24 include/trace/events/pagemap.h | 11 include/uapi/linux/mempolicy.h | 4 init/Kconfig | 14 lib/Kconfig.kasan | 14 lib/Makefile | 2 lib/test_kasan.c | 446 ++++++++---- lib/test_kasan_module.c | 5 mm/backing-dev.c | 6 mm/compaction.c | 73 +- mm/debug.c | 10 mm/debug_vm_pgtable.c | 86 ++ mm/filemap.c | 859 +++++++++++------------- mm/gup.c | 5 mm/huge_memory.c | 28 mm/hugetlb.c | 376 ++++------ mm/hugetlb_cgroup.c | 6 mm/kasan/common.c | 60 - mm/kasan/generic.c | 40 - mm/kasan/hw_tags.c | 16 mm/kasan/kasan.h | 87 +- mm/kasan/quarantine.c | 22 mm/kasan/report.c | 15 mm/kasan/report_generic.c | 10 mm/kasan/report_hw_tags.c | 8 mm/kasan/report_sw_tags.c | 8 mm/kasan/shadow.c | 27 mm/kasan/sw_tags.c | 22 mm/khugepaged.c | 6 mm/list_lru.c | 12 mm/memcontrol.c | 309 ++++---- mm/memory-failure.c | 34 mm/memory.c | 24 mm/memory_hotplug.c | 11 mm/mempolicy.c | 18 mm/mempool.c | 2 mm/migrate.c | 10 mm/mlock.c | 3 mm/mmap.c | 4 mm/mprotect.c | 7 mm/mremap.c | 8 mm/oom_kill.c | 5 mm/page_alloc.c | 70 - mm/page_io.c | 12 mm/page_owner.c | 4 mm/page_reporting.c | 2 mm/pgtable-generic.c | 9 mm/rmap.c | 35 mm/shmem.c | 2 mm/slab.c | 21 mm/slab.h | 20 mm/slab_common.c | 40 - mm/slob.c | 2 mm/slub.c | 169 ++-- mm/swap.c | 54 - mm/swap_slots.c | 3 mm/swap_state.c | 31 mm/swapfile.c | 8 mm/vmscan.c | 100 +- mm/vmstat.c | 14 mm/workingset.c | 7 mm/z3fold.c | 11 scripts/Makefile.kasan | 10 scripts/spelling.txt | 30 tools/objtool/check.c | 2 120 files changed, 2249 insertions(+), 1954 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2021-02-24 19:58 incoming Andrew Morton @ 2021-02-24 21:30 ` Linus Torvalds 2021-02-24 21:37 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Linus Torvalds @ 2021-02-24 21:30 UTC (permalink / raw) To: Andrew Morton; +Cc: Linux-MM, mm-commits On Wed, Feb 24, 2021 at 11:58 AM Andrew Morton <akpm@linux-foundation.org> wrote: > > A few small subsystems and some of MM. Hmm. I haven't bisected things yet, but I suspect it's something with the KASAN patches. With this all applied, I get: lib/crypto/curve25519-hacl64.c: In function ‘ladder_cmult.constprop’: lib/crypto/curve25519-hacl64.c:601:1: warning: the frame size of 2288 bytes is larger than 2048 bytes [-Wframe-larger-than=] and lib/bitfield_kunit.c: In function ‘test_bitfields_constants’: lib/bitfield_kunit.c:93:1: warning: the frame size of 11200 bytes is larger than 2048 bytes [-Wframe-larger-than=] which is obviously not really acceptable. A 11kB stack frame _will_ cause issues. Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2021-02-24 21:30 ` incoming Linus Torvalds @ 2021-02-24 21:37 ` Linus Torvalds 2021-02-25 8:53 ` incoming Arnd Bergmann 0 siblings, 1 reply; 370+ messages in thread From: Linus Torvalds @ 2021-02-24 21:37 UTC (permalink / raw) To: Andrew Morton, Walter Wu, Dmitry Vyukov, Nathan Chancellor, Arnd Bergmann, Andrey Konovalov Cc: Linux-MM, mm-commits, Andrey Ryabinin, Alexander Potapenko On Wed, Feb 24, 2021 at 1:30 PM Linus Torvalds <torvalds@linux-foundation.org> wrote: > > Hmm. I haven't bisected things yet, but I suspect it's something with > the KASAN patches. With this all applied, I get: > > lib/crypto/curve25519-hacl64.c: In function ‘ladder_cmult.constprop’: > lib/crypto/curve25519-hacl64.c:601:1: warning: the frame size of > 2288 bytes is larger than 2048 bytes [-Wframe-larger-than=] > > and > > lib/bitfield_kunit.c: In function ‘test_bitfields_constants’: > lib/bitfield_kunit.c:93:1: warning: the frame size of 11200 bytes is > larger than 2048 bytes [-Wframe-larger-than=] > > which is obviously not really acceptable. A 11kB stack frame _will_ > cause issues. A quick bisect shoes that this was introduced by "[patch 101/173] kasan: remove redundant config option". I didn't check what part of that patch screws up, but it's definitely doing something bad. I will drop that patch. Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2021-02-24 21:37 ` incoming Linus Torvalds @ 2021-02-25 8:53 ` Arnd Bergmann 2021-02-25 9:12 ` incoming Andrey Ryabinin 0 siblings, 1 reply; 370+ messages in thread From: Arnd Bergmann @ 2021-02-25 8:53 UTC (permalink / raw) To: Linus Torvalds Cc: Andrew Morton, Walter Wu, Dmitry Vyukov, Nathan Chancellor, Arnd Bergmann, Andrey Konovalov, Linux-MM, mm-commits, Andrey Ryabinin, Alexander Potapenko On Wed, Feb 24, 2021 at 10:37 PM Linus Torvalds <torvalds@linux-foundation.org> wrote: > > On Wed, Feb 24, 2021 at 1:30 PM Linus Torvalds > <torvalds@linux-foundation.org> wrote: > > > > Hmm. I haven't bisected things yet, but I suspect it's something with > > the KASAN patches. With this all applied, I get: > > > > lib/crypto/curve25519-hacl64.c: In function ‘ladder_cmult.constprop’: > > lib/crypto/curve25519-hacl64.c:601:1: warning: the frame size of > > 2288 bytes is larger than 2048 bytes [-Wframe-larger-than=] > > > > and > > > > lib/bitfield_kunit.c: In function ‘test_bitfields_constants’: > > lib/bitfield_kunit.c:93:1: warning: the frame size of 11200 bytes is > > larger than 2048 bytes [-Wframe-larger-than=] > > > > which is obviously not really acceptable. A 11kB stack frame _will_ > > cause issues. > > A quick bisect shoes that this was introduced by "[patch 101/173] > kasan: remove redundant config option". > > I didn't check what part of that patch screws up, but it's definitely > doing something bad. I'm not sure why that patch surfaced the bug, but it's worth pointing out that the underlying problem is asan-stack in combination with the structleak plugin. This will happen for every user of kunit. I sent a series[1] out earlier this year to turn off the structleak plugin as an alternative workaround, but need to follow up on the remaining patches. Someone suggested adding a more generic way to turn off the plugin for a file instead of open-coding the CLFAGS_REMOVE_*.o Makefile bit, which would help. I am also still hoping that someone can come up with a way to make kunit work better with the structleak plugin, as there shouldn't be a fundamental reason why it can't work, just that it the code pattern triggers a particularly bad case in the compiler. Arnd [1] https://lore.kernel.org/lkml/20210125124533.101339-1-arnd@kernel.org/ ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2021-02-25 8:53 ` incoming Arnd Bergmann @ 2021-02-25 9:12 ` Andrey Ryabinin 2021-02-25 11:07 ` incoming Walter Wu 0 siblings, 1 reply; 370+ messages in thread From: Andrey Ryabinin @ 2021-02-25 9:12 UTC (permalink / raw) To: Arnd Bergmann Cc: Linus Torvalds, Andrew Morton, Walter Wu, Dmitry Vyukov, Nathan Chancellor, Arnd Bergmann, Andrey Konovalov, Linux-MM, mm-commits, Andrey Ryabinin, Alexander Potapenko On Thu, Feb 25, 2021 at 11:53 AM Arnd Bergmann <arnd@kernel.org> wrote: > > On Wed, Feb 24, 2021 at 10:37 PM Linus Torvalds > <torvalds@linux-foundation.org> wrote: > > > > On Wed, Feb 24, 2021 at 1:30 PM Linus Torvalds > > <torvalds@linux-foundation.org> wrote: > > > > > > Hmm. I haven't bisected things yet, but I suspect it's something with > > > the KASAN patches. With this all applied, I get: > > > > > > lib/crypto/curve25519-hacl64.c: In function ‘ladder_cmult.constprop’: > > > lib/crypto/curve25519-hacl64.c:601:1: warning: the frame size of > > > 2288 bytes is larger than 2048 bytes [-Wframe-larger-than=] > > > > > > and > > > > > > lib/bitfield_kunit.c: In function ‘test_bitfields_constants’: > > > lib/bitfield_kunit.c:93:1: warning: the frame size of 11200 bytes is > > > larger than 2048 bytes [-Wframe-larger-than=] > > > > > > which is obviously not really acceptable. A 11kB stack frame _will_ > > > cause issues. > > > > A quick bisect shoes that this was introduced by "[patch 101/173] > > kasan: remove redundant config option". > > > > I didn't check what part of that patch screws up, but it's definitely > > doing something bad. > > I'm not sure why that patch surfaced the bug, but it's worth pointing > out that the underlying problem is asan-stack in combination > with the structleak plugin. This will happen for every user of kunit. > The patch didn't update KASAN_STACK dependency in kconfig: config GCC_PLUGIN_STRUCTLEAK_BYREF .... depends on !(KASAN && KASAN_STACK=1) This 'depends on' stopped working with the patch ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2021-02-25 9:12 ` incoming Andrey Ryabinin @ 2021-02-25 11:07 ` Walter Wu 0 siblings, 0 replies; 370+ messages in thread From: Walter Wu @ 2021-02-25 11:07 UTC (permalink / raw) To: Andrey Ryabinin Cc: Arnd Bergmann, Linus Torvalds, Andrew Morton, Dmitry Vyukov, Nathan Chancellor, Arnd Bergmann, Andrey Konovalov, Linux-MM, mm-commits, Andrey Ryabinin, Alexander Potapenko Hi Andrey, On Thu, 2021-02-25 at 12:12 +0300, Andrey Ryabinin wrote: > On Thu, Feb 25, 2021 at 11:53 AM Arnd Bergmann <arnd@kernel.org> wrote: > > > > On Wed, Feb 24, 2021 at 10:37 PM Linus Torvalds > > <torvalds@linux-foundation.org> wrote: > > > > > > On Wed, Feb 24, 2021 at 1:30 PM Linus Torvalds > > > <torvalds@linux-foundation.org> wrote: > > > > > > > > Hmm. I haven't bisected things yet, but I suspect it's something with > > > > the KASAN patches. With this all applied, I get: > > > > > > > > lib/crypto/curve25519-hacl64.c: In function ‘ladder_cmult.constprop’: > > > > lib/crypto/curve25519-hacl64.c:601:1: warning: the frame size of > > > > 2288 bytes is larger than 2048 bytes [-Wframe-larger-than=] > > > > > > > > and > > > > > > > > lib/bitfield_kunit.c: In function ‘test_bitfields_constants’: > > > > lib/bitfield_kunit.c:93:1: warning: the frame size of 11200 bytes is > > > > larger than 2048 bytes [-Wframe-larger-than=] > > > > > > > > which is obviously not really acceptable. A 11kB stack frame _will_ > > > > cause issues. > > > > > > A quick bisect shoes that this was introduced by "[patch 101/173] > > > kasan: remove redundant config option". > > > > > > I didn't check what part of that patch screws up, but it's definitely > > > doing something bad. > > > > I'm not sure why that patch surfaced the bug, but it's worth pointing > > out that the underlying problem is asan-stack in combination > > with the structleak plugin. This will happen for every user of kunit. > > > > The patch didn't update KASAN_STACK dependency in kconfig: > config GCC_PLUGIN_STRUCTLEAK_BYREF > .... > depends on !(KASAN && KASAN_STACK=1) > > This 'depends on' stopped working with the patch Thanks for pointing out this problem. I will re-send that patch. Walter ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-02-13 4:52 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-02-13 4:52 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 6 patches, based on dcc0b49040c70ad827a7f3d58a21b01fdb14e749. Subsystems affected by this patch series: mm/pagemap scripts MAINTAINERS h8300 Subsystem: mm/pagemap Mike Rapoport <rppt@linux.ibm.com>: m68k: make __pfn_to_phys() and __phys_to_pfn() available for !MMU Subsystem: scripts Rong Chen <rong.a.chen@intel.com>: scripts/recordmcount.pl: support big endian for ARCH sh Subsystem: MAINTAINERS Andrey Konovalov <andreyknvl@google.com>: MAINTAINERS: update KASAN file list MAINTAINERS: update Andrey Konovalov's email address MAINTAINERS: add Andrey Konovalov to KASAN reviewers Subsystem: h8300 Randy Dunlap <rdunlap@infradead.org>: h8300: fix PREEMPTION build, TI_PRE_COUNT undefined MAINTAINERS | 8 +++++--- arch/h8300/kernel/asm-offsets.c | 3 +++ arch/m68k/include/asm/page.h | 2 +- scripts/recordmcount.pl | 6 +++++- 4 files changed, 14 insertions(+), 5 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-02-09 21:41 Andrew Morton 2021-02-10 19:30 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2021-02-09 21:41 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 14 patches, based on e0756cfc7d7cd08c98a53b6009c091a3f6a50be6. Subsystems affected by this patch series: squashfs mm/kasan firmware mm/mremap mm/tmpfs mm/selftests MAINTAINERS mm/memcg mm/slub nilfs2 Subsystem: squashfs Phillip Lougher <phillip@squashfs.org.uk>: Patch series "Squashfs: fix BIO migration regression and add sanity checks": squashfs: avoid out of bounds writes in decompressors squashfs: add more sanity checks in id lookup squashfs: add more sanity checks in inode lookup squashfs: add more sanity checks in xattr id lookup Subsystem: mm/kasan Andrey Konovalov <andreyknvl@google.com>: kasan: fix stack traces dependency for HW_TAGS Subsystem: firmware Fangrui Song <maskray@google.com>: firmware_loader: align .builtin_fw to 8 Subsystem: mm/mremap Arnd Bergmann <arnd@arndb.de>: mm/mremap: fix BUILD_BUG_ON() error in get_extent Subsystem: mm/tmpfs Seth Forshee <seth.forshee@canonical.com>: tmpfs: disallow CONFIG_TMPFS_INODE64 on s390 tmpfs: disallow CONFIG_TMPFS_INODE64 on alpha Subsystem: mm/selftests Rong Chen <rong.a.chen@intel.com>: selftests/vm: rename file run_vmtests to run_vmtests.sh Subsystem: MAINTAINERS Andrey Ryabinin <ryabinin.a.a@gmail.com>: MAINTAINERS: update Andrey Ryabinin's email address Subsystem: mm/memcg Johannes Weiner <hannes@cmpxchg.org>: Revert "mm: memcontrol: avoid workload stalls when lowering memory.high" Subsystem: mm/slub Vlastimil Babka <vbabka@suse.cz>: mm, slub: better heuristic for number of cpus when calculating slab order Subsystem: nilfs2 Joachim Henke <joachim.henke@t-systems.com>: nilfs2: make splice write available again .mailmap | 1 Documentation/dev-tools/kasan.rst | 3 - MAINTAINERS | 2 - fs/Kconfig | 4 +- fs/nilfs2/file.c | 1 fs/squashfs/block.c | 8 ++++ fs/squashfs/export.c | 41 +++++++++++++++++++---- fs/squashfs/id.c | 40 ++++++++++++++++++----- fs/squashfs/squashfs_fs_sb.h | 1 fs/squashfs/super.c | 6 +-- fs/squashfs/xattr.h | 10 +++++ fs/squashfs/xattr_id.c | 66 ++++++++++++++++++++++++++++++++------ include/asm-generic/vmlinux.lds.h | 2 - mm/kasan/hw_tags.c | 8 +--- mm/memcontrol.c | 5 +- mm/mremap.c | 5 +- mm/slub.c | 18 +++++++++- 17 files changed, 172 insertions(+), 49 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2021-02-09 21:41 incoming Andrew Morton @ 2021-02-10 19:30 ` Linus Torvalds 0 siblings, 0 replies; 370+ messages in thread From: Linus Torvalds @ 2021-02-10 19:30 UTC (permalink / raw) To: Andrew Morton; +Cc: Linux-MM, mm-commits Hah. This series shows a small deficiency in your scripting wrt the diffstat: On Tue, Feb 9, 2021 at 1:41 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > .mailmap | 1 ... > mm/slub.c | 18 +++++++++- > 17 files changed, 172 insertions(+), 49 deletions(-) It actually has 18 files changed, but one of them is a pure rename (no change to the content), and apparently your diffstat tool can't handle that case. It *should* have ended with ... mm/slub.c | 18 +++++- .../selftests/vm/{run_vmtests => run_vmtests.sh} | 0 18 files changed, 172 insertions(+), 49 deletions(-) rename tools/testing/selftests/vm/{run_vmtests => run_vmtests.sh} (100%) if you'd done a proper "git diff -M --stat --summary" of the series. [ Ok, by default git would actually have said 18 files changed, 171 insertions(+), 48 deletions(-) but it looks like you use the patience diff option, which gives that extra insertion/deletion line because it generates the diff a bit differently ] Not a big deal,, but it made me briefly wonder "why doesn't my diffstat match yours". Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-02-05 2:31 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-02-05 2:31 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 18 patches, based on 5c279c4cf206e03995e04fd3404fa95ffd243a97. Subsystems affected by this patch series: mm/hugetlb mm/compaction mm/vmalloc gcov mm/shmem mm/memblock mailmap mm/pagecache mm/kasan ubsan mm/hugetlb MAINTAINERS Subsystem: mm/hugetlb Muchun Song <songmuchun@bytedance.com>: mm: hugetlbfs: fix cannot migrate the fallocated HugeTLB page mm: hugetlb: fix a race between freeing and dissolving the page mm: hugetlb: fix a race between isolating and freeing page mm: hugetlb: remove VM_BUG_ON_PAGE from page_huge_active mm: migrate: do not migrate HugeTLB page whose refcount is one Subsystem: mm/compaction Rokudo Yan <wu-yan@tcl.com>: mm, compaction: move high_pfn to the for loop scope Subsystem: mm/vmalloc Rick Edgecombe <rick.p.edgecombe@intel.com>: mm/vmalloc: separate put pages and flush VM flags Subsystem: gcov Johannes Berg <johannes.berg@intel.com>: init/gcov: allow CONFIG_CONSTRUCTORS on UML to fix module gcov Subsystem: mm/shmem Hugh Dickins <hughd@google.com>: mm: thp: fix MADV_REMOVE deadlock on shmem THP Subsystem: mm/memblock Roman Gushchin <guro@fb.com>: memblock: do not start bottom-up allocations with kernel_end Subsystem: mailmap Viresh Kumar <viresh.kumar@linaro.org>: mailmap: fix name/email for Viresh Kumar Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>: mailmap: add entries for Manivannan Sadhasivam Subsystem: mm/pagecache Waiman Long <longman@redhat.com>: mm/filemap: add missing mem_cgroup_uncharge() to __add_to_page_cache_locked() Subsystem: mm/kasan Vincenzo Frascino <vincenzo.frascino@arm.com>: Patch series "kasan: Fix metadata detection for KASAN_HW_TAGS", v5: kasan: add explicit preconditions to kasan_report() kasan: make addr_has_metadata() return true for valid addresses Subsystem: ubsan Nathan Chancellor <nathan@kernel.org>: ubsan: implement __ubsan_handle_alignment_assumption Subsystem: mm/hugetlb Muchun Song <songmuchun@bytedance.com>: mm: hugetlb: fix missing put_page in gather_surplus_pages() Subsystem: MAINTAINERS Nathan Chancellor <nathan@kernel.org>: MAINTAINERS/.mailmap: use my @kernel.org address .mailmap | 5 ++++ MAINTAINERS | 2 - fs/hugetlbfs/inode.c | 3 +- include/linux/hugetlb.h | 2 + include/linux/kasan.h | 7 ++++++ include/linux/vmalloc.h | 9 +------- init/Kconfig | 1 init/main.c | 8 ++++++- kernel/gcov/Kconfig | 2 - lib/ubsan.c | 31 ++++++++++++++++++++++++++++ lib/ubsan.h | 6 +++++ mm/compaction.c | 3 +- mm/filemap.c | 4 +++ mm/huge_memory.c | 37 ++++++++++++++++++++------------- mm/hugetlb.c | 53 ++++++++++++++++++++++++++++++++++++++++++------ mm/kasan/kasan.h | 2 - mm/memblock.c | 49 +++++--------------------------------------- mm/migrate.c | 6 +++++ 18 files changed, 153 insertions(+), 77 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-01-24 5:00 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2021-01-24 5:00 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 19 patches, based on e1ae4b0be15891faf46d390e9f3dc9bd71a8cae1. Subsystems affected by this patch series: mm/pagealloc mm/memcg mm/kasan ubsan mm/memory-failure mm/highmem proc MAINTAINERS Subsystem: mm/pagealloc Mike Rapoport <rppt@linux.ibm.com>: Patch series "mm: fix initialization of struct page for holes in memory layout", v3: x86/setup: don't remove E820_TYPE_RAM for pfn 0 mm: fix initialization of struct page for holes in memory layout Subsystem: mm/memcg Roman Gushchin <guro@fb.com>: mm: memcg/slab: optimize objcg stock draining Shakeel Butt <shakeelb@google.com>: mm: memcg: fix memcg file_dirty numa stat mm: fix numa stats for thp migration Johannes Weiner <hannes@cmpxchg.org>: mm: memcontrol: prevent starvation when writing memory.high Subsystem: mm/kasan Lecopzer Chen <lecopzer@gmail.com>: kasan: fix unaligned address is unhandled in kasan_remove_zero_shadow kasan: fix incorrect arguments passing in kasan_add_zero_shadow Andrey Konovalov <andreyknvl@google.com>: kasan: fix HW_TAGS boot parameters kasan, mm: fix conflicts with init_on_alloc/free kasan, mm: fix resetting page_alloc tags for HW_TAGS Subsystem: ubsan Arnd Bergmann <arnd@arndb.de>: ubsan: disable unsigned-overflow check for i386 Subsystem: mm/memory-failure Dan Williams <dan.j.williams@intel.com>: mm: fix page reference leak in soft_offline_page() Subsystem: mm/highmem Thomas Gleixner <tglx@linutronix.de>: Patch series "mm/highmem: Fix fallout from generic kmap_local conversions": sparc/mm/highmem: flush cache and TLB mm/highmem: prepare for overriding set_pte_at() mips/mm/highmem: use set_pte() for kmap_local() powerpc/mm/highmem: use __set_pte_at() for kmap_local() Subsystem: proc Xiaoming Ni <nixiaoming@huawei.com>: proc_sysctl: fix oops caused by incorrect command parameters Subsystem: MAINTAINERS Nathan Chancellor <natechancellor@gmail.com>: MAINTAINERS: add a couple more files to the Clang/LLVM section Documentation/dev-tools/kasan.rst | 27 ++--------- MAINTAINERS | 2 arch/mips/include/asm/highmem.h | 1 arch/powerpc/include/asm/highmem.h | 2 arch/sparc/include/asm/highmem.h | 9 ++- arch/x86/kernel/setup.c | 20 +++----- fs/proc/proc_sysctl.c | 7 ++- lib/Kconfig.ubsan | 1 mm/highmem.c | 7 ++- mm/kasan/hw_tags.c | 77 +++++++++++++-------------------- mm/kasan/init.c | 23 +++++---- mm/memcontrol.c | 11 +--- mm/memory-failure.c | 20 ++++++-- mm/migrate.c | 27 ++++++----- mm/page_alloc.c | 86 ++++++++++++++++++++++--------------- mm/slub.c | 7 +-- 16 files changed, 173 insertions(+), 154 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2021-01-12 23:48 Andrew Morton 2021-01-15 23:32 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2021-01-12 23:48 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 10 patches, based on e609571b5ffa3528bf85292de1ceaddac342bc1c. Subsystems affected by this patch series: mm/slub mm/pagealloc mm/memcg mm/kasan mm/vmalloc mm/migration mm/hugetlb MAINTAINERS mm/memory-failure mm/process_vm_access Subsystem: mm/slub Jann Horn <jannh@google.com>: mm, slub: consider rest of partial list if acquire_slab() fails Subsystem: mm/pagealloc Hailong liu <liu.hailong6@zte.com.cn>: mm/page_alloc: add a missing mm_page_alloc_zone_locked() tracepoint Subsystem: mm/memcg Hugh Dickins <hughd@google.com>: mm/memcontrol: fix warning in mem_cgroup_page_lruvec() Subsystem: mm/kasan Hailong Liu <liu.hailong6@zte.com.cn>: arm/kasan: fix the array size of kasan_early_shadow_pte[] Subsystem: mm/vmalloc Miaohe Lin <linmiaohe@huawei.com>: mm/vmalloc.c: fix potential memory leak Subsystem: mm/migration Jan Stancek <jstancek@redhat.com>: mm: migrate: initialize err in do_migrate_pages Subsystem: mm/hugetlb Miaohe Lin <linmiaohe@huawei.com>: mm/hugetlb: fix potential missing huge page size info Subsystem: MAINTAINERS Vlastimil Babka <vbabka@suse.cz>: MAINTAINERS: add Vlastimil as slab allocators maintainer Subsystem: mm/memory-failure Oscar Salvador <osalvador@suse.de>: mm,hwpoison: fix printing of page flags Subsystem: mm/process_vm_access Andrew Morton <akpm@linux-foundation.org>: mm/process_vm_access.c: include compat.h MAINTAINERS | 1 + include/linux/kasan.h | 6 +++++- include/linux/memcontrol.h | 2 +- mm/hugetlb.c | 2 +- mm/kasan/init.c | 3 ++- mm/memory-failure.c | 2 +- mm/mempolicy.c | 2 +- mm/page_alloc.c | 31 ++++++++++++++++--------------- mm/process_vm_access.c | 1 + mm/slub.c | 2 +- mm/vmalloc.c | 4 +++- 11 files changed, 33 insertions(+), 23 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2021-01-12 23:48 incoming Andrew Morton @ 2021-01-15 23:32 ` Linus Torvalds 0 siblings, 0 replies; 370+ messages in thread From: Linus Torvalds @ 2021-01-15 23:32 UTC (permalink / raw) To: Andrew Morton; +Cc: Linux-MM, mm-commits On Tue, Jan 12, 2021 at 3:48 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > 10 patches, based on e609571b5ffa3528bf85292de1ceaddac342bc1c. Whee. I had completely dropped the ball on this - I had built my usual "akpm" branch with the patches, but then had completely forgotten about it after doing my basic build tests. I tend to leave it for a while to see if people send belated ACK/NAK's for the patches, but that "for a while" is typically "overnight", not several days. So if you ever notice that I haven't merged your patch submission, and you haven't seen me comment on them, feel free to ping me to remind me. Because it might just have gotten lost in the shuffle for some random reason. Admittedly it's rare - I think this is the first time I just randomly noticed three days later that I'd never done the actual merge of the patch-series). Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-12-29 23:13 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-12-29 23:13 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 16 patches, based on dea8dcf2a9fa8cc540136a6cd885c3beece16ec3. Subsystems affected by this patch series: mm/selftests mm/hugetlb kbuild checkpatch mm/pagecache mm/mremap mm/kasan misc lib mm/slub Subsystem: mm/selftests Harish <harish@linux.ibm.com>: selftests/vm: fix building protection keys test Subsystem: mm/hugetlb Mike Kravetz <mike.kravetz@oracle.com>: mm/hugetlb: fix deadlock in hugetlb_cow error path Subsystem: kbuild Masahiro Yamada <masahiroy@kernel.org>: Revert "kbuild: avoid static_assert for genksyms" Subsystem: checkpatch Joe Perches <joe@perches.com>: checkpatch: prefer strscpy to strlcpy Subsystem: mm/pagecache Souptick Joarder <jrdr.linux@gmail.com>: mm: add prototype for __add_to_page_cache_locked() Baoquan He <bhe@redhat.com>: mm: memmap defer init doesn't work as expected Subsystem: mm/mremap Kalesh Singh <kaleshsingh@google.com>: mm/mremap.c: fix extent calculation Nicholas Piggin <npiggin@gmail.com>: mm: generalise COW SMC TLB flushing race comment Subsystem: mm/kasan Walter Wu <walter-zh.wu@mediatek.com>: kasan: fix null pointer dereference in kasan_record_aux_stack Subsystem: misc Randy Dunlap <rdunlap@infradead.org>: local64.h: make <asm/local64.h> mandatory Huang Shijie <sjhuang@iluvatar.ai>: sizes.h: add SZ_8G/SZ_16G/SZ_32G macros Josh Poimboeuf <jpoimboe@redhat.com>: kdev_t: always inline major/minor helper functions Subsystem: lib Huang Shijie <sjhuang@iluvatar.ai>: lib/genalloc: fix the overflow when size is too big Ilya Leoshkevich <iii@linux.ibm.com>: lib/zlib: fix inflating zlib streams on s390 Randy Dunlap <rdunlap@infradead.org>: zlib: move EXPORT_SYMBOL() and MODULE_LICENSE() out of dfltcc_syms.c Subsystem: mm/slub Roman Gushchin <guro@fb.com>: mm: slub: call account_slab_page() after slab page initialization arch/alpha/include/asm/local64.h | 1 - arch/arc/include/asm/Kbuild | 1 - arch/arm/include/asm/Kbuild | 1 - arch/arm64/include/asm/Kbuild | 1 - arch/csky/include/asm/Kbuild | 1 - arch/h8300/include/asm/Kbuild | 1 - arch/hexagon/include/asm/Kbuild | 1 - arch/ia64/include/asm/local64.h | 1 - arch/ia64/mm/init.c | 4 ++-- arch/m68k/include/asm/Kbuild | 1 - arch/microblaze/include/asm/Kbuild | 1 - arch/mips/include/asm/Kbuild | 1 - arch/nds32/include/asm/Kbuild | 1 - arch/openrisc/include/asm/Kbuild | 1 - arch/parisc/include/asm/Kbuild | 1 - arch/powerpc/include/asm/Kbuild | 1 - arch/riscv/include/asm/Kbuild | 1 - arch/s390/include/asm/Kbuild | 1 - arch/sh/include/asm/Kbuild | 1 - arch/sparc/include/asm/Kbuild | 1 - arch/x86/include/asm/local64.h | 1 - arch/xtensa/include/asm/Kbuild | 1 - include/asm-generic/Kbuild | 1 + include/linux/build_bug.h | 5 ----- include/linux/kdev_t.h | 22 +++++++++++----------- include/linux/mm.h | 12 ++++++++++-- include/linux/sizes.h | 3 +++ lib/genalloc.c | 25 +++++++++++++------------ lib/zlib_dfltcc/Makefile | 2 +- lib/zlib_dfltcc/dfltcc.c | 6 +++++- lib/zlib_dfltcc/dfltcc_deflate.c | 3 +++ lib/zlib_dfltcc/dfltcc_inflate.c | 4 ++-- lib/zlib_dfltcc/dfltcc_syms.c | 17 ----------------- mm/hugetlb.c | 22 +++++++++++++++++++++- mm/kasan/generic.c | 2 ++ mm/memory.c | 8 +++++--- mm/memory_hotplug.c | 2 +- mm/mremap.c | 4 +++- mm/page_alloc.c | 8 +++++--- mm/slub.c | 5 ++--- scripts/checkpatch.pl | 6 ++++++ tools/testing/selftests/vm/Makefile | 10 +++++----- 42 files changed, 101 insertions(+), 91 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-12-22 19:58 Andrew Morton 2020-12-22 21:43 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2020-12-22 19:58 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 60 patches, based on 8653b778e454a7708847aeafe689bce07aeeb94e. Subsystems affected by this patch series: mm/kasan Subsystem: mm/kasan Andrey Konovalov <andreyknvl@google.com>: Patch series "kasan: add hardware tag-based mode for arm64", v11: kasan: drop unnecessary GPL text from comment headers kasan: KASAN_VMALLOC depends on KASAN_GENERIC kasan: group vmalloc code kasan: shadow declarations only for software modes kasan: rename (un)poison_shadow to (un)poison_range kasan: rename KASAN_SHADOW_* to KASAN_GRANULE_* kasan: only build init.c for software modes kasan: split out shadow.c from common.c kasan: define KASAN_MEMORY_PER_SHADOW_PAGE kasan: rename report and tags files kasan: don't duplicate config dependencies kasan: hide invalid free check implementation kasan: decode stack frame only with KASAN_STACK_ENABLE kasan, arm64: only init shadow for software modes kasan, arm64: only use kasan_depth for software modes kasan, arm64: move initialization message kasan, arm64: rename kasan_init_tags and mark as __init kasan: rename addr_has_shadow to addr_has_metadata kasan: rename print_shadow_for_address to print_memory_metadata kasan: rename SHADOW layout macros to META kasan: separate metadata_fetch_row for each mode kasan: introduce CONFIG_KASAN_HW_TAGS Vincenzo Frascino <vincenzo.frascino@arm.com>: arm64: enable armv8.5-a asm-arch option arm64: mte: add in-kernel MTE helpers arm64: mte: reset the page tag in page->flags arm64: mte: add in-kernel tag fault handler arm64: kasan: allow enabling in-kernel MTE arm64: mte: convert gcr_user into an exclude mask arm64: mte: switch GCR_EL1 in kernel entry and exit kasan, mm: untag page address in free_reserved_area Andrey Konovalov <andreyknvl@google.com>: arm64: kasan: align allocations for HW_TAGS arm64: kasan: add arch layer for memory tagging helpers kasan: define KASAN_GRANULE_SIZE for HW_TAGS kasan, x86, s390: update undef CONFIG_KASAN kasan, arm64: expand CONFIG_KASAN checks kasan, arm64: implement HW_TAGS runtime kasan, arm64: print report from tag fault handler kasan, mm: reset tags when accessing metadata kasan, arm64: enable CONFIG_KASAN_HW_TAGS kasan: add documentation for hardware tag-based mode Vincenzo Frascino <vincenzo.frascino@arm.com>: kselftest/arm64: check GCR_EL1 after context switch Andrey Konovalov <andreyknvl@google.com>: Patch series "kasan: boot parameters for hardware tag-based mode", v4: kasan: simplify quarantine_put call site kasan: rename get_alloc/free_info kasan: introduce set_alloc_info kasan, arm64: unpoison stack only with CONFIG_KASAN_STACK kasan: allow VMAP_STACK for HW_TAGS mode kasan: remove __kasan_unpoison_stack kasan: inline kasan_reset_tag for tag-based modes kasan: inline random_tag for HW_TAGS kasan: open-code kasan_unpoison_slab kasan: inline (un)poison_range and check_invalid_free kasan: add and integrate kasan boot parameters kasan, mm: check kasan_enabled in annotations kasan, mm: rename kasan_poison_kfree kasan: don't round_up too much kasan: simplify assign_tag and set_tag calls kasan: clarify comment in __kasan_kfree_large kasan: sanitize objects when metadata doesn't fit kasan, mm: allow cache merging with no metadata kasan: update documentation Documentation/dev-tools/kasan.rst | 274 ++- arch/Kconfig | 8 arch/arm64/Kconfig | 9 arch/arm64/Makefile | 7 arch/arm64/include/asm/assembler.h | 2 arch/arm64/include/asm/cache.h | 3 arch/arm64/include/asm/esr.h | 1 arch/arm64/include/asm/kasan.h | 17 arch/arm64/include/asm/memory.h | 15 arch/arm64/include/asm/mte-def.h | 16 arch/arm64/include/asm/mte-kasan.h | 67 arch/arm64/include/asm/mte.h | 22 arch/arm64/include/asm/processor.h | 2 arch/arm64/include/asm/string.h | 5 arch/arm64/include/asm/uaccess.h | 23 arch/arm64/kernel/asm-offsets.c | 3 arch/arm64/kernel/cpufeature.c | 3 arch/arm64/kernel/entry.S | 41 arch/arm64/kernel/head.S | 2 arch/arm64/kernel/hibernate.c | 5 arch/arm64/kernel/image-vars.h | 2 arch/arm64/kernel/kaslr.c | 3 arch/arm64/kernel/module.c | 6 arch/arm64/kernel/mte.c | 124 + arch/arm64/kernel/setup.c | 2 arch/arm64/kernel/sleep.S | 2 arch/arm64/kernel/smp.c | 2 arch/arm64/lib/mte.S | 16 arch/arm64/mm/copypage.c | 9 arch/arm64/mm/fault.c | 59 arch/arm64/mm/kasan_init.c | 41 arch/arm64/mm/mteswap.c | 9 arch/arm64/mm/proc.S | 23 arch/arm64/mm/ptdump.c | 6 arch/s390/boot/string.c | 1 arch/x86/boot/compressed/misc.h | 1 arch/x86/kernel/acpi/wakeup_64.S | 2 include/linux/kasan-checks.h | 2 include/linux/kasan.h | 423 ++++- include/linux/mm.h | 24 include/linux/moduleloader.h | 3 include/linux/page-flags-layout.h | 2 include/linux/sched.h | 2 include/linux/string.h | 2 init/init_task.c | 2 kernel/fork.c | 4 lib/Kconfig.kasan | 71 lib/test_kasan.c | 2 lib/test_kasan_module.c | 2 mm/kasan/Makefile | 33 mm/kasan/common.c | 1006 +++----------- mm/kasan/generic.c | 72 - mm/kasan/generic_report.c | 13 mm/kasan/hw_tags.c | 276 +++ mm/kasan/init.c | 25 mm/kasan/kasan.h | 195 ++ mm/kasan/quarantine.c | 35 mm/kasan/report.c | 363 +---- mm/kasan/report_generic.c | 169 ++ mm/kasan/report_hw_tags.c | 44 mm/kasan/report_sw_tags.c | 22 mm/kasan/shadow.c | 528 +++++++ mm/kasan/sw_tags.c | 34 mm/kasan/tags.c | 7 mm/kasan/tags_report.c | 7 mm/mempool.c | 4 mm/page_alloc.c | 9 mm/page_poison.c | 2 mm/ptdump.c | 13 mm/slab_common.c | 5 mm/slub.c | 29 scripts/Makefile.lib | 2 tools/testing/selftests/arm64/mte/Makefile | 2 tools/testing/selftests/arm64/mte/check_gcr_el1_cswitch.c | 155 ++ 74 files changed, 2869 insertions(+), 1553 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-12-22 19:58 incoming Andrew Morton @ 2020-12-22 21:43 ` Linus Torvalds 0 siblings, 0 replies; 370+ messages in thread From: Linus Torvalds @ 2020-12-22 21:43 UTC (permalink / raw) To: Andrew Morton; +Cc: Linux-MM, mm-commits On Tue, Dec 22, 2020 at 11:58 AM Andrew Morton <akpm@linux-foundation.org> wrote: > > 60 patches, based on 8653b778e454a7708847aeafe689bce07aeeb94e. I see that you enabled renaming in the patches. Lovely. Can you also enable it in the diffstat? > 74 files changed, 2869 insertions(+), 1553 deletions(-) With -M in the diffstat, you should have seen 72 files changed, 2775 insertions(+), 1460 deletions(-) and if you add "--summary", you'll also see the rename part ofthe file create/delete summary: rename mm/kasan/{tags_report.c => report_sw_tags.c} (78%) which is often nice to see in addition to the line stats.. Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-12-18 22:00 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-12-18 22:00 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 78 patches, based on a409ed156a90093a03fe6a93721ddf4c591eac87. Subsystems affected by this patch series: mm/memcg epoll mm/kasan mm/cleanups epoll Subsystem: mm/memcg Alex Shi <alex.shi@linux.alibaba.com>: Patch series "bail out early for memcg disable": mm/memcg: bail early from swap accounting if memcg disabled mm/memcg: warning on !memcg after readahead page charged Wei Yang <richard.weiyang@gmail.com>: mm/memcg: remove unused definitions Shakeel Butt <shakeelb@google.com>: mm, kvm: account kvm_vcpu_mmap to kmemcg Hui Su <sh_def@163.com>: mm/memcontrol:rewrite mem_cgroup_page_lruvec() Subsystem: epoll Soheil Hassas Yeganeh <soheil@google.com>: Patch series "simplify ep_poll": epoll: check for events when removing a timed out thread from the wait queue epoll: simplify signal handling epoll: pull fatal signal checks into ep_send_events() epoll: move eavail next to the list_empty_careful check epoll: simplify and optimize busy loop logic epoll: pull all code between fetch_events and send_event into the loop epoll: replace gotos with a proper loop epoll: eliminate unnecessary lock for zero timeout Subsystem: mm/kasan Andrey Konovalov <andreyknvl@google.com>: Patch series "kasan: add hardware tag-based mode for arm64", v11: kasan: drop unnecessary GPL text from comment headers kasan: KASAN_VMALLOC depends on KASAN_GENERIC kasan: group vmalloc code kasan: shadow declarations only for software modes kasan: rename (un)poison_shadow to (un)poison_range kasan: rename KASAN_SHADOW_* to KASAN_GRANULE_* kasan: only build init.c for software modes kasan: split out shadow.c from common.c kasan: define KASAN_MEMORY_PER_SHADOW_PAGE kasan: rename report and tags files kasan: don't duplicate config dependencies kasan: hide invalid free check implementation kasan: decode stack frame only with KASAN_STACK_ENABLE kasan, arm64: only init shadow for software modes kasan, arm64: only use kasan_depth for software modes kasan, arm64: move initialization message kasan, arm64: rename kasan_init_tags and mark as __init kasan: rename addr_has_shadow to addr_has_metadata kasan: rename print_shadow_for_address to print_memory_metadata kasan: rename SHADOW layout macros to META kasan: separate metadata_fetch_row for each mode kasan: introduce CONFIG_KASAN_HW_TAGS Vincenzo Frascino <vincenzo.frascino@arm.com>: arm64: enable armv8.5-a asm-arch option arm64: mte: add in-kernel MTE helpers arm64: mte: reset the page tag in page->flags arm64: mte: add in-kernel tag fault handler arm64: kasan: allow enabling in-kernel MTE arm64: mte: convert gcr_user into an exclude mask arm64: mte: switch GCR_EL1 in kernel entry and exit kasan, mm: untag page address in free_reserved_area Andrey Konovalov <andreyknvl@google.com>: arm64: kasan: align allocations for HW_TAGS arm64: kasan: add arch layer for memory tagging helpers kasan: define KASAN_GRANULE_SIZE for HW_TAGS kasan, x86, s390: update undef CONFIG_KASAN kasan, arm64: expand CONFIG_KASAN checks kasan, arm64: implement HW_TAGS runtime kasan, arm64: print report from tag fault handler kasan, mm: reset tags when accessing metadata kasan, arm64: enable CONFIG_KASAN_HW_TAGS kasan: add documentation for hardware tag-based mode Vincenzo Frascino <vincenzo.frascino@arm.com>: kselftest/arm64: check GCR_EL1 after context switch Andrey Konovalov <andreyknvl@google.com>: Patch series "kasan: boot parameters for hardware tag-based mode", v4: kasan: simplify quarantine_put call site kasan: rename get_alloc/free_info kasan: introduce set_alloc_info kasan, arm64: unpoison stack only with CONFIG_KASAN_STACK kasan: allow VMAP_STACK for HW_TAGS mode kasan: remove __kasan_unpoison_stack kasan: inline kasan_reset_tag for tag-based modes kasan: inline random_tag for HW_TAGS kasan: open-code kasan_unpoison_slab kasan: inline (un)poison_range and check_invalid_free kasan: add and integrate kasan boot parameters kasan, mm: check kasan_enabled in annotations kasan, mm: rename kasan_poison_kfree kasan: don't round_up too much kasan: simplify assign_tag and set_tag calls kasan: clarify comment in __kasan_kfree_large kasan: sanitize objects when metadata doesn't fit kasan, mm: allow cache merging with no metadata kasan: update documentation Subsystem: mm/cleanups Colin Ian King <colin.king@canonical.com>: mm/Kconfig: fix spelling mistake "whats" -> "what's" Subsystem: epoll Willem de Bruijn <willemb@google.com>: Patch series "add epoll_pwait2 syscall", v4: epoll: convert internal api to timespec64 epoll: add syscall epoll_pwait2 epoll: wire up syscall epoll_pwait2 selftests/filesystems: expand epoll with epoll_pwait2 Documentation/dev-tools/kasan.rst | 274 +- arch/Kconfig | 8 arch/alpha/kernel/syscalls/syscall.tbl | 1 arch/arm/tools/syscall.tbl | 1 arch/arm64/Kconfig | 9 arch/arm64/Makefile | 7 arch/arm64/include/asm/assembler.h | 2 arch/arm64/include/asm/cache.h | 3 arch/arm64/include/asm/esr.h | 1 arch/arm64/include/asm/kasan.h | 17 arch/arm64/include/asm/memory.h | 15 arch/arm64/include/asm/mte-def.h | 16 arch/arm64/include/asm/mte-kasan.h | 67 arch/arm64/include/asm/mte.h | 22 arch/arm64/include/asm/processor.h | 2 arch/arm64/include/asm/string.h | 5 arch/arm64/include/asm/uaccess.h | 23 arch/arm64/include/asm/unistd.h | 2 arch/arm64/include/asm/unistd32.h | 2 arch/arm64/kernel/asm-offsets.c | 3 arch/arm64/kernel/cpufeature.c | 3 arch/arm64/kernel/entry.S | 41 arch/arm64/kernel/head.S | 2 arch/arm64/kernel/hibernate.c | 5 arch/arm64/kernel/image-vars.h | 2 arch/arm64/kernel/kaslr.c | 3 arch/arm64/kernel/module.c | 6 arch/arm64/kernel/mte.c | 124 + arch/arm64/kernel/setup.c | 2 arch/arm64/kernel/sleep.S | 2 arch/arm64/kernel/smp.c | 2 arch/arm64/lib/mte.S | 16 arch/arm64/mm/copypage.c | 9 arch/arm64/mm/fault.c | 59 arch/arm64/mm/kasan_init.c | 41 arch/arm64/mm/mteswap.c | 9 arch/arm64/mm/proc.S | 23 arch/arm64/mm/ptdump.c | 6 arch/ia64/kernel/syscalls/syscall.tbl | 1 arch/m68k/kernel/syscalls/syscall.tbl | 1 arch/microblaze/kernel/syscalls/syscall.tbl | 1 arch/mips/kernel/syscalls/syscall_n32.tbl | 1 arch/mips/kernel/syscalls/syscall_n64.tbl | 1 arch/mips/kernel/syscalls/syscall_o32.tbl | 1 arch/parisc/kernel/syscalls/syscall.tbl | 1 arch/powerpc/kernel/syscalls/syscall.tbl | 1 arch/s390/boot/string.c | 1 arch/s390/kernel/syscalls/syscall.tbl | 1 arch/sh/kernel/syscalls/syscall.tbl | 1 arch/sparc/kernel/syscalls/syscall.tbl | 1 arch/x86/boot/compressed/misc.h | 1 arch/x86/entry/syscalls/syscall_32.tbl | 1 arch/x86/entry/syscalls/syscall_64.tbl | 1 arch/x86/kernel/acpi/wakeup_64.S | 2 arch/x86/kvm/x86.c | 2 arch/xtensa/kernel/syscalls/syscall.tbl | 1 fs/eventpoll.c | 359 ++- include/linux/compat.h | 6 include/linux/kasan-checks.h | 2 include/linux/kasan.h | 423 ++-- include/linux/memcontrol.h | 137 - include/linux/mm.h | 24 include/linux/mmdebug.h | 13 include/linux/moduleloader.h | 3 include/linux/page-flags-layout.h | 2 include/linux/sched.h | 2 include/linux/string.h | 2 include/linux/syscalls.h | 5 include/uapi/asm-generic/unistd.h | 4 init/init_task.c | 2 kernel/fork.c | 4 kernel/sys_ni.c | 2 lib/Kconfig.kasan | 71 lib/test_kasan.c | 2 lib/test_kasan_module.c | 2 mm/Kconfig | 2 mm/kasan/Makefile | 33 mm/kasan/common.c | 1006 ++-------- mm/kasan/generic.c | 72 mm/kasan/generic_report.c | 13 mm/kasan/hw_tags.c | 294 ++ mm/kasan/init.c | 25 mm/kasan/kasan.h | 204 +- mm/kasan/quarantine.c | 35 mm/kasan/report.c | 363 +-- mm/kasan/report_generic.c | 169 + mm/kasan/report_hw_tags.c | 44 mm/kasan/report_sw_tags.c | 22 mm/kasan/shadow.c | 541 +++++ mm/kasan/sw_tags.c | 34 mm/kasan/tags.c | 7 mm/kasan/tags_report.c | 7 mm/memcontrol.c | 53 mm/mempool.c | 4 mm/page_alloc.c | 9 mm/page_poison.c | 2 mm/ptdump.c | 13 mm/slab_common.c | 5 mm/slub.c | 29 scripts/Makefile.lib | 2 tools/testing/selftests/arm64/mte/Makefile | 2 tools/testing/selftests/arm64/mte/check_gcr_el1_cswitch.c | 155 + tools/testing/selftests/filesystems/epoll/epoll_wakeup_test.c | 72 virt/kvm/coalesced_mmio.c | 2 virt/kvm/kvm_main.c | 2 105 files changed, 3268 insertions(+), 1873 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-12-16 4:41 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-12-16 4:41 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm - lots of little subsystems - a few post-linux-next MM material. Most of this awaits more merging of other trees. 95 patches, based on 489e9fea66f31086f85d9a18e61e4791d94a56a4. Subsystems affected by this patch series: mm/swap mm/memory-hotplug alpha procfs misc core-kernel bitmap lib lz4 bitops checkpatch nilfs kdump rapidio gcov bfs relay resource ubsan reboot fault-injection lzo apparmor mm/pagemap mm/cleanups mm/gup Subsystem: mm/swap Zhaoyang Huang <huangzhaoyang@gmail.com>: mm: fix a race on nr_swap_pages Subsystem: mm/memory-hotplug Laurent Dufour <ldufour@linux.ibm.com>: mm/memory_hotplug: quieting offline operation Subsystem: alpha Thomas Gleixner <tglx@linutronix.de>: alpha: replace bogus in_interrupt() Subsystem: procfs Randy Dunlap <rdunlap@infradead.org>: procfs: delete duplicated words + other fixes Anand K Mistry <amistry@google.com>: proc: provide details on indirect branch speculation Alexey Dobriyan <adobriyan@gmail.com>: proc: fix lookup in /proc/net subdirectories after setns(2) Hui Su <sh_def@163.com>: fs/proc: make pde_get() return nothing Subsystem: misc Christophe Leroy <christophe.leroy@csgroup.eu>: asm-generic: force inlining of get_order() to work around gcc10 poor decision Andy Shevchenko <andriy.shevchenko@linux.intel.com>: kernel.h: split out mathematical helpers Subsystem: core-kernel Hui Su <sh_def@163.com>: kernel/acct.c: use #elif instead of #end and #elif Subsystem: bitmap Andy Shevchenko <andriy.shevchenko@linux.intel.com>: include/linux/bitmap.h: convert bitmap_empty() / bitmap_full() to return boolean "Ma, Jianpeng" <jianpeng.ma@intel.com>: bitmap: remove unused function declaration Subsystem: lib Geert Uytterhoeven <geert@linux-m68k.org>: lib/test_free_pages.c: add basic progress indicators "Gustavo A. R. Silva" <gustavoars@kernel.org>: Patch series "] lib/stackdepot.c: Replace one-element array with flexible-array member": lib/stackdepot.c: replace one-element array with flexible-array member lib/stackdepot.c: use flex_array_size() helper in memcpy() lib/stackdepot.c: use array_size() helper in jhash2() Sebastian Andrzej Siewior <bigeasy@linutronix.de>: lib/test_lockup.c: minimum fix to get it compiled on PREEMPT_RT Andy Shevchenko <andriy.shevchenko@linux.intel.com>: lib/list_kunit: follow new file name convention for KUnit tests lib/linear_ranges_kunit: follow new file name convention for KUnit tests lib/bits_kunit: follow new file name convention for KUnit tests lib/cmdline: fix get_option() for strings starting with hyphen lib/cmdline: allow NULL to be an output for get_option() lib/cmdline_kunit: add a new test suite for cmdline API Jakub Jelinek <jakub@redhat.com>: ilog2: improve ilog2 for constant arguments Nick Desaulniers <ndesaulniers@google.com>: lib/string: remove unnecessary #undefs Daniel Axtens <dja@axtens.net>: Patch series "Fortify strscpy()", v7: lib: string.h: detect intra-object overflow in fortified string functions lkdtm: tests for FORTIFY_SOURCE Francis Laniel <laniel_francis@privacyrequired.com>: string.h: add FORTIFY coverage for strscpy() drivers/misc/lkdtm: add new file in LKDTM to test fortified strscpy drivers/misc/lkdtm/lkdtm.h: correct wrong filenames in comment Alexey Dobriyan <adobriyan@gmail.com>: lib: cleanup kstrto*() usage Subsystem: lz4 Gao Xiang <hsiangkao@redhat.com>: lib/lz4: explicitly support in-place decompression Subsystem: bitops Syed Nayyar Waris <syednwaris@gmail.com>: Patch series "Introduce the for_each_set_clump macro", v12: bitops: introduce the for_each_set_clump macro lib/test_bitmap.c: add for_each_set_clump test cases gpio: thunderx: utilize for_each_set_clump macro gpio: xilinx: utilize generic bitmap_get_value and _set_value Subsystem: checkpatch Dwaipayan Ray <dwaipayanray1@gmail.com>: checkpatch: add new exception to repeated word check Aditya Srivastava <yashsri421@gmail.com>: checkpatch: fix false positives in REPEATED_WORD warning Łukasz Stelmach <l.stelmach@samsung.com>: checkpatch: ignore generated CamelCase defines and enum values Joe Perches <joe@perches.com>: checkpatch: prefer static const declarations checkpatch: allow --fix removal of unnecessary break statements Dwaipayan Ray <dwaipayanray1@gmail.com>: checkpatch: extend attributes check to handle more patterns Tom Rix <trix@redhat.com>: checkpatch: add a fixer for missing newline at eof Joe Perches <joe@perches.com>: checkpatch: update __attribute__((section("name"))) quote removal Aditya Srivastava <yashsri421@gmail.com>: checkpatch: add fix option for GERRIT_CHANGE_ID Joe Perches <joe@perches.com>: checkpatch: add __alias and __weak to suggested __attribute__ conversions Dwaipayan Ray <dwaipayanray1@gmail.com>: checkpatch: improve email parsing checkpatch: fix spelling errors and remove repeated word Aditya Srivastava <yashsri421@gmail.com>: checkpatch: avoid COMMIT_LOG_LONG_LINE warning for signature tags Dwaipayan Ray <dwaipayanray1@gmail.com>: checkpatch: fix unescaped left brace Aditya Srivastava <yashsri421@gmail.com>: checkpatch: add fix option for ASSIGNMENT_CONTINUATIONS checkpatch: add fix option for LOGICAL_CONTINUATIONS checkpatch: add fix and improve warning msg for non-standard signature Dwaipayan Ray <dwaipayanray1@gmail.com>: checkpatch: add warning for unnecessary use of %h[xudi] and %hh[xudi] checkpatch: add warning for lines starting with a '#' in commit log checkpatch: fix TYPO_SPELLING check for words with apostrophe Joe Perches <joe@perches.com>: checkpatch: add printk_once and printk_ratelimit to prefer pr_<level> warning Subsystem: nilfs Alex Shi <alex.shi@linux.alibaba.com>: fs/nilfs2: remove some unused macros to tame gcc Subsystem: kdump Alexander Egorenkov <egorenar@linux.ibm.com>: kdump: append uts_namespace.name offset to VMCOREINFO Subsystem: rapidio Sebastian Andrzej Siewior <bigeasy@linutronix.de>: rapidio: remove unused rio_get_asm() and rio_get_device() Subsystem: gcov Nick Desaulniers <ndesaulniers@google.com>: gcov: remove support for GCC < 4.9 Alex Shi <alex.shi@linux.alibaba.com>: gcov: fix kernel-doc markup issue Subsystem: bfs Randy Dunlap <rdunlap@infradead.org>: bfs: don't use WARNING: string when it's just info. Subsystem: relay Jani Nikula <jani.nikula@intel.com>: Patch series "relay: cleanup and const callbacks", v2: relay: remove unused buf_mapped and buf_unmapped callbacks relay: require non-NULL callbacks in relay_open() relay: make create_buf_file and remove_buf_file callbacks mandatory relay: allow the use of const callback structs drm/i915: make relay callbacks const ath10k: make relay callbacks const ath11k: make relay callbacks const ath9k: make relay callbacks const blktrace: make relay callbacks const Subsystem: resource Mauro Carvalho Chehab <mchehab+huawei@kernel.org>: kernel/resource.c: fix kernel-doc markups Subsystem: ubsan Kees Cook <keescook@chromium.org>: Patch series "Clean up UBSAN Makefile", v2: ubsan: remove redundant -Wno-maybe-uninitialized ubsan: move cc-option tests into Kconfig ubsan: disable object-size sanitizer under GCC ubsan: disable UBSAN_TRAP for all*config ubsan: enable for all*config builds ubsan: remove UBSAN_MISC in favor of individual options ubsan: expand tests and reporting Dmitry Vyukov <dvyukov@google.com>: kcov: don't instrument with UBSAN Zou Wei <zou_wei@huawei.com>: lib/ubsan.c: mark type_check_kinds with static keyword Subsystem: reboot Matteo Croce <mcroce@microsoft.com>: reboot: refactor and comment the cpu selection code reboot: allow to specify reboot mode via sysfs reboot: remove cf9_safe from allowed types and rename cf9_force Patch series "reboot: sysfs improvements": reboot: allow to override reboot type if quirks are found reboot: hide from sysfs not applicable settings Subsystem: fault-injection Barnabás Pőcze <pobrn@protonmail.com>: fault-injection: handle EI_ETYPE_TRUE Subsystem: lzo Jason Yan <yanaijie@huawei.com>: lib/lzo/lzo1x_compress.c: make lzogeneric1x_1_compress() static Subsystem: apparmor Andy Shevchenko <andriy.shevchenko@linux.intel.com>: apparmor: remove duplicate macro list_entry_is_head() Subsystem: mm/pagemap Christoph Hellwig <hch@lst.de>: Patch series "simplify follow_pte a bit": mm: unexport follow_pte_pmd mm: simplify follow_pte{,pmd} Subsystem: mm/cleanups Haitao Shi <shihaitao1@huawei.com>: mm: fix some spelling mistakes in comments Subsystem: mm/gup Jann Horn <jannh@google.com>: mmap locking API: don't check locking if the mm isn't live yet mm/gup: assert that the mmap lock is held in __get_user_pages() Documentation/ABI/testing/sysfs-kernel-reboot | 32 Documentation/admin-guide/kdump/vmcoreinfo.rst | 6 Documentation/dev-tools/ubsan.rst | 1 Documentation/filesystems/proc.rst | 2 MAINTAINERS | 5 arch/alpha/kernel/process.c | 2 arch/powerpc/kernel/vmlinux.lds.S | 4 arch/s390/pci/pci_mmio.c | 4 drivers/gpio/gpio-thunderx.c | 11 drivers/gpio/gpio-xilinx.c | 61 - drivers/gpu/drm/i915/gt/uc/intel_guc_log.c | 2 drivers/misc/lkdtm/Makefile | 1 drivers/misc/lkdtm/bugs.c | 50 + drivers/misc/lkdtm/core.c | 3 drivers/misc/lkdtm/fortify.c | 82 ++ drivers/misc/lkdtm/lkdtm.h | 19 drivers/net/wireless/ath/ath10k/spectral.c | 2 drivers/net/wireless/ath/ath11k/spectral.c | 2 drivers/net/wireless/ath/ath9k/common-spectral.c | 2 drivers/rapidio/rio.c | 81 -- fs/bfs/inode.c | 2 fs/dax.c | 9 fs/exec.c | 8 fs/nfs/callback_proc.c | 5 fs/nilfs2/segment.c | 5 fs/proc/array.c | 28 fs/proc/base.c | 2 fs/proc/generic.c | 24 fs/proc/internal.h | 10 fs/proc/proc_net.c | 20 include/asm-generic/bitops/find.h | 19 include/asm-generic/getorder.h | 2 include/linux/bitmap.h | 67 +- include/linux/bitops.h | 24 include/linux/dcache.h | 1 include/linux/iommu-helper.h | 4 include/linux/kernel.h | 173 ----- include/linux/log2.h | 3 include/linux/math.h | 177 +++++ include/linux/mm.h | 6 include/linux/mm_types.h | 10 include/linux/mmap_lock.h | 16 include/linux/proc_fs.h | 8 include/linux/rcu_node_tree.h | 2 include/linux/relay.h | 29 include/linux/rio_drv.h | 3 include/linux/string.h | 75 +- include/linux/units.h | 2 kernel/Makefile | 3 kernel/acct.c | 7 kernel/crash_core.c | 1 kernel/fail_function.c | 6 kernel/gcov/gcc_4_7.c | 10 kernel/reboot.c | 308 ++++++++- kernel/relay.c | 111 --- kernel/resource.c | 24 kernel/trace/blktrace.c | 2 lib/Kconfig.debug | 11 lib/Kconfig.ubsan | 154 +++- lib/Makefile | 7 lib/bits_kunit.c | 75 ++ lib/cmdline.c | 20 lib/cmdline_kunit.c | 100 +++ lib/errname.c | 1 lib/error-inject.c | 2 lib/errseq.c | 1 lib/find_bit.c | 17 lib/linear_ranges_kunit.c | 228 +++++++ lib/list-test.c | 748 ----------------------- lib/list_kunit.c | 748 +++++++++++++++++++++++ lib/lz4/lz4_decompress.c | 6 lib/lz4/lz4defs.h | 1 lib/lzo/lzo1x_compress.c | 2 lib/math/div64.c | 4 lib/math/int_pow.c | 2 lib/math/int_sqrt.c | 3 lib/math/reciprocal_div.c | 9 lib/stackdepot.c | 11 lib/string.c | 4 lib/test_bitmap.c | 143 ++++ lib/test_bits.c | 75 -- lib/test_firmware.c | 9 lib/test_free_pages.c | 5 lib/test_kmod.c | 26 lib/test_linear_ranges.c | 228 ------- lib/test_lockup.c | 16 lib/test_ubsan.c | 74 ++ lib/ubsan.c | 2 mm/filemap.c | 2 mm/gup.c | 2 mm/huge_memory.c | 2 mm/khugepaged.c | 2 mm/memblock.c | 2 mm/memory.c | 36 - mm/memory_hotplug.c | 2 mm/migrate.c | 2 mm/page_ext.c | 2 mm/swapfile.c | 11 scripts/Makefile.ubsan | 49 - scripts/checkpatch.pl | 495 +++++++++++---- security/apparmor/apparmorfs.c | 3 tools/testing/selftests/lkdtm/tests.txt | 1 102 files changed, 3022 insertions(+), 1899 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-12-15 20:32 Andrew Morton 2020-12-15 21:00 ` incoming Linus Torvalds 2020-12-15 22:48 ` incoming Linus Torvalds 0 siblings, 2 replies; 370+ messages in thread From: Andrew Morton @ 2020-12-15 20:32 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits - more MM work: a memcg scalability improvememt 19 patches, based on 148842c98a24e508aecb929718818fbf4c2a6ff3. Subsystems affected by this patch series: Alex Shi <alex.shi@linux.alibaba.com>: Patch series "per memcg lru lock", v21: mm/thp: move lru_add_page_tail() to huge_memory.c mm/thp: use head for head page in lru_add_page_tail() mm/thp: simplify lru_add_page_tail() mm/thp: narrow lru locking mm/vmscan: remove unnecessary lruvec adding mm/rmap: stop store reordering issue on page->mapping Hugh Dickins <hughd@google.com>: mm: page_idle_get_page() does not need lru_lock Alex Shi <alex.shi@linux.alibaba.com>: mm/memcg: add debug checking in lock_page_memcg mm/swap.c: fold vm event PGROTATED into pagevec_move_tail_fn mm/lru: move lock into lru_note_cost mm/vmscan: remove lruvec reget in move_pages_to_lru mm/mlock: remove lru_lock on TestClearPageMlocked mm/mlock: remove __munlock_isolate_lru_page() mm/lru: introduce TestClearPageLRU() mm/compaction: do page isolation first in compaction mm/swap.c: serialize memcg changes in pagevec_lru_move_fn mm/lru: replace pgdat lru_lock with lruvec lock Alexander Duyck <alexander.h.duyck@linux.intel.com>: mm/lru: introduce relock_page_lruvec() Hugh Dickins <hughd@google.com>: mm/lru: revise the comments of lru_lock Documentation/admin-guide/cgroup-v1/memcg_test.rst | 15 - Documentation/admin-guide/cgroup-v1/memory.rst | 23 - Documentation/trace/events-kmem.rst | 2 Documentation/vm/unevictable-lru.rst | 22 - include/linux/memcontrol.h | 110 +++++++ include/linux/mm_types.h | 2 include/linux/mmzone.h | 6 include/linux/page-flags.h | 1 include/linux/swap.h | 4 mm/compaction.c | 98 ++++--- mm/filemap.c | 4 mm/huge_memory.c | 109 ++++--- mm/memcontrol.c | 84 +++++- mm/mlock.c | 93 ++---- mm/mmzone.c | 1 mm/page_alloc.c | 1 mm/page_idle.c | 4 mm/rmap.c | 12 mm/swap.c | 292 ++++++++------------- mm/vmscan.c | 239 ++++++++--------- mm/workingset.c | 2 21 files changed, 644 insertions(+), 480 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-12-15 20:32 incoming Andrew Morton @ 2020-12-15 21:00 ` Linus Torvalds 2020-12-15 22:48 ` incoming Linus Torvalds 1 sibling, 0 replies; 370+ messages in thread From: Linus Torvalds @ 2020-12-15 21:00 UTC (permalink / raw) To: Andrew Morton; +Cc: Linux-MM, mm-commits On Tue, Dec 15, 2020 at 12:32 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > - more MM work: a memcg scalability improvememt > > 19 patches, based on 148842c98a24e508aecb929718818fbf4c2a6ff3. I'm not seeing patch 10/19 at all. And patch 19/19 is corrupted and has an attachment with a '^P' character in it. I could fix it up, but with the missing patch in the middle I'm not going to even try. 'b4' is also very unhappy about that patch 19/19. I don't know what went wrong, but I'll ignore this send - please re-send the series at your leisure, ok? Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-12-15 20:32 incoming Andrew Morton 2020-12-15 21:00 ` incoming Linus Torvalds @ 2020-12-15 22:48 ` Linus Torvalds 2020-12-15 22:49 ` incoming Linus Torvalds 1 sibling, 1 reply; 370+ messages in thread From: Linus Torvalds @ 2020-12-15 22:48 UTC (permalink / raw) To: Andrew Morton; +Cc: Linux-MM, mm-commits On Tue, Dec 15, 2020 at 12:32 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > - more MM work: a memcg scalability improvememt > > 19 patches, based on 148842c98a24e508aecb929718818fbf4c2a6ff3. With your re-send, I get all patches, but they don't actually apply cleanly. Is that base correct? I get error: patch failed: mm/huge_memory.c:2750 error: mm/huge_memory.c: patch does not apply Patch failed at 0004 mm/thp: narrow lru locking for that patch "[patch 04/19] mm/thp: narrow lru locking", and that's definitely true: the patch fragment has @@ -2750,7 +2751,7 @@ int split_huge_page_to_list(struct page __dec_lruvec_page_state(head, NR_FILE_THPS); } - __split_huge_page(page, list, end, flags); + __split_huge_page(page, list, end); ret = 0; } else { if (IS_ENABLED(CONFIG_DEBUG_VM) && mapcount) { but that __dec_lruvec_page_state() conversion was done by your previous commit series. So I have the feeling that what you actually mean by "base" isn't actually really the base for that series at all.. I will try to apply it on top of my merge of your previous series instead. Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-12-15 22:48 ` incoming Linus Torvalds @ 2020-12-15 22:49 ` Linus Torvalds 2020-12-15 22:55 ` incoming Andrew Morton 0 siblings, 1 reply; 370+ messages in thread From: Linus Torvalds @ 2020-12-15 22:49 UTC (permalink / raw) To: Andrew Morton; +Cc: Linux-MM, mm-commits On Tue, Dec 15, 2020 at 2:48 PM Linus Torvalds <torvalds@linux-foundation.org> wrote: > > I will try to apply it on top of my merge of your previous series instead. Yes, then it applies cleanly. So apparently we just have different concepts of what really constitutes a "base" for applying your series. Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-12-15 22:49 ` incoming Linus Torvalds @ 2020-12-15 22:55 ` Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-12-15 22:55 UTC (permalink / raw) To: Linus Torvalds; +Cc: Linux-MM, mm-commits On Tue, 15 Dec 2020 14:49:24 -0800 Linus Torvalds <torvalds@linux-foundation.org> wrote: > On Tue, Dec 15, 2020 at 2:48 PM Linus Torvalds > <torvalds@linux-foundation.org> wrote: > > > > I will try to apply it on top of my merge of your previous series instead. > > Yes, then it applies cleanly. So apparently we just have different > concepts of what really constitutes a "base" for applying your series. > oop, sorry, yes, the "based on" thing was wrong because I had two series in flight simultaneously. I've never tried that before.. ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-12-15 3:02 Andrew Morton 2020-12-15 3:25 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2020-12-15 3:02 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm - a few random little subsystems - almost all of the MM patches which are staged ahead of linux-next material. I'll trickle to post-linux-next work in as the dependents get merged up. 200 patches, based on 2c85ebc57b3e1817b6ce1a6b703928e113a90442. Subsystems affected by this patch series: kthread kbuild ide ntfs ocfs2 arch mm/slab-generic mm/slab mm/slub mm/dax mm/debug mm/pagecache mm/gup mm/swap mm/shmem mm/memcg mm/pagemap mm/mremap mm/hmm mm/vmalloc mm/documentation mm/kasan mm/pagealloc mm/memory-failure mm/hugetlb mm/vmscan mm/z3fold mm/compaction mm/oom-kill mm/migration mm/cma mm/page-poison mm/userfaultfd mm/zswap mm/zsmalloc mm/uaccess mm/zram mm/cleanups Subsystem: kthread Rob Clark <robdclark@chromium.org>: kthread: add kthread_work tracepoints Petr Mladek <pmladek@suse.com>: kthread_worker: document CPU hotplug handling Subsystem: kbuild Petr Vorel <petr.vorel@gmail.com>: uapi: move constants from <linux/kernel.h> to <linux/const.h> Subsystem: ide Sebastian Andrzej Siewior <bigeasy@linutronix.de>: ide/falcon: remove in_interrupt() usage ide: remove BUG_ON(in_interrupt() || irqs_disabled()) from ide_unregister() Subsystem: ntfs Alex Shi <alex.shi@linux.alibaba.com>: fs/ntfs: remove unused varibles fs/ntfs: remove unused variable attr_len Subsystem: ocfs2 Tom Rix <trix@redhat.com>: fs/ocfs2/cluster/tcp.c: remove unneeded break Mauricio Faria de Oliveira <mfo@canonical.com>: ocfs2: ratelimit the 'max lookup times reached' notice Subsystem: arch Colin Ian King <colin.king@canonical.com>: arch/Kconfig: fix spelling mistakes Subsystem: mm/slab-generic Hui Su <sh_def@163.com>: mm/slab_common.c: use list_for_each_entry in dump_unreclaimable_slab() Bartosz Golaszewski <bgolaszewski@baylibre.com>: Patch series "slab: provide and use krealloc_array()", v3: mm: slab: clarify krealloc()'s behavior with __GFP_ZERO mm: slab: provide krealloc_array() ALSA: pcm: use krealloc_array() vhost: vringh: use krealloc_array() pinctrl: use krealloc_array() edac: ghes: use krealloc_array() drm: atomic: use krealloc_array() hwtracing: intel: use krealloc_array() dma-buf: use krealloc_array() Vlastimil Babka <vbabka@suse.cz>: mm, slab, slub: clear the slab_cache field when freeing page Subsystem: mm/slab Alexander Popov <alex.popov@linux.com>: mm/slab: rerform init_on_free earlier Subsystem: mm/slub Vlastimil Babka <vbabka@suse.cz>: mm, slub: use kmem_cache_debug_flags() in deactivate_slab() Bharata B Rao <bharata@linux.ibm.com>: mm/slub: let number of online CPUs determine the slub page order Subsystem: mm/dax Dan Williams <dan.j.williams@intel.com>: device-dax/kmem: use struct_size() Subsystem: mm/debug Zhenhua Huang <zhenhuah@codeaurora.org>: mm: fix page_owner initializing issue for arm32 Liam Mark <lmark@codeaurora.org>: mm/page_owner: record timestamp and pid Subsystem: mm/pagecache Kent Overstreet <kent.overstreet@gmail.com>: Patch series "generic_file_buffered_read() improvements", v2: mm/filemap/c: break generic_file_buffered_read up into multiple functions mm/filemap.c: generic_file_buffered_read() now uses find_get_pages_contig Alex Shi <alex.shi@linux.alibaba.com>: mm/truncate: add parameter explanation for invalidate_mapping_pagevec Hailong Liu <carver4lio@163.com>: mm/filemap.c: remove else after a return Subsystem: mm/gup John Hubbard <jhubbard@nvidia.com>: Patch series "selftests/vm: gup_test, hmm-tests, assorted improvements", v3: mm/gup_benchmark: rename to mm/gup_test selftests/vm: use a common gup_test.h selftests/vm: rename run_vmtests --> run_vmtests.sh selftests/vm: minor cleanup: Makefile and gup_test.c selftests/vm: only some gup_test items are really benchmarks selftests/vm: gup_test: introduce the dump_pages() sub-test selftests/vm: run_vmtests.sh: update and clean up gup_test invocation selftests/vm: hmm-tests: remove the libhugetlbfs dependency selftests/vm: 2x speedup for run_vmtests.sh Barry Song <song.bao.hua@hisilicon.com>: mm/gup_test.c: mark gup_test_init as __init function mm/gup_test: GUP_TEST depends on DEBUG_FS Jason Gunthorpe <jgg@nvidia.com>: Patch series "Add a seqcount between gup_fast and copy_page_range()", v4: mm/gup: reorganize internal_get_user_pages_fast() mm/gup: prevent gup_fast from racing with COW during fork mm/gup: remove the vma allocation from gup_longterm_locked() mm/gup: combine put_compound_head() and unpin_user_page() Subsystem: mm/swap Ralph Campbell <rcampbell@nvidia.com>: mm: handle zone device pages in release_pages() Miaohe Lin <linmiaohe@huawei.com>: mm/swapfile.c: use helper function swap_count() in add_swap_count_continuation() mm/swap_state: skip meaningless swap cache readahead when ra_info.win == 0 mm/swapfile.c: remove unnecessary out label in __swap_duplicate() mm/swapfile.c: use memset to fill the swap_map with SWAP_HAS_CACHE Jeff Layton <jlayton@kernel.org>: mm: remove pagevec_lookup_range_nr_tag() Subsystem: mm/shmem Hui Su <sh_def@163.com>: mm/shmem.c: make shmem_mapping() inline Randy Dunlap <rdunlap@infradead.org>: tmpfs: fix Documentation nits Subsystem: mm/memcg Johannes Weiner <hannes@cmpxchg.org>: mm: memcontrol: add file_thp, shmem_thp to memory.stat Muchun Song <songmuchun@bytedance.com>: mm: memcontrol: remove unused mod_memcg_obj_state() Miaohe Lin <linmiaohe@huawei.com>: mm: memcontrol: eliminate redundant check in __mem_cgroup_insert_exceeded() Muchun Song <songmuchun@bytedance.com>: mm: memcg/slab: fix return of child memcg objcg for root memcg mm: memcg/slab: fix use after free in obj_cgroup_charge Shakeel Butt <shakeelb@google.com>: mm/rmap: always do TTU_IGNORE_ACCESS Alex Shi <alex.shi@linux.alibaba.com>: mm/memcg: update page struct member in comments Roman Gushchin <guro@fb.com>: mm: memcg: fix obsolete code comments Patch series "mm: memcg: deprecate cgroup v1 non-hierarchical mode", v1: mm: memcg: deprecate the non-hierarchical mode docs: cgroup-v1: reflect the deprecation of the non-hierarchical mode cgroup: remove obsoleted broken_hierarchy and warned_broken_hierarchy Hui Su <sh_def@163.com>: mm/page_counter: use page_counter_read in page_counter_set_max Lukas Bulwahn <lukas.bulwahn@gmail.com>: mm: memcg: remove obsolete memcg_has_children() Muchun Song <songmuchun@bytedance.com>: mm: memcg/slab: rename *_lruvec_slab_state to *_lruvec_kmem_state Kaixu Xia <kaixuxia@tencent.com>: mm: memcontrol: sssign boolean values to a bool variable Alex Shi <alex.shi@linux.alibaba.com>: mm/memcg: remove incorrect comment Shakeel Butt <shakeelb@google.com>: Patch series "memcg: add pagetable comsumption to memory.stat", v2: mm: move lruvec stats update functions to vmstat.h mm: memcontrol: account pagetables per node Subsystem: mm/pagemap Dan Williams <dan.j.williams@intel.com>: xen/unpopulated-alloc: consolidate pgmap manipulation Kalesh Singh <kaleshsingh@google.com>: Patch series "Speed up mremap on large regions", v4: kselftests: vm: add mremap tests mm: speedup mremap on 1GB or larger regions arm64: mremap speedup - enable HAVE_MOVE_PUD x86: mremap speedup - Enable HAVE_MOVE_PUD John Hubbard <jhubbard@nvidia.com>: mm: cleanup: remove unused tsk arg from __access_remote_vm Alex Shi <alex.shi@linux.alibaba.com>: mm/mapping_dirty_helpers: enhance the kernel-doc markups mm/page_vma_mapped.c: add colon to fix kernel-doc markups error for check_pte Axel Rasmussen <axelrasmussen@google.com>: mm: mmap_lock: add tracepoints around lock acquisition "Matthew Wilcox (Oracle)" <willy@infradead.org>: sparc: fix handling of page table constructor failure mm: move free_unref_page to mm/internal.h Subsystem: mm/mremap Dmitry Safonov <dima@arista.com>: Patch series "mremap: move_vma() fixes": mm/mremap: account memory on do_munmap() failure mm/mremap: for MREMAP_DONTUNMAP check security_vm_enough_memory_mm() mremap: don't allow MREMAP_DONTUNMAP on special_mappings and aio vm_ops: rename .split() callback to .may_split() mremap: check if it's possible to split original vma mm: forbid splitting special mappings Subsystem: mm/hmm Daniel Vetter <daniel.vetter@ffwll.ch>: mm: track mmu notifiers in fs_reclaim_acquire/release mm: extract might_alloc() debug check locking/selftests: add testcases for fs_reclaim Subsystem: mm/vmalloc Andrew Morton <akpm@linux-foundation.org>: mm/vmalloc.c:__vmalloc_area_node(): avoid 32-bit overflow "Uladzislau Rezki (Sony)" <urezki@gmail.com>: mm/vmalloc: use free_vm_area() if an allocation fails mm/vmalloc: rework the drain logic Alex Shi <alex.shi@linux.alibaba.com>: mm/vmalloc: add 'align' parameter explanation for pvm_determine_end_from_reverse Baolin Wang <baolin.wang@linux.alibaba.com>: mm/vmalloc.c: remove unnecessary return statement Waiman Long <longman@redhat.com>: mm/vmalloc: Fix unlock order in s_stop() Subsystem: mm/documentation Alex Shi <alex.shi@linux.alibaba.com>: docs/vm: remove unused 3 items explanation for /proc/vmstat Subsystem: mm/kasan Vincenzo Frascino <vincenzo.frascino@arm.com>: mm/vmalloc.c: fix kasan shadow poisoning size Walter Wu <walter-zh.wu@mediatek.com>: Patch series "kasan: add workqueue stack for generic KASAN", v5: workqueue: kasan: record workqueue stack kasan: print workqueue stack lib/test_kasan.c: add workqueue test case kasan: update documentation for generic kasan Marco Elver <elver@google.com>: lkdtm: disable KASAN for rodata.o Subsystem: mm/pagealloc Mike Rapoport <rppt@linux.ibm.com>: Patch series "arch, mm: deprecate DISCONTIGMEM", v2: alpha: switch from DISCONTIGMEM to SPARSEMEM ia64: remove custom __early_pfn_to_nid() ia64: remove 'ifdef CONFIG_ZONE_DMA32' statements ia64: discontig: paging_init(): remove local max_pfn calculation ia64: split virtual map initialization out of paging_init() ia64: forbid using VIRTUAL_MEM_MAP with FLATMEM ia64: make SPARSEMEM default and disable DISCONTIGMEM arm: remove CONFIG_ARCH_HAS_HOLES_MEMORYMODEL arm, arm64: move free_unused_memmap() to generic mm arc: use FLATMEM with freeing of unused memory map instead of DISCONTIGMEM m68k/mm: make node data and node setup depend on CONFIG_DISCONTIGMEM m68k/mm: enable use of generic memory_model.h for !DISCONTIGMEM m68k: deprecate DISCONTIGMEM Patch series "arch, mm: improve robustness of direct map manipulation", v7: mm: introduce debug_pagealloc_{map,unmap}_pages() helpers PM: hibernate: make direct map manipulations more explicit arch, mm: restore dependency of __kernel_map_pages() on DEBUG_PAGEALLOC arch, mm: make kernel_page_present() always available Vlastimil Babka <vbabka@suse.cz>: Patch series "disable pcplists during memory offline", v3: mm, page_alloc: clean up pageset high and batch update mm, page_alloc: calculate pageset high and batch once per zone mm, page_alloc: remove setup_pageset() mm, page_alloc: simplify pageset_update() mm, page_alloc: cache pageset high and batch in struct zone mm, page_alloc: move draining pcplists to page isolation users mm, page_alloc: disable pcplists during memory offline Miaohe Lin <linmiaohe@huawei.com>: include/linux/page-flags.h: remove unused __[Set|Clear]PagePrivate "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm/page-flags: fix comment mm/page_alloc: add __free_pages() documentation Zou Wei <zou_wei@huawei.com>: mm/page_alloc: mark some symbols with static keyword David Hildenbrand <david@redhat.com>: mm/page_alloc: clear all pages in post_alloc_hook() with init_on_alloc=1 Lin Feng <linf@wangsu.com>: init/main: fix broken buffer_init when DEFERRED_STRUCT_PAGE_INIT set Lorenzo Stoakes <lstoakes@gmail.com>: mm: page_alloc: refactor setup_per_zone_lowmem_reserve() Muchun Song <songmuchun@bytedance.com>: mm/page_alloc: speed up the iteration of max_order Subsystem: mm/memory-failure Oscar Salvador <osalvador@suse.de>: Patch series "HWpoison: further fixes and cleanups", v5: mm,hwpoison: drain pcplists before bailing out for non-buddy zero-refcount page mm,hwpoison: take free pages off the buddy freelists mm,hwpoison: drop unneeded pcplist draining Patch series "HWPoison: Refactor get page interface", v2: mm,hwpoison: refactor get_any_page mm,hwpoison: disable pcplists before grabbing a refcount mm,hwpoison: remove drain_all_pages from shake_page mm,memory_failure: always pin the page in madvise_inject_error mm,hwpoison: return -EBUSY when migration fails Subsystem: mm/hugetlb Hui Su <sh_def@163.com>: mm/hugetlb.c: just use put_page_testzero() instead of page_count() Ralph Campbell <rcampbell@nvidia.com>: include/linux/huge_mm.h: remove extern keyword Alex Shi <alex.shi@linux.alibaba.com>: khugepaged: add parameter explanations for kernel-doc markup Liu Xiang <liu.xiang@zlingsmart.com>: mm: hugetlb: fix type of delta parameter and related local variables in gather_surplus_pages() Oscar Salvador <osalvador@suse.de>: mm,hugetlb: remove unneeded initialization Dan Carpenter <dan.carpenter@oracle.com>: hugetlb: fix an error code in hugetlb_reserve_pages() Subsystem: mm/vmscan Johannes Weiner <hannes@cmpxchg.org>: mm: don't wake kswapd prematurely when watermark boosting is disabled Lukas Bulwahn <lukas.bulwahn@gmail.com>: mm/vmscan: drop unneeded assignment in kswapd() "logic.yu" <hymmsx.yu@gmail.com>: mm/vmscan.c: remove the filename in the top of file comment Muchun Song <songmuchun@bytedance.com>: mm/page_isolation: do not isolate the max order page Subsystem: mm/z3fold Vitaly Wool <vitaly.wool@konsulko.com>: Patch series "z3fold: stability / rt fixes": z3fold: simplify freeing slots z3fold: stricter locking and more careful reclaim z3fold: remove preempt disabled sections for RT Subsystem: mm/compaction Yanfei Xu <yanfei.xu@windriver.com>: mm/compaction: rename 'start_pfn' to 'iteration_start_pfn' in compact_zone() Hui Su <sh_def@163.com>: mm/compaction: move compaction_suitable's comment to right place mm/compaction: make defer_compaction and compaction_deferred static Subsystem: mm/oom-kill Hui Su <sh_def@163.com>: mm/oom_kill: change comment and rename is_dump_unreclaim_slabs() Subsystem: mm/migration Long Li <lonuxli.64@gmail.com>: mm/migrate.c: fix comment spelling Ralph Campbell <rcampbell@nvidia.com>: mm/migrate.c: optimize migrate_vma_pages() mmu notifier "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm: support THPs in zero_user_segments Yang Shi <shy828301@gmail.com>: Patch series "mm: misc migrate cleanup and improvement", v3: mm: truncate_complete_page() does not exist any more mm: migrate: simplify the logic for handling permanent failure mm: migrate: skip shared exec THP for NUMA balancing mm: migrate: clean up migrate_prep{_local} mm: migrate: return -ENOSYS if THP migration is unsupported Stephen Zhang <starzhangzsd@gmail.com>: mm: migrate: remove unused parameter in migrate_vma_insert_page() Subsystem: mm/cma Lecopzer Chen <lecopzer.chen@mediatek.com>: mm/cma.c: remove redundant cma_mutex lock Charan Teja Reddy <charante@codeaurora.org>: mm: cma: improve pr_debug log in cma_release() Subsystem: mm/page-poison Vlastimil Babka <vbabka@suse.cz>: Patch series "cleanup page poisoning", v3: mm, page_alloc: do not rely on the order of page_poison and init_on_alloc/free parameters mm, page_poison: use static key more efficiently kernel/power: allow hibernation with page_poison sanity checking mm, page_poison: remove CONFIG_PAGE_POISONING_NO_SANITY mm, page_poison: remove CONFIG_PAGE_POISONING_ZERO Subsystem: mm/userfaultfd Lokesh Gidra <lokeshgidra@google.com>: Patch series "Control over userfaultfd kernel-fault handling", v6: userfaultfd: add UFFD_USER_MODE_ONLY userfaultfd: add user-mode only option to unprivileged_userfaultfd sysctl knob Axel Rasmussen <axelrasmussen@google.com>: userfaultfd: selftests: make __{s,u}64 format specifiers portable Peter Xu <peterx@redhat.com>: Patch series "userfaultfd: selftests: Small fixes": userfaultfd/selftests: always dump something in modes userfaultfd/selftests: fix retval check for userfaultfd_open() userfaultfd/selftests: hint the test runner on required privilege Subsystem: mm/zswap Joe Perches <joe@perches.com>: mm/zswap: make struct kernel_param_ops definitions const YueHaibing <yuehaibing@huawei.com>: mm/zswap: fix passing zero to 'PTR_ERR' warning Barry Song <song.bao.hua@hisilicon.com>: mm/zswap: move to use crypto_acomp API for hardware acceleration Subsystem: mm/zsmalloc Miaohe Lin <linmiaohe@huawei.com>: mm/zsmalloc.c: rework the list_add code in insert_zspage() Subsystem: mm/uaccess Colin Ian King <colin.king@canonical.com>: mm/process_vm_access: remove redundant initialization of iov_r Subsystem: mm/zram Minchan Kim <minchan@kernel.org>: zram: support page writeback zram: add stat to gather incompressible pages since zram set up Rui Salvaterra <rsalvaterra@gmail.com>: zram: break the strict dependency from lzo Subsystem: mm/cleanups Mauro Carvalho Chehab <mchehab+huawei@kernel.org>: mm: fix kernel-doc markups Joe Perches <joe@perches.com>: Patch series "mm: Convert sysfs sprintf family to sysfs_emit", v2: mm: use sysfs_emit for struct kobject * uses mm: huge_memory: convert remaining use of sprintf to sysfs_emit and neatening mm:backing-dev: use sysfs_emit in macro defining functions mm: shmem: convert shmem_enabled_show to use sysfs_emit_at mm: slub: convert sysfs sprintf family to sysfs_emit/sysfs_emit_at "Gustavo A. R. Silva" <gustavoars@kernel.org>: mm: fix fall-through warnings for Clang Alexey Dobriyan <adobriyan@gmail.com>: mm: cleanup kstrto*() usage /mmap_lock.h | 107 ++ a/Documentation/admin-guide/blockdev/zram.rst | 6 a/Documentation/admin-guide/cgroup-v1/memcg_test.rst | 8 a/Documentation/admin-guide/cgroup-v1/memory.rst | 42 a/Documentation/admin-guide/cgroup-v2.rst | 11 a/Documentation/admin-guide/mm/transhuge.rst | 15 a/Documentation/admin-guide/sysctl/vm.rst | 15 a/Documentation/core-api/memory-allocation.rst | 4 a/Documentation/core-api/pin_user_pages.rst | 8 a/Documentation/dev-tools/kasan.rst | 5 a/Documentation/filesystems/tmpfs.rst | 8 a/Documentation/vm/memory-model.rst | 3 a/Documentation/vm/page_owner.rst | 12 a/arch/Kconfig | 21 a/arch/alpha/Kconfig | 8 a/arch/alpha/include/asm/mmzone.h | 14 a/arch/alpha/include/asm/page.h | 7 a/arch/alpha/include/asm/pgtable.h | 12 a/arch/alpha/include/asm/sparsemem.h | 18 a/arch/alpha/kernel/setup.c | 1 a/arch/arc/Kconfig | 3 a/arch/arc/include/asm/page.h | 20 a/arch/arc/mm/init.c | 29 a/arch/arm/Kconfig | 12 a/arch/arm/kernel/vdso.c | 9 a/arch/arm/mach-bcm/Kconfig | 1 a/arch/arm/mach-davinci/Kconfig | 1 a/arch/arm/mach-exynos/Kconfig | 1 a/arch/arm/mach-highbank/Kconfig | 1 a/arch/arm/mach-omap2/Kconfig | 1 a/arch/arm/mach-s5pv210/Kconfig | 1 a/arch/arm/mach-tango/Kconfig | 1 a/arch/arm/mm/init.c | 78 - a/arch/arm64/Kconfig | 9 a/arch/arm64/include/asm/cacheflush.h | 1 a/arch/arm64/include/asm/pgtable.h | 1 a/arch/arm64/kernel/vdso.c | 41 a/arch/arm64/mm/init.c | 68 - a/arch/arm64/mm/pageattr.c | 12 a/arch/ia64/Kconfig | 11 a/arch/ia64/include/asm/meminit.h | 2 a/arch/ia64/mm/contig.c | 88 -- a/arch/ia64/mm/discontig.c | 44 - a/arch/ia64/mm/init.c | 14 a/arch/ia64/mm/numa.c | 30 a/arch/m68k/Kconfig.cpu | 31 a/arch/m68k/include/asm/page.h | 2 a/arch/m68k/include/asm/page_mm.h | 7 a/arch/m68k/include/asm/virtconvert.h | 7 a/arch/m68k/mm/init.c | 10 a/arch/mips/vdso/genvdso.c | 4 a/arch/nds32/mm/mm-nds32.c | 6 a/arch/powerpc/Kconfig | 5 a/arch/riscv/Kconfig | 4 a/arch/riscv/include/asm/pgtable.h | 2 a/arch/riscv/include/asm/set_memory.h | 1 a/arch/riscv/mm/pageattr.c | 31 a/arch/s390/Kconfig | 4 a/arch/s390/configs/debug_defconfig | 2 a/arch/s390/configs/defconfig | 2 a/arch/s390/kernel/vdso.c | 11 a/arch/sparc/Kconfig | 4 a/arch/sparc/mm/init_64.c | 2 a/arch/x86/Kconfig | 5 a/arch/x86/entry/vdso/vma.c | 17 a/arch/x86/include/asm/set_memory.h | 1 a/arch/x86/kernel/cpu/resctrl/pseudo_lock.c | 2 a/arch/x86/kernel/tboot.c | 1 a/arch/x86/mm/pat/set_memory.c | 6 a/drivers/base/node.c | 2 a/drivers/block/zram/Kconfig | 42 a/drivers/block/zram/zcomp.c | 2 a/drivers/block/zram/zram_drv.c | 29 a/drivers/block/zram/zram_drv.h | 1 a/drivers/dax/device.c | 4 a/drivers/dax/kmem.c | 2 a/drivers/dma-buf/sync_file.c | 3 a/drivers/edac/ghes_edac.c | 4 a/drivers/firmware/efi/efi.c | 1 a/drivers/gpu/drm/drm_atomic.c | 3 a/drivers/hwtracing/intel_th/msu.c | 2 a/drivers/ide/falconide.c | 2 a/drivers/ide/ide-probe.c | 3 a/drivers/misc/lkdtm/Makefile | 1 a/drivers/pinctrl/pinctrl-utils.c | 2 a/drivers/vhost/vringh.c | 3 a/drivers/virtio/virtio_balloon.c | 6 a/drivers/xen/unpopulated-alloc.c | 14 a/fs/aio.c | 5 a/fs/ntfs/file.c | 5 a/fs/ntfs/inode.c | 2 a/fs/ntfs/logfile.c | 3 a/fs/ocfs2/cluster/tcp.c | 1 a/fs/ocfs2/namei.c | 4 a/fs/proc/kcore.c | 2 a/fs/proc/meminfo.c | 2 a/fs/userfaultfd.c | 20 a/include/linux/cgroup-defs.h | 15 a/include/linux/compaction.h | 12 a/include/linux/fs.h | 2 a/include/linux/gfp.h | 2 a/include/linux/highmem.h | 19 a/include/linux/huge_mm.h | 93 -- a/include/linux/memcontrol.h | 148 --- a/include/linux/migrate.h | 4 a/include/linux/mm.h | 118 +- a/include/linux/mm_types.h | 8 a/include/linux/mmap_lock.h | 94 ++ a/include/linux/mmzone.h | 50 - a/include/linux/page-flags.h | 6 a/include/linux/page_ext.h | 8 a/include/linux/pagevec.h | 3 a/include/linux/poison.h | 4 a/include/linux/rmap.h | 1 a/include/linux/sched/mm.h | 16 a/include/linux/set_memory.h | 5 a/include/linux/shmem_fs.h | 6 a/include/linux/slab.h | 18 a/include/linux/vmalloc.h | 8 a/include/linux/vmstat.h | 104 ++ a/include/trace/events/sched.h | 84 + a/include/uapi/linux/const.h | 5 a/include/uapi/linux/ethtool.h | 2 a/include/uapi/linux/kernel.h | 9 a/include/uapi/linux/lightnvm.h | 2 a/include/uapi/linux/mroute6.h | 2 a/include/uapi/linux/netfilter/x_tables.h | 2 a/include/uapi/linux/netlink.h | 2 a/include/uapi/linux/sysctl.h | 2 a/include/uapi/linux/userfaultfd.h | 9 a/init/main.c | 6 a/ipc/shm.c | 8 a/kernel/cgroup/cgroup.c | 12 a/kernel/fork.c | 3 a/kernel/kthread.c | 29 a/kernel/power/hibernate.c | 2 a/kernel/power/power.h | 2 a/kernel/power/snapshot.c | 52 + a/kernel/ptrace.c | 2 a/kernel/workqueue.c | 3 a/lib/locking-selftest.c | 47 + a/lib/test_kasan_module.c | 29 a/mm/Kconfig | 25 a/mm/Kconfig.debug | 28 a/mm/Makefile | 4 a/mm/backing-dev.c | 8 a/mm/cma.c | 6 a/mm/compaction.c | 29 a/mm/filemap.c | 823 ++++++++++--------- a/mm/gup.c | 329 ++----- a/mm/gup_benchmark.c | 210 ---- a/mm/gup_test.c | 299 ++++++ a/mm/gup_test.h | 40 a/mm/highmem.c | 52 + a/mm/huge_memory.c | 86 + a/mm/hugetlb.c | 28 a/mm/init-mm.c | 1 a/mm/internal.h | 5 a/mm/kasan/generic.c | 3 a/mm/kasan/report.c | 4 a/mm/khugepaged.c | 58 - a/mm/ksm.c | 50 - a/mm/madvise.c | 14 a/mm/mapping_dirty_helpers.c | 6 a/mm/memblock.c | 80 + a/mm/memcontrol.c | 170 +-- a/mm/memory-failure.c | 322 +++---- a/mm/memory.c | 24 a/mm/memory_hotplug.c | 44 - a/mm/mempolicy.c | 8 a/mm/migrate.c | 183 ++-- a/mm/mm_init.c | 1 a/mm/mmap.c | 22 a/mm/mmap_lock.c | 230 +++++ a/mm/mmu_notifier.c | 7 a/mm/mmzone.c | 14 a/mm/mremap.c | 282 ++++-- a/mm/nommu.c | 8 a/mm/oom_kill.c | 14 a/mm/page_alloc.c | 517 ++++++----- a/mm/page_counter.c | 4 a/mm/page_ext.c | 10 a/mm/page_isolation.c | 18 a/mm/page_owner.c | 17 a/mm/page_poison.c | 56 - a/mm/page_vma_mapped.c | 9 a/mm/process_vm_access.c | 2 a/mm/rmap.c | 9 a/mm/shmem.c | 39 a/mm/slab.c | 10 a/mm/slab.h | 9 a/mm/slab_common.c | 10 a/mm/slob.c | 6 a/mm/slub.c | 156 +-- a/mm/swap.c | 12 a/mm/swap_state.c | 7 a/mm/swapfile.c | 14 a/mm/truncate.c | 18 a/mm/vmalloc.c | 105 +- a/mm/vmscan.c | 21 a/mm/vmstat.c | 6 a/mm/workingset.c | 8 a/mm/z3fold.c | 215 ++-- a/mm/zsmalloc.c | 11 a/mm/zswap.c | 193 +++- a/sound/core/pcm_lib.c | 4 a/tools/include/linux/poison.h | 6 a/tools/testing/selftests/vm/.gitignore | 4 a/tools/testing/selftests/vm/Makefile | 41 a/tools/testing/selftests/vm/check_config.sh | 31 a/tools/testing/selftests/vm/config | 2 a/tools/testing/selftests/vm/gup_benchmark.c | 143 --- a/tools/testing/selftests/vm/gup_test.c | 258 +++++ a/tools/testing/selftests/vm/hmm-tests.c | 10 a/tools/testing/selftests/vm/mremap_test.c | 344 +++++++ a/tools/testing/selftests/vm/run_vmtests | 51 - a/tools/testing/selftests/vm/userfaultfd.c | 94 -- 217 files changed, 4817 insertions(+), 3369 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-12-15 3:02 incoming Andrew Morton @ 2020-12-15 3:25 ` Linus Torvalds 2020-12-15 3:30 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Linus Torvalds @ 2020-12-15 3:25 UTC (permalink / raw) To: Andrew Morton, Konstantin Ryabitsev; +Cc: mm-commits, Linux-MM On Mon, Dec 14, 2020 at 7:02 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > 200 patches, based on 2c85ebc57b3e1817b6ce1a6b703928e113a90442. I haven't actually processed the patches yet, but I have a question for Konstantin wrt b4. All the patches except for _one_ get a nice little green check-mark next to them when I use 'git am' on this series. The one that did not was [patch 192/200]. I have no idea why - and it doesn't matter a lot to me, it just stood out as being different. I'm assuming Andrew has started doing patch attestation, and that patch failed. But if so, maybe Konstantin wants to know what went wrong. Konstantin? Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-12-15 3:25 ` incoming Linus Torvalds @ 2020-12-15 3:30 ` Linus Torvalds 2020-12-15 14:04 ` incoming Konstantin Ryabitsev 0 siblings, 1 reply; 370+ messages in thread From: Linus Torvalds @ 2020-12-15 3:30 UTC (permalink / raw) To: Andrew Morton, Konstantin Ryabitsev; +Cc: mm-commits, Linux-MM On Mon, Dec 14, 2020 at 7:25 PM Linus Torvalds <torvalds@linux-foundation.org> wrote: > > All the patches except for _one_ get a nice little green check-mark > next to them when I use 'git am' on this series. > > The one that did not was [patch 192/200]. > > I have no idea why Hmm. It looks like that patch is the only one in the series with the ">From" marker in the commit message, from the silly "clarify that this isn't the first line in a new message in mbox format". And "b4 am" has turned the single ">" into two, making the stupid marker worse, and actually corrupting the end result. Coincidence? Or cause? Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-12-15 3:30 ` incoming Linus Torvalds @ 2020-12-15 14:04 ` Konstantin Ryabitsev 0 siblings, 0 replies; 370+ messages in thread From: Konstantin Ryabitsev @ 2020-12-15 14:04 UTC (permalink / raw) To: Linus Torvalds; +Cc: Andrew Morton, mm-commits, Linux-MM On Mon, Dec 14, 2020 at 07:30:54PM -0800, Linus Torvalds wrote: > > All the patches except for _one_ get a nice little green check-mark > > next to them when I use 'git am' on this series. > > > > The one that did not was [patch 192/200]. > > > > I have no idea why > > Hmm. It looks like that patch is the only one in the series with the > ">From" marker in the commit message, from the silly "clarify that > this isn't the first line in a new message in mbox format". > > And "b4 am" has turned the single ">" into two, making the stupid > marker worse, and actually corrupting the end result. It's a bug in b4 that I overlooked. Public-inbox emits mboxrd-formatted .mbox files, while Python's mailbox.mbox consumes mboxo only. The main distinction between the two is precisely that mboxrd will convert ">From " into ">>From " in an attempt to avoid corruption during escape/unescape (it didn't end up fixing the problem 100% and mostly introduced incompatibilities like this one). I have a fix in master/stable-0.6.y and I'll release a 0.6.2 before the end of the week. Thanks for the report. -K ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-12-11 21:35 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-12-11 21:35 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 8 patches, based on 33dc9614dc208291d0c4bcdeb5d30d481dcd2c4c. Subsystems affected by this patch series: mm/pagecache proc selftests kbuild mm/kasan mm/hugetlb Subsystem: mm/pagecache Andrew Morton <akpm@linux-foundation.org>: revert "mm/filemap: add static for function __add_to_page_cache_locked" Subsystem: proc Miles Chen <miles.chen@mediatek.com>: proc: use untagged_addr() for pagemap_read addresses Subsystem: selftests Arnd Bergmann <arnd@arndb.de>: selftest/fpu: avoid clang warning Subsystem: kbuild Arnd Bergmann <arnd@arndb.de>: kbuild: avoid static_assert for genksyms initramfs: fix clang build failure elfcore: fix building with clang Subsystem: mm/kasan Kuan-Ying Lee <Kuan-Ying.Lee@mediatek.com>: kasan: fix object remaining in offline per-cpu quarantine Subsystem: mm/hugetlb Gerald Schaefer <gerald.schaefer@linux.ibm.com>: mm/hugetlb: clear compound_nr before freeing gigantic pages fs/proc/task_mmu.c | 8 ++++++-- include/linux/build_bug.h | 5 +++++ include/linux/elfcore.h | 22 ++++++++++++++++++++++ init/initramfs.c | 2 +- kernel/Makefile | 1 - kernel/elfcore.c | 26 -------------------------- lib/Makefile | 3 ++- mm/filemap.c | 2 +- mm/hugetlb.c | 1 + mm/kasan/quarantine.c | 39 +++++++++++++++++++++++++++++++++++++++ 10 files changed, 77 insertions(+), 32 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-12-06 6:14 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-12-06 6:14 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 12 patches, based on 33256ce194110874d4bc90078b577c59f9076c59. Subsystems affected by this patch series: lib coredump mm/memcg mm/zsmalloc mm/swap mailmap mm/selftests mm/pagecache mm/hugetlb mm/pagemap Subsystem: lib Randy Dunlap <rdunlap@infradead.org>: zlib: export S390 symbols for zlib modules Subsystem: coredump Menglong Dong <dong.menglong@zte.com.cn>: coredump: fix core_pattern parse error Subsystem: mm/memcg Roman Gushchin <guro@fb.com>: mm: memcg/slab: fix obj_cgroup_charge() return value handling Yang Shi <shy828301@gmail.com>: mm: list_lru: set shrinker map bit when child nr_items is not zero Subsystem: mm/zsmalloc Minchan Kim <minchan@kernel.org>: mm/zsmalloc.c: drop ZSMALLOC_PGTABLE_MAPPING Subsystem: mm/swap Qian Cai <qcai@redhat.com>: mm/swapfile: do not sleep with a spin lock held Subsystem: mailmap Uwe Kleine-König <u.kleine-koenig@pengutronix.de>: mailmap: add two more addresses of Uwe Kleine-König Subsystem: mm/selftests Xingxing Su <suxingxing@loongson.cn>: tools/testing/selftests/vm: fix build error Axel Rasmussen <axelrasmussen@google.com>: userfaultfd: selftests: fix SIGSEGV if huge mmap fails Subsystem: mm/pagecache Alex Shi <alex.shi@linux.alibaba.com>: mm/filemap: add static for function __add_to_page_cache_locked Subsystem: mm/hugetlb Mike Kravetz <mike.kravetz@oracle.com>: hugetlb_cgroup: fix offline of hugetlb cgroup with reservations Subsystem: mm/pagemap Liu Zixian <liuzixian4@huawei.com>: mm/mmap.c: fix mmap return value when vma is merged after call_mmap() .mailmap | 2 + arch/arm/configs/omap2plus_defconfig | 1 fs/coredump.c | 3 + include/linux/zsmalloc.h | 1 lib/zlib_dfltcc/dfltcc_inflate.c | 3 + mm/Kconfig | 13 ------- mm/filemap.c | 2 - mm/hugetlb_cgroup.c | 8 +--- mm/list_lru.c | 10 ++--- mm/mmap.c | 26 ++++++-------- mm/slab.h | 40 +++++++++++++--------- mm/swapfile.c | 4 +- mm/zsmalloc.c | 54 ------------------------------- tools/testing/selftests/vm/Makefile | 4 ++ tools/testing/selftests/vm/userfaultfd.c | 25 +++++++++----- 15 files changed, 75 insertions(+), 121 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-11-22 6:16 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-11-22 6:16 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 8 patches, based on a349e4c659609fd20e4beea89e5c4a4038e33a95. Subsystems affected by this patch series: mm/madvise kbuild mm/pagemap mm/readahead mm/memcg mm/userfaultfd vfs-akpm mm/madvise Subsystem: mm/madvise Eric Dumazet <edumazet@google.com>: mm/madvise: fix memory leak from process_madvise Subsystem: kbuild Nick Desaulniers <ndesaulniers@google.com>: compiler-clang: remove version check for BPF Tracing Subsystem: mm/pagemap Dan Williams <dan.j.williams@intel.com>: mm: fix phys_to_target_node() and memory_add_physaddr_to_nid() exports Subsystem: mm/readahead "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm: fix readahead_page_batch for retry entries Subsystem: mm/memcg Muchun Song <songmuchun@bytedance.com>: mm: memcg/slab: fix root memcg vmstats Subsystem: mm/userfaultfd Gerald Schaefer <gerald.schaefer@linux.ibm.com>: mm/userfaultfd: do not access vma->vm_mm after calling handle_userfault() Subsystem: vfs-akpm Yicong Yang <yangyicong@hisilicon.com>: libfs: fix error cast of negative value in simple_attr_write() Subsystem: mm/madvise "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm: fix madvise WILLNEED performance problem arch/ia64/include/asm/sparsemem.h | 6 ++++++ arch/powerpc/include/asm/mmzone.h | 5 +++++ arch/powerpc/include/asm/sparsemem.h | 5 ++--- arch/powerpc/mm/mem.c | 1 + arch/x86/include/asm/sparsemem.h | 10 ++++++++++ arch/x86/mm/numa.c | 2 ++ drivers/dax/Kconfig | 1 - fs/libfs.c | 6 ++++-- include/linux/compiler-clang.h | 2 ++ include/linux/memory_hotplug.h | 14 -------------- include/linux/numa.h | 30 +++++++++++++++++++++++++++++- include/linux/pagemap.h | 2 ++ mm/huge_memory.c | 9 ++++----- mm/madvise.c | 4 +--- mm/memcontrol.c | 9 +++++++-- mm/memory_hotplug.c | 18 ------------------ 16 files changed, 75 insertions(+), 49 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-11-14 6:51 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-11-14 6:51 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 14 patches, based on 9e6a39eae450b81c8b2c8cbbfbdf8218e9b40c81. Subsystems affected by this patch series: mm/migration mm/vmscan mailmap mm/slub mm/gup kbuild reboot kernel/watchdog mm/memcg mm/hugetlbfs panic ocfs2 Subsystem: mm/migration Zi Yan <ziy@nvidia.com>: mm/compaction: count pages and stop correctly during page isolation mm/compaction: stop isolation if too many pages are isolated and we have pages to migrate Subsystem: mm/vmscan Nicholas Piggin <npiggin@gmail.com>: mm/vmscan: fix NR_ISOLATED_FILE corruption on 64-bit Subsystem: mailmap Dmitry Baryshkov <dbaryshkov@gmail.com>: mailmap: fix entry for Dmitry Baryshkov/Eremin-Solenikov Subsystem: mm/slub Laurent Dufour <ldufour@linux.ibm.com>: mm/slub: fix panic in slab_alloc_node() Subsystem: mm/gup Jason Gunthorpe <jgg@nvidia.com>: mm/gup: use unpin_user_pages() in __gup_longterm_locked() Subsystem: kbuild Arvind Sankar <nivedita@alum.mit.edu>: compiler.h: fix barrier_data() on clang Subsystem: reboot Matteo Croce <mcroce@microsoft.com>: Patch series "fix parsing of reboot= cmdline", v3: Revert "kernel/reboot.c: convert simple_strtoul to kstrtoint" reboot: fix overflow parsing reboot cpu number Subsystem: kernel/watchdog Santosh Sivaraj <santosh@fossix.org>: kernel/watchdog: fix watchdog_allowed_mask not used warning Subsystem: mm/memcg Muchun Song <songmuchun@bytedance.com>: mm: memcontrol: fix missing wakeup polling thread Subsystem: mm/hugetlbfs Mike Kravetz <mike.kravetz@oracle.com>: hugetlbfs: fix anon huge page migration race Subsystem: panic Christophe Leroy <christophe.leroy@csgroup.eu>: panic: don't dump stack twice on warn Subsystem: ocfs2 Wengang Wang <wen.gang.wang@oracle.com>: ocfs2: initialize ip_next_orphan .mailmap | 5 +- fs/ocfs2/super.c | 1 include/asm-generic/barrier.h | 1 include/linux/compiler-clang.h | 6 -- include/linux/compiler-gcc.h | 19 -------- include/linux/compiler.h | 18 +++++++- include/linux/memcontrol.h | 11 ++++- kernel/panic.c | 3 - kernel/reboot.c | 28 ++++++------ kernel/watchdog.c | 4 - mm/compaction.c | 12 +++-- mm/gup.c | 14 ++++-- mm/hugetlb.c | 90 ++--------------------------------------- mm/memory-failure.c | 36 +++++++--------- mm/migrate.c | 46 +++++++++++--------- mm/rmap.c | 5 -- mm/slub.c | 2 mm/vmscan.c | 5 +- 18 files changed, 119 insertions(+), 187 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-11-02 1:06 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-11-02 1:06 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 15 patches, based on 3cea11cd5e3b00d91caf0b4730194039b45c5891. Subsystems affected by this patch series: mm/memremap mm/memcg mm/slab-generic mm/kasan mm/mempolicy signals lib mm/pagecache kthread mm/oom-kill mm/pagemap epoll core-kernel Subsystem: mm/memremap Ralph Campbell <rcampbell@nvidia.com>: mm/mremap_pages: fix static key devmap_managed_key updates Subsystem: mm/memcg Mike Kravetz <mike.kravetz@oracle.com>: hugetlb_cgroup: fix reservation accounting zhongjiang-ali <zhongjiang-ali@linux.alibaba.com>: mm: memcontrol: correct the NR_ANON_THPS counter of hierarchical memcg Roman Gushchin <guro@fb.com>: mm: memcg: link page counters to root if use_hierarchy is false Subsystem: mm/slab-generic Subsystem: mm/kasan Andrey Konovalov <andreyknvl@google.com>: kasan: adopt KUNIT tests to SW_TAGS mode Subsystem: mm/mempolicy Shijie Luo <luoshijie1@huawei.com>: mm: mempolicy: fix potential pte_unmap_unlock pte error Subsystem: signals Oleg Nesterov <oleg@redhat.com>: ptrace: fix task_join_group_stop() for the case when current is traced Subsystem: lib Vasily Gorbik <gor@linux.ibm.com>: lib/crc32test: remove extra local_irq_disable/enable Subsystem: mm/pagecache Jason Yan <yanaijie@huawei.com>: mm/truncate.c: make __invalidate_mapping_pages() static Subsystem: kthread Zqiang <qiang.zhang@windriver.com>: kthread_worker: prevent queuing delayed work from timer_fn when it is being canceled Subsystem: mm/oom-kill Charles Haithcock <chaithco@redhat.com>: mm, oom: keep oom_adj under or at upper limit when printing Subsystem: mm/pagemap Jason Gunthorpe <jgg@nvidia.com>: mm: always have io_remap_pfn_range() set pgprot_decrypted() Subsystem: epoll Soheil Hassas Yeganeh <soheil@google.com>: epoll: check ep_events_available() upon timeout epoll: add a selftest for epoll timeout race Subsystem: core-kernel Lukas Bulwahn <lukas.bulwahn@gmail.com>: kernel/hung_task.c: make type annotations consistent fs/eventpoll.c | 16 + fs/proc/base.c | 2 include/linux/mm.h | 9 include/linux/pgtable.h | 4 kernel/hung_task.c | 3 kernel/kthread.c | 3 kernel/signal.c | 19 - lib/crc32test.c | 4 lib/test_kasan.c | 149 +++++++--- mm/hugetlb.c | 20 - mm/memcontrol.c | 25 + mm/mempolicy.c | 6 mm/memremap.c | 39 +- mm/truncate.c | 2 tools/testing/selftests/filesystems/epoll/epoll_wakeup_test.c | 95 ++++++ 15 files changed, 290 insertions(+), 106 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-10-17 23:13 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-10-17 23:13 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 40 patches, based on 9d9af1007bc08971953ae915d88dc9bb21344b53. Subsystems affected by this patch series: ia64 mm/memcg mm/migration mm/pagemap mm/gup mm/madvise mm/vmalloc misc Subsystem: ia64 Krzysztof Kozlowski <krzk@kernel.org>: ia64: fix build error with !COREDUMP Subsystem: mm/memcg Roman Gushchin <guro@fb.com>: mm, memcg: rework remote charging API to support nesting Patch series "mm: kmem: kernel memory accounting in an interrupt context": mm: kmem: move memcg_kmem_bypass() calls to get_mem/obj_cgroup_from_current() mm: kmem: remove redundant checks from get_obj_cgroup_from_current() mm: kmem: prepare remote memcg charging infra for interrupt contexts mm: kmem: enable kernel memcg accounting from interrupt contexts Subsystem: mm/migration Joonsoo Kim <iamjoonsoo.kim@lge.com>: mm/memory-failure: remove a wrapper for alloc_migration_target() mm/memory_hotplug: remove a wrapper for alloc_migration_target() Miaohe Lin <linmiaohe@huawei.com>: mm/migrate: avoid possible unnecessary process right check in kernel_move_pages() Subsystem: mm/pagemap "Liam R. Howlett" <Liam.Howlett@Oracle.com>: mm/mmap: add inline vma_next() for readability of mmap code mm/mmap: add inline munmap_vma_range() for code readability Subsystem: mm/gup Jann Horn <jannh@google.com>: mm/gup_benchmark: take the mmap lock around GUP binfmt_elf: take the mmap lock around find_extend_vma() mm/gup: assert that the mmap lock is held in __get_user_pages() John Hubbard <jhubbard@nvidia.com>: Patch series "selftests/vm: gup_test, hmm-tests, assorted improvements", v2: mm/gup_benchmark: rename to mm/gup_test selftests/vm: use a common gup_test.h selftests/vm: rename run_vmtests --> run_vmtests.sh selftests/vm: minor cleanup: Makefile and gup_test.c selftests/vm: only some gup_test items are really benchmarks selftests/vm: gup_test: introduce the dump_pages() sub-test selftests/vm: run_vmtests.sh: update and clean up gup_test invocation selftests/vm: hmm-tests: remove the libhugetlbfs dependency selftests/vm: 10x speedup for hmm-tests Subsystem: mm/madvise Minchan Kim <minchan@kernel.org>: Patch series "introduce memory hinting API for external process", v9: mm/madvise: pass mm to do_madvise pid: move pidfd_get_pid() to pid.c mm/madvise: introduce process_madvise() syscall: an external memory hinting API Subsystem: mm/vmalloc "Matthew Wilcox (Oracle)" <willy@infradead.org>: Patch series "remove alloc_vm_area", v4: mm: update the documentation for vfree Christoph Hellwig <hch@lst.de>: mm: add a VM_MAP_PUT_PAGES flag for vmap mm: add a vmap_pfn function mm: allow a NULL fn callback in apply_to_page_range zsmalloc: switch from alloc_vm_area to get_vm_area drm/i915: use vmap in shmem_pin_map drm/i915: stop using kmap in i915_gem_object_map drm/i915: use vmap in i915_gem_object_map xen/xenbus: use apply_to_page_range directly in xenbus_map_ring_pv x86/xen: open code alloc_vm_area in arch_gnttab_valloc mm: remove alloc_vm_area Patch series "two small vmalloc cleanups": mm: cleanup the gfp_mask handling in __vmalloc_area_node mm: remove the filename in the top of file comment in vmalloc.c Subsystem: misc Tian Tao <tiantao6@hisilicon.com>: mm: remove duplicate include statement in mmu.c Documentation/core-api/pin_user_pages.rst | 8 arch/alpha/kernel/syscalls/syscall.tbl | 1 arch/arm/mm/mmu.c | 1 arch/arm/tools/syscall.tbl | 1 arch/arm64/include/asm/unistd.h | 2 arch/arm64/include/asm/unistd32.h | 2 arch/ia64/kernel/Makefile | 2 arch/ia64/kernel/syscalls/syscall.tbl | 1 arch/m68k/kernel/syscalls/syscall.tbl | 1 arch/microblaze/kernel/syscalls/syscall.tbl | 1 arch/mips/kernel/syscalls/syscall_n32.tbl | 1 arch/mips/kernel/syscalls/syscall_n64.tbl | 1 arch/mips/kernel/syscalls/syscall_o32.tbl | 1 arch/parisc/kernel/syscalls/syscall.tbl | 1 arch/powerpc/kernel/syscalls/syscall.tbl | 1 arch/s390/configs/debug_defconfig | 2 arch/s390/configs/defconfig | 2 arch/s390/kernel/syscalls/syscall.tbl | 1 arch/sh/kernel/syscalls/syscall.tbl | 1 arch/sparc/kernel/syscalls/syscall.tbl | 1 arch/x86/entry/syscalls/syscall_32.tbl | 1 arch/x86/entry/syscalls/syscall_64.tbl | 1 arch/x86/xen/grant-table.c | 27 +- arch/xtensa/kernel/syscalls/syscall.tbl | 1 drivers/gpu/drm/i915/Kconfig | 1 drivers/gpu/drm/i915/gem/i915_gem_pages.c | 136 ++++------ drivers/gpu/drm/i915/gt/shmem_utils.c | 78 +----- drivers/xen/xenbus/xenbus_client.c | 30 +- fs/binfmt_elf.c | 3 fs/buffer.c | 6 fs/io_uring.c | 2 fs/notify/fanotify/fanotify.c | 5 fs/notify/inotify/inotify_fsnotify.c | 5 include/linux/memcontrol.h | 12 include/linux/mm.h | 2 include/linux/pid.h | 1 include/linux/sched/mm.h | 43 +-- include/linux/syscalls.h | 2 include/linux/vmalloc.h | 7 include/uapi/asm-generic/unistd.h | 4 kernel/exit.c | 19 - kernel/pid.c | 19 + kernel/sys_ni.c | 1 mm/Kconfig | 24 + mm/Makefile | 2 mm/gup.c | 2 mm/gup_benchmark.c | 225 ------------------ mm/gup_test.c | 295 +++++++++++++++++++++-- mm/gup_test.h | 40 ++- mm/madvise.c | 125 ++++++++-- mm/memcontrol.c | 83 ++++-- mm/memory-failure.c | 18 - mm/memory.c | 16 - mm/memory_hotplug.c | 46 +-- mm/migrate.c | 71 +++-- mm/mmap.c | 74 ++++- mm/nommu.c | 7 mm/percpu.c | 3 mm/slab.h | 3 mm/vmalloc.c | 147 +++++------ mm/zsmalloc.c | 10 tools/testing/selftests/vm/.gitignore | 3 tools/testing/selftests/vm/Makefile | 40 ++- tools/testing/selftests/vm/check_config.sh | 31 ++ tools/testing/selftests/vm/config | 2 tools/testing/selftests/vm/gup_benchmark.c | 143 ----------- tools/testing/selftests/vm/gup_test.c | 260 ++++++++++++++++++-- tools/testing/selftests/vm/hmm-tests.c | 12 tools/testing/selftests/vm/run_vmtests | 334 -------------------------- tools/testing/selftests/vm/run_vmtests.sh | 350 +++++++++++++++++++++++++++- 70 files changed, 1580 insertions(+), 1224 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-10-16 2:40 Andrew Morton 2020-10-16 3:03 ` incoming Andrew Morton 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2020-10-16 2:40 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm - most of the rest of mm/ - various other subsystems 156 patches, based on 578a7155c5a1894a789d4ece181abf9d25dc6b0d. Subsystems affected by this patch series: mm/dax mm/debug mm/thp mm/readahead mm/page-poison mm/util mm/memory-hotplug mm/zram mm/cleanups misc core-kernel get_maintainer MAINTAINERS lib bitops checkpatch binfmt ramfs autofs nilfs rapidio panic relay kgdb ubsan romfs fault-injection Subsystem: mm/dax Dan Williams <dan.j.williams@intel.com>: device-dax/kmem: fix resource release Subsystem: mm/debug "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>: Patch series "mm/debug_vm_pgtable fixes", v4: powerpc/mm: add DEBUG_VM WARN for pmd_clear powerpc/mm: move setting pte specific flags to pfn_pte mm/debug_vm_pgtable/ppc64: avoid setting top bits in radom value mm/debug_vm_pgtables/hugevmap: use the arch helper to identify huge vmap support. mm/debug_vm_pgtable/savedwrite: enable savedwrite test with CONFIG_NUMA_BALANCING mm/debug_vm_pgtable/THP: mark the pte entry huge before using set_pmd/pud_at mm/debug_vm_pgtable/set_pte/pmd/pud: don't use set_*_at to update an existing pte entry mm/debug_vm_pgtable/locks: move non page table modifying test together mm/debug_vm_pgtable/locks: take correct page table lock mm/debug_vm_pgtable/thp: use page table depost/withdraw with THP mm/debug_vm_pgtable/pmd_clear: don't use pmd/pud_clear on pte entries mm/debug_vm_pgtable/hugetlb: disable hugetlb test on ppc64 mm/debug_vm_pgtable: avoid none pte in pte_clear_test mm/debug_vm_pgtable: avoid doing memory allocation with pgtable_t mapped. Subsystem: mm/thp "Matthew Wilcox (Oracle)" <willy@infradead.org>: Patch series "Fix read-only THP for non-tmpfs filesystems": XArray: add xa_get_order XArray: add xas_split mm/filemap: fix storing to a THP shadow entry Patch series "Remove assumptions of THP size": mm/filemap: fix page cache removal for arbitrary sized THPs mm/memory: remove page fault assumption of compound page size mm/page_owner: change split_page_owner to take a count "Kirill A. Shutemov" <kirill@shutemov.name>: mm/huge_memory: fix total_mapcount assumption of page size mm/huge_memory: fix split assumption of page size "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm/huge_memory: fix page_trans_huge_mapcount assumption of THP size mm/huge_memory: fix can_split_huge_page assumption of THP size mm/rmap: fix assumptions of THP size mm/truncate: fix truncation for pages of arbitrary size mm/page-writeback: support tail pages in wait_for_stable_page mm/vmscan: allow arbitrary sized pages to be paged out fs: add a filesystem flag for THPs fs: do not update nr_thps for mappings which support THPs Huang Ying <ying.huang@intel.com>: mm: fix a race during THP splitting Subsystem: mm/readahead "Matthew Wilcox (Oracle)" <willy@infradead.org>: Patch series "Readahead patches for 5.9/5.10": mm/readahead: add DEFINE_READAHEAD mm/readahead: make page_cache_ra_unbounded take a readahead_control mm/readahead: make do_page_cache_ra take a readahead_control David Howells <dhowells@redhat.com>: mm/readahead: make ondemand_readahead take a readahead_control mm/readahead: pass readahead_control to force_page_cache_ra "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm/readahead: add page_cache_sync_ra and page_cache_async_ra David Howells <dhowells@redhat.com>: mm/filemap: fold ra_submit into do_sync_mmap_readahead mm/readahead: pass a file_ra_state into force_page_cache_ra Subsystem: mm/page-poison Naoya Horiguchi <naoya.horiguchi@nec.com>: Patch series "HWPOISON: soft offline rework", v7: mm,hwpoison: cleanup unused PageHuge() check mm, hwpoison: remove recalculating hpage mm,hwpoison-inject: don't pin for hwpoison_filter Oscar Salvador <osalvador@suse.de>: mm,hwpoison: unexport get_hwpoison_page and make it static mm,hwpoison: refactor madvise_inject_error mm,hwpoison: kill put_hwpoison_page mm,hwpoison: unify THP handling for hard and soft offline mm,hwpoison: rework soft offline for free pages mm,hwpoison: rework soft offline for in-use pages mm,hwpoison: refactor soft_offline_huge_page and __soft_offline_page mm,hwpoison: return 0 if the page is already poisoned in soft-offline Naoya Horiguchi <naoya.horiguchi@nec.com>: mm,hwpoison: introduce MF_MSG_UNSPLIT_THP mm,hwpoison: double-check page count in __get_any_page() Oscar Salvador <osalvador@suse.de>: mm,hwpoison: try to narrow window race for free pages Mateusz Nosek <mateusznosek0@gmail.com>: mm/page_poison.c: replace bool variable with static key Miaohe Lin <linmiaohe@huawei.com>: mm/vmstat.c: use helper macro abs() Subsystem: mm/util Bartosz Golaszewski <bgolaszewski@baylibre.com>: mm/util.c: update the kerneldoc for kstrdup_const() Jann Horn <jannh@google.com>: mm/mmu_notifier: fix mmget() assert in __mmu_interval_notifier_insert Subsystem: mm/memory-hotplug David Hildenbrand <david@redhat.com>: Patch series "mm/memory_hotplug: online_pages()/offline_pages() cleanups", v2: mm/memory_hotplug: inline __offline_pages() into offline_pages() mm/memory_hotplug: enforce section granularity when onlining/offlining mm/memory_hotplug: simplify page offlining mm/page_alloc: simplify __offline_isolated_pages() mm/memory_hotplug: drop nr_isolate_pageblock in offline_pages() mm/page_isolation: simplify return value of start_isolate_page_range() mm/memory_hotplug: simplify page onlining mm/page_alloc: drop stale pageblock comment in memmap_init_zone*() mm: pass migratetype into memmap_init_zone() and move_pfn_range_to_zone() mm/memory_hotplug: mark pageblocks MIGRATE_ISOLATE while onlining memory Patch series "selective merging of system ram resources", v4: kernel/resource: make release_mem_region_adjustable() never fail kernel/resource: move and rename IORESOURCE_MEM_DRIVER_MANAGED mm/memory_hotplug: guard more declarations by CONFIG_MEMORY_HOTPLUG mm/memory_hotplug: prepare passing flags to add_memory() and friends mm/memory_hotplug: MEMHP_MERGE_RESOURCE to specify merging of System RAM resources virtio-mem: try to merge system ram resources xen/balloon: try to merge system ram resources hv_balloon: try to merge system ram resources kernel/resource: make iomem_resource implicit in release_mem_region_adjustable() Laurent Dufour <ldufour@linux.ibm.com>: mm: don't panic when links can't be created in sysfs David Hildenbrand <david@redhat.com>: Patch series "mm: place pages to the freelist tail when onlining and undoing isolation", v2: mm/page_alloc: convert "report" flag of __free_one_page() to a proper flag mm/page_alloc: place pages to tail in __putback_isolated_page() mm/page_alloc: move pages to tail in move_to_free_list() mm/page_alloc: place pages to tail in __free_pages_core() mm/memory_hotplug: update comment regarding zone shuffling Subsystem: mm/zram Douglas Anderson <dianders@chromium.org>: zram: failing to decompress is WARN_ON worthy Subsystem: mm/cleanups YueHaibing <yuehaibing@huawei.com>: mm/slab.h: remove duplicate include Wei Yang <richard.weiyang@linux.alibaba.com>: mm/page_reporting.c: drop stale list head check in page_reporting_cycle Ira Weiny <ira.weiny@intel.com>: mm/highmem.c: clean up endif comments Yu Zhao <yuzhao@google.com>: mm: use self-explanatory macros rather than "2" Miaohe Lin <linmiaohe@huawei.com>: mm: fix some broken comments Chen Tao <chentao3@hotmail.com>: mm: fix some comments formatting Xiaofei Tan <tanxiaofei@huawei.com>: mm/workingset.c: fix some doc warnings Miaohe Lin <linmiaohe@huawei.com>: mm: use helper function put_write_access() Mike Rapoport <rppt@linux.ibm.com>: include/linux/mmzone.h: remove unused early_pfn_valid() "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm: rename page_order() to buddy_order() Subsystem: misc Randy Dunlap <rdunlap@infradead.org>: fs: configfs: delete repeated words in comments Andy Shevchenko <andriy.shevchenko@linux.intel.com>: kernel.h: split out min()/max() et al. helpers Subsystem: core-kernel Liao Pingfang <liao.pingfang@zte.com.cn>: kernel/sys.c: replace do_brk with do_brk_flags in comment of prctl_set_mm_map() Randy Dunlap <rdunlap@infradead.org>: kernel/: fix repeated words in comments kernel: acct.c: fix some kernel-doc nits Subsystem: get_maintainer Joe Perches <joe@perches.com>: get_maintainer: add test for file in VCS Subsystem: MAINTAINERS Joe Perches <joe@perches.com>: get_maintainer: exclude MAINTAINERS file(s) from --git-fallback Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>: MAINTAINERS: jarkko.sakkinen@linux.intel.com -> jarkko@kernel.org Subsystem: lib Randy Dunlap <rdunlap@infradead.org>: lib: bitmap: delete duplicated words lib: libcrc32c: delete duplicated words lib: decompress_bunzip2: delete duplicated words lib: dynamic_queue_limits: delete duplicated words + fix typo lib: earlycpio: delete duplicated words lib: radix-tree: delete duplicated words lib: syscall: delete duplicated words lib: test_sysctl: delete duplicated words lib/mpi/mpi-bit.c: fix spello of "functions" Stephen Boyd <swboyd@chromium.org>: lib/idr.c: document calling context for IDA APIs mustn't use locks lib/idr.c: document that ida_simple_{get,remove}() are deprecated Christophe JAILLET <christophe.jaillet@wanadoo.fr>: lib/scatterlist.c: avoid a double memset Miaohe Lin <linmiaohe@huawei.com>: lib/percpu_counter.c: use helper macro abs() Andy Shevchenko <andriy.shevchenko@linux.intel.com>: include/linux/list.h: add a macro to test if entry is pointing to the head Dan Carpenter <dan.carpenter@oracle.com>: lib/test_hmm.c: fix an error code in dmirror_allocate_chunk() Tobias Jordan <kernel@cdqe.de>: lib/crc32.c: fix trivial typo in preprocessor condition Subsystem: bitops Wei Yang <richard.weiyang@linux.alibaba.com>: bitops: simplify get_count_order_long() bitops: use the same mechanism for get_count_order[_long] Subsystem: checkpatch Jerome Forissier <jerome@forissier.org>: checkpatch: add --kconfig-prefix Joe Perches <joe@perches.com>: checkpatch: move repeated word test checkpatch: add test for comma use that should be semicolon Rikard Falkeborn <rikard.falkeborn@gmail.com>: const_structs.checkpatch: add phy_ops Nicolas Boichat <drinkcat@chromium.org>: checkpatch: warn if trace_printk and friends are called Rikard Falkeborn <rikard.falkeborn@gmail.com>: const_structs.checkpatch: add pinctrl_ops and pinmux_ops Joe Perches <joe@perches.com>: checkpatch: warn on self-assignments checkpatch: allow not using -f with files that are in git Dwaipayan Ray <dwaipayanray1@gmail.com>: checkpatch: extend author Signed-off-by check for split From: header Joe Perches <joe@perches.com>: checkpatch: emit a warning on embedded filenames Dwaipayan Ray <dwaipayanray1@gmail.com>: checkpatch: fix multi-statement macro checks for while blocks. Łukasz Stelmach <l.stelmach@samsung.com>: checkpatch: fix false positive on empty block comment lines Dwaipayan Ray <dwaipayanray1@gmail.com>: checkpatch: add new warnings to author signoff checks. Subsystem: binfmt Chris Kennelly <ckennelly@google.com>: Patch series "Selecting Load Addresses According to p_align", v3: fs/binfmt_elf: use PT_LOAD p_align values for suitable start address tools/testing/selftests: add self-test for verifying load alignment Jann Horn <jannh@google.com>: Patch series "Fix ELF / FDPIC ELF core dumping, and use mmap_lock properly in there", v5: binfmt_elf_fdpic: stop using dump_emit() on user pointers on !MMU coredump: let dump_emit() bail out on short writes coredump: refactor page range dumping into common helper coredump: rework elf/elf_fdpic vma_dump_size() into common helper binfmt_elf, binfmt_elf_fdpic: use a VMA list snapshot mm/gup: take mmap_lock in get_dump_page() mm: remove the now-unnecessary mmget_still_valid() hack Subsystem: ramfs Matthew Wilcox (Oracle) <willy@infradead.org>: ramfs: fix nommu mmap with gaps in the page cache Subsystem: autofs Matthew Wilcox <willy@infradead.org>: autofs: harden ioctl table Subsystem: nilfs Wang Hai <wanghai38@huawei.com>: nilfs2: fix some kernel-doc warnings for nilfs2 Subsystem: rapidio Souptick Joarder <jrdr.linux@gmail.com>: rapidio: fix error handling path Jing Xiangfeng <jingxiangfeng@huawei.com>: rapidio: fix the missed put_device() for rio_mport_add_riodev Subsystem: panic Alexey Kardashevskiy <aik@ozlabs.ru>: panic: dump registers on panic_on_warn Subsystem: relay Sudip Mukherjee <sudipm.mukherjee@gmail.com>: kernel/relay.c: drop unneeded initialization Subsystem: kgdb Ritesh Harjani <riteshh@linux.ibm.com>: scripts/gdb/proc: add struct mount & struct super_block addr in lx-mounts command scripts/gdb/tasks: add headers and improve spacing format Subsystem: ubsan Elena Petrova <lenaptr@google.com>: sched.h: drop in_ubsan field when UBSAN is in trap mode George Popescu <georgepope@android.com>: ubsan: introduce CONFIG_UBSAN_LOCAL_BOUNDS for Clang Subsystem: romfs Libing Zhou <libing.zhou@nokia-sbell.com>: ROMFS: support inode blocks calculation Subsystem: fault-injection Albert van der Linde <alinde@google.com>: Patch series "add fault injection to user memory access", v3: lib, include/linux: add usercopy failure capability lib, uaccess: add failure injection to usercopy functions .mailmap | 1 Documentation/admin-guide/kernel-parameters.txt | 1 Documentation/core-api/xarray.rst | 14 Documentation/fault-injection/fault-injection.rst | 7 MAINTAINERS | 6 arch/ia64/mm/init.c | 4 arch/powerpc/include/asm/book3s/64/pgtable.h | 29 + arch/powerpc/include/asm/nohash/pgtable.h | 5 arch/powerpc/mm/pgtable.c | 5 arch/powerpc/platforms/powernv/memtrace.c | 2 arch/powerpc/platforms/pseries/hotplug-memory.c | 2 drivers/acpi/acpi_memhotplug.c | 3 drivers/base/memory.c | 3 drivers/base/node.c | 33 +- drivers/block/zram/zram_drv.c | 2 drivers/dax/kmem.c | 50 ++- drivers/hv/hv_balloon.c | 4 drivers/infiniband/core/uverbs_main.c | 3 drivers/rapidio/devices/rio_mport_cdev.c | 18 - drivers/s390/char/sclp_cmd.c | 2 drivers/vfio/pci/vfio_pci.c | 38 +- drivers/virtio/virtio_mem.c | 5 drivers/xen/balloon.c | 4 fs/autofs/dev-ioctl.c | 8 fs/binfmt_elf.c | 267 +++------------- fs/binfmt_elf_fdpic.c | 176 ++-------- fs/configfs/dir.c | 2 fs/configfs/file.c | 2 fs/coredump.c | 238 +++++++++++++- fs/ext4/verity.c | 4 fs/f2fs/verity.c | 4 fs/inode.c | 2 fs/nilfs2/bmap.c | 2 fs/nilfs2/cpfile.c | 6 fs/nilfs2/page.c | 1 fs/nilfs2/sufile.c | 4 fs/proc/task_mmu.c | 18 - fs/ramfs/file-nommu.c | 2 fs/romfs/super.c | 1 fs/userfaultfd.c | 28 - include/linux/bitops.h | 13 include/linux/blkdev.h | 1 include/linux/bvec.h | 6 include/linux/coredump.h | 13 include/linux/fault-inject-usercopy.h | 22 + include/linux/fs.h | 28 - include/linux/idr.h | 13 include/linux/ioport.h | 15 include/linux/jiffies.h | 3 include/linux/kernel.h | 150 --------- include/linux/list.h | 29 + include/linux/memory_hotplug.h | 42 +- include/linux/minmax.h | 153 +++++++++ include/linux/mm.h | 5 include/linux/mmzone.h | 17 - include/linux/node.h | 16 include/linux/nodemask.h | 2 include/linux/page-flags.h | 6 include/linux/page_owner.h | 6 include/linux/pagemap.h | 111 ++++++ include/linux/sched.h | 2 include/linux/sched/mm.h | 25 - include/linux/uaccess.h | 12 include/linux/vmstat.h | 2 include/linux/xarray.h | 22 + include/ras/ras_event.h | 3 kernel/acct.c | 10 kernel/cgroup/cpuset.c | 2 kernel/dma/direct.c | 2 kernel/fork.c | 4 kernel/futex.c | 2 kernel/irq/timings.c | 2 kernel/jump_label.c | 2 kernel/kcsan/encoding.h | 2 kernel/kexec_core.c | 2 kernel/kexec_file.c | 2 kernel/kthread.c | 2 kernel/livepatch/state.c | 2 kernel/panic.c | 12 kernel/pid_namespace.c | 2 kernel/power/snapshot.c | 2 kernel/range.c | 3 kernel/relay.c | 2 kernel/resource.c | 114 +++++-- kernel/smp.c | 2 kernel/sys.c | 2 kernel/user_namespace.c | 2 lib/Kconfig.debug | 7 lib/Kconfig.ubsan | 14 lib/Makefile | 1 lib/bitmap.c | 2 lib/crc32.c | 2 lib/decompress_bunzip2.c | 2 lib/dynamic_queue_limits.c | 4 lib/earlycpio.c | 2 lib/fault-inject-usercopy.c | 39 ++ lib/find_bit.c | 1 lib/hexdump.c | 1 lib/idr.c | 9 lib/iov_iter.c | 5 lib/libcrc32c.c | 2 lib/math/rational.c | 2 lib/math/reciprocal_div.c | 1 lib/mpi/mpi-bit.c | 2 lib/percpu_counter.c | 2 lib/radix-tree.c | 2 lib/scatterlist.c | 2 lib/strncpy_from_user.c | 3 lib/syscall.c | 2 lib/test_hmm.c | 2 lib/test_sysctl.c | 2 lib/test_xarray.c | 65 ++++ lib/usercopy.c | 5 lib/xarray.c | 208 ++++++++++++ mm/Kconfig | 2 mm/compaction.c | 6 mm/debug_vm_pgtable.c | 267 ++++++++-------- mm/filemap.c | 58 ++- mm/gup.c | 73 ++-- mm/highmem.c | 4 mm/huge_memory.c | 47 +- mm/hwpoison-inject.c | 18 - mm/internal.h | 47 +- mm/khugepaged.c | 2 mm/madvise.c | 52 --- mm/memory-failure.c | 357 ++++++++++------------ mm/memory.c | 7 mm/memory_hotplug.c | 223 +++++-------- mm/memremap.c | 3 mm/migrate.c | 11 mm/mmap.c | 7 mm/mmu_notifier.c | 2 mm/page-writeback.c | 1 mm/page_alloc.c | 289 +++++++++++------ mm/page_isolation.c | 16 mm/page_owner.c | 10 mm/page_poison.c | 20 - mm/page_reporting.c | 4 mm/readahead.c | 174 ++++------ mm/rmap.c | 10 mm/shmem.c | 2 mm/shuffle.c | 2 mm/slab.c | 2 mm/slab.h | 1 mm/slub.c | 2 mm/sparse.c | 2 mm/swap_state.c | 2 mm/truncate.c | 6 mm/util.c | 3 mm/vmscan.c | 5 mm/vmstat.c | 8 mm/workingset.c | 2 scripts/Makefile.ubsan | 10 scripts/checkpatch.pl | 238 ++++++++++---- scripts/const_structs.checkpatch | 3 scripts/gdb/linux/proc.py | 15 scripts/gdb/linux/tasks.py | 9 scripts/get_maintainer.pl | 9 tools/testing/selftests/exec/.gitignore | 1 tools/testing/selftests/exec/Makefile | 9 tools/testing/selftests/exec/load_address.c | 68 ++++ 161 files changed, 2532 insertions(+), 1864 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-10-16 2:40 incoming Andrew Morton @ 2020-10-16 3:03 ` Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-10-16 3:03 UTC (permalink / raw) To: Linus Torvalds, mm-commits, linux-mm And... I forgot to set in-reply-to :( Shall resend, omitting linux-mm. ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-10-13 23:46 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-10-13 23:46 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 181 patches, based on 029f56db6ac248769f2c260bfaf3c3c0e23e904c. Subsystems affected by this patch series: kbuild scripts ntfs ocfs2 vfs mm/slab mm/slub mm/kmemleak mm/dax mm/debug mm/pagecache mm/fadvise mm/gup mm/swap mm/memremap mm/memcg mm/selftests mm/pagemap mm/mincore mm/hmm mm/dma mm/memory-failure mm/vmalloc mm/documentation mm/kasan mm/pagealloc mm/hugetlb mm/vmscan mm/z3fold mm/zbud mm/compaction mm/mempolicy mm/mempool mm/memblock mm/oom-kill mm/migration Subsystem: kbuild Nick Desaulniers <ndesaulniers@google.com>: Patch series "set clang minimum version to 10.0.1", v3: compiler-clang: add build check for clang 10.0.1 Revert "kbuild: disable clang's default use of -fmerge-all-constants" Revert "arm64: bti: Require clang >= 10.0.1 for in-kernel BTI support" Revert "arm64: vdso: Fix compilation with clang older than 8" Partially revert "ARM: 8905/1: Emit __gnu_mcount_nc when using Clang 10.0.0 or newer" Marco Elver <elver@google.com>: kasan: remove mentions of unsupported Clang versions Nick Desaulniers <ndesaulniers@google.com>: compiler-gcc: improve version error compiler.h: avoid escaped section names export.h: fix section name for CONFIG_TRIM_UNUSED_KSYMS for Clang Lukas Bulwahn <lukas.bulwahn@gmail.com>: kbuild: doc: describe proper script invocation Subsystem: scripts Wang Qing <wangqing@vivo.com>: scripts/spelling.txt: increase error-prone spell checking Naoki Hayama <naoki.hayama@lineo.co.jp>: scripts/spelling.txt: add "arbitrary" typo Borislav Petkov <bp@suse.de>: scripts/decodecode: add the capability to supply the program counter Subsystem: ntfs Rustam Kovhaev <rkovhaev@gmail.com>: ntfs: add check for mft record size in superblock Subsystem: ocfs2 Randy Dunlap <rdunlap@infradead.org>: ocfs2: delete repeated words in comments Gang He <ghe@suse.com>: ocfs2: fix potential soft lockup during fstrim Subsystem: vfs Randy Dunlap <rdunlap@infradead.org>: fs/xattr.c: fix kernel-doc warnings for setxattr & removexattr Luo Jiaxing <luojiaxing@huawei.com>: fs_parse: mark fs_param_bad_value() as static Subsystem: mm/slab Mateusz Nosek <mateusznosek0@gmail.com>: mm/slab.c: clean code by removing redundant if condition tangjianqiang <wyqt1985@gmail.com>: include/linux/slab.h: fix a typo error in comment Subsystem: mm/slub Abel Wu <wuyun.wu@huawei.com>: mm/slub.c: branch optimization in free slowpath mm/slub: fix missing ALLOC_SLOWPATH stat when bulk alloc mm/slub: make add_full() condition more explicit Subsystem: mm/kmemleak Davidlohr Bueso <dave@stgolabs.net>: mm/kmemleak: rely on rcu for task stack scanning Hui Su <sh_def@163.com>: mm,kmemleak-test.c: move kmemleak-test.c to samples dir Subsystem: mm/dax Dan Williams <dan.j.williams@intel.com>: Patch series "device-dax: Support sub-dividing soft-reserved ranges", v5: x86/numa: cleanup configuration dependent command-line options x86/numa: add 'nohmat' option efi/fake_mem: arrange for a resource entry per efi_fake_mem instance ACPI: HMAT: refactor hmat_register_target_device to hmem_register_device resource: report parent to walk_iomem_res_desc() callback mm/memory_hotplug: introduce default phys_to_target_node() implementation ACPI: HMAT: attach a device for each soft-reserved range device-dax: drop the dax_region.pfn_flags attribute device-dax: move instance creation parameters to 'struct dev_dax_data' device-dax: make pgmap optional for instance creation device-dax/kmem: introduce dax_kmem_range() device-dax/kmem: move resource name tracking to drvdata device-dax/kmem: replace release_resource() with release_mem_region() device-dax: add an allocation interface for device-dax instances device-dax: introduce 'struct dev_dax' typed-driver operations device-dax: introduce 'seed' devices drivers/base: make device_find_child_by_name() compatible with sysfs inputs device-dax: add resize support mm/memremap_pages: convert to 'struct range' mm/memremap_pages: support multiple ranges per invocation device-dax: add dis-contiguous resource support device-dax: introduce 'mapping' devices Joao Martins <joao.m.martins@oracle.com>: device-dax: make align a per-device property Dan Williams <dan.j.williams@intel.com>: device-dax: add an 'align' attribute Joao Martins <joao.m.martins@oracle.com>: dax/hmem: introduce dax_hmem.region_idle parameter device-dax: add a range mapping allocation attribute Subsystem: mm/debug "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm/debug.c: do not dereference i_ino blindly John Hubbard <jhubbard@nvidia.com>: mm, dump_page: rename head_mapcount() --> head_compound_mapcount() Subsystem: mm/pagecache "Matthew Wilcox (Oracle)" <willy@infradead.org>: Patch series "Return head pages from find_*_entry", v2: mm: factor find_get_incore_page out of mincore_page mm: use find_get_incore_page in memcontrol mm: optimise madvise WILLNEED proc: optimise smaps for shmem entries i915: use find_lock_page instead of find_lock_entry mm: convert find_get_entry to return the head page mm/shmem: return head page from find_lock_entry mm: add find_lock_head mm/filemap: fix filemap_map_pages for THP Subsystem: mm/fadvise Yafang Shao <laoar.shao@gmail.com>: mm, fadvise: improve the expensive remote LRU cache draining after FADV_DONTNEED Subsystem: mm/gup Barry Song <song.bao.hua@hisilicon.com>: mm/gup_benchmark: update the documentation in Kconfig mm/gup_benchmark: use pin_user_pages for FOLL_LONGTERM flag mm/gup: don't permit users to call get_user_pages with FOLL_LONGTERM John Hubbard <jhubbard@nvidia.com>: mm/gup: protect unpin_user_pages() against npages==-ERRNO Subsystem: mm/swap Gao Xiang <hsiangkao@redhat.com>: swap: rename SWP_FS to SWAP_FS_OPS to avoid ambiguity Yu Zhao <yuzhao@google.com>: mm: remove activate_page() from unuse_pte() mm: remove superfluous __ClearPageActive() Miaohe Lin <linmiaohe@huawei.com>: mm/swap.c: fix confusing comment in release_pages() mm/swap_slots.c: remove always zero and unused return value of enable_swap_slots_cache() mm/page_io.c: remove useless out label in __swap_writepage() mm/swap.c: fix incomplete comment in lru_cache_add_inactive_or_unevictable() mm/swapfile.c: remove unnecessary goto out in _swap_info_get() mm/swapfile.c: fix potential memory leak in sys_swapon Subsystem: mm/memremap Ira Weiny <ira.weiny@intel.com>: mm/memremap.c: convert devmap static branch to {inc,dec} Subsystem: mm/memcg "Gustavo A. R. Silva" <gustavoars@kernel.org>: mm: memcontrol: use flex_array_size() helper in memcpy() mm: memcontrol: use the preferred form for passing the size of a structure type Roman Gushchin <guro@fb.com>: mm: memcg/slab: fix racy access to page->mem_cgroup in mem_cgroup_from_obj() Miaohe Lin <linmiaohe@huawei.com>: mm: memcontrol: correct the comment of mem_cgroup_iter() Waiman Long <longman@redhat.com>: Patch series "mm/memcg: Miscellaneous cleanups and streamlining", v2: mm/memcg: clean up obsolete enum charge_type mm/memcg: simplify mem_cgroup_get_max() mm/memcg: unify swap and memsw page counters Muchun Song <songmuchun@bytedance.com>: mm: memcontrol: add the missing numa_stat interface for cgroup v2 Miaohe Lin <linmiaohe@huawei.com>: mm/page_counter: correct the obsolete func name in the comment of page_counter_try_charge() mm: memcontrol: reword obsolete comment of mem_cgroup_unmark_under_oom() Bharata B Rao <bharata@linux.ibm.com>: mm: memcg/slab: uncharge during kmem_cache_free_bulk() Ralph Campbell <rcampbell@nvidia.com>: mm/memcg: fix device private memcg accounting Subsystem: mm/selftests John Hubbard <jhubbard@nvidia.com>: Patch series "selftests/vm: fix some minor aggravating factors in the Makefile": selftests/vm: fix false build success on the second and later attempts selftests/vm: fix incorrect gcc invocation in some cases Subsystem: mm/pagemap Matthew Wilcox <willy@infradead.org>: mm: account PMD tables like PTE tables Yanfei Xu <yanfei.xu@windriver.com>: mm/memory.c: fix typo in __do_fault() comment mm/memory.c: replace vmf->vma with variable vma Wei Yang <richard.weiyang@linux.alibaba.com>: mm/mmap: rename __vma_unlink_common() to __vma_unlink() mm/mmap: leverage vma_rb_erase_ignore() to implement vma_rb_erase() Chinwen Chang <chinwen.chang@mediatek.com>: Patch series "Try to release mmap_lock temporarily in smaps_rollup", v4: mmap locking API: add mmap_lock_is_contended() mm: smaps*: extend smap_gather_stats to support specified beginning mm: proc: smaps_rollup: do not stall write attempts on mmap_lock "Matthew Wilcox (Oracle)" <willy@infradead.org>: Patch series "Fix PageDoubleMap": mm: move PageDoubleMap bit mm: simplify PageDoubleMap with PF_SECOND policy Wei Yang <richard.weiyang@linux.alibaba.com>: mm/mmap: leave adjust_next as virtual address instead of page frame number Randy Dunlap <rdunlap@infradead.org>: mm/memory.c: fix spello of "function" Wei Yang <richard.weiyang@linux.alibaba.com>: mm/mmap: not necessary to check mapping separately mm/mmap: check on file instead of the rb_root_cached of its address_space Miaohe Lin <linmiaohe@huawei.com>: mm: use helper function mapping_allow_writable() mm/mmap.c: use helper function allow_write_access() in __remove_shared_vm_struct() Liao Pingfang <liao.pingfang@zte.com.cn>: mm/mmap.c: replace do_brk with do_brk_flags in comment of insert_vm_struct() Peter Xu <peterx@redhat.com>: mm: remove src/dst mm parameter in copy_page_range() Subsystem: mm/mincore yuleixzhang <yulei.kernel@gmail.com>: include/linux/huge_mm.h: remove mincore_huge_pmd declaration Subsystem: mm/hmm Ralph Campbell <rcampbell@nvidia.com>: tools/testing/selftests/vm/hmm-tests.c: use the new SKIP() macro lib/test_hmm.c: remove unused dmirror_zero_page Subsystem: mm/dma Andy Shevchenko <andriy.shevchenko@linux.intel.com>: mm/dmapool.c: replace open-coded list_for_each_entry_safe() mm/dmapool.c: replace hard coded function name with __func__ Subsystem: mm/memory-failure Xianting Tian <tian.xianting@h3c.com>: mm/memory-failure: do pgoff calculation before for_each_process() Alex Shi <alex.shi@linux.alibaba.com>: mm/memory-failure.c: remove unused macro `writeback' Subsystem: mm/vmalloc Hui Su <sh_def@163.com>: mm/vmalloc.c: update the comment in __vmalloc_area_node() mm/vmalloc.c: fix the comment of find_vm_area Subsystem: mm/documentation Alexander Gordeev <agordeev@linux.ibm.com>: docs/vm: fix 'mm_count' vs 'mm_users' counter confusion Subsystem: mm/kasan Patricia Alfonso <trishalfonso@google.com>: Patch series "KASAN-KUnit Integration", v14: kasan/kunit: add KUnit Struct to Current Task KUnit: KASAN Integration KASAN: port KASAN Tests to KUnit KASAN: Testing Documentation David Gow <davidgow@google.com>: mm: kasan: do not panic if both panic_on_warn and kasan_multishot set Subsystem: mm/pagealloc David Hildenbrand <david@redhat.com>: Patch series "mm / virtio-mem: support ZONE_MOVABLE", v5: mm/page_alloc: tweak comments in has_unmovable_pages() mm/page_isolation: exit early when pageblock is isolated in set_migratetype_isolate() mm/page_isolation: drop WARN_ON_ONCE() in set_migratetype_isolate() mm/page_isolation: cleanup set_migratetype_isolate() virtio-mem: don't special-case ZONE_MOVABLE mm: document semantics of ZONE_MOVABLE Li Xinhai <lixinhai.lxh@gmail.com>: mm, isolation: avoid checking unmovable pages across pageblock boundary Mateusz Nosek <mateusznosek0@gmail.com>: mm/page_alloc.c: clean code by removing unnecessary initialization mm/page_alloc.c: micro-optimization remove unnecessary branch mm/page_alloc.c: fix early params garbage value accesses mm/page_alloc.c: clean code by merging two functions Yanfei Xu <yanfei.xu@windriver.com>: mm/page_alloc.c: __perform_reclaim should return 'unsigned long' Mateusz Nosek <mateusznosek0@gmail.com>: mmzone: clean code by removing unused macro parameter Ralph Campbell <rcampbell@nvidia.com>: mm: move call to compound_head() in release_pages() "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm/page_alloc.c: fix freeing non-compound pages Michal Hocko <mhocko@suse.com>: include/linux/gfp.h: clarify usage of GFP_ATOMIC in !preemptible contexts Subsystem: mm/hugetlb Baoquan He <bhe@redhat.com>: Patch series "mm/hugetlb: Small cleanup and improvement", v2: mm/hugetlb.c: make is_hugetlb_entry_hwpoisoned return bool mm/hugetlb.c: remove the unnecessary non_swap_entry() doc/vm: fix typo in the hugetlb admin documentation Wei Yang <richard.weiyang@linux.alibaba.com>: Patch series "mm/hugetlb: code refine and simplification", v4: mm/hugetlb: not necessary to coalesce regions recursively mm/hugetlb: remove VM_BUG_ON(!nrg) in get_file_region_entry_from_cache() mm/hugetlb: use list_splice to merge two list at once mm/hugetlb: count file_region to be added when regions_needed != NULL mm/hugetlb: a page from buddy is not on any list mm/hugetlb: narrow the hugetlb_lock protection area during preparing huge page mm/hugetlb: take the free hpage during the iteration directly Mike Kravetz <mike.kravetz@oracle.com>: hugetlb: add lockdep check for i_mmap_rwsem held in huge_pmd_share Subsystem: mm/vmscan Chunxin Zang <zangchunxin@bytedance.com>: mm/vmscan: fix infinite loop in drop_slab_node Hui Su <sh_def@163.com>: mm/vmscan: fix comments for isolate_lru_page() Subsystem: mm/z3fold Hui Su <sh_def@163.com>: mm/z3fold.c: use xx_zalloc instead xx_alloc and memset Subsystem: mm/zbud Xiang Chen <chenxiang66@hisilicon.com>: mm/zbud: remove redundant initialization Subsystem: mm/compaction Mateusz Nosek <mateusznosek0@gmail.com>: mm/compaction.c: micro-optimization remove unnecessary branch include/linux/compaction.h: clean code by removing unused enum value John Hubbard <jhubbard@nvidia.com>: selftests/vm: 8x compaction_test speedup Subsystem: mm/mempolicy Wei Yang <richard.weiyang@linux.alibaba.com>: mm/mempolicy: remove or narrow the lock on current mm: remove unused alloc_page_vma_node() Subsystem: mm/mempool Miaohe Lin <linmiaohe@huawei.com>: mm/mempool: add 'else' to split mutually exclusive case Subsystem: mm/memblock Mike Rapoport <rppt@linux.ibm.com>: Patch series "memblock: seasonal cleaning^w cleanup", v3: KVM: PPC: Book3S HV: simplify kvm_cma_reserve() dma-contiguous: simplify cma_early_percent_memory() arm, xtensa: simplify initialization of high memory pages arm64: numa: simplify dummy_numa_init() h8300, nds32, openrisc: simplify detection of memory extents riscv: drop unneeded node initialization mircoblaze: drop unneeded NUMA and sparsemem initializations memblock: make for_each_memblock_type() iterator private memblock: make memblock_debug and related functionality private memblock: reduce number of parameters in for_each_mem_range() arch, mm: replace for_each_memblock() with for_each_mem_pfn_range() arch, drivers: replace for_each_membock() with for_each_mem_range() x86/setup: simplify initrd relocation and reservation x86/setup: simplify reserve_crashkernel() memblock: remove unused memblock_mem_size() memblock: implement for_each_reserved_mem_region() using __next_mem_region() memblock: use separate iterators for memory and reserved regions Subsystem: mm/oom-kill Suren Baghdasaryan <surenb@google.com>: mm, oom_adj: don't loop through tasks in __set_oom_adj when not necessary Subsystem: mm/migration Ralph Campbell <rcampbell@nvidia.com>: mm/migrate: remove cpages-- in migrate_vma_finalize() mm/migrate: remove obsolete comment about device public .clang-format | 7 Documentation/admin-guide/cgroup-v2.rst | 69 + Documentation/admin-guide/mm/hugetlbpage.rst | 2 Documentation/dev-tools/kasan.rst | 74 + Documentation/dev-tools/kmemleak.rst | 2 Documentation/kbuild/makefiles.rst | 20 Documentation/vm/active_mm.rst | 2 Documentation/x86/x86_64/boot-options.rst | 4 MAINTAINERS | 2 Makefile | 9 arch/arm/Kconfig | 2 arch/arm/include/asm/tlb.h | 1 arch/arm/kernel/setup.c | 18 arch/arm/mm/init.c | 59 - arch/arm/mm/mmu.c | 39 arch/arm/mm/pmsa-v7.c | 23 arch/arm/mm/pmsa-v8.c | 17 arch/arm/xen/mm.c | 7 arch/arm64/Kconfig | 2 arch/arm64/kernel/machine_kexec_file.c | 6 arch/arm64/kernel/setup.c | 4 arch/arm64/kernel/vdso/Makefile | 7 arch/arm64/mm/init.c | 11 arch/arm64/mm/kasan_init.c | 10 arch/arm64/mm/mmu.c | 11 arch/arm64/mm/numa.c | 15 arch/c6x/kernel/setup.c | 9 arch/h8300/kernel/setup.c | 8 arch/microblaze/mm/init.c | 23 arch/mips/cavium-octeon/dma-octeon.c | 14 arch/mips/kernel/setup.c | 31 arch/mips/netlogic/xlp/setup.c | 2 arch/nds32/kernel/setup.c | 8 arch/openrisc/kernel/setup.c | 9 arch/openrisc/mm/init.c | 8 arch/powerpc/kernel/fadump.c | 61 - arch/powerpc/kexec/file_load_64.c | 16 arch/powerpc/kvm/book3s_hv_builtin.c | 12 arch/powerpc/kvm/book3s_hv_uvmem.c | 14 arch/powerpc/mm/book3s64/hash_utils.c | 16 arch/powerpc/mm/book3s64/radix_pgtable.c | 10 arch/powerpc/mm/kasan/kasan_init_32.c | 8 arch/powerpc/mm/mem.c | 31 arch/powerpc/mm/numa.c | 7 arch/powerpc/mm/pgtable_32.c | 8 arch/riscv/mm/init.c | 36 arch/riscv/mm/kasan_init.c | 10 arch/s390/kernel/setup.c | 27 arch/s390/mm/page-states.c | 6 arch/s390/mm/vmem.c | 7 arch/sh/mm/init.c | 9 arch/sparc/mm/init_64.c | 12 arch/x86/include/asm/numa.h | 8 arch/x86/kernel/e820.c | 16 arch/x86/kernel/setup.c | 56 - arch/x86/mm/numa.c | 13 arch/x86/mm/numa_emulation.c | 3 arch/x86/xen/enlighten_pv.c | 2 arch/xtensa/mm/init.c | 55 - drivers/acpi/numa/hmat.c | 76 - drivers/acpi/numa/srat.c | 9 drivers/base/core.c | 2 drivers/bus/mvebu-mbus.c | 12 drivers/dax/Kconfig | 6 drivers/dax/Makefile | 3 drivers/dax/bus.c | 1237 +++++++++++++++++++++++---- drivers/dax/bus.h | 34 drivers/dax/dax-private.h | 74 + drivers/dax/device.c | 164 +-- drivers/dax/hmem.c | 56 - drivers/dax/hmem/Makefile | 8 drivers/dax/hmem/device.c | 100 ++ drivers/dax/hmem/hmem.c | 93 +- drivers/dax/kmem.c | 236 ++--- drivers/dax/pmem/compat.c | 2 drivers/dax/pmem/core.c | 36 drivers/firmware/efi/x86_fake_mem.c | 12 drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 4 drivers/gpu/drm/nouveau/nouveau_dmem.c | 15 drivers/irqchip/irq-gic-v3-its.c | 2 drivers/nvdimm/badrange.c | 26 drivers/nvdimm/claim.c | 13 drivers/nvdimm/nd.h | 3 drivers/nvdimm/pfn_devs.c | 13 drivers/nvdimm/pmem.c | 27 drivers/nvdimm/region.c | 21 drivers/pci/p2pdma.c | 12 drivers/virtio/virtio_mem.c | 47 - drivers/xen/unpopulated-alloc.c | 45 fs/fs_parser.c | 2 fs/ntfs/inode.c | 6 fs/ocfs2/alloc.c | 6 fs/ocfs2/localalloc.c | 2 fs/proc/base.c | 3 fs/proc/task_mmu.c | 104 +- fs/xattr.c | 22 include/acpi/acpi_numa.h | 14 include/kunit/test.h | 5 include/linux/acpi.h | 2 include/linux/compaction.h | 3 include/linux/compiler-clang.h | 8 include/linux/compiler-gcc.h | 2 include/linux/compiler.h | 2 include/linux/dax.h | 8 include/linux/export.h | 2 include/linux/fs.h | 4 include/linux/gfp.h | 6 include/linux/huge_mm.h | 3 include/linux/kasan.h | 6 include/linux/memblock.h | 90 + include/linux/memcontrol.h | 13 include/linux/memory_hotplug.h | 23 include/linux/memremap.h | 15 include/linux/mm.h | 36 include/linux/mmap_lock.h | 5 include/linux/mmzone.h | 37 include/linux/numa.h | 11 include/linux/oom.h | 1 include/linux/page-flags.h | 42 include/linux/pagemap.h | 43 include/linux/range.h | 6 include/linux/sched.h | 4 include/linux/sched/coredump.h | 1 include/linux/slab.h | 2 include/linux/swap.h | 10 include/linux/swap_slots.h | 2 kernel/dma/contiguous.c | 11 kernel/fork.c | 25 kernel/resource.c | 11 lib/Kconfig.debug | 9 lib/Kconfig.kasan | 31 lib/Makefile | 5 lib/kunit/test.c | 13 lib/test_free_pages.c | 42 lib/test_hmm.c | 65 - lib/test_kasan.c | 732 ++++++--------- lib/test_kasan_module.c | 111 ++ mm/Kconfig | 4 mm/Makefile | 1 mm/compaction.c | 5 mm/debug.c | 18 mm/dmapool.c | 46 - mm/fadvise.c | 9 mm/filemap.c | 78 - mm/gup.c | 44 mm/gup_benchmark.c | 23 mm/huge_memory.c | 4 mm/hugetlb.c | 100 +- mm/internal.h | 3 mm/kasan/report.c | 34 mm/kmemleak-test.c | 99 -- mm/kmemleak.c | 8 mm/madvise.c | 21 mm/memblock.c | 102 -- mm/memcontrol.c | 262 +++-- mm/memory-failure.c | 5 mm/memory.c | 147 +-- mm/memory_hotplug.c | 10 mm/mempolicy.c | 8 mm/mempool.c | 18 mm/memremap.c | 344 ++++--- mm/migrate.c | 3 mm/mincore.c | 28 mm/mmap.c | 45 mm/oom_kill.c | 2 mm/page_alloc.c | 82 - mm/page_counter.c | 2 mm/page_io.c | 14 mm/page_isolation.c | 41 mm/shmem.c | 19 mm/slab.c | 4 mm/slab.h | 50 - mm/slub.c | 33 mm/sparse.c | 10 mm/swap.c | 14 mm/swap_slots.c | 3 mm/swap_state.c | 38 mm/swapfile.c | 12 mm/truncate.c | 58 - mm/vmalloc.c | 6 mm/vmscan.c | 5 mm/z3fold.c | 3 mm/zbud.c | 1 samples/Makefile | 1 samples/kmemleak/Makefile | 3 samples/kmemleak/kmemleak-test.c | 99 ++ scripts/decodecode | 29 scripts/spelling.txt | 4 tools/testing/nvdimm/dax-dev.c | 28 tools/testing/nvdimm/test/iomap.c | 2 tools/testing/selftests/vm/Makefile | 17 tools/testing/selftests/vm/compaction_test.c | 11 tools/testing/selftests/vm/gup_benchmark.c | 14 tools/testing/selftests/vm/hmm-tests.c | 4 194 files changed, 4273 insertions(+), 2777 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-10-11 6:15 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-10-11 6:15 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 5 patches, based on da690031a5d6d50a361e3f19f3eeabd086a6f20d. Subsystems affected by this patch series: MAINTAINERS mm/pagemap mm/swap mm/hugetlb Subsystem: MAINTAINERS Kees Cook <keescook@chromium.org>: MAINTAINERS: change hardening mailing list Antoine Tenart <atenart@kernel.org>: MAINTAINERS: Antoine Tenart's email address Subsystem: mm/pagemap Miaohe Lin <linmiaohe@huawei.com>: mm: mmap: Fix general protection fault in unlink_file_vma() Subsystem: mm/swap Minchan Kim <minchan@kernel.org>: mm: validate inode in mapping_set_error() Subsystem: mm/hugetlb Vijay Balakrishna <vijayb@linux.microsoft.com>: mm: khugepaged: recalculate min_free_kbytes after memory hotplug as expected by khugepaged .mailmap | 4 +++- MAINTAINERS | 8 ++++---- include/linux/khugepaged.h | 5 +++++ include/linux/pagemap.h | 3 ++- mm/khugepaged.c | 13 +++++++++++-- mm/mmap.c | 6 +++++- mm/page_alloc.c | 3 +++ 7 files changed, 33 insertions(+), 9 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-10-03 5:20 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-10-03 5:20 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 3 patches, based on d3d45f8220d60a0b2aaaacf8fb2be4e6ffd9008e. Subsystems affected by this patch series: mm/slub mm/cma scripts Subsystem: mm/slub Eric Farman <farman@linux.ibm.com>: mm, slub: restore initial kmem_cache flags Subsystem: mm/cma Joonsoo Kim <iamjoonsoo.kim@lge.com>: mm/page_alloc: handle a missing case for memalloc_nocma_{save/restore} APIs Subsystem: scripts Eric Biggers <ebiggers@google.com>: scripts/spelling.txt: fix malformed entry mm/page_alloc.c | 19 ++++++++++++++++--- mm/slub.c | 6 +----- scripts/spelling.txt | 2 +- 3 files changed, 18 insertions(+), 9 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-09-26 4:17 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-09-26 4:17 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 9 patches, based on 7c7ec3226f5f33f9c050d85ec20f18419c622ad6. Subsystems affected by this patch series: mm/thp mm/memcg mm/gup mm/migration lib x86 mm/memory-hotplug Subsystem: mm/thp Gao Xiang <hsiangkao@redhat.com>: mm, THP, swap: fix allocating cluster for swapfile by mistake Subsystem: mm/memcg Muchun Song <songmuchun@bytedance.com>: mm: memcontrol: fix missing suffix of workingset_restore Subsystem: mm/gup Vasily Gorbik <gor@linux.ibm.com>: mm/gup: fix gup_fast with dynamic page table folding Subsystem: mm/migration Zi Yan <ziy@nvidia.com>: mm/migrate: correct thp migration stats Subsystem: lib Nick Desaulniers <ndesaulniers@google.com>: lib/string.c: implement stpcpy Jason Yan <yanaijie@huawei.com>: lib/memregion.c: include memregion.h Subsystem: x86 Mikulas Patocka <mpatocka@redhat.com>: arch/x86/lib/usercopy_64.c: fix __copy_user_flushcache() cache writeback Subsystem: mm/memory-hotplug Laurent Dufour <ldufour@linux.ibm.com>: Patch series "mm: fix memory to node bad links in sysfs", v3: mm: replace memmap_context by meminit_context mm: don't rely on system state to detect hot-plug operations Documentation/admin-guide/cgroup-v2.rst | 25 ++++++--- arch/ia64/mm/init.c | 6 +- arch/s390/include/asm/pgtable.h | 42 +++++++++++---- arch/x86/lib/usercopy_64.c | 2 drivers/base/node.c | 85 ++++++++++++++++++++------------ include/linux/mm.h | 2 include/linux/mmzone.h | 11 +++- include/linux/node.h | 11 ++-- include/linux/pgtable.h | 10 +++ lib/memregion.c | 1 lib/string.c | 24 +++++++++ mm/gup.c | 18 +++--- mm/memcontrol.c | 4 - mm/memory_hotplug.c | 5 + mm/migrate.c | 7 +- mm/page_alloc.c | 10 +-- mm/swapfile.c | 2 17 files changed, 181 insertions(+), 84 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-09-19 4:19 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-09-19 4:19 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 15 patches, based on 92ab97adeefccf375de7ebaad9d5b75d4125fe8b. Subsystems affected by this patch series: mailmap mm/hotfixes mm/thp mm/memory-hotplug misc kcsan Subsystem: mailmap Kees Cook <keescook@chromium.org>: mailmap: add older email addresses for Kees Cook Subsystem: mm/hotfixes Hugh Dickins <hughd@google.com>: Patch series "mm: fixes to past from future testing": ksm: reinstate memcg charge on copied pages mm: migration of hugetlbfs page skip memcg shmem: shmem_writepage() split unlikely i915 THP mm: fix check_move_unevictable_pages() on THP mlock: fix unevictable_pgs event counts on THP Byron Stanoszek <gandalf@winds.org>: tmpfs: restore functionality of nr_inodes=0 Muchun Song <songmuchun@bytedance.com>: kprobes: fix kill kprobe which has been marked as gone Subsystem: mm/thp Ralph Campbell <rcampbell@nvidia.com>: mm/thp: fix __split_huge_pmd_locked() for migration PMD Christophe Leroy <christophe.leroy@csgroup.eu>: selftests/vm: fix display of page size in map_hugetlb Subsystem: mm/memory-hotplug Pavel Tatashin <pasha.tatashin@soleen.com>: mm/memory_hotplug: drain per-cpu pages again during memory offline Subsystem: misc Tobias Klauser <tklauser@distanz.ch>: ftrace: let ftrace_enable_sysctl take a kernel pointer buffer stackleak: let stack_erasing_sysctl take a kernel pointer buffer fs/fs-writeback.c: adjust dirtytime_interval_handler definition to match prototype Subsystem: kcsan Changbin Du <changbin.du@gmail.com>: kcsan: kconfig: move to menu 'Generic Kernel Debugging Instruments' .mailmap | 4 ++ fs/fs-writeback.c | 2 - include/linux/ftrace.h | 3 -- include/linux/stackleak.h | 2 - kernel/kprobes.c | 9 +++++- kernel/stackleak.c | 2 - kernel/trace/ftrace.c | 3 -- lib/Kconfig.debug | 4 -- mm/huge_memory.c | 42 ++++++++++++++++--------------- mm/ksm.c | 4 ++ mm/memory_hotplug.c | 14 ++++++++++ mm/migrate.c | 3 +- mm/mlock.c | 24 +++++++++++------ mm/page_isolation.c | 8 +++++ mm/shmem.c | 20 +++++++++++--- mm/swap.c | 6 ++-- mm/vmscan.c | 10 +++++-- tools/testing/selftests/vm/map_hugetlb.c | 2 - 18 files changed, 111 insertions(+), 51 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-09-04 23:34 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-09-04 23:34 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 19 patches, based on 59126901f200f5fc907153468b03c64e0081b6e6. Subsystems affected by this patch series: mm/memcg mm/slub MAINTAINERS mm/pagemap ipc fork checkpatch mm/madvise mm/migration mm/hugetlb lib Subsystem: mm/memcg Michal Hocko <mhocko@suse.com>: memcg: fix use-after-free in uncharge_batch Xunlei Pang <xlpang@linux.alibaba.com>: mm: memcg: fix memcg reclaim soft lockup Subsystem: mm/slub Eugeniu Rosca <erosca@de.adit-jv.com>: mm: slub: fix conversion of freelist_corrupted() Subsystem: MAINTAINERS Robert Richter <rric@kernel.org>: MAINTAINERS: update Cavium/Marvell entries Nick Desaulniers <ndesaulniers@google.com>: MAINTAINERS: add LLVM maintainers Randy Dunlap <rdunlap@infradead.org>: MAINTAINERS: IA64: mark Status as Odd Fixes only Subsystem: mm/pagemap Joerg Roedel <jroedel@suse.de>: mm: track page table modifications in __apply_to_page_range() Subsystem: ipc Tobias Klauser <tklauser@distanz.ch>: ipc: adjust proc_ipc_sem_dointvec definition to match prototype Subsystem: fork Tobias Klauser <tklauser@distanz.ch>: fork: adjust sysctl_max_threads definition to match prototype Subsystem: checkpatch Mrinal Pandey <mrinalmni@gmail.com>: checkpatch: fix the usage of capture group ( ... ) Subsystem: mm/madvise Yang Shi <shy828301@gmail.com>: mm: madvise: fix vma user-after-free Subsystem: mm/migration Alistair Popple <alistair@popple.id.au>: mm/migrate: fixup setting UFFD_WP flag mm/rmap: fixup copying of soft dirty and uffd ptes Ralph Campbell <rcampbell@nvidia.com>: Patch series "mm/migrate: preserve soft dirty in remove_migration_pte()": mm/migrate: remove unnecessary is_zone_device_page() check mm/migrate: preserve soft dirty in remove_migration_pte() Subsystem: mm/hugetlb Li Xinhai <lixinhai.lxh@gmail.com>: mm/hugetlb: try preferred node first when alloc gigantic page from cma Muchun Song <songmuchun@bytedance.com>: mm/hugetlb: fix a race between hugetlb sysctl handlers David Howells <dhowells@redhat.com>: mm/khugepaged.c: fix khugepaged's request size in collapse_file Subsystem: lib Jason Gunthorpe <jgg@nvidia.com>: include/linux/log2.h: add missing () around n in roundup_pow_of_two() MAINTAINERS | 32 ++++++++++++++++---------------- include/linux/log2.h | 2 +- ipc/ipc_sysctl.c | 2 +- kernel/fork.c | 2 +- mm/hugetlb.c | 49 +++++++++++++++++++++++++++++++++++++------------ mm/khugepaged.c | 2 +- mm/madvise.c | 2 +- mm/memcontrol.c | 6 ++++++ mm/memory.c | 37 ++++++++++++++++++++++++------------- mm/migrate.c | 31 +++++++++++++++++++------------ mm/rmap.c | 9 +++++++-- mm/slub.c | 12 ++++++------ mm/vmscan.c | 8 ++++++++ scripts/checkpatch.pl | 4 ++-- 14 files changed, 130 insertions(+), 68 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-08-21 0:41 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-08-21 0:41 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 11 patches, based on 7eac66d0456fe12a462e5c14c68e97c7460989da. Subsystems affected by this patch series: misc mm/hugetlb mm/vmalloc mm/misc romfs relay uprobes squashfs mm/cma mm/pagealloc Subsystem: misc Nick Desaulniers <ndesaulniers@google.com>: mailmap: add Andi Kleen Subsystem: mm/hugetlb Xu Wang <vulab@iscas.ac.cn>: hugetlb_cgroup: convert comma to semicolon Hugh Dickins <hughd@google.com>: khugepaged: adjust VM_BUG_ON_MM() in __khugepaged_enter() Subsystem: mm/vmalloc "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>: mm/vunmap: add cond_resched() in vunmap_pmd_range Subsystem: mm/misc Leon Romanovsky <leonro@nvidia.com>: mm/rodata_test.c: fix missing function declaration Subsystem: romfs Jann Horn <jannh@google.com>: romfs: fix uninitialized memory leak in romfs_dev_read() Subsystem: relay Wei Yongjun <weiyongjun1@huawei.com>: kernel/relay.c: fix memleak on destroy relay channel Subsystem: uprobes Hugh Dickins <hughd@google.com>: uprobes: __replace_page() avoid BUG in munlock_vma_page() Subsystem: squashfs Phillip Lougher <phillip@squashfs.org.uk>: squashfs: avoid bio_alloc() failure with 1Mbyte blocks Subsystem: mm/cma Doug Berger <opendmb@gmail.com>: mm: include CMA pages in lowmem_reserve at boot Subsystem: mm/pagealloc Charan Teja Reddy <charante@codeaurora.org>: mm, page_alloc: fix core hung in free_pcppages_bulk() .mailmap | 1 + fs/romfs/storage.c | 4 +--- fs/squashfs/block.c | 6 +++++- kernel/events/uprobes.c | 2 +- kernel/relay.c | 1 + mm/hugetlb_cgroup.c | 4 ++-- mm/khugepaged.c | 2 +- mm/page_alloc.c | 7 ++++++- mm/rodata_test.c | 1 + mm/vmalloc.c | 2 ++ 10 files changed, 21 insertions(+), 9 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-08-15 0:29 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-08-15 0:29 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 39 patches, based on b923f1247b72fc100b87792fd2129d026bb10e66. Subsystems affected by this patch series: mm/hotfixes lz4 exec mailmap mm/thp autofs mm/madvise sysctl mm/kmemleak mm/misc lib Subsystem: mm/hotfixes Mike Rapoport <rppt@linux.ibm.com>: asm-generic: pgalloc.h: use correct #ifdef to enable pud_alloc_one() Baoquan He <bhe@redhat.com>: Revert "mm/vmstat.c: do not show lowmem reserve protection information of empty zone" Subsystem: lz4 Nick Terrell <terrelln@fb.com>: lz4: fix kernel decompression speed Subsystem: exec Kees Cook <keescook@chromium.org>: Patch series "Fix S_ISDIR execve() errno": exec: restore EACCES of S_ISDIR execve() selftests/exec: add file type errno tests Subsystem: mailmap Greg Kurz <groug@kaod.org>: mailmap: add entry for Greg Kurz Subsystem: mm/thp "Matthew Wilcox (Oracle)" <willy@infradead.org>: Patch series "THP prep patches": mm: store compound_nr as well as compound_order mm: move page-flags include to top of file mm: add thp_order mm: add thp_size mm: replace hpage_nr_pages with thp_nr_pages mm: add thp_head mm: introduce offset_in_thp Subsystem: autofs Randy Dunlap <rdunlap@infradead.org>: fs: autofs: delete repeated words in comments Subsystem: mm/madvise Minchan Kim <minchan@kernel.org>: Patch series "introduce memory hinting API for external process", v8: mm/madvise: pass task and mm to do_madvise pid: move pidfd_get_pid() to pid.c mm/madvise: introduce process_madvise() syscall: an external memory hinting API mm/madvise: check fatal signal pending of target process Subsystem: sysctl Xiaoming Ni <nixiaoming@huawei.com>: all arch: remove system call sys_sysctl Subsystem: mm/kmemleak Qian Cai <cai@lca.pw>: mm/kmemleak: silence KCSAN splats in checksum Subsystem: mm/misc Qian Cai <cai@lca.pw>: mm/frontswap: mark various intentional data races mm/page_io: mark various intentional data races mm/swap_state: mark various intentional data races Kirill A. Shutemov <kirill@shutemov.name>: mm/filemap.c: fix a data race in filemap_fault() Qian Cai <cai@lca.pw>: mm/swapfile: fix and annotate various data races mm/page_counter: fix various data races at memsw mm/memcontrol: fix a data race in scan count mm/list_lru: fix a data race in list_lru_count_one mm/mempool: fix a data race in mempool_free() mm/rmap: annotate a data race at tlb_flush_batched mm/swap.c: annotate data races for lru_rotate_pvecs mm: annotate a data race in page_zonenum() Romain Naour <romain.naour@gmail.com>: include/asm-generic/vmlinux.lds.h: align ro_after_init Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>: sh: clkfwk: remove r8/r16/r32 sh: use generic strncpy() Subsystem: lib Krzysztof Kozlowski <krzk@kernel.org>: Patch series "iomap: Constify ioreadX() iomem argument", v3: iomap: constify ioreadX() iomem argument (as in generic implementation) rtl818x: constify ioreadX() iomem argument (as in generic implementation) ntb: intel: constify ioreadX() iomem argument (as in generic implementation) virtio: pci: constify ioreadX() iomem argument (as in generic implementation) .mailmap | 1 arch/alpha/include/asm/core_apecs.h | 6 arch/alpha/include/asm/core_cia.h | 6 arch/alpha/include/asm/core_lca.h | 6 arch/alpha/include/asm/core_marvel.h | 4 arch/alpha/include/asm/core_mcpcia.h | 6 arch/alpha/include/asm/core_t2.h | 2 arch/alpha/include/asm/io.h | 12 - arch/alpha/include/asm/io_trivial.h | 16 - arch/alpha/include/asm/jensen.h | 2 arch/alpha/include/asm/machvec.h | 6 arch/alpha/kernel/core_marvel.c | 2 arch/alpha/kernel/io.c | 12 - arch/alpha/kernel/syscalls/syscall.tbl | 3 arch/arm/configs/am200epdkit_defconfig | 1 arch/arm/tools/syscall.tbl | 3 arch/arm64/include/asm/unistd.h | 2 arch/arm64/include/asm/unistd32.h | 6 arch/ia64/kernel/syscalls/syscall.tbl | 3 arch/m68k/kernel/syscalls/syscall.tbl | 3 arch/microblaze/kernel/syscalls/syscall.tbl | 3 arch/mips/configs/cu1000-neo_defconfig | 1 arch/mips/kernel/syscalls/syscall_n32.tbl | 3 arch/mips/kernel/syscalls/syscall_n64.tbl | 3 arch/mips/kernel/syscalls/syscall_o32.tbl | 3 arch/parisc/include/asm/io.h | 4 arch/parisc/kernel/syscalls/syscall.tbl | 3 arch/parisc/lib/iomap.c | 72 +++--- arch/powerpc/kernel/iomap.c | 28 +- arch/powerpc/kernel/syscalls/syscall.tbl | 3 arch/s390/kernel/syscalls/syscall.tbl | 3 arch/sh/configs/dreamcast_defconfig | 1 arch/sh/configs/espt_defconfig | 1 arch/sh/configs/hp6xx_defconfig | 1 arch/sh/configs/landisk_defconfig | 1 arch/sh/configs/lboxre2_defconfig | 1 arch/sh/configs/microdev_defconfig | 1 arch/sh/configs/migor_defconfig | 1 arch/sh/configs/r7780mp_defconfig | 1 arch/sh/configs/r7785rp_defconfig | 1 arch/sh/configs/rts7751r2d1_defconfig | 1 arch/sh/configs/rts7751r2dplus_defconfig | 1 arch/sh/configs/se7206_defconfig | 1 arch/sh/configs/se7343_defconfig | 1 arch/sh/configs/se7619_defconfig | 1 arch/sh/configs/se7705_defconfig | 1 arch/sh/configs/se7750_defconfig | 1 arch/sh/configs/se7751_defconfig | 1 arch/sh/configs/secureedge5410_defconfig | 1 arch/sh/configs/sh03_defconfig | 1 arch/sh/configs/sh7710voipgw_defconfig | 1 arch/sh/configs/sh7757lcr_defconfig | 1 arch/sh/configs/sh7763rdp_defconfig | 1 arch/sh/configs/shmin_defconfig | 1 arch/sh/configs/titan_defconfig | 1 arch/sh/include/asm/string_32.h | 26 -- arch/sh/kernel/iomap.c | 22 - arch/sh/kernel/syscalls/syscall.tbl | 3 arch/sparc/kernel/syscalls/syscall.tbl | 3 arch/x86/entry/syscalls/syscall_32.tbl | 3 arch/x86/entry/syscalls/syscall_64.tbl | 4 arch/xtensa/kernel/syscalls/syscall.tbl | 3 drivers/mailbox/bcm-pdc-mailbox.c | 2 drivers/net/wireless/realtek/rtl818x/rtl8180/rtl8180.h | 6 drivers/ntb/hw/intel/ntb_hw_gen1.c | 2 drivers/ntb/hw/intel/ntb_hw_gen3.h | 2 drivers/ntb/hw/intel/ntb_hw_intel.h | 2 drivers/nvdimm/btt.c | 4 drivers/nvdimm/pmem.c | 6 drivers/sh/clk/cpg.c | 25 -- drivers/virtio/virtio_pci_modern.c | 6 fs/autofs/dev-ioctl.c | 4 fs/io_uring.c | 2 fs/namei.c | 4 include/asm-generic/iomap.h | 28 +- include/asm-generic/pgalloc.h | 2 include/asm-generic/vmlinux.lds.h | 1 include/linux/compat.h | 5 include/linux/huge_mm.h | 58 ++++- include/linux/io-64-nonatomic-hi-lo.h | 4 include/linux/io-64-nonatomic-lo-hi.h | 4 include/linux/memcontrol.h | 2 include/linux/mm.h | 16 - include/linux/mm_inline.h | 6 include/linux/mm_types.h | 1 include/linux/pagemap.h | 6 include/linux/pid.h | 1 include/linux/syscalls.h | 4 include/linux/sysctl.h | 6 include/uapi/asm-generic/unistd.h | 4 kernel/Makefile | 2 kernel/exit.c | 17 - kernel/pid.c | 17 + kernel/sys_ni.c | 3 kernel/sysctl_binary.c | 171 -------------- lib/iomap.c | 30 +- lib/lz4/lz4_compress.c | 4 lib/lz4/lz4_decompress.c | 18 - lib/lz4/lz4defs.h | 10 lib/lz4/lz4hc_compress.c | 2 mm/compaction.c | 2 mm/filemap.c | 22 + mm/frontswap.c | 8 mm/gup.c | 2 mm/internal.h | 4 mm/kmemleak.c | 2 mm/list_lru.c | 2 mm/madvise.c | 190 ++++++++++++++-- mm/memcontrol.c | 10 mm/memory.c | 4 mm/memory_hotplug.c | 7 mm/mempolicy.c | 2 mm/mempool.c | 2 mm/migrate.c | 18 - mm/mlock.c | 9 mm/page_alloc.c | 5 mm/page_counter.c | 13 - mm/page_io.c | 12 - mm/page_vma_mapped.c | 6 mm/rmap.c | 10 mm/swap.c | 21 - mm/swap_state.c | 10 mm/swapfile.c | 33 +- mm/vmscan.c | 6 mm/vmstat.c | 12 - mm/workingset.c | 6 tools/perf/arch/powerpc/entry/syscalls/syscall.tbl | 2 tools/perf/arch/s390/entry/syscalls/syscall.tbl | 2 tools/perf/arch/x86/entry/syscalls/syscall_64.tbl | 2 tools/testing/selftests/exec/.gitignore | 1 tools/testing/selftests/exec/Makefile | 5 tools/testing/selftests/exec/non-regular.c | 196 +++++++++++++++++ 132 files changed, 815 insertions(+), 614 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-08-12 1:29 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-08-12 1:29 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm - Most of the rest of MM - various other subsystems 165 patches, based on 00e4db51259a5f936fec1424b884f029479d3981. Subsystems affected by this patch series: mm/memcg mm/hugetlb mm/vmscan mm/proc mm/compaction mm/mempolicy mm/oom-kill mm/hugetlbfs mm/migration mm/thp mm/cma mm/util mm/memory-hotplug mm/cleanups mm/uaccess alpha misc sparse bitmap lib lz4 bitops checkpatch autofs minix nilfs ufs fat signals kmod coredump exec kdump rapidio panic kcov kgdb ipc mm/migration mm/gup mm/pagemap Subsystem: mm/memcg Roman Gushchin <guro@fb.com>: Patch series "mm: memcg accounting of percpu memory", v3: percpu: return number of released bytes from pcpu_free_area() mm: memcg/percpu: account percpu memory to memory cgroups mm: memcg/percpu: per-memcg percpu memory statistics mm: memcg: charge memcg percpu memory to the parent cgroup kselftests: cgroup: add perpcu memory accounting test Subsystem: mm/hugetlb Muchun Song <songmuchun@bytedance.com>: mm/hugetlb: add mempolicy check in the reservation routine Subsystem: mm/vmscan Joonsoo Kim <iamjoonsoo.kim@lge.com>: Patch series "workingset protection/detection on the anonymous LRU list", v7: mm/vmscan: make active/inactive ratio as 1:1 for anon lru mm/vmscan: protect the workingset on anonymous LRU mm/workingset: prepare the workingset detection infrastructure for anon LRU mm/swapcache: support to handle the shadow entries mm/swap: implement workingset detection for anonymous LRU mm/vmscan: restore active/inactive ratio for anonymous LRU Subsystem: mm/proc Michal Koutný <mkoutny@suse.com>: /proc/PID/smaps: consistent whitespace output format Subsystem: mm/compaction Nitin Gupta <nigupta@nvidia.com>: mm: proactive compaction mm: fix compile error due to COMPACTION_HPAGE_ORDER mm: use unsigned types for fragmentation score Alex Shi <alex.shi@linux.alibaba.com>: mm/compaction: correct the comments of compact_defer_shift Subsystem: mm/mempolicy Krzysztof Kozlowski <krzk@kernel.org>: mm: mempolicy: fix kerneldoc of numa_map_to_online_node() Wenchao Hao <haowenchao22@gmail.com>: mm/mempolicy.c: check parameters first in kernel_get_mempolicy Yanfei Xu <yanfei.xu@windriver.com>: include/linux/mempolicy.h: fix typo Subsystem: mm/oom-kill Yafang Shao <laoar.shao@gmail.com>: mm, oom: make the calculation of oom badness more accurate Michal Hocko <mhocko@suse.com>: doc, mm: sync up oom_score_adj documentation doc, mm: clarify /proc/<pid>/oom_score value range Yafang Shao <laoar.shao@gmail.com>: mm, oom: show process exiting information in __oom_kill_process() Subsystem: mm/hugetlbfs Mike Kravetz <mike.kravetz@oracle.com>: hugetlbfs: prevent filesystem stacking of hugetlbfs hugetlbfs: remove call to huge_pte_alloc without i_mmap_rwsem Subsystem: mm/migration Ralph Campbell <rcampbell@nvidia.com>: Patch series "mm/migrate: optimize migrate_vma_setup() for holes": mm/migrate: optimize migrate_vma_setup() for holes mm/migrate: add migrate-shared test for migrate_vma_*() Subsystem: mm/thp Yang Shi <yang.shi@linux.alibaba.com>: mm: thp: remove debug_cow switch Anshuman Khandual <anshuman.khandual@arm.com>: mm/vmstat: add events for THP migration without split Subsystem: mm/cma Jianqun Xu <jay.xu@rock-chips.com>: mm/cma.c: fix NULL pointer dereference when cma could not be activated Barry Song <song.bao.hua@hisilicon.com>: Patch series "mm: fix the names of general cma and hugetlb cma", v2: mm: cma: fix the name of CMA areas mm: hugetlb: fix the name of hugetlb CMA Mike Kravetz <mike.kravetz@oracle.com>: cma: don't quit at first error when activating reserved areas Subsystem: mm/util Waiman Long <longman@redhat.com>: include/linux/sched/mm.h: optimize current_gfp_context() Krzysztof Kozlowski <krzk@kernel.org>: mm: mmu_notifier: fix and extend kerneldoc Subsystem: mm/memory-hotplug Daniel Jordan <daniel.m.jordan@oracle.com>: x86/mm: use max memory block size on bare metal Jia He <justin.he@arm.com>: mm/memory_hotplug: introduce default dummy memory_add_physaddr_to_nid() mm/memory_hotplug: fix unpaired mem_hotplug_begin/done Charan Teja Reddy <charante@codeaurora.org>: mm, memory_hotplug: update pcp lists everytime onlining a memory block Subsystem: mm/cleanups Randy Dunlap <rdunlap@infradead.org>: mm: drop duplicated words in <linux/pgtable.h> mm: drop duplicated words in <linux/mm.h> include/linux/highmem.h: fix duplicated words in a comment include/linux/frontswap.h: drop duplicated word in a comment include/linux/memcontrol.h: drop duplicate word and fix spello Arvind Sankar <nivedita@alum.mit.edu>: sh/mm: drop unused MAX_PHYSADDR_BITS sparc: drop unused MAX_PHYSADDR_BITS Randy Dunlap <rdunlap@infradead.org>: mm/compaction.c: delete duplicated word mm/filemap.c: delete duplicated word mm/hmm.c: delete duplicated word mm/hugetlb.c: delete duplicated words mm/memcontrol.c: delete duplicated words mm/memory.c: delete duplicated words mm/migrate.c: delete duplicated word mm/nommu.c: delete duplicated words mm/page_alloc.c: delete or fix duplicated words mm/shmem.c: delete duplicated word mm/slab_common.c: delete duplicated word mm/usercopy.c: delete duplicated word mm/vmscan.c: delete or fix duplicated words mm/zpool.c: delete duplicated word and fix grammar mm/zsmalloc.c: fix duplicated words Subsystem: mm/uaccess Christoph Hellwig <hch@lst.de>: Patch series "clean up address limit helpers", v2: syscalls: use uaccess_kernel in addr_limit_user_check nds32: use uaccess_kernel in show_regs riscv: include <asm/pgtable.h> in <asm/uaccess.h> uaccess: remove segment_eq uaccess: add force_uaccess_{begin,end} helpers exec: use force_uaccess_begin during exec and exit Subsystem: alpha Luc Van Oostenryck <luc.vanoostenryck@gmail.com>: alpha: fix annotation of io{read,write}{16,32}be() Subsystem: misc Randy Dunlap <rdunlap@infradead.org>: include/linux/compiler-clang.h: drop duplicated word in a comment include/linux/exportfs.h: drop duplicated word in a comment include/linux/async_tx.h: drop duplicated word in a comment include/linux/xz.h: drop duplicated word Christoph Hellwig <hch@lst.de>: kernel: add a kernel_wait helper Feng Tang <feng.tang@intel.com>: ./Makefile: add debug option to enable function aligned on 32 bytes Arvind Sankar <nivedita@alum.mit.edu>: kernel.h: remove duplicate include of asm/div64.h "Alexander A. Klimov" <grandmaster@al2klimov.de>: include/: replace HTTP links with HTTPS ones Matthew Wilcox <willy@infradead.org>: include/linux/poison.h: remove obsolete comment Subsystem: sparse Luc Van Oostenryck <luc.vanoostenryck@gmail.com>: sparse: group the defines by functionality Subsystem: bitmap Stefano Brivio <sbrivio@redhat.com>: Patch series "lib: Fix bitmap_cut() for overlaps, add test": lib/bitmap.c: fix bitmap_cut() for partial overlapping case lib/test_bitmap.c: add test for bitmap_cut() Subsystem: lib Luc Van Oostenryck <luc.vanoostenryck@gmail.com>: lib/generic-radix-tree.c: remove unneeded __rcu Geert Uytterhoeven <geert@linux-m68k.org>: lib/test_bitops: do the full test during module init Wei Yongjun <weiyongjun1@huawei.com>: lib/test_lockup.c: make symbol 'test_works' static Tiezhu Yang <yangtiezhu@loongson.cn>: lib/Kconfig.debug: make TEST_LOCKUP depend on module lib/test_lockup.c: fix return value of test_lockup_init() "Alexander A. Klimov" <grandmaster@al2klimov.de>: lib/: replace HTTP links with HTTPS ones "Kars Mulder" <kerneldev@karsmulder.nl>: kstrto*: correct documentation references to simple_strto*() kstrto*: do not describe simple_strto*() as obsolete/replaced Subsystem: lz4 Nick Terrell <terrelln@fb.com>: lz4: fix kernel decompression speed Subsystem: bitops Rikard Falkeborn <rikard.falkeborn@gmail.com>: lib/test_bits.c: add tests of GENMASK Subsystem: checkpatch Joe Perches <joe@perches.com>: checkpatch: add test for possible misuse of IS_ENABLED() without CONFIG_ checkpatch: add --fix option for ASSIGN_IN_IF Quentin Monnet <quentin@isovalent.com>: checkpatch: fix CONST_STRUCT when const_structs.checkpatch is missing Joe Perches <joe@perches.com>: checkpatch: add test for repeated words checkpatch: remove missing switch/case break test Subsystem: autofs Randy Dunlap <rdunlap@infradead.org>: autofs: fix doubled word Subsystem: minix Eric Biggers <ebiggers@google.com>: Patch series "fs/minix: fix syzbot bugs and set s_maxbytes": fs/minix: check return value of sb_getblk() fs/minix: don't allow getting deleted inodes fs/minix: reject too-large maximum file size fs/minix: set s_maxbytes correctly fs/minix: fix block limit check for V1 filesystems fs/minix: remove expected error message in block_to_path() Subsystem: nilfs Eric Biggers <ebiggers@google.com>: Patch series "nilfs2 updates": nilfs2: only call unlock_new_inode() if I_NEW Joe Perches <joe@perches.com>: nilfs2: convert __nilfs_msg to integrate the level and format nilfs2: use a more common logging style Subsystem: ufs Colin Ian King <colin.king@canonical.com>: fs/ufs: avoid potential u32 multiplication overflow Subsystem: fat Yubo Feng <fengyubo3@huawei.com>: fatfs: switch write_lock to read_lock in fat_ioctl_get_attributes "Alexander A. Klimov" <grandmaster@al2klimov.de>: VFAT/FAT/MSDOS FILESYSTEM: replace HTTP links with HTTPS ones OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>: fat: fix fat_ra_init() for data clusters == 0 Subsystem: signals Helge Deller <deller@gmx.de>: fs/signalfd.c: fix inconsistent return codes for signalfd4 Subsystem: kmod Tiezhu Yang <yangtiezhu@loongson.cn>: Patch series "kmod/umh: a few fixes": selftests: kmod: use variable NAME in kmod_test_0001() kmod: remove redundant "be an" in the comment test_kmod: avoid potential double free in trigger_config_run_type() Subsystem: coredump Lepton Wu <ytht.net@gmail.com>: coredump: add %f for executable filename Subsystem: exec Kees Cook <keescook@chromium.org>: Patch series "Relocate execve() sanity checks", v2: exec: change uselib(2) IS_SREG() failure to EACCES exec: move S_ISREG() check earlier exec: move path_noexec() check earlier Subsystem: kdump Vijay Balakrishna <vijayb@linux.microsoft.com>: kdump: append kernel build-id string to VMCOREINFO Subsystem: rapidio "Gustavo A. R. Silva" <gustavoars@kernel.org>: drivers/rapidio/devices/rio_mport_cdev.c: use struct_size() helper drivers/rapidio/rio-scan.c: use struct_size() helper rapidio/rio_mport_cdev: use array_size() helper in copy_{from,to}_user() Subsystem: panic Tiezhu Yang <yangtiezhu@loongson.cn>: kernel/panic.c: make oops_may_print() return bool lib/Kconfig.debug: fix typo in the help text of CONFIG_PANIC_TIMEOUT Yue Hu <huyue2@yulong.com>: panic: make print_oops_end_marker() static Subsystem: kcov Marco Elver <elver@google.com>: kcov: unconditionally add -fno-stack-protector to compiler options Wei Yongjun <weiyongjun1@huawei.com>: kcov: make some symbols static Subsystem: kgdb Nick Desaulniers <ndesaulniers@google.com>: scripts/gdb: fix python 3.8 SyntaxWarning Subsystem: ipc Alexey Dobriyan <adobriyan@gmail.com>: ipc: uninline functions Liao Pingfang <liao.pingfang@zte.com.cn>: ipc/shm.c: remove the superfluous break Subsystem: mm/migration Joonsoo Kim <iamjoonsoo.kim@lge.com>: Patch series "clean-up the migration target allocation functions", v5: mm/page_isolation: prefer the node of the source page mm/migrate: move migration helper from .h to .c mm/hugetlb: unify migration callbacks mm/migrate: clear __GFP_RECLAIM to make the migration callback consistent with regular THP allocations mm/migrate: introduce a standard migration target allocation function mm/mempolicy: use a standard migration target allocation callback mm/page_alloc: remove a wrapper for alloc_migration_target() Subsystem: mm/gup Joonsoo Kim <iamjoonsoo.kim@lge.com>: mm/gup: restrict CMA region by using allocation scope API mm/hugetlb: make hugetlb migration callback CMA aware mm/gup: use a standard migration target allocation callback Subsystem: mm/pagemap Peter Xu <peterx@redhat.com>: Patch series "mm: Page fault accounting cleanups", v5: mm: do page fault accounting in handle_mm_fault mm/alpha: use general page fault accounting mm/arc: use general page fault accounting mm/arm: use general page fault accounting mm/arm64: use general page fault accounting mm/csky: use general page fault accounting mm/hexagon: use general page fault accounting mm/ia64: use general page fault accounting mm/m68k: use general page fault accounting mm/microblaze: use general page fault accounting mm/mips: use general page fault accounting mm/nds32: use general page fault accounting mm/nios2: use general page fault accounting mm/openrisc: use general page fault accounting mm/parisc: use general page fault accounting mm/powerpc: use general page fault accounting mm/riscv: use general page fault accounting mm/s390: use general page fault accounting mm/sh: use general page fault accounting mm/sparc32: use general page fault accounting mm/sparc64: use general page fault accounting mm/x86: use general page fault accounting mm/xtensa: use general page fault accounting mm: clean up the last pieces of page fault accountings mm/gup: remove task_struct pointer for all gup code Documentation/admin-guide/cgroup-v2.rst | 4 Documentation/admin-guide/sysctl/kernel.rst | 3 Documentation/admin-guide/sysctl/vm.rst | 15 + Documentation/filesystems/proc.rst | 11 - Documentation/vm/page_migration.rst | 27 +++ Makefile | 4 arch/alpha/include/asm/io.h | 8 arch/alpha/include/asm/uaccess.h | 2 arch/alpha/mm/fault.c | 10 - arch/arc/include/asm/segment.h | 3 arch/arc/kernel/process.c | 2 arch/arc/mm/fault.c | 20 -- arch/arm/include/asm/uaccess.h | 4 arch/arm/kernel/signal.c | 2 arch/arm/mm/fault.c | 27 --- arch/arm64/include/asm/uaccess.h | 2 arch/arm64/kernel/sdei.c | 2 arch/arm64/mm/fault.c | 31 --- arch/arm64/mm/numa.c | 10 - arch/csky/include/asm/segment.h | 2 arch/csky/mm/fault.c | 15 - arch/h8300/include/asm/segment.h | 2 arch/hexagon/mm/vm_fault.c | 11 - arch/ia64/include/asm/uaccess.h | 2 arch/ia64/mm/fault.c | 11 - arch/ia64/mm/numa.c | 2 arch/m68k/include/asm/segment.h | 2 arch/m68k/include/asm/tlbflush.h | 6 arch/m68k/mm/fault.c | 16 - arch/microblaze/include/asm/uaccess.h | 2 arch/microblaze/mm/fault.c | 11 - arch/mips/include/asm/uaccess.h | 2 arch/mips/kernel/unaligned.c | 27 +-- arch/mips/mm/fault.c | 16 - arch/nds32/include/asm/uaccess.h | 2 arch/nds32/kernel/process.c | 2 arch/nds32/mm/alignment.c | 7 arch/nds32/mm/fault.c | 21 -- arch/nios2/include/asm/uaccess.h | 2 arch/nios2/mm/fault.c | 16 - arch/openrisc/include/asm/uaccess.h | 2 arch/openrisc/mm/fault.c | 11 - arch/parisc/include/asm/uaccess.h | 2 arch/parisc/mm/fault.c | 10 - arch/powerpc/include/asm/uaccess.h | 3 arch/powerpc/mm/copro_fault.c | 7 arch/powerpc/mm/fault.c | 13 - arch/riscv/include/asm/uaccess.h | 6 arch/riscv/mm/fault.c | 18 -- arch/s390/include/asm/uaccess.h | 2 arch/s390/kvm/interrupt.c | 2 arch/s390/kvm/kvm-s390.c | 2 arch/s390/kvm/priv.c | 8 arch/s390/mm/fault.c | 18 -- arch/s390/mm/gmap.c | 4 arch/sh/include/asm/segment.h | 3 arch/sh/include/asm/sparsemem.h | 4 arch/sh/kernel/traps_32.c | 12 - arch/sh/mm/fault.c | 13 - arch/sh/mm/init.c | 9 - arch/sparc/include/asm/sparsemem.h | 1 arch/sparc/include/asm/uaccess_32.h | 2 arch/sparc/include/asm/uaccess_64.h | 2 arch/sparc/mm/fault_32.c | 15 - arch/sparc/mm/fault_64.c | 13 - arch/um/kernel/trap.c | 6 arch/x86/include/asm/uaccess.h | 2 arch/x86/mm/fault.c | 19 -- arch/x86/mm/init_64.c | 9 + arch/x86/mm/numa.c | 1 arch/xtensa/include/asm/uaccess.h | 2 arch/xtensa/mm/fault.c | 17 - drivers/firmware/arm_sdei.c | 5 drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 2 drivers/infiniband/core/umem_odp.c | 2 drivers/iommu/amd/iommu_v2.c | 2 drivers/iommu/intel/svm.c | 3 drivers/rapidio/devices/rio_mport_cdev.c | 7 drivers/rapidio/rio-scan.c | 8 drivers/vfio/vfio_iommu_type1.c | 4 fs/coredump.c | 17 + fs/exec.c | 38 ++-- fs/fat/Kconfig | 2 fs/fat/fatent.c | 3 fs/fat/file.c | 4 fs/hugetlbfs/inode.c | 6 fs/minix/inode.c | 48 ++++- fs/minix/itree_common.c | 8 fs/minix/itree_v1.c | 16 - fs/minix/itree_v2.c | 15 - fs/minix/minix.h | 1 fs/namei.c | 10 - fs/nilfs2/alloc.c | 38 ++-- fs/nilfs2/btree.c | 42 ++-- fs/nilfs2/cpfile.c | 10 - fs/nilfs2/dat.c | 14 - fs/nilfs2/direct.c | 14 - fs/nilfs2/gcinode.c | 2 fs/nilfs2/ifile.c | 4 fs/nilfs2/inode.c | 32 +-- fs/nilfs2/ioctl.c | 37 ++-- fs/nilfs2/mdt.c | 2 fs/nilfs2/namei.c | 6 fs/nilfs2/nilfs.h | 18 +- fs/nilfs2/page.c | 11 - fs/nilfs2/recovery.c | 32 +-- fs/nilfs2/segbuf.c | 2 fs/nilfs2/segment.c | 38 ++-- fs/nilfs2/sufile.c | 29 +-- fs/nilfs2/super.c | 73 ++++---- fs/nilfs2/sysfs.c | 29 +-- fs/nilfs2/the_nilfs.c | 85 ++++----- fs/open.c | 6 fs/proc/base.c | 11 + fs/proc/task_mmu.c | 4 fs/signalfd.c | 10 - fs/ufs/super.c | 2 include/asm-generic/uaccess.h | 4 include/clocksource/timer-ti-dm.h | 2 include/linux/async_tx.h | 2 include/linux/btree.h | 2 include/linux/compaction.h | 6 include/linux/compiler-clang.h | 2 include/linux/compiler_types.h | 44 ++--- include/linux/crash_core.h | 6 include/linux/delay.h | 2 include/linux/dma/k3-psil.h | 2 include/linux/dma/k3-udma-glue.h | 2 include/linux/dma/ti-cppi5.h | 2 include/linux/exportfs.h | 2 include/linux/frontswap.h | 2 include/linux/fs.h | 10 + include/linux/generic-radix-tree.h | 2 include/linux/highmem.h | 2 include/linux/huge_mm.h | 7 include/linux/hugetlb.h | 53 ++++-- include/linux/irqchip/irq-omap-intc.h | 2 include/linux/jhash.h | 2 include/linux/kernel.h | 12 - include/linux/leds-ti-lmu-common.h | 2 include/linux/memcontrol.h | 12 + include/linux/mempolicy.h | 18 +- include/linux/migrate.h | 42 +--- include/linux/mm.h | 20 +- include/linux/mmzone.h | 17 + include/linux/oom.h | 4 include/linux/pgtable.h | 12 - include/linux/platform_data/davinci-cpufreq.h | 2 include/linux/platform_data/davinci_asp.h | 2 include/linux/platform_data/elm.h | 2 include/linux/platform_data/gpio-davinci.h | 2 include/linux/platform_data/gpmc-omap.h | 2 include/linux/platform_data/mtd-davinci-aemif.h | 2 include/linux/platform_data/omap-twl4030.h | 2 include/linux/platform_data/uio_pruss.h | 2 include/linux/platform_data/usb-omap.h | 2 include/linux/poison.h | 4 include/linux/sched/mm.h | 8 include/linux/sched/task.h | 1 include/linux/soc/ti/k3-ringacc.h | 2 include/linux/soc/ti/knav_qmss.h | 2 include/linux/soc/ti/ti-msgmgr.h | 2 include/linux/swap.h | 25 ++ include/linux/syscalls.h | 2 include/linux/uaccess.h | 20 ++ include/linux/vm_event_item.h | 3 include/linux/wkup_m3_ipc.h | 2 include/linux/xxhash.h | 2 include/linux/xz.h | 4 include/linux/zlib.h | 2 include/soc/arc/aux.h | 2 include/trace/events/migrate.h | 17 + include/uapi/linux/auto_dev-ioctl.h | 2 include/uapi/linux/elf.h | 2 include/uapi/linux/map_to_7segment.h | 2 include/uapi/linux/types.h | 2 include/uapi/linux/usb/ch9.h | 2 ipc/sem.c | 3 ipc/shm.c | 4 kernel/Makefile | 2 kernel/crash_core.c | 50 +++++ kernel/events/callchain.c | 5 kernel/events/core.c | 5 kernel/events/uprobes.c | 8 kernel/exit.c | 18 +- kernel/futex.c | 2 kernel/kcov.c | 6 kernel/kmod.c | 5 kernel/kthread.c | 5 kernel/panic.c | 4 kernel/stacktrace.c | 5 kernel/sysctl.c | 11 + kernel/umh.c | 29 --- lib/Kconfig.debug | 27 ++- lib/Makefile | 1 lib/bitmap.c | 4 lib/crc64.c | 2 lib/decompress_bunzip2.c | 2 lib/decompress_unlzma.c | 6 lib/kstrtox.c | 20 -- lib/lz4/lz4_compress.c | 4 lib/lz4/lz4_decompress.c | 18 +- lib/lz4/lz4defs.h | 10 + lib/lz4/lz4hc_compress.c | 2 lib/math/rational.c | 2 lib/rbtree.c | 2 lib/test_bitmap.c | 58 ++++++ lib/test_bitops.c | 18 +- lib/test_bits.c | 75 ++++++++ lib/test_kmod.c | 2 lib/test_lockup.c | 6 lib/ts_bm.c | 2 lib/xxhash.c | 2 lib/xz/xz_crc32.c | 2 lib/xz/xz_dec_bcj.c | 2 lib/xz/xz_dec_lzma2.c | 2 lib/xz/xz_lzma2.h | 2 lib/xz/xz_stream.h | 2 mm/cma.c | 40 +--- mm/cma.h | 4 mm/compaction.c | 207 +++++++++++++++++++++-- mm/filemap.c | 2 mm/gup.c | 195 ++++++---------------- mm/hmm.c | 5 mm/huge_memory.c | 23 -- mm/hugetlb.c | 93 ++++------ mm/internal.h | 9 - mm/khugepaged.c | 2 mm/ksm.c | 3 mm/maccess.c | 22 +- mm/memcontrol.c | 42 +++- mm/memory-failure.c | 7 mm/memory.c | 107 +++++++++--- mm/memory_hotplug.c | 30 ++- mm/mempolicy.c | 49 +---- mm/migrate.c | 151 ++++++++++++++--- mm/mmu_notifier.c | 9 - mm/nommu.c | 4 mm/oom_kill.c | 24 +- mm/page_alloc.c | 14 + mm/page_isolation.c | 21 -- mm/percpu-internal.h | 55 ++++++ mm/percpu-km.c | 5 mm/percpu-stats.c | 36 ++-- mm/percpu-vm.c | 5 mm/percpu.c | 208 +++++++++++++++++++++--- mm/process_vm_access.c | 2 mm/rmap.c | 2 mm/shmem.c | 5 mm/slab_common.c | 2 mm/swap.c | 13 - mm/swap_state.c | 80 +++++++-- mm/swapfile.c | 4 mm/usercopy.c | 2 mm/userfaultfd.c | 2 mm/vmscan.c | 36 ++-- mm/vmstat.c | 32 +++ mm/workingset.c | 23 +- mm/zpool.c | 8 mm/zsmalloc.c | 2 scripts/checkpatch.pl | 116 +++++++++---- scripts/gdb/linux/rbtree.py | 4 security/tomoyo/domain.c | 2 tools/testing/selftests/cgroup/test_kmem.c | 70 +++++++- tools/testing/selftests/kmod/kmod.sh | 4 tools/testing/selftests/vm/hmm-tests.c | 35 ++++ virt/kvm/async_pf.c | 2 virt/kvm/kvm_main.c | 2 268 files changed, 2481 insertions(+), 1551 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-08-07 6:16 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-08-07 6:16 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm - A few MM hotfixes - kthread, tools, scripts, ntfs and ocfs2 - Some of MM 163 patches, based on d6efb3ac3e6c19ab722b28bdb9252bae0b9676b6. Subsystems affected by this patch series: mm/pagemap mm/hofixes mm/pagealloc kthread tools scripts ntfs ocfs2 mm/slab-generic mm/slab mm/slub mm/kcsan mm/debug mm/pagecache mm/gup mm/swap mm/shmem mm/memcg mm/pagemap mm/mremap mm/mincore mm/sparsemem mm/vmalloc mm/kasan mm/pagealloc mm/hugetlb mm/vmscan Subsystem: mm/pagemap Yang Shi <yang.shi@linux.alibaba.com>: mm/memory.c: avoid access flag update TLB flush for retried page fault Subsystem: mm/hofixes Ralph Campbell <rcampbell@nvidia.com>: mm/migrate: fix migrate_pgmap_owner w/o CONFIG_MMU_NOTIFIER Subsystem: mm/pagealloc David Hildenbrand <david@redhat.com>: mm/shuffle: don't move pages between zones and don't read garbage memmaps Subsystem: kthread Peter Zijlstra <peterz@infradead.org>: mm: fix kthread_use_mm() vs TLB invalidate Ilias Stamatis <stamatis.iliass@gmail.com>: kthread: remove incorrect comment in kthread_create_on_cpu() Subsystem: tools "Alexander A. Klimov" <grandmaster@al2klimov.de>: tools/: replace HTTP links with HTTPS ones Gaurav Singh <gaurav1086@gmail.com>: tools/testing/selftests/cgroup/cgroup_util.c: cg_read_strcmp: fix null pointer dereference Subsystem: scripts Jialu Xu <xujialu@vimux.org>: scripts/tags.sh: collect compiled source precisely Nikolay Borisov <nborisov@suse.com>: scripts/bloat-o-meter: Support comparing library archives Konstantin Khlebnikov <khlebnikov@yandex-team.ru>: scripts/decode_stacktrace.sh: skip missing symbols scripts/decode_stacktrace.sh: guess basepath if not specified scripts/decode_stacktrace.sh: guess path to modules scripts/decode_stacktrace.sh: guess path to vmlinux by release name Joe Perches <joe@perches.com>: const_structs.checkpatch: add regulator_ops Colin Ian King <colin.king@canonical.com>: scripts/spelling.txt: add more spellings to spelling.txt Subsystem: ntfs Luca Stefani <luca.stefani.ge1@gmail.com>: ntfs: fix ntfs_test_inode and ntfs_init_locked_inode function type Subsystem: ocfs2 Gang He <ghe@suse.com>: ocfs2: fix remounting needed after setfacl command Randy Dunlap <rdunlap@infradead.org>: ocfs2: suballoc.h: delete a duplicated word Junxiao Bi <junxiao.bi@oracle.com>: ocfs2: change slot number type s16 to u16 "Alexander A. Klimov" <grandmaster@al2klimov.de>: ocfs2: replace HTTP links with HTTPS ones Pavel Machek <pavel@ucw.cz>: ocfs2: fix unbalanced locking Subsystem: mm/slab-generic Waiman Long <longman@redhat.com>: mm, treewide: rename kzfree() to kfree_sensitive() William Kucharski <william.kucharski@oracle.com>: mm: ksize() should silently accept a NULL pointer Subsystem: mm/slab Kees Cook <keescook@chromium.org>: Patch series "mm: Expand CONFIG_SLAB_FREELIST_HARDENED to include SLAB": mm/slab: expand CONFIG_SLAB_FREELIST_HARDENED to include SLAB mm/slab: add naive detection of double free Long Li <lonuxli.64@gmail.com>: mm, slab: check GFP_SLAB_BUG_MASK before alloc_pages in kmalloc_order Xiao Yang <yangx.jy@cn.fujitsu.com>: mm/slab.c: update outdated kmem_list3 in a comment Subsystem: mm/slub Vlastimil Babka <vbabka@suse.cz>: Patch series "slub_debug fixes and improvements": mm, slub: extend slub_debug syntax for multiple blocks mm, slub: make some slub_debug related attributes read-only mm, slub: remove runtime allocation order changes mm, slub: make remaining slub_debug related attributes read-only mm, slub: make reclaim_account attribute read-only mm, slub: introduce static key for slub_debug() mm, slub: introduce kmem_cache_debug_flags() mm, slub: extend checks guarded by slub_debug static key mm, slab/slub: move and improve cache_from_obj() mm, slab/slub: improve error reporting and overhead of cache_from_obj() Sebastian Andrzej Siewior <bigeasy@linutronix.de>: mm/slub.c: drop lockdep_assert_held() from put_map() Subsystem: mm/kcsan Marco Elver <elver@google.com>: mm, kcsan: instrument SLAB/SLUB free with "ASSERT_EXCLUSIVE_ACCESS" Subsystem: mm/debug Anshuman Khandual <anshuman.khandual@arm.com>: Patch series "mm/debug_vm_pgtable: Add some more tests", v5: mm/debug_vm_pgtable: add tests validating arch helpers for core MM features mm/debug_vm_pgtable: add tests validating advanced arch page table helpers mm/debug_vm_pgtable: add debug prints for individual tests Documentation/mm: add descriptions for arch page table helpers "Matthew Wilcox (Oracle)" <willy@infradead.org>: Patch series "Improvements for dump_page()", v2: mm/debug: handle page->mapping better in dump_page mm/debug: dump compound page information on a second line mm/debug: print head flags in dump_page mm/debug: switch dump_page to get_kernel_nofault mm/debug: print the inode number in dump_page mm/debug: print hashed address of struct page John Hubbard <jhubbard@nvidia.com>: mm, dump_page: do not crash with bad compound_mapcount() Subsystem: mm/pagecache Yang Shi <yang.shi@linux.alibaba.com>: mm: filemap: clear idle flag for writes mm: filemap: add missing FGP_ flags in kerneldoc comment for pagecache_get_page Subsystem: mm/gup Tang Yizhou <tangyizhou@huawei.com>: mm/gup.c: fix the comment of return value for populate_vma_page_range() Subsystem: mm/swap Zhen Lei <thunder.leizhen@huawei.com>: Patch series "clean up some functions in mm/swap_slots.c": mm/swap_slots.c: simplify alloc_swap_slot_cache() mm/swap_slots.c: simplify enable_swap_slots_cache() mm/swap_slots.c: remove redundant check for swap_slot_cache_initialized Krzysztof Kozlowski <krzk@kernel.org>: mm: swap: fix kerneldoc of swap_vma_readahead() Xianting Tian <xianting_tian@126.com>: mm/page_io.c: use blk_io_schedule() for avoiding task hung in sync io Subsystem: mm/shmem Chris Down <chris@chrisdown.name>: Patch series "tmpfs: inode: Reduce risk of inum overflow", v7: tmpfs: per-superblock i_ino support tmpfs: support 64-bit inums per-sb Subsystem: mm/memcg Roman Gushchin <guro@fb.com>: mm: kmem: make memcg_kmem_enabled() irreversible Patch series "The new cgroup slab memory controller", v7: mm: memcg: factor out memcg- and lruvec-level changes out of __mod_lruvec_state() mm: memcg: prepare for byte-sized vmstat items mm: memcg: convert vmstat slab counters to bytes mm: slub: implement SLUB version of obj_to_index() Johannes Weiner <hannes@cmpxchg.org>: mm: memcontrol: decouple reference counting from page accounting Roman Gushchin <guro@fb.com>: mm: memcg/slab: obj_cgroup API mm: memcg/slab: allocate obj_cgroups for non-root slab pages mm: memcg/slab: save obj_cgroup for non-root slab objects mm: memcg/slab: charge individual slab objects instead of pages mm: memcg/slab: deprecate memory.kmem.slabinfo mm: memcg/slab: move memcg_kmem_bypass() to memcontrol.h mm: memcg/slab: use a single set of kmem_caches for all accounted allocations mm: memcg/slab: simplify memcg cache creation mm: memcg/slab: remove memcg_kmem_get_cache() mm: memcg/slab: deprecate slab_root_caches mm: memcg/slab: remove redundant check in memcg_accumulate_slabinfo() mm: memcg/slab: use a single set of kmem_caches for all allocations kselftests: cgroup: add kernel memory accounting tests tools/cgroup: add memcg_slabinfo.py tool Shakeel Butt <shakeelb@google.com>: mm: memcontrol: account kernel stack per node Roman Gushchin <guro@fb.com>: mm: memcg/slab: remove unused argument by charge_slab_page() mm: slab: rename (un)charge_slab_page() to (un)account_slab_page() mm: kmem: switch to static_branch_likely() in memcg_kmem_enabled() mm: memcontrol: avoid workload stalls when lowering memory.high Chris Down <chris@chrisdown.name>: Patch series "mm, memcg: reclaim harder before high throttling", v2: mm, memcg: reclaim more aggressively before high allocator throttling mm, memcg: unify reclaim retry limits with page allocator Yafang Shao <laoar.shao@gmail.com>: Patch series "mm, memcg: memory.{low,min} reclaim fix & cleanup", v4: mm, memcg: avoid stale protection values when cgroup is above protection Chris Down <chris@chrisdown.name>: mm, memcg: decouple e{low,min} state mutations from protection checks Yafang Shao <laoar.shao@gmail.com>: memcg, oom: check memcg margin for parallel oom Johannes Weiner <hannes@cmpxchg.org>: mm: memcontrol: restore proper dirty throttling when memory.high changes mm: memcontrol: don't count limit-setting reclaim as memory pressure Michal Koutný <mkoutny@suse.com>: mm/page_counter.c: fix protection usage propagation Subsystem: mm/pagemap Ralph Campbell <rcampbell@nvidia.com>: mm: remove redundant check non_swap_entry() Alex Zhang <zhangalex@google.com>: mm/memory.c: make remap_pfn_range() reject unaligned addr Mike Rapoport <rppt@linux.ibm.com>: Patch series "mm: cleanup usage of <asm/pgalloc.h>": mm: remove unneeded includes of <asm/pgalloc.h> opeinrisc: switch to generic version of pte allocation xtensa: switch to generic version of pte allocation asm-generic: pgalloc: provide generic pmd_alloc_one() and pmd_free_one() asm-generic: pgalloc: provide generic pud_alloc_one() and pud_free_one() asm-generic: pgalloc: provide generic pgd_free() mm: move lib/ioremap.c to mm/ Joerg Roedel <jroedel@suse.de>: mm: move p?d_alloc_track to separate header file Zhen Lei <thunder.leizhen@huawei.com>: mm/mmap: optimize a branch judgment in ksys_mmap_pgoff() Feng Tang <feng.tang@intel.com>: Patch series "make vm_committed_as_batch aware of vm overcommit policy", v6: proc/meminfo: avoid open coded reading of vm_committed_as mm/util.c: make vm_memory_committed() more accurate percpu_counter: add percpu_counter_sync() mm: adjust vm_committed_as_batch according to vm overcommit policy Anshuman Khandual <anshuman.khandual@arm.com>: Patch series "arm64: Enable vmemmap mapping from device memory", v4: mm/sparsemem: enable vmem_altmap support in vmemmap_populate_basepages() mm/sparsemem: enable vmem_altmap support in vmemmap_alloc_block_buf() arm64/mm: enable vmem_altmap support for vmemmap mappings Miaohe Lin <linmiaohe@huawei.com>: mm: mmap: merge vma after call_mmap() if possible Peter Collingbourne <pcc@google.com>: mm: remove unnecessary wrapper function do_mmap_pgoff() Subsystem: mm/mremap Wei Yang <richard.weiyang@linux.alibaba.com>: Patch series "mm/mremap: cleanup move_page_tables() a little", v5: mm/mremap: it is sure to have enough space when extent meets requirement mm/mremap: calculate extent in one place mm/mremap: start addresses are properly aligned Subsystem: mm/mincore Ricardo Cañuelo <ricardo.canuelo@collabora.com>: selftests: add mincore() tests Subsystem: mm/sparsemem Wei Yang <richard.weiyang@linux.alibaba.com>: mm/sparse: never partially remove memmap for early section mm/sparse: only sub-section aligned range would be populated Mike Rapoport <rppt@linux.ibm.com>: mm/sparse: cleanup the code surrounding memory_present() Subsystem: mm/vmalloc "Matthew Wilcox (Oracle)" <willy@infradead.org>: vmalloc: convert to XArray "Uladzislau Rezki (Sony)" <urezki@gmail.com>: mm/vmalloc: simplify merge_or_add_vmap_area() mm/vmalloc: simplify augment_tree_propagate_check() mm/vmalloc: switch to "propagate()" callback mm/vmalloc: update the header about KVA rework Mike Rapoport <rppt@linux.ibm.com>: mm: vmalloc: remove redundant assignment in unmap_kernel_range_noflush() "Uladzislau Rezki (Sony)" <urezki@gmail.com>: mm/vmalloc.c: remove BUG() from the find_va_links() Subsystem: mm/kasan Marco Elver <elver@google.com>: kasan: improve and simplify Kconfig.kasan kasan: update required compiler versions in documentation Walter Wu <walter-zh.wu@mediatek.com>: Patch series "kasan: memorize and print call_rcu stack", v8: rcu: kasan: record and print call_rcu() call stack kasan: record and print the free track kasan: add tests for call_rcu stack recording kasan: update documentation for generic kasan Vincenzo Frascino <vincenzo.frascino@arm.com>: kasan: remove kasan_unpoison_stack_above_sp_to() Walter Wu <walter-zh.wu@mediatek.com>: lib/test_kasan.c: fix KASAN unit tests for tag-based KASAN Andrey Konovalov <andreyknvl@google.com>: Patch series "kasan: support stack instrumentation for tag-based mode", v2: kasan: don't tag stacks allocated with pagealloc efi: provide empty efi_enter_virtual_mode implementation kasan, arm64: don't instrument functions that enable kasan kasan: allow enabling stack tagging for tag-based mode kasan: adjust kasan_stack_oob for tag-based mode Subsystem: mm/pagealloc Vlastimil Babka <vbabka@suse.cz>: mm, page_alloc: use unlikely() in task_capc() Jaewon Kim <jaewon31.kim@samsung.com>: page_alloc: consider highatomic reserve in watermark fast Charan Teja Reddy <charante@codeaurora.org>: mm, page_alloc: skip ->waternark_boost for atomic order-0 allocations David Hildenbrand <david@redhat.com>: mm: remove vm_total_pages mm/page_alloc: remove nr_free_pagecache_pages() mm/memory_hotplug: document why shuffle_zone() is relevant mm/shuffle: remove dynamic reconfiguration Wei Yang <richard.weiyang@linux.alibaba.com>: mm/page_alloc.c: replace the definition of NR_MIGRATETYPE_BITS with PB_migratetype_bits mm/page_alloc.c: extract the common part in pfn_to_bitidx() mm/page_alloc.c: simplify pageblock bitmap access mm/page_alloc.c: remove unnecessary end_bitidx for [set|get]_pfnblock_flags_mask() Qian Cai <cai@lca.pw>: mm/page_alloc: silence a KASAN false positive Wei Yang <richard.weiyang@linux.alibaba.com>: mm/page_alloc: fallbacks at most has 3 elements Muchun Song <songmuchun@bytedance.com>: mm/page_alloc.c: skip setting nodemask when we are in interrupt Joonsoo Kim <iamjoonsoo.kim@lge.com>: mm/page_alloc: fix memalloc_nocma_{save/restore} APIs Subsystem: mm/hugetlb "Alexander A. Klimov" <grandmaster@al2klimov.de>: mm: thp: replace HTTP links with HTTPS ones Peter Xu <peterx@redhat.com>: mm/hugetlb: fix calculation of adjust_range_if_pmd_sharing_possible Hugh Dickins <hughd@google.com>: khugepaged: collapse_pte_mapped_thp() flush the right range khugepaged: collapse_pte_mapped_thp() protect the pmd lock khugepaged: retract_page_tables() remember to test exit khugepaged: khugepaged_test_exit() check mmget_still_valid() Subsystem: mm/vmscan dylan-meiners <spacct.spacct@gmail.com>: mm/vmscan.c: fix typo Shakeel Butt <shakeelb@google.com>: mm: vmscan: consistent update to pgrefill Documentation/admin-guide/kernel-parameters.txt | 2 Documentation/dev-tools/kasan.rst | 10 Documentation/filesystems/dlmfs.rst | 2 Documentation/filesystems/ocfs2.rst | 2 Documentation/filesystems/tmpfs.rst | 18 Documentation/vm/arch_pgtable_helpers.rst | 258 +++++ Documentation/vm/memory-model.rst | 9 Documentation/vm/slub.rst | 51 - arch/alpha/include/asm/pgalloc.h | 21 arch/alpha/include/asm/tlbflush.h | 1 arch/alpha/kernel/core_irongate.c | 1 arch/alpha/kernel/core_marvel.c | 1 arch/alpha/kernel/core_titan.c | 1 arch/alpha/kernel/machvec_impl.h | 2 arch/alpha/kernel/smp.c | 1 arch/alpha/mm/numa.c | 1 arch/arc/mm/fault.c | 1 arch/arc/mm/init.c | 1 arch/arm/include/asm/pgalloc.h | 12 arch/arm/include/asm/tlb.h | 1 arch/arm/kernel/machine_kexec.c | 1 arch/arm/kernel/smp.c | 1 arch/arm/kernel/suspend.c | 1 arch/arm/mach-omap2/omap-mpuss-lowpower.c | 1 arch/arm/mm/hugetlbpage.c | 1 arch/arm/mm/init.c | 9 arch/arm/mm/mmu.c | 1 arch/arm64/include/asm/pgalloc.h | 39 arch/arm64/kernel/setup.c | 2 arch/arm64/kernel/smp.c | 1 arch/arm64/mm/hugetlbpage.c | 1 arch/arm64/mm/init.c | 6 arch/arm64/mm/ioremap.c | 1 arch/arm64/mm/mmu.c | 63 - arch/csky/include/asm/pgalloc.h | 7 arch/csky/kernel/smp.c | 1 arch/hexagon/include/asm/pgalloc.h | 7 arch/ia64/include/asm/pgalloc.h | 24 arch/ia64/include/asm/tlb.h | 1 arch/ia64/kernel/process.c | 1 arch/ia64/kernel/smp.c | 1 arch/ia64/kernel/smpboot.c | 1 arch/ia64/mm/contig.c | 1 arch/ia64/mm/discontig.c | 4 arch/ia64/mm/hugetlbpage.c | 1 arch/ia64/mm/tlb.c | 1 arch/m68k/include/asm/mmu_context.h | 2 arch/m68k/include/asm/sun3_pgalloc.h | 7 arch/m68k/kernel/dma.c | 2 arch/m68k/kernel/traps.c | 3 arch/m68k/mm/cache.c | 2 arch/m68k/mm/fault.c | 1 arch/m68k/mm/kmap.c | 2 arch/m68k/mm/mcfmmu.c | 1 arch/m68k/mm/memory.c | 1 arch/m68k/sun3x/dvma.c | 2 arch/microblaze/include/asm/pgalloc.h | 6 arch/microblaze/include/asm/tlbflush.h | 1 arch/microblaze/kernel/process.c | 1 arch/microblaze/kernel/signal.c | 1 arch/microblaze/mm/init.c | 3 arch/mips/include/asm/pgalloc.h | 19 arch/mips/kernel/setup.c | 8 arch/mips/loongson64/numa.c | 1 arch/mips/sgi-ip27/ip27-memory.c | 2 arch/mips/sgi-ip32/ip32-memory.c | 1 arch/nds32/mm/mm-nds32.c | 2 arch/nios2/include/asm/pgalloc.h | 7 arch/openrisc/include/asm/pgalloc.h | 33 arch/openrisc/include/asm/tlbflush.h | 1 arch/openrisc/kernel/or32_ksyms.c | 1 arch/parisc/include/asm/mmu_context.h | 1 arch/parisc/include/asm/pgalloc.h | 12 arch/parisc/kernel/cache.c | 1 arch/parisc/kernel/pci-dma.c | 1 arch/parisc/kernel/process.c | 1 arch/parisc/kernel/signal.c | 1 arch/parisc/kernel/smp.c | 1 arch/parisc/mm/hugetlbpage.c | 1 arch/parisc/mm/init.c | 5 arch/parisc/mm/ioremap.c | 2 arch/powerpc/include/asm/tlb.h | 1 arch/powerpc/mm/book3s64/hash_hugetlbpage.c | 1 arch/powerpc/mm/book3s64/hash_pgtable.c | 1 arch/powerpc/mm/book3s64/hash_tlb.c | 1 arch/powerpc/mm/book3s64/radix_hugetlbpage.c | 1 arch/powerpc/mm/init_32.c | 1 arch/powerpc/mm/init_64.c | 4 arch/powerpc/mm/kasan/8xx.c | 1 arch/powerpc/mm/kasan/book3s_32.c | 1 arch/powerpc/mm/mem.c | 3 arch/powerpc/mm/nohash/40x.c | 1 arch/powerpc/mm/nohash/8xx.c | 1 arch/powerpc/mm/nohash/fsl_booke.c | 1 arch/powerpc/mm/nohash/kaslr_booke.c | 1 arch/powerpc/mm/nohash/tlb.c | 1 arch/powerpc/mm/numa.c | 1 arch/powerpc/mm/pgtable.c | 1 arch/powerpc/mm/pgtable_64.c | 1 arch/powerpc/mm/ptdump/hashpagetable.c | 2 arch/powerpc/mm/ptdump/ptdump.c | 1 arch/powerpc/platforms/pseries/cmm.c | 1 arch/riscv/include/asm/pgalloc.h | 18 arch/riscv/mm/fault.c | 1 arch/riscv/mm/init.c | 3 arch/s390/crypto/prng.c | 4 arch/s390/include/asm/tlb.h | 1 arch/s390/include/asm/tlbflush.h | 1 arch/s390/kernel/machine_kexec.c | 1 arch/s390/kernel/ptrace.c | 1 arch/s390/kvm/diag.c | 1 arch/s390/kvm/priv.c | 1 arch/s390/kvm/pv.c | 1 arch/s390/mm/cmm.c | 1 arch/s390/mm/init.c | 1 arch/s390/mm/mmap.c | 1 arch/s390/mm/pgtable.c | 1 arch/sh/include/asm/pgalloc.h | 4 arch/sh/kernel/idle.c | 1 arch/sh/kernel/machine_kexec.c | 1 arch/sh/mm/cache-sh3.c | 1 arch/sh/mm/cache-sh7705.c | 1 arch/sh/mm/hugetlbpage.c | 1 arch/sh/mm/init.c | 7 arch/sh/mm/ioremap_fixed.c | 1 arch/sh/mm/numa.c | 3 arch/sh/mm/tlb-sh3.c | 1 arch/sparc/include/asm/ide.h | 1 arch/sparc/include/asm/tlb_64.h | 1 arch/sparc/kernel/leon_smp.c | 1 arch/sparc/kernel/process_32.c | 1 arch/sparc/kernel/signal_32.c | 1 arch/sparc/kernel/smp_32.c | 1 arch/sparc/kernel/smp_64.c | 1 arch/sparc/kernel/sun4m_irq.c | 1 arch/sparc/mm/highmem.c | 1 arch/sparc/mm/init_64.c | 1 arch/sparc/mm/io-unit.c | 1 arch/sparc/mm/iommu.c | 1 arch/sparc/mm/tlb.c | 1 arch/um/include/asm/pgalloc.h | 9 arch/um/include/asm/pgtable-3level.h | 3 arch/um/kernel/mem.c | 17 arch/x86/ia32/ia32_aout.c | 1 arch/x86/include/asm/mmu_context.h | 1 arch/x86/include/asm/pgalloc.h | 42 arch/x86/kernel/alternative.c | 1 arch/x86/kernel/apic/apic.c | 1 arch/x86/kernel/mpparse.c | 1 arch/x86/kernel/traps.c | 1 arch/x86/mm/fault.c | 1 arch/x86/mm/hugetlbpage.c | 1 arch/x86/mm/init_32.c | 2 arch/x86/mm/init_64.c | 12 arch/x86/mm/kaslr.c | 1 arch/x86/mm/pgtable_32.c | 1 arch/x86/mm/pti.c | 1 arch/x86/platform/uv/bios_uv.c | 1 arch/x86/power/hibernate.c | 2 arch/xtensa/include/asm/pgalloc.h | 46 arch/xtensa/kernel/xtensa_ksyms.c | 1 arch/xtensa/mm/cache.c | 1 arch/xtensa/mm/fault.c | 1 crypto/adiantum.c | 2 crypto/ahash.c | 4 crypto/api.c | 2 crypto/asymmetric_keys/verify_pefile.c | 4 crypto/deflate.c | 2 crypto/drbg.c | 10 crypto/ecc.c | 8 crypto/ecdh.c | 2 crypto/gcm.c | 2 crypto/gf128mul.c | 4 crypto/jitterentropy-kcapi.c | 2 crypto/rng.c | 2 crypto/rsa-pkcs1pad.c | 6 crypto/seqiv.c | 2 crypto/shash.c | 2 crypto/skcipher.c | 2 crypto/testmgr.c | 6 crypto/zstd.c | 2 drivers/base/node.c | 10 drivers/block/xen-blkback/common.h | 1 drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c | 2 drivers/crypto/allwinner/sun8i-ss/sun8i-ss-cipher.c | 2 drivers/crypto/amlogic/amlogic-gxl-cipher.c | 4 drivers/crypto/atmel-ecc.c | 2 drivers/crypto/caam/caampkc.c | 28 drivers/crypto/cavium/cpt/cptvf_main.c | 6 drivers/crypto/cavium/cpt/cptvf_reqmanager.c | 12 drivers/crypto/cavium/nitrox/nitrox_lib.c | 4 drivers/crypto/cavium/zip/zip_crypto.c | 6 drivers/crypto/ccp/ccp-crypto-rsa.c | 6 drivers/crypto/ccree/cc_aead.c | 4 drivers/crypto/ccree/cc_buffer_mgr.c | 4 drivers/crypto/ccree/cc_cipher.c | 6 drivers/crypto/ccree/cc_hash.c | 8 drivers/crypto/ccree/cc_request_mgr.c | 2 drivers/crypto/marvell/cesa/hash.c | 2 drivers/crypto/marvell/octeontx/otx_cptvf_main.c | 6 drivers/crypto/marvell/octeontx/otx_cptvf_reqmgr.h | 2 drivers/crypto/nx/nx.c | 4 drivers/crypto/virtio/virtio_crypto_algs.c | 12 drivers/crypto/virtio/virtio_crypto_core.c | 2 drivers/iommu/ipmmu-vmsa.c | 1 drivers/md/dm-crypt.c | 32 drivers/md/dm-integrity.c | 6 drivers/misc/ibmvmc.c | 6 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c | 2 drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c | 6 drivers/net/ppp/ppp_mppe.c | 6 drivers/net/wireguard/noise.c | 4 drivers/net/wireguard/peer.c | 2 drivers/net/wireless/intel/iwlwifi/pcie/rx.c | 2 drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c | 6 drivers/net/wireless/intel/iwlwifi/pcie/tx.c | 6 drivers/net/wireless/intersil/orinoco/wext.c | 4 drivers/s390/crypto/ap_bus.h | 4 drivers/staging/ks7010/ks_hostif.c | 2 drivers/staging/rtl8723bs/core/rtw_security.c | 2 drivers/staging/wlan-ng/p80211netdev.c | 2 drivers/target/iscsi/iscsi_target_auth.c | 2 drivers/xen/balloon.c | 1 drivers/xen/privcmd.c | 1 fs/Kconfig | 21 fs/aio.c | 6 fs/binfmt_elf_fdpic.c | 1 fs/cifs/cifsencrypt.c | 2 fs/cifs/connect.c | 10 fs/cifs/dfs_cache.c | 2 fs/cifs/misc.c | 8 fs/crypto/inline_crypt.c | 5 fs/crypto/keyring.c | 6 fs/crypto/keysetup_v1.c | 4 fs/ecryptfs/keystore.c | 4 fs/ecryptfs/messaging.c | 2 fs/hugetlbfs/inode.c | 2 fs/ntfs/dir.c | 2 fs/ntfs/inode.c | 27 fs/ntfs/inode.h | 4 fs/ntfs/mft.c | 4 fs/ocfs2/Kconfig | 6 fs/ocfs2/acl.c | 2 fs/ocfs2/blockcheck.c | 2 fs/ocfs2/dlmglue.c | 8 fs/ocfs2/ocfs2.h | 4 fs/ocfs2/suballoc.c | 4 fs/ocfs2/suballoc.h | 2 fs/ocfs2/super.c | 4 fs/proc/meminfo.c | 10 include/asm-generic/pgalloc.h | 80 + include/asm-generic/tlb.h | 1 include/crypto/aead.h | 2 include/crypto/akcipher.h | 2 include/crypto/gf128mul.h | 2 include/crypto/hash.h | 2 include/crypto/internal/acompress.h | 2 include/crypto/kpp.h | 2 include/crypto/skcipher.h | 2 include/linux/efi.h | 4 include/linux/fs.h | 17 include/linux/huge_mm.h | 2 include/linux/kasan.h | 4 include/linux/memcontrol.h | 209 +++- include/linux/mm.h | 86 - include/linux/mm_types.h | 5 include/linux/mman.h | 4 include/linux/mmu_notifier.h | 13 include/linux/mmzone.h | 54 - include/linux/pageblock-flags.h | 30 include/linux/percpu_counter.h | 4 include/linux/sched/mm.h | 8 include/linux/shmem_fs.h | 3 include/linux/slab.h | 11 include/linux/slab_def.h | 9 include/linux/slub_def.h | 31 include/linux/swap.h | 2 include/linux/vmstat.h | 14 init/Kconfig | 9 init/main.c | 2 ipc/shm.c | 2 kernel/fork.c | 54 - kernel/kthread.c | 8 kernel/power/snapshot.c | 2 kernel/rcu/tree.c | 2 kernel/scs.c | 2 kernel/sysctl.c | 2 lib/Kconfig.kasan | 39 lib/Makefile | 1 lib/ioremap.c | 287 ----- lib/mpi/mpiutil.c | 6 lib/percpu_counter.c | 19 lib/test_kasan.c | 87 + mm/Kconfig | 6 mm/Makefile | 2 mm/debug.c | 103 +- mm/debug_vm_pgtable.c | 666 +++++++++++++ mm/filemap.c | 9 mm/gup.c | 3 mm/huge_memory.c | 14 mm/hugetlb.c | 25 mm/ioremap.c | 289 +++++ mm/kasan/common.c | 41 mm/kasan/generic.c | 43 mm/kasan/generic_report.c | 1 mm/kasan/kasan.h | 25 mm/kasan/quarantine.c | 1 mm/kasan/report.c | 54 - mm/kasan/tags.c | 37 mm/khugepaged.c | 75 - mm/memcontrol.c | 832 ++++++++++------- mm/memory.c | 15 mm/memory_hotplug.c | 11 mm/migrate.c | 6 mm/mm_init.c | 20 mm/mmap.c | 45 mm/mremap.c | 19 mm/nommu.c | 6 mm/oom_kill.c | 2 mm/page-writeback.c | 6 mm/page_alloc.c | 226 ++-- mm/page_counter.c | 6 mm/page_io.c | 2 mm/pgalloc-track.h | 51 + mm/shmem.c | 133 ++ mm/shuffle.c | 46 mm/shuffle.h | 17 mm/slab.c | 129 +- mm/slab.h | 755 ++++++--------- mm/slab_common.c | 829 ++-------------- mm/slob.c | 12 mm/slub.c | 680 ++++--------- mm/sparse-vmemmap.c | 62 - mm/sparse.c | 31 mm/swap_slots.c | 45 mm/swap_state.c | 2 mm/util.c | 52 + mm/vmalloc.c | 176 +-- mm/vmscan.c | 39 mm/vmstat.c | 38 mm/workingset.c | 6 net/atm/mpoa_caches.c | 4 net/bluetooth/ecdh_helper.c | 6 net/bluetooth/smp.c | 24 net/core/sock.c | 2 net/ipv4/tcp_fastopen.c | 2 net/mac80211/aead_api.c | 4 net/mac80211/aes_gmac.c | 2 net/mac80211/key.c | 2 net/mac802154/llsec.c | 20 net/sctp/auth.c | 2 net/sunrpc/auth_gss/gss_krb5_crypto.c | 4 net/sunrpc/auth_gss/gss_krb5_keys.c | 6 net/sunrpc/auth_gss/gss_krb5_mech.c | 2 net/tipc/crypto.c | 10 net/wireless/core.c | 2 net/wireless/ibss.c | 4 net/wireless/lib80211_crypt_tkip.c | 2 net/wireless/lib80211_crypt_wep.c | 2 net/wireless/nl80211.c | 24 net/wireless/sme.c | 6 net/wireless/util.c | 2 net/wireless/wext-sme.c | 2 scripts/Makefile.kasan | 3 scripts/bloat-o-meter | 2 scripts/coccinelle/free/devm_free.cocci | 4 scripts/coccinelle/free/ifnullfree.cocci | 4 scripts/coccinelle/free/kfree.cocci | 6 scripts/coccinelle/free/kfreeaddr.cocci | 2 scripts/const_structs.checkpatch | 1 scripts/decode_stacktrace.sh | 85 + scripts/spelling.txt | 19 scripts/tags.sh | 18 security/apparmor/domain.c | 4 security/apparmor/include/file.h | 2 security/apparmor/policy.c | 24 security/apparmor/policy_ns.c | 6 security/apparmor/policy_unpack.c | 14 security/keys/big_key.c | 6 security/keys/dh.c | 14 security/keys/encrypted-keys/encrypted.c | 14 security/keys/trusted-keys/trusted_tpm1.c | 34 security/keys/user_defined.c | 6 tools/cgroup/memcg_slabinfo.py | 226 ++++ tools/include/linux/jhash.h | 2 tools/lib/rbtree.c | 2 tools/lib/traceevent/event-parse.h | 2 tools/testing/ktest/examples/README | 2 tools/testing/ktest/examples/crosstests.conf | 2 tools/testing/selftests/Makefile | 1 tools/testing/selftests/cgroup/.gitignore | 1 tools/testing/selftests/cgroup/Makefile | 2 tools/testing/selftests/cgroup/cgroup_util.c | 2 tools/testing/selftests/cgroup/test_kmem.c | 382 +++++++ tools/testing/selftests/mincore/.gitignore | 2 tools/testing/selftests/mincore/Makefile | 6 tools/testing/selftests/mincore/mincore_selftest.c | 361 +++++++ 397 files changed, 5547 insertions(+), 4072 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-07-24 4:14 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-07-24 4:14 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 15 patches, based on f37e99aca03f63aa3f2bd13ceaf769455d12c4b0. Subsystems affected by this patch series: mm/pagemap mm/shmem mm/hotfixes mm/memcg mm/hugetlb mailmap squashfs scripts io-mapping MAINTAINERS gdb Subsystem: mm/pagemap Yang Shi <yang.shi@linux.alibaba.com>: mm/memory.c: avoid access flag update TLB flush for retried page fault "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>: mm/mmap.c: close race between munmap() and expand_upwards()/downwards() Subsystem: mm/shmem Chengguang Xu <cgxu519@mykernel.net>: vfs/xattr: mm/shmem: kernfs: release simple xattr entry in a right way Subsystem: mm/hotfixes Tom Rix <trix@redhat.com>: mm: initialize return of vm_insert_pages Bhupesh Sharma <bhsharma@redhat.com>: mm/memcontrol: fix OOPS inside mem_cgroup_get_nr_swap_pages() Subsystem: mm/memcg Hugh Dickins <hughd@google.com>: mm/memcg: fix refcount error while moving and swapping Muchun Song <songmuchun@bytedance.com>: mm: memcg/slab: fix memory leak at non-root kmem_cache destroy Subsystem: mm/hugetlb Barry Song <song.bao.hua@hisilicon.com>: mm/hugetlb: avoid hardcoding while checking if cma is enabled "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>: khugepaged: fix null-pointer dereference due to race Subsystem: mailmap Mike Rapoport <rppt@linux.ibm.com>: mailmap: add entry for Mike Rapoport Subsystem: squashfs Phillip Lougher <phillip@squashfs.org.uk>: squashfs: fix length field overlap check in metadata reading Subsystem: scripts Pi-Hsun Shih <pihsun@chromium.org>: scripts/decode_stacktrace: strip basepath from all paths Subsystem: io-mapping "Michael J. Ruhl" <michael.j.ruhl@intel.com>: io-mapping: indicate mapping failure Subsystem: MAINTAINERS Andrey Konovalov <andreyknvl@google.com>: MAINTAINERS: add KCOV section Subsystem: gdb Stefano Garzarella <sgarzare@redhat.com>: scripts/gdb: fix lx-symbols 'gdb.error' while loading modules .mailmap | 3 +++ MAINTAINERS | 11 +++++++++++ fs/squashfs/block.c | 2 +- include/linux/io-mapping.h | 5 ++++- include/linux/xattr.h | 3 ++- mm/hugetlb.c | 15 ++++++++++----- mm/khugepaged.c | 3 +++ mm/memcontrol.c | 13 ++++++++++--- mm/memory.c | 9 +++++++-- mm/mmap.c | 16 ++++++++++++++-- mm/shmem.c | 2 +- mm/slab_common.c | 35 ++++++++++++++++++++++++++++------- scripts/decode_stacktrace.sh | 4 ++-- scripts/gdb/linux/symbols.py | 2 +- 14 files changed, 97 insertions(+), 26 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-07-03 22:14 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-07-03 22:14 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 5 patches, based on cdd3bb54332f82295ed90cd0c09c78cd0c0ee822. Subsystems affected by this patch series: mm/hugetlb samples mm/cma mm/vmalloc mm/pagealloc Subsystem: mm/hugetlb Mike Kravetz <mike.kravetz@oracle.com>: mm/hugetlb.c: fix pages per hugetlb calculation Subsystem: samples Kees Cook <keescook@chromium.org>: samples/vfs: avoid warning in statx override Subsystem: mm/cma Barry Song <song.bao.hua@hisilicon.com>: mm/cma.c: use exact_nid true to fix possible per-numa cma leak Subsystem: mm/vmalloc Christoph Hellwig <hch@lst.de>: vmalloc: fix the owner argument for the new __vmalloc_node_range callers Subsystem: mm/pagealloc Joel Savitz <jsavitz@redhat.com>: mm/page_alloc: fix documentation error arch/arm64/kernel/probes/kprobes.c | 2 +- arch/x86/hyperv/hv_init.c | 3 ++- kernel/module.c | 2 +- mm/cma.c | 4 ++-- mm/hugetlb.c | 2 +- mm/page_alloc.c | 2 +- samples/vfs/test-statx.c | 2 ++ 7 files changed, 10 insertions(+), 7 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-06-26 3:28 Andrew Morton 2020-06-26 6:51 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2020-06-26 3:28 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 32 patches, based on 908f7d12d3ba51dfe0449b9723199b423f97ca9a. Subsystems affected by this patch series: hotfixes mm/pagealloc kexec ocfs2 lib misc mm/slab mm/slab mm/slub mm/swap mm/pagemap mm/vmalloc mm/memcg mm/gup mm/thp mm/vmscan x86 mm/memory-hotplug MAINTAINERS Subsystem: hotfixes Stafford Horne <shorne@gmail.com>: openrisc: fix boot oops when DEBUG_VM is enabled Michal Hocko <mhocko@suse.com>: mm: do_swap_page(): fix up the error code Subsystem: mm/pagealloc Vlastimil Babka <vbabka@suse.cz>: mm, compaction: make capture control handling safe wrt interrupts Subsystem: kexec Lianbo Jiang <lijiang@redhat.com>: kexec: do not verify the signature without the lockdown or mandatory signature Subsystem: ocfs2 Junxiao Bi <junxiao.bi@oracle.com>: Patch series "ocfs2: fix nfsd over ocfs2 issues", v2: ocfs2: avoid inode removal while nfsd is accessing it ocfs2: load global_inode_alloc ocfs2: fix panic on nfs server over ocfs2 ocfs2: fix value of OCFS2_INVALID_SLOT Subsystem: lib Randy Dunlap <rdunlap@infradead.org>: lib: fix test_hmm.c reference after free Subsystem: misc Rikard Falkeborn <rikard.falkeborn@gmail.com>: linux/bits.h: fix unsigned less than zero warnings Subsystem: mm/slab Waiman Long <longman@redhat.com>: mm, slab: fix sign conversion problem in memcg_uncharge_slab() Subsystem: mm/slab Waiman Long <longman@redhat.com>: mm/slab: use memzero_explicit() in kzfree() Subsystem: mm/slub Sebastian Andrzej Siewior <bigeasy@linutronix.de>: slub: cure list_slab_objects() from double fix Subsystem: mm/swap Hugh Dickins <hughd@google.com>: mm: fix swap cache node allocation mask Subsystem: mm/pagemap Arjun Roy <arjunroy@google.com>: mm/memory.c: properly pte_offset_map_lock/unlock in vm_insert_pages() Christophe Leroy <christophe.leroy@csgroup.eu>: mm/debug_vm_pgtable: fix build failure with powerpc 8xx Stephen Rothwell <sfr@canb.auug.org.au>: make asm-generic/cacheflush.h more standalone Nathan Chancellor <natechancellor@gmail.com>: media: omap3isp: remove cacheflush.h Subsystem: mm/vmalloc Masanari Iida <standby24x7@gmail.com>: mm/vmalloc.c: fix a warning while make xmldocs Subsystem: mm/memcg Johannes Weiner <hannes@cmpxchg.org>: mm: memcontrol: handle div0 crash race condition in memory.low Muchun Song <songmuchun@bytedance.com>: mm/memcontrol.c: add missed css_put() Chris Down <chris@chrisdown.name>: mm/memcontrol.c: prevent missed memory.low load tears Subsystem: mm/gup Souptick Joarder <jrdr.linux@gmail.com>: docs: mm/gup: minor documentation update Subsystem: mm/thp Yang Shi <yang.shi@linux.alibaba.com>: doc: THP CoW fault no longer allocate THP Subsystem: mm/vmscan Johannes Weiner <hannes@cmpxchg.org>: Patch series "fix for "mm: balance LRU lists based on relative thrashing" patchset": mm: workingset: age nonresident information alongside anonymous pages Joonsoo Kim <iamjoonsoo.kim@lge.com>: mm/swap: fix for "mm: workingset: age nonresident information alongside anonymous pages" mm/memory: fix IO cost for anonymous page Subsystem: x86 Christoph Hellwig <hch@lst.de>: Patch series "fix a hyperv W^X violation and remove vmalloc_exec": x86/hyperv: allocate the hypercall page with only read and execute bits arm64: use PAGE_KERNEL_ROX directly in alloc_insn_page mm: remove vmalloc_exec Subsystem: mm/memory-hotplug Ben Widawsky <ben.widawsky@intel.com>: mm/memory_hotplug.c: fix false softlockup during pfn range removal Subsystem: MAINTAINERS Luc Van Oostenryck <luc.vanoostenryck@gmail.com>: MAINTAINERS: update info for sparse Documentation/admin-guide/cgroup-v2.rst | 4 +- Documentation/admin-guide/mm/transhuge.rst | 3 - Documentation/core-api/pin_user_pages.rst | 2 - MAINTAINERS | 4 +- arch/arm64/kernel/probes/kprobes.c | 12 +------ arch/openrisc/kernel/dma.c | 5 +++ arch/x86/hyperv/hv_init.c | 4 +- arch/x86/include/asm/pgtable_types.h | 2 + drivers/media/platform/omap3isp/isp.c | 2 - drivers/media/platform/omap3isp/ispvideo.c | 1 fs/ocfs2/dlmglue.c | 17 ++++++++++ fs/ocfs2/ocfs2.h | 1 fs/ocfs2/ocfs2_fs.h | 4 +- fs/ocfs2/suballoc.c | 9 +++-- include/asm-generic/cacheflush.h | 5 +++ include/linux/bits.h | 3 + include/linux/mmzone.h | 4 +- include/linux/swap.h | 1 include/linux/vmalloc.h | 1 kernel/kexec_file.c | 36 ++++------------------ kernel/module.c | 4 +- lib/test_hmm.c | 3 - mm/compaction.c | 17 ++++++++-- mm/debug_vm_pgtable.c | 4 +- mm/memcontrol.c | 18 ++++++++--- mm/memory.c | 33 +++++++++++++------- mm/memory_hotplug.c | 13 ++++++-- mm/nommu.c | 17 ---------- mm/slab.h | 4 +- mm/slab_common.c | 2 - mm/slub.c | 19 ++--------- mm/swap.c | 3 - mm/swap_state.c | 4 +- mm/vmalloc.c | 21 ------------- mm/vmscan.c | 3 + mm/workingset.c | 46 +++++++++++++++++------------ 36 files changed, 168 insertions(+), 163 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-06-26 3:28 incoming Andrew Morton @ 2020-06-26 6:51 ` Linus Torvalds 2020-06-26 7:31 ` incoming Linus Torvalds 2020-06-26 17:39 ` incoming Konstantin Ryabitsev 0 siblings, 2 replies; 370+ messages in thread From: Linus Torvalds @ 2020-06-26 6:51 UTC (permalink / raw) To: Andrew Morton, Konstantin Ryabitsev; +Cc: Linux-MM, mm-commits On Thu, Jun 25, 2020 at 8:28 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > 32 patches, based on 908f7d12d3ba51dfe0449b9723199b423f97ca9a. You didn't cc lkml, so now none of the nice 'b4' automation seems to work for this series.. Yes, this cover-letter went to linux-mm (which is on lore), but the individual patches didn't. Konstantin, maybe mm-commits could be on lore too and then they'd have been caught that way? Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-06-26 6:51 ` incoming Linus Torvalds @ 2020-06-26 7:31 ` Linus Torvalds 2020-06-26 17:39 ` incoming Konstantin Ryabitsev 1 sibling, 0 replies; 370+ messages in thread From: Linus Torvalds @ 2020-06-26 7:31 UTC (permalink / raw) To: Andrew Morton, Konstantin Ryabitsev; +Cc: Linux-MM, mm-commits On Thu, Jun 25, 2020 at 11:51 PM Linus Torvalds <torvalds@linux-foundation.org> wrote: > > You didn't cc lkml, so now none of the nice 'b4' automation seems to > work for this series.. Note that I've picked them up the old-fashioned way, so don't re-send them. So more of a note for "please, next time..." Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-06-26 6:51 ` incoming Linus Torvalds 2020-06-26 7:31 ` incoming Linus Torvalds @ 2020-06-26 17:39 ` Konstantin Ryabitsev 2020-06-26 17:40 ` incoming Konstantin Ryabitsev 1 sibling, 1 reply; 370+ messages in thread From: Konstantin Ryabitsev @ 2020-06-26 17:39 UTC (permalink / raw) To: Linus Torvalds; +Cc: Andrew Morton, Linux-MM, mm-commits On Thu, Jun 25, 2020 at 11:51:06PM -0700, Linus Torvalds wrote: > On Thu, Jun 25, 2020 at 8:28 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > > > 32 patches, based on 908f7d12d3ba51dfe0449b9723199b423f97ca9a. > > You didn't cc lkml, so now none of the nice 'b4' automation seems to > work for this series.. > > Yes, this cover-letter went to linux-mm (which is on lore), but the > individual patches didn't. > > Konstantin, maybe mm-commits could be on lore too and then they'd have > been caught that way? Yes, I already have a request from Kees for linux-mm addition, so that should show up in archives before long. -K ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-06-26 17:39 ` incoming Konstantin Ryabitsev @ 2020-06-26 17:40 ` Konstantin Ryabitsev 0 siblings, 0 replies; 370+ messages in thread From: Konstantin Ryabitsev @ 2020-06-26 17:40 UTC (permalink / raw) To: Linus Torvalds; +Cc: Andrew Morton, Linux-MM, mm-commits On Fri, 26 Jun 2020 at 13:39, Konstantin Ryabitsev <konstantin@linuxfoundation.org> wrote: > > Konstantin, maybe mm-commits could be on lore too and then they'd have > > been caught that way? > > Yes, I already have a request from Kees for linux-mm addition, so that > should show up in archives before long. correction: mm-commits, that is -K ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-06-12 0:30 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-06-12 0:30 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits A few fixes and stragglers. 5 patches, based on 623f6dc593eaf98b91916836785278eddddaacf8. Subsystems affected by this patch series: mm/memory-failure ocfs2 lib/lzo misc Subsystem: mm/memory-failure Naoya Horiguchi <nao.horiguchi@gmail.com>: Patch series "hwpoison: fixes signaling on memory error": mm/memory-failure: prioritize prctl(PR_MCE_KILL) over vm.memory_failure_early_kill mm/memory-failure: send SIGBUS(BUS_MCEERR_AR) only to current thread Subsystem: ocfs2 Tom Seewald <tseewald@gmail.com>: ocfs2: fix build failure when TCP/IP is disabled Subsystem: lib/lzo Dave Rodgman <dave.rodgman@arm.com>: lib/lzo: fix ambiguous encoding bug in lzo-rle Subsystem: misc Christoph Hellwig <hch@lst.de>: amdgpu: a NULL ->mm does not mean a thread is a kthread Documentation/lzo.txt | 8 ++++- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 2 - fs/ocfs2/Kconfig | 2 - lib/lzo/lzo1x_compress.c | 13 ++++++++ mm/memory-failure.c | 43 +++++++++++++++++------------ 5 files changed, 47 insertions(+), 21 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-06-11 1:40 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-06-11 1:40 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm - various hotfixes and minor things - hch's use_mm/unuse_mm clearnups - new syscall process_madvise(): perform madvise() on a process other than self 25 patches, based on 6f630784cc0d92fb58ea326e2bc01aa056279ecb. Subsystems affected by this patch series: mm/hugetlb scripts kcov lib nilfs checkpatch lib mm/debug ocfs2 lib misc mm/madvise Subsystem: mm/hugetlb Dan Carpenter <dan.carpenter@oracle.com>: khugepaged: selftests: fix timeout condition in wait_for_scan() Subsystem: scripts SeongJae Park <sjpark@amazon.de>: scripts/spelling: add a few more typos Subsystem: kcov Andrey Konovalov <andreyknvl@google.com>: kcov: check kcov_softirq in kcov_remote_stop() Subsystem: lib Joe Perches <joe@perches.com>: lib/lz4/lz4_decompress.c: document deliberate use of `&' Subsystem: nilfs Ryusuke Konishi <konishi.ryusuke@gmail.com>: nilfs2: fix null pointer dereference at nilfs_segctor_do_construct() Subsystem: checkpatch Tim Froidcoeur <tim.froidcoeur@tessares.net>: checkpatch: correct check for kernel parameters doc Subsystem: lib Alexander Gordeev <agordeev@linux.ibm.com>: lib: fix bitmap_parse() on 64-bit big endian archs Subsystem: mm/debug "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>: mm/debug_vm_pgtable: fix kernel crash by checking for THP support Subsystem: ocfs2 Keyur Patel <iamkeyur96@gmail.com>: ocfs2: fix spelling mistake and grammar Ben Widawsky <ben.widawsky@intel.com>: mm: add comments on pglist_data zones Subsystem: lib Wei Yang <richard.weiyang@gmail.com>: lib: test get_count_order/long in test_bitops.c Subsystem: misc Walter Wu <walter-zh.wu@mediatek.com>: stacktrace: cleanup inconsistent variable type Christoph Hellwig <hch@lst.de>: Patch series "improve use_mm / unuse_mm", v2: kernel: move use_mm/unuse_mm to kthread.c kernel: move use_mm/unuse_mm to kthread.c kernel: better document the use_mm/unuse_mm API contract kernel: set USER_DS in kthread_use_mm Subsystem: mm/madvise Minchan Kim <minchan@kernel.org>: Patch series "introduce memory hinting API for external process", v7: mm/madvise: pass task and mm to do_madvise mm/madvise: introduce process_madvise() syscall: an external memory hinting API mm/madvise: check fatal signal pending of target process pid: move pidfd_get_pid() to pid.c mm/madvise: support both pid and pidfd for process_madvise Oleksandr Natalenko <oleksandr@redhat.com>: mm/madvise: allow KSM hints for remote API Minchan Kim <minchan@kernel.org>: mm: support vector address ranges for process_madvise mm: use only pidfd for process_madvise syscall YueHaibing <yuehaibing@huawei.com>: mm/madvise.c: remove duplicated include arch/alpha/kernel/syscalls/syscall.tbl | 1 arch/arm/tools/syscall.tbl | 1 arch/arm64/include/asm/unistd.h | 2 arch/arm64/include/asm/unistd32.h | 4 arch/ia64/kernel/syscalls/syscall.tbl | 1 arch/m68k/kernel/syscalls/syscall.tbl | 1 arch/microblaze/kernel/syscalls/syscall.tbl | 1 arch/mips/kernel/syscalls/syscall_n32.tbl | 3 arch/mips/kernel/syscalls/syscall_n64.tbl | 1 arch/mips/kernel/syscalls/syscall_o32.tbl | 3 arch/parisc/kernel/syscalls/syscall.tbl | 3 arch/powerpc/kernel/syscalls/syscall.tbl | 3 arch/powerpc/platforms/powernv/vas-fault.c | 4 arch/s390/kernel/syscalls/syscall.tbl | 3 arch/sh/kernel/syscalls/syscall.tbl | 1 arch/sparc/kernel/syscalls/syscall.tbl | 3 arch/x86/entry/syscalls/syscall_32.tbl | 3 arch/x86/entry/syscalls/syscall_64.tbl | 5 arch/xtensa/kernel/syscalls/syscall.tbl | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 5 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c | 2 drivers/gpu/drm/i915/gvt/kvmgt.c | 2 drivers/usb/gadget/function/f_fs.c | 10 drivers/usb/gadget/legacy/inode.c | 6 drivers/vfio/vfio_iommu_type1.c | 6 drivers/vhost/vhost.c | 8 fs/aio.c | 1 fs/io-wq.c | 15 - fs/io_uring.c | 11 fs/nilfs2/segment.c | 2 fs/ocfs2/mmap.c | 2 include/linux/compat.h | 10 include/linux/kthread.h | 9 include/linux/mm.h | 3 include/linux/mmu_context.h | 5 include/linux/mmzone.h | 14 include/linux/pid.h | 1 include/linux/stacktrace.h | 2 include/linux/syscalls.h | 16 - include/uapi/asm-generic/unistd.h | 7 kernel/exit.c | 17 - kernel/kcov.c | 26 + kernel/kthread.c | 95 +++++- kernel/pid.c | 17 + kernel/sys_ni.c | 2 lib/Kconfig.debug | 10 lib/bitmap.c | 9 lib/lz4/lz4_decompress.c | 3 lib/test_bitops.c | 53 +++ mm/Makefile | 2 mm/debug_vm_pgtable.c | 6 mm/madvise.c | 295 ++++++++++++++------ mm/mmu_context.c | 64 ---- mm/oom_kill.c | 6 mm/vmacache.c | 4 scripts/checkpatch.pl | 4 scripts/spelling.txt | 9 tools/testing/selftests/vm/khugepaged.c | 2 62 files changed, 526 insertions(+), 285 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-06-09 4:29 Andrew Morton 2020-06-09 16:58 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2020-06-09 4:29 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm - a kernel-wide sweep of show_stack() - pagetable cleanups - abstract out accesses to mmap_sem - prep for mmap_sem scalability work - hch's user acess work 93 patches, based on abfbb29297c27e3f101f348dc9e467b0fe70f919: Subsystems affected by this patch series: debug mm/pagemap mm/maccess mm/documentation Subsystem: debug Dmitry Safonov <dima@arista.com>: Patch series "Add log level to show_stack()", v3: kallsyms/printk: add loglvl to print_ip_sym() alpha: add show_stack_loglvl() arc: add show_stack_loglvl() arm/asm: add loglvl to c_backtrace() arm: add loglvl to unwind_backtrace() arm: add loglvl to dump_backtrace() arm: wire up dump_backtrace_{entry,stm} arm: add show_stack_loglvl() arm64: add loglvl to dump_backtrace() arm64: add show_stack_loglvl() c6x: add show_stack_loglvl() csky: add show_stack_loglvl() h8300: add show_stack_loglvl() hexagon: add show_stack_loglvl() ia64: pass log level as arg into ia64_do_show_stack() ia64: add show_stack_loglvl() m68k: add show_stack_loglvl() microblaze: add loglvl to microblaze_unwind_inner() microblaze: add loglvl to microblaze_unwind() microblaze: add show_stack_loglvl() mips: add show_stack_loglvl() nds32: add show_stack_loglvl() nios2: add show_stack_loglvl() openrisc: add show_stack_loglvl() parisc: add show_stack_loglvl() powerpc: add show_stack_loglvl() riscv: add show_stack_loglvl() s390: add show_stack_loglvl() sh: add loglvl to dump_mem() sh: remove needless printk() sh: add loglvl to printk_address() sh: add loglvl to show_trace() sh: add show_stack_loglvl() sparc: add show_stack_loglvl() um/sysrq: remove needless variable sp um: add show_stack_loglvl() unicore32: remove unused pmode argument in c_backtrace() unicore32: add loglvl to c_backtrace() unicore32: add show_stack_loglvl() x86: add missing const qualifiers for log_lvl x86: add show_stack_loglvl() xtensa: add loglvl to show_trace() xtensa: add show_stack_loglvl() sysrq: use show_stack_loglvl() x86/amd_gart: print stacktrace for a leak with KERN_ERR power: use show_stack_loglvl() kdb: don't play with console_loglevel sched: print stack trace with KERN_INFO kernel: use show_stack_loglvl() kernel: rename show_stack_loglvl() => show_stack() Subsystem: mm/pagemap Mike Rapoport <rppt@linux.ibm.com>: Patch series "mm: consolidate definitions of page table accessors", v2: mm: don't include asm/pgtable.h if linux/mm.h is already included mm: introduce include/linux/pgtable.h mm: reorder includes after introduction of linux/pgtable.h csky: replace definitions of __pXd_offset() with pXd_index() m68k/mm/motorola: move comment about page table allocation funcitons m68k/mm: move {cache,nocahe}_page() definitions close to their user x86/mm: simplify init_trampoline() and surrounding logic mm: pgtable: add shortcuts for accessing kernel PMD and PTE mm: consolidate pte_index() and pte_offset_*() definitions Michel Lespinasse <walken@google.com>: mmap locking API: initial implementation as rwsem wrappers MMU notifier: use the new mmap locking API DMA reservations: use the new mmap locking API mmap locking API: use coccinelle to convert mmap_sem rwsem call sites mmap locking API: convert mmap_sem call sites missed by coccinelle mmap locking API: convert nested write lock sites mmap locking API: add mmap_read_trylock_non_owner() mmap locking API: add MMAP_LOCK_INITIALIZER mmap locking API: add mmap_assert_locked() and mmap_assert_write_locked() mmap locking API: rename mmap_sem to mmap_lock mmap locking API: convert mmap_sem API comments mmap locking API: convert mmap_sem comments Subsystem: mm/maccess Christoph Hellwig <hch@lst.de>: Patch series "clean up and streamline probe_kernel_* and friends", v4: maccess: unexport probe_kernel_write() maccess: remove various unused weak aliases maccess: remove duplicate kerneldoc comments maccess: clarify kerneldoc comments maccess: update the top of file comment maccess: rename strncpy_from_unsafe_user to strncpy_from_user_nofault maccess: rename strncpy_from_unsafe_strict to strncpy_from_kernel_nofault maccess: rename strnlen_unsafe_user to strnlen_user_nofault maccess: remove probe_read_common and probe_write_common maccess: unify the probe kernel arch hooks bpf: factor out a bpf_trace_copy_string helper bpf: handle the compat string in bpf_trace_copy_string better Andrew Morton <akpm@linux-foundation.org>: bpf:bpf_seq_printf(): handle potentially unsafe format string better Christoph Hellwig <hch@lst.de>: bpf: rework the compat kernel probe handling tracing/kprobes: handle mixed kernel/userspace probes better maccess: remove strncpy_from_unsafe maccess: always use strict semantics for probe_kernel_read maccess: move user access routines together maccess: allow architectures to provide kernel probing directly x86: use non-set_fs based maccess routines maccess: return -ERANGE when probe_kernel_read() fails Subsystem: mm/documentation Luis Chamberlain <mcgrof@kernel.org>: include/linux/cache.h: expand documentation over __read_mostly Documentation/admin-guide/mm/numa_memory_policy.rst | 10 Documentation/admin-guide/mm/userfaultfd.rst | 2 Documentation/filesystems/locking.rst | 2 Documentation/vm/hmm.rst | 6 Documentation/vm/transhuge.rst | 4 arch/alpha/boot/bootp.c | 1 arch/alpha/boot/bootpz.c | 1 arch/alpha/boot/main.c | 1 arch/alpha/include/asm/io.h | 1 arch/alpha/include/asm/pgtable.h | 16 arch/alpha/kernel/process.c | 1 arch/alpha/kernel/proto.h | 4 arch/alpha/kernel/ptrace.c | 1 arch/alpha/kernel/setup.c | 1 arch/alpha/kernel/smp.c | 1 arch/alpha/kernel/sys_alcor.c | 1 arch/alpha/kernel/sys_cabriolet.c | 1 arch/alpha/kernel/sys_dp264.c | 1 arch/alpha/kernel/sys_eb64p.c | 1 arch/alpha/kernel/sys_eiger.c | 1 arch/alpha/kernel/sys_jensen.c | 1 arch/alpha/kernel/sys_marvel.c | 1 arch/alpha/kernel/sys_miata.c | 1 arch/alpha/kernel/sys_mikasa.c | 1 arch/alpha/kernel/sys_nautilus.c | 1 arch/alpha/kernel/sys_noritake.c | 1 arch/alpha/kernel/sys_rawhide.c | 1 arch/alpha/kernel/sys_ruffian.c | 1 arch/alpha/kernel/sys_rx164.c | 1 arch/alpha/kernel/sys_sable.c | 1 arch/alpha/kernel/sys_sio.c | 1 arch/alpha/kernel/sys_sx164.c | 1 arch/alpha/kernel/sys_takara.c | 1 arch/alpha/kernel/sys_titan.c | 1 arch/alpha/kernel/sys_wildfire.c | 1 arch/alpha/kernel/traps.c | 40 arch/alpha/mm/fault.c | 12 arch/alpha/mm/init.c | 1 arch/arc/include/asm/bug.h | 3 arch/arc/include/asm/pgtable.h | 24 arch/arc/kernel/process.c | 4 arch/arc/kernel/stacktrace.c | 29 arch/arc/kernel/troubleshoot.c | 6 arch/arc/mm/fault.c | 6 arch/arc/mm/highmem.c | 14 arch/arc/mm/tlbex.S | 4 arch/arm/include/asm/bug.h | 3 arch/arm/include/asm/efi.h | 3 arch/arm/include/asm/fixmap.h | 4 arch/arm/include/asm/idmap.h | 2 arch/arm/include/asm/pgtable-2level.h | 1 arch/arm/include/asm/pgtable-3level.h | 7 arch/arm/include/asm/pgtable-nommu.h | 3 arch/arm/include/asm/pgtable.h | 25 arch/arm/include/asm/traps.h | 3 arch/arm/include/asm/unwind.h | 3 arch/arm/kernel/head.S | 4 arch/arm/kernel/machine_kexec.c | 1 arch/arm/kernel/module.c | 1 arch/arm/kernel/process.c | 4 arch/arm/kernel/ptrace.c | 1 arch/arm/kernel/smp.c | 1 arch/arm/kernel/suspend.c | 4 arch/arm/kernel/swp_emulate.c | 4 arch/arm/kernel/traps.c | 61 arch/arm/kernel/unwind.c | 7 arch/arm/kernel/vdso.c | 2 arch/arm/kernel/vmlinux.lds.S | 4 arch/arm/lib/backtrace-clang.S | 9 arch/arm/lib/backtrace.S | 14 arch/arm/lib/uaccess_with_memcpy.c | 16 arch/arm/mach-ebsa110/core.c | 1 arch/arm/mach-footbridge/common.c | 1 arch/arm/mach-imx/mm-imx21.c | 1 arch/arm/mach-imx/mm-imx27.c | 1 arch/arm/mach-imx/mm-imx3.c | 1 arch/arm/mach-integrator/core.c | 4 arch/arm/mach-iop32x/i2c.c | 1 arch/arm/mach-iop32x/iq31244.c | 1 arch/arm/mach-iop32x/iq80321.c | 1 arch/arm/mach-iop32x/n2100.c | 1 arch/arm/mach-ixp4xx/common.c | 1 arch/arm/mach-keystone/platsmp.c | 4 arch/arm/mach-sa1100/assabet.c | 3 arch/arm/mach-sa1100/hackkit.c | 4 arch/arm/mach-tegra/iomap.h | 2 arch/arm/mach-zynq/common.c | 4 arch/arm/mm/copypage-v4mc.c | 1 arch/arm/mm/copypage-v6.c | 1 arch/arm/mm/copypage-xscale.c | 1 arch/arm/mm/dump.c | 1 arch/arm/mm/fault-armv.c | 1 arch/arm/mm/fault.c | 9 arch/arm/mm/highmem.c | 4 arch/arm/mm/idmap.c | 4 arch/arm/mm/ioremap.c | 31 arch/arm/mm/mm.h | 8 arch/arm/mm/mmu.c | 7 arch/arm/mm/pageattr.c | 1 arch/arm/mm/proc-arm1020.S | 4 arch/arm/mm/proc-arm1020e.S | 4 arch/arm/mm/proc-arm1022.S | 4 arch/arm/mm/proc-arm1026.S | 4 arch/arm/mm/proc-arm720.S | 4 arch/arm/mm/proc-arm740.S | 4 arch/arm/mm/proc-arm7tdmi.S | 4 arch/arm/mm/proc-arm920.S | 4 arch/arm/mm/proc-arm922.S | 4 arch/arm/mm/proc-arm925.S | 4 arch/arm/mm/proc-arm926.S | 4 arch/arm/mm/proc-arm940.S | 4 arch/arm/mm/proc-arm946.S | 4 arch/arm/mm/proc-arm9tdmi.S | 4 arch/arm/mm/proc-fa526.S | 4 arch/arm/mm/proc-feroceon.S | 4 arch/arm/mm/proc-mohawk.S | 4 arch/arm/mm/proc-sa110.S | 4 arch/arm/mm/proc-sa1100.S | 4 arch/arm/mm/proc-v6.S | 4 arch/arm/mm/proc-v7.S | 4 arch/arm/mm/proc-xsc3.S | 4 arch/arm/mm/proc-xscale.S | 4 arch/arm/mm/pv-fixup-asm.S | 4 arch/arm64/include/asm/io.h | 4 arch/arm64/include/asm/kernel-pgtable.h | 2 arch/arm64/include/asm/kvm_mmu.h | 4 arch/arm64/include/asm/mmu_context.h | 4 arch/arm64/include/asm/pgtable.h | 40 arch/arm64/include/asm/stacktrace.h | 3 arch/arm64/include/asm/stage2_pgtable.h | 2 arch/arm64/include/asm/vmap_stack.h | 4 arch/arm64/kernel/acpi.c | 4 arch/arm64/kernel/head.S | 4 arch/arm64/kernel/hibernate.c | 5 arch/arm64/kernel/kaslr.c | 4 arch/arm64/kernel/process.c | 2 arch/arm64/kernel/ptrace.c | 1 arch/arm64/kernel/smp.c | 1 arch/arm64/kernel/suspend.c | 4 arch/arm64/kernel/traps.c | 37 arch/arm64/kernel/vdso.c | 8 arch/arm64/kernel/vmlinux.lds.S | 3 arch/arm64/kvm/mmu.c | 14 arch/arm64/mm/dump.c | 1 arch/arm64/mm/fault.c | 9 arch/arm64/mm/kasan_init.c | 3 arch/arm64/mm/mmu.c | 8 arch/arm64/mm/pageattr.c | 1 arch/arm64/mm/proc.S | 4 arch/c6x/include/asm/pgtable.h | 3 arch/c6x/kernel/traps.c | 28 arch/csky/include/asm/io.h | 2 arch/csky/include/asm/pgtable.h | 37 arch/csky/kernel/module.c | 1 arch/csky/kernel/ptrace.c | 5 arch/csky/kernel/stacktrace.c | 20 arch/csky/kernel/vdso.c | 4 arch/csky/mm/fault.c | 10 arch/csky/mm/highmem.c | 2 arch/csky/mm/init.c | 7 arch/csky/mm/tlb.c | 1 arch/h8300/include/asm/pgtable.h | 1 arch/h8300/kernel/process.c | 1 arch/h8300/kernel/setup.c | 1 arch/h8300/kernel/signal.c | 1 arch/h8300/kernel/traps.c | 26 arch/h8300/mm/fault.c | 1 arch/h8300/mm/init.c | 1 arch/h8300/mm/memory.c | 1 arch/hexagon/include/asm/fixmap.h | 4 arch/hexagon/include/asm/pgtable.h | 55 arch/hexagon/kernel/traps.c | 39 arch/hexagon/kernel/vdso.c | 4 arch/hexagon/mm/uaccess.c | 2 arch/hexagon/mm/vm_fault.c | 9 arch/ia64/include/asm/pgtable.h | 34 arch/ia64/include/asm/ptrace.h | 1 arch/ia64/include/asm/uaccess.h | 2 arch/ia64/kernel/efi.c | 1 arch/ia64/kernel/entry.S | 4 arch/ia64/kernel/head.S | 5 arch/ia64/kernel/irq_ia64.c | 4 arch/ia64/kernel/ivt.S | 4 arch/ia64/kernel/kprobes.c | 4 arch/ia64/kernel/mca.c | 2 arch/ia64/kernel/mca_asm.S | 4 arch/ia64/kernel/perfmon.c | 8 arch/ia64/kernel/process.c | 37 arch/ia64/kernel/ptrace.c | 1 arch/ia64/kernel/relocate_kernel.S | 6 arch/ia64/kernel/setup.c | 4 arch/ia64/kernel/smp.c | 1 arch/ia64/kernel/smpboot.c | 1 arch/ia64/kernel/uncached.c | 4 arch/ia64/kernel/vmlinux.lds.S | 4 arch/ia64/mm/contig.c | 1 arch/ia64/mm/fault.c | 17 arch/ia64/mm/init.c | 12 arch/m68k/68000/m68EZ328.c | 2 arch/m68k/68000/m68VZ328.c | 4 arch/m68k/68000/timers.c | 1 arch/m68k/amiga/config.c | 1 arch/m68k/apollo/config.c | 1 arch/m68k/atari/atasound.c | 1 arch/m68k/atari/stram.c | 1 arch/m68k/bvme6000/config.c | 1 arch/m68k/include/asm/mcf_pgtable.h | 63 arch/m68k/include/asm/motorola_pgalloc.h | 8 arch/m68k/include/asm/motorola_pgtable.h | 84 - arch/m68k/include/asm/pgtable_mm.h | 1 arch/m68k/include/asm/pgtable_no.h | 2 arch/m68k/include/asm/sun3_pgtable.h | 24 arch/m68k/include/asm/sun3xflop.h | 4 arch/m68k/kernel/head.S | 4 arch/m68k/kernel/process.c | 1 arch/m68k/kernel/ptrace.c | 1 arch/m68k/kernel/setup_no.c | 1 arch/m68k/kernel/signal.c | 1 arch/m68k/kernel/sys_m68k.c | 14 arch/m68k/kernel/traps.c | 27 arch/m68k/kernel/uboot.c | 1 arch/m68k/mac/config.c | 1 arch/m68k/mm/fault.c | 10 arch/m68k/mm/init.c | 2 arch/m68k/mm/mcfmmu.c | 1 arch/m68k/mm/motorola.c | 65 arch/m68k/mm/sun3kmap.c | 1 arch/m68k/mm/sun3mmu.c | 1 arch/m68k/mvme147/config.c | 1 arch/m68k/mvme16x/config.c | 1 arch/m68k/q40/config.c | 1 arch/m68k/sun3/config.c | 1 arch/m68k/sun3/dvma.c | 1 arch/m68k/sun3/mmu_emu.c | 1 arch/m68k/sun3/sun3dvma.c | 1 arch/m68k/sun3x/dvma.c | 1 arch/m68k/sun3x/prom.c | 1 arch/microblaze/include/asm/pgalloc.h | 4 arch/microblaze/include/asm/pgtable.h | 23 arch/microblaze/include/asm/uaccess.h | 2 arch/microblaze/include/asm/unwind.h | 3 arch/microblaze/kernel/hw_exception_handler.S | 4 arch/microblaze/kernel/module.c | 4 arch/microblaze/kernel/setup.c | 4 arch/microblaze/kernel/signal.c | 9 arch/microblaze/kernel/stacktrace.c | 4 arch/microblaze/kernel/traps.c | 28 arch/microblaze/kernel/unwind.c | 46 arch/microblaze/mm/fault.c | 17 arch/microblaze/mm/init.c | 9 arch/microblaze/mm/pgtable.c | 4 arch/mips/fw/arc/memory.c | 1 arch/mips/include/asm/fixmap.h | 3 arch/mips/include/asm/mach-generic/floppy.h | 1 arch/mips/include/asm/mach-jazz/floppy.h | 1 arch/mips/include/asm/pgtable-32.h | 22 arch/mips/include/asm/pgtable-64.h | 32 arch/mips/include/asm/pgtable.h | 2 arch/mips/jazz/irq.c | 4 arch/mips/jazz/jazzdma.c | 1 arch/mips/jazz/setup.c | 4 arch/mips/kernel/module.c | 1 arch/mips/kernel/process.c | 1 arch/mips/kernel/ptrace.c | 1 arch/mips/kernel/ptrace32.c | 1 arch/mips/kernel/smp-bmips.c | 1 arch/mips/kernel/traps.c | 58 arch/mips/kernel/vdso.c | 4 arch/mips/kvm/mips.c | 4 arch/mips/kvm/mmu.c | 20 arch/mips/kvm/tlb.c | 1 arch/mips/kvm/trap_emul.c | 2 arch/mips/lib/dump_tlb.c | 1 arch/mips/lib/r3k_dump_tlb.c | 1 arch/mips/mm/c-octeon.c | 1 arch/mips/mm/c-r3k.c | 11 arch/mips/mm/c-r4k.c | 11 arch/mips/mm/c-tx39.c | 11 arch/mips/mm/fault.c | 12 arch/mips/mm/highmem.c | 2 arch/mips/mm/init.c | 1 arch/mips/mm/page.c | 1 arch/mips/mm/pgtable-32.c | 1 arch/mips/mm/pgtable-64.c | 1 arch/mips/mm/sc-ip22.c | 1 arch/mips/mm/sc-mips.c | 1 arch/mips/mm/sc-r5k.c | 1 arch/mips/mm/tlb-r3k.c | 1 arch/mips/mm/tlb-r4k.c | 1 arch/mips/mm/tlbex.c | 4 arch/mips/sgi-ip27/ip27-init.c | 1 arch/mips/sgi-ip27/ip27-timer.c | 1 arch/mips/sgi-ip32/ip32-memory.c | 1 arch/nds32/include/asm/highmem.h | 3 arch/nds32/include/asm/pgtable.h | 22 arch/nds32/kernel/head.S | 4 arch/nds32/kernel/module.c | 2 arch/nds32/kernel/traps.c | 33 arch/nds32/kernel/vdso.c | 6 arch/nds32/mm/fault.c | 17 arch/nds32/mm/init.c | 13 arch/nds32/mm/proc.c | 7 arch/nios2/include/asm/pgtable.h | 24 arch/nios2/kernel/module.c | 1 arch/nios2/kernel/nios2_ksyms.c | 4 arch/nios2/kernel/traps.c | 35 arch/nios2/mm/fault.c | 14 arch/nios2/mm/init.c | 5 arch/nios2/mm/pgtable.c | 1 arch/nios2/mm/tlb.c | 1 arch/openrisc/include/asm/io.h | 3 arch/openrisc/include/asm/pgtable.h | 33 arch/openrisc/include/asm/tlbflush.h | 1 arch/openrisc/kernel/asm-offsets.c | 1 arch/openrisc/kernel/entry.S | 4 arch/openrisc/kernel/head.S | 4 arch/openrisc/kernel/or32_ksyms.c | 4 arch/openrisc/kernel/process.c | 1 arch/openrisc/kernel/ptrace.c | 1 arch/openrisc/kernel/setup.c | 1 arch/openrisc/kernel/traps.c | 27 arch/openrisc/mm/fault.c | 12 arch/openrisc/mm/init.c | 1 arch/openrisc/mm/ioremap.c | 4 arch/openrisc/mm/tlb.c | 1 arch/parisc/include/asm/io.h | 2 arch/parisc/include/asm/mmu_context.h | 1 arch/parisc/include/asm/pgtable.h | 33 arch/parisc/kernel/asm-offsets.c | 4 arch/parisc/kernel/entry.S | 4 arch/parisc/kernel/head.S | 4 arch/parisc/kernel/module.c | 1 arch/parisc/kernel/pacache.S | 4 arch/parisc/kernel/pci-dma.c | 2 arch/parisc/kernel/pdt.c | 4 arch/parisc/kernel/ptrace.c | 1 arch/parisc/kernel/smp.c | 1 arch/parisc/kernel/traps.c | 42 arch/parisc/lib/memcpy.c | 14 arch/parisc/mm/fault.c | 10 arch/parisc/mm/fixmap.c | 6 arch/parisc/mm/init.c | 1 arch/powerpc/include/asm/book3s/32/pgtable.h | 20 arch/powerpc/include/asm/book3s/64/pgtable.h | 43 arch/powerpc/include/asm/fixmap.h | 4 arch/powerpc/include/asm/io.h | 1 arch/powerpc/include/asm/kup.h | 2 arch/powerpc/include/asm/nohash/32/pgtable.h | 17 arch/powerpc/include/asm/nohash/64/pgtable-4k.h | 4 arch/powerpc/include/asm/nohash/64/pgtable.h | 22 arch/powerpc/include/asm/nohash/pgtable.h | 2 arch/powerpc/include/asm/pgtable.h | 28 arch/powerpc/include/asm/pkeys.h | 2 arch/powerpc/include/asm/tlb.h | 2 arch/powerpc/kernel/asm-offsets.c | 1 arch/powerpc/kernel/btext.c | 4 arch/powerpc/kernel/fpu.S | 3 arch/powerpc/kernel/head_32.S | 4 arch/powerpc/kernel/head_40x.S | 4 arch/powerpc/kernel/head_44x.S | 4 arch/powerpc/kernel/head_8xx.S | 4 arch/powerpc/kernel/head_fsl_booke.S | 4 arch/powerpc/kernel/io-workarounds.c | 4 arch/powerpc/kernel/irq.c | 4 arch/powerpc/kernel/mce_power.c | 4 arch/powerpc/kernel/paca.c | 4 arch/powerpc/kernel/process.c | 30 arch/powerpc/kernel/prom.c | 4 arch/powerpc/kernel/prom_init.c | 4 arch/powerpc/kernel/rtas_pci.c | 4 arch/powerpc/kernel/setup-common.c | 4 arch/powerpc/kernel/setup_32.c | 4 arch/powerpc/kernel/setup_64.c | 4 arch/powerpc/kernel/signal_32.c | 1 arch/powerpc/kernel/signal_64.c | 1 arch/powerpc/kernel/smp.c | 4 arch/powerpc/kernel/stacktrace.c | 2 arch/powerpc/kernel/traps.c | 1 arch/powerpc/kernel/vdso.c | 7 arch/powerpc/kvm/book3s_64_mmu_radix.c | 4 arch/powerpc/kvm/book3s_hv.c | 6 arch/powerpc/kvm/book3s_hv_nested.c | 4 arch/powerpc/kvm/book3s_hv_rm_xics.c | 4 arch/powerpc/kvm/book3s_hv_rm_xive.c | 4 arch/powerpc/kvm/book3s_hv_uvmem.c | 18 arch/powerpc/kvm/e500_mmu_host.c | 4 arch/powerpc/kvm/fpu.S | 4 arch/powerpc/lib/code-patching.c | 1 arch/powerpc/mm/book3s32/hash_low.S | 4 arch/powerpc/mm/book3s32/mmu.c | 2 arch/powerpc/mm/book3s32/tlb.c | 6 arch/powerpc/mm/book3s64/hash_hugetlbpage.c | 1 arch/powerpc/mm/book3s64/hash_native.c | 4 arch/powerpc/mm/book3s64/hash_pgtable.c | 5 arch/powerpc/mm/book3s64/hash_utils.c | 4 arch/powerpc/mm/book3s64/iommu_api.c | 4 arch/powerpc/mm/book3s64/radix_hugetlbpage.c | 1 arch/powerpc/mm/book3s64/radix_pgtable.c | 1 arch/powerpc/mm/book3s64/slb.c | 4 arch/powerpc/mm/book3s64/subpage_prot.c | 16 arch/powerpc/mm/copro_fault.c | 4 arch/powerpc/mm/fault.c | 23 arch/powerpc/mm/hugetlbpage.c | 1 arch/powerpc/mm/init-common.c | 4 arch/powerpc/mm/init_32.c | 1 arch/powerpc/mm/init_64.c | 1 arch/powerpc/mm/kasan/8xx.c | 4 arch/powerpc/mm/kasan/book3s_32.c | 2 arch/powerpc/mm/kasan/kasan_init_32.c | 8 arch/powerpc/mm/mem.c | 1 arch/powerpc/mm/nohash/40x.c | 5 arch/powerpc/mm/nohash/8xx.c | 2 arch/powerpc/mm/nohash/fsl_booke.c | 1 arch/powerpc/mm/nohash/tlb_low_64e.S | 4 arch/powerpc/mm/pgtable.c | 2 arch/powerpc/mm/pgtable_32.c | 5 arch/powerpc/mm/pgtable_64.c | 1 arch/powerpc/mm/ptdump/8xx.c | 2 arch/powerpc/mm/ptdump/bats.c | 4 arch/powerpc/mm/ptdump/book3s64.c | 2 arch/powerpc/mm/ptdump/hashpagetable.c | 1 arch/powerpc/mm/ptdump/ptdump.c | 1 arch/powerpc/mm/ptdump/shared.c | 2 arch/powerpc/oprofile/cell/spu_task_sync.c | 6 arch/powerpc/perf/callchain.c | 1 arch/powerpc/perf/callchain_32.c | 1 arch/powerpc/perf/callchain_64.c | 1 arch/powerpc/platforms/85xx/corenet_generic.c | 4 arch/powerpc/platforms/85xx/mpc85xx_cds.c | 4 arch/powerpc/platforms/85xx/qemu_e500.c | 4 arch/powerpc/platforms/85xx/sbc8548.c | 4 arch/powerpc/platforms/85xx/smp.c | 4 arch/powerpc/platforms/86xx/mpc86xx_smp.c | 4 arch/powerpc/platforms/8xx/cpm1.c | 1 arch/powerpc/platforms/8xx/micropatch.c | 1 arch/powerpc/platforms/cell/cbe_regs.c | 4 arch/powerpc/platforms/cell/interrupt.c | 4 arch/powerpc/platforms/cell/pervasive.c | 4 arch/powerpc/platforms/cell/setup.c | 1 arch/powerpc/platforms/cell/smp.c | 4 arch/powerpc/platforms/cell/spider-pic.c | 4 arch/powerpc/platforms/cell/spufs/file.c | 10 arch/powerpc/platforms/chrp/pci.c | 4 arch/powerpc/platforms/chrp/setup.c | 1 arch/powerpc/platforms/chrp/smp.c | 4 arch/powerpc/platforms/maple/setup.c | 1 arch/powerpc/platforms/maple/time.c | 1 arch/powerpc/platforms/powermac/setup.c | 1 arch/powerpc/platforms/powermac/smp.c | 4 arch/powerpc/platforms/powermac/time.c | 1 arch/powerpc/platforms/pseries/lpar.c | 4 arch/powerpc/platforms/pseries/setup.c | 1 arch/powerpc/platforms/pseries/smp.c | 4 arch/powerpc/sysdev/cpm2.c | 1 arch/powerpc/sysdev/fsl_85xx_cache_sram.c | 2 arch/powerpc/sysdev/mpic.c | 4 arch/powerpc/xmon/xmon.c | 1 arch/riscv/include/asm/fixmap.h | 4 arch/riscv/include/asm/io.h | 4 arch/riscv/include/asm/kasan.h | 4 arch/riscv/include/asm/pgtable-64.h | 7 arch/riscv/include/asm/pgtable.h | 22 arch/riscv/kernel/module.c | 2 arch/riscv/kernel/setup.c | 1 arch/riscv/kernel/soc.c | 2 arch/riscv/kernel/stacktrace.c | 23 arch/riscv/kernel/vdso.c | 4 arch/riscv/mm/cacheflush.c | 3 arch/riscv/mm/fault.c | 14 arch/riscv/mm/init.c | 31 arch/riscv/mm/kasan_init.c | 4 arch/riscv/mm/pageattr.c | 6 arch/riscv/mm/ptdump.c | 2 arch/s390/boot/ipl_parm.c | 4 arch/s390/boot/kaslr.c | 4 arch/s390/include/asm/hugetlb.h | 4 arch/s390/include/asm/kasan.h | 4 arch/s390/include/asm/pgtable.h | 15 arch/s390/include/asm/tlbflush.h | 1 arch/s390/kernel/asm-offsets.c | 4 arch/s390/kernel/dumpstack.c | 25 arch/s390/kernel/machine_kexec.c | 1 arch/s390/kernel/ptrace.c | 1 arch/s390/kernel/uv.c | 4 arch/s390/kernel/vdso.c | 5 arch/s390/kvm/gaccess.c | 8 arch/s390/kvm/interrupt.c | 4 arch/s390/kvm/kvm-s390.c | 32 arch/s390/kvm/priv.c | 38 arch/s390/mm/dump_pagetables.c | 1 arch/s390/mm/extmem.c | 4 arch/s390/mm/fault.c | 17 arch/s390/mm/gmap.c | 80 arch/s390/mm/init.c | 1 arch/s390/mm/kasan_init.c | 4 arch/s390/mm/pageattr.c | 13 arch/s390/mm/pgalloc.c | 2 arch/s390/mm/pgtable.c | 1 arch/s390/mm/vmem.c | 1 arch/s390/pci/pci_mmio.c | 4 arch/sh/include/asm/io.h | 2 arch/sh/include/asm/kdebug.h | 6 arch/sh/include/asm/pgtable-3level.h | 7 arch/sh/include/asm/pgtable.h | 2 arch/sh/include/asm/pgtable_32.h | 25 arch/sh/include/asm/processor_32.h | 2 arch/sh/kernel/dumpstack.c | 54 arch/sh/kernel/machine_kexec.c | 1 arch/sh/kernel/process_32.c | 2 arch/sh/kernel/ptrace_32.c | 1 arch/sh/kernel/signal_32.c | 1 arch/sh/kernel/sys_sh.c | 6 arch/sh/kernel/traps.c | 4 arch/sh/kernel/vsyscall/vsyscall.c | 4 arch/sh/mm/cache-sh3.c | 1 arch/sh/mm/cache-sh4.c | 11 arch/sh/mm/cache-sh7705.c | 1 arch/sh/mm/fault.c | 16 arch/sh/mm/kmap.c | 5 arch/sh/mm/nommu.c | 1 arch/sh/mm/pmb.c | 4 arch/sparc/include/asm/floppy_32.h | 4 arch/sparc/include/asm/highmem.h | 4 arch/sparc/include/asm/ide.h | 2 arch/sparc/include/asm/io-unit.h | 4 arch/sparc/include/asm/pgalloc_32.h | 4 arch/sparc/include/asm/pgalloc_64.h | 2 arch/sparc/include/asm/pgtable_32.h | 34 arch/sparc/include/asm/pgtable_64.h | 32 arch/sparc/kernel/cpu.c | 4 arch/sparc/kernel/entry.S | 4 arch/sparc/kernel/head_64.S | 4 arch/sparc/kernel/ktlb.S | 4 arch/sparc/kernel/leon_smp.c | 1 arch/sparc/kernel/pci.c | 4 arch/sparc/kernel/process_32.c | 29 arch/sparc/kernel/process_64.c | 3 arch/sparc/kernel/ptrace_32.c | 1 arch/sparc/kernel/ptrace_64.c | 1 arch/sparc/kernel/setup_32.c | 1 arch/sparc/kernel/setup_64.c | 1 arch/sparc/kernel/signal32.c | 1 arch/sparc/kernel/signal_32.c | 1 arch/sparc/kernel/signal_64.c | 1 arch/sparc/kernel/smp_32.c | 1 arch/sparc/kernel/smp_64.c | 1 arch/sparc/kernel/sun4m_irq.c | 4 arch/sparc/kernel/trampoline_64.S | 4 arch/sparc/kernel/traps_32.c | 4 arch/sparc/kernel/traps_64.c | 24 arch/sparc/lib/clear_page.S | 4 arch/sparc/lib/copy_page.S | 2 arch/sparc/mm/fault_32.c | 21 arch/sparc/mm/fault_64.c | 17 arch/sparc/mm/highmem.c | 12 arch/sparc/mm/hugetlbpage.c | 1 arch/sparc/mm/init_32.c | 1 arch/sparc/mm/init_64.c | 7 arch/sparc/mm/io-unit.c | 11 arch/sparc/mm/iommu.c | 9 arch/sparc/mm/tlb.c | 1 arch/sparc/mm/tsb.c | 4 arch/sparc/mm/ultra.S | 4 arch/sparc/vdso/vma.c | 4 arch/um/drivers/mconsole_kern.c | 2 arch/um/include/asm/mmu_context.h | 5 arch/um/include/asm/pgtable-3level.h | 4 arch/um/include/asm/pgtable.h | 69 arch/um/kernel/maccess.c | 12 arch/um/kernel/mem.c | 10 arch/um/kernel/process.c | 1 arch/um/kernel/skas/mmu.c | 3 arch/um/kernel/skas/uaccess.c | 1 arch/um/kernel/sysrq.c | 35 arch/um/kernel/tlb.c | 5 arch/um/kernel/trap.c | 15 arch/um/kernel/um_arch.c | 1 arch/unicore32/include/asm/pgtable.h | 19 arch/unicore32/kernel/hibernate.c | 4 arch/unicore32/kernel/hibernate_asm.S | 4 arch/unicore32/kernel/module.c | 1 arch/unicore32/kernel/setup.h | 4 arch/unicore32/kernel/traps.c | 50 arch/unicore32/lib/backtrace.S | 24 arch/unicore32/mm/alignment.c | 4 arch/unicore32/mm/fault.c | 9 arch/unicore32/mm/mm.h | 10 arch/unicore32/mm/proc-ucv2.S | 4 arch/x86/boot/compressed/kaslr_64.c | 4 arch/x86/entry/vdso/vma.c | 14 arch/x86/events/core.c | 4 arch/x86/include/asm/agp.h | 2 arch/x86/include/asm/asm-prototypes.h | 4 arch/x86/include/asm/efi.h | 4 arch/x86/include/asm/iomap.h | 1 arch/x86/include/asm/kaslr.h | 2 arch/x86/include/asm/mmu.h | 2 arch/x86/include/asm/pgtable-3level.h | 8 arch/x86/include/asm/pgtable.h | 89 - arch/x86/include/asm/pgtable_32.h | 11 arch/x86/include/asm/pgtable_64.h | 4 arch/x86/include/asm/setup.h | 12 arch/x86/include/asm/stacktrace.h | 2 arch/x86/include/asm/uaccess.h | 16 arch/x86/include/asm/xen/hypercall.h | 4 arch/x86/include/asm/xen/page.h | 1 arch/x86/kernel/acpi/boot.c | 4 arch/x86/kernel/acpi/sleep.c | 4 arch/x86/kernel/alternative.c | 1 arch/x86/kernel/amd_gart_64.c | 5 arch/x86/kernel/apic/apic_numachip.c | 4 arch/x86/kernel/cpu/bugs.c | 4 arch/x86/kernel/cpu/common.c | 4 arch/x86/kernel/cpu/intel.c | 4 arch/x86/kernel/cpu/resctrl/pseudo_lock.c | 6 arch/x86/kernel/cpu/resctrl/rdtgroup.c | 6 arch/x86/kernel/crash_core_32.c | 4 arch/x86/kernel/crash_core_64.c | 4 arch/x86/kernel/doublefault_32.c | 1 arch/x86/kernel/dumpstack.c | 21 arch/x86/kernel/early_printk.c | 4 arch/x86/kernel/espfix_64.c | 2 arch/x86/kernel/head64.c | 4 arch/x86/kernel/head_64.S | 4 arch/x86/kernel/i8259.c | 4 arch/x86/kernel/irqinit.c | 4 arch/x86/kernel/kprobes/core.c | 4 arch/x86/kernel/kprobes/opt.c | 4 arch/x86/kernel/ldt.c | 2 arch/x86/kernel/machine_kexec_32.c | 1 arch/x86/kernel/machine_kexec_64.c | 1 arch/x86/kernel/module.c | 1 arch/x86/kernel/paravirt.c | 4 arch/x86/kernel/process_32.c | 1 arch/x86/kernel/process_64.c | 1 arch/x86/kernel/ptrace.c | 1 arch/x86/kernel/reboot.c | 4 arch/x86/kernel/smpboot.c | 4 arch/x86/kernel/tboot.c | 3 arch/x86/kernel/vm86_32.c | 4 arch/x86/kvm/mmu/paging_tmpl.h | 8 arch/x86/mm/cpu_entry_area.c | 4 arch/x86/mm/debug_pagetables.c | 2 arch/x86/mm/dump_pagetables.c | 1 arch/x86/mm/fault.c | 22 arch/x86/mm/init.c | 22 arch/x86/mm/init_32.c | 27 arch/x86/mm/init_64.c | 1 arch/x86/mm/ioremap.c | 4 arch/x86/mm/kasan_init_64.c | 1 arch/x86/mm/kaslr.c | 37 arch/x86/mm/maccess.c | 44 arch/x86/mm/mem_encrypt_boot.S | 2 arch/x86/mm/mmio-mod.c | 4 arch/x86/mm/pat/cpa-test.c | 1 arch/x86/mm/pat/memtype.c | 1 arch/x86/mm/pat/memtype_interval.c | 4 arch/x86/mm/pgtable.c | 1 arch/x86/mm/pgtable_32.c | 1 arch/x86/mm/pti.c | 1 arch/x86/mm/setup_nx.c | 4 arch/x86/platform/efi/efi_32.c | 4 arch/x86/platform/efi/efi_64.c | 1 arch/x86/platform/olpc/olpc_ofw.c | 4 arch/x86/power/cpu.c | 4 arch/x86/power/hibernate.c | 4 arch/x86/power/hibernate_32.c | 4 arch/x86/power/hibernate_64.c | 4 arch/x86/realmode/init.c | 4 arch/x86/um/vdso/vma.c | 4 arch/x86/xen/enlighten_pv.c | 1 arch/x86/xen/grant-table.c | 1 arch/x86/xen/mmu_pv.c | 4 arch/x86/xen/smp_pv.c | 2 arch/xtensa/include/asm/fixmap.h | 12 arch/xtensa/include/asm/highmem.h | 4 arch/xtensa/include/asm/initialize_mmu.h | 2 arch/xtensa/include/asm/mmu_context.h | 4 arch/xtensa/include/asm/pgtable.h | 20 arch/xtensa/kernel/entry.S | 4 arch/xtensa/kernel/process.c | 1 arch/xtensa/kernel/ptrace.c | 1 arch/xtensa/kernel/setup.c | 1 arch/xtensa/kernel/traps.c | 42 arch/xtensa/kernel/vectors.S | 4 arch/xtensa/mm/cache.c | 4 arch/xtensa/mm/fault.c | 12 arch/xtensa/mm/highmem.c | 2 arch/xtensa/mm/ioremap.c | 4 arch/xtensa/mm/kasan_init.c | 10 arch/xtensa/mm/misc.S | 4 arch/xtensa/mm/mmu.c | 5 drivers/acpi/scan.c | 3 drivers/android/binder_alloc.c | 14 drivers/atm/fore200e.c | 4 drivers/base/power/main.c | 4 drivers/block/z2ram.c | 4 drivers/char/agp/frontend.c | 1 drivers/char/agp/generic.c | 1 drivers/char/bsr.c | 1 drivers/char/mspec.c | 3 drivers/dma-buf/dma-resv.c | 5 drivers/firmware/efi/arm-runtime.c | 4 drivers/firmware/efi/efi.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 4 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 10 drivers/gpu/drm/amd/amdkfd/kfd_events.c | 4 drivers/gpu/drm/drm_vm.c | 4 drivers/gpu/drm/etnaviv/etnaviv_gem.c | 2 drivers/gpu/drm/i915/gem/i915_gem_mman.c | 4 drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 14 drivers/gpu/drm/i915/i915_mm.c | 1 drivers/gpu/drm/i915/i915_perf.c | 2 drivers/gpu/drm/nouveau/nouveau_svm.c | 22 drivers/gpu/drm/radeon/radeon_cs.c | 4 drivers/gpu/drm/radeon/radeon_gem.c | 6 drivers/gpu/drm/ttm/ttm_bo_vm.c | 10 drivers/infiniband/core/umem_odp.c | 4 drivers/infiniband/core/uverbs_main.c | 6 drivers/infiniband/hw/hfi1/mmu_rb.c | 2 drivers/infiniband/hw/mlx4/mr.c | 4 drivers/infiniband/hw/qib/qib_file_ops.c | 4 drivers/infiniband/hw/qib/qib_user_pages.c | 6 drivers/infiniband/hw/usnic/usnic_uiom.c | 4 drivers/infiniband/sw/rdmavt/mmap.c | 1 drivers/infiniband/sw/rxe/rxe_mmap.c | 1 drivers/infiniband/sw/siw/siw_mem.c | 4 drivers/iommu/amd_iommu_v2.c | 4 drivers/iommu/intel-svm.c | 4 drivers/macintosh/macio-adb.c | 4 drivers/macintosh/mediabay.c | 4 drivers/macintosh/via-pmu.c | 4 drivers/media/pci/bt8xx/bt878.c | 4 drivers/media/pci/bt8xx/btcx-risc.c | 4 drivers/media/pci/bt8xx/bttv-risc.c | 4 drivers/media/platform/davinci/vpbe_display.c | 1 drivers/media/v4l2-core/v4l2-common.c | 1 drivers/media/v4l2-core/videobuf-core.c | 4 drivers/media/v4l2-core/videobuf-dma-contig.c | 4 drivers/media/v4l2-core/videobuf-dma-sg.c | 10 drivers/media/v4l2-core/videobuf-vmalloc.c | 4 drivers/misc/cxl/cxllib.c | 9 drivers/misc/cxl/fault.c | 4 drivers/misc/genwqe/card_utils.c | 2 drivers/misc/sgi-gru/grufault.c | 25 drivers/misc/sgi-gru/grufile.c | 4 drivers/mtd/ubi/ubi.h | 2 drivers/net/ethernet/amd/7990.c | 4 drivers/net/ethernet/amd/hplance.c | 4 drivers/net/ethernet/amd/mvme147.c | 4 drivers/net/ethernet/amd/sun3lance.c | 4 drivers/net/ethernet/amd/sunlance.c | 4 drivers/net/ethernet/apple/bmac.c | 4 drivers/net/ethernet/apple/mace.c | 4 drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c | 4 drivers/net/ethernet/freescale/fs_enet/mac-fcc.c | 4 drivers/net/ethernet/freescale/fs_enet/mii-fec.c | 4 drivers/net/ethernet/i825xx/82596.c | 4 drivers/net/ethernet/korina.c | 4 drivers/net/ethernet/marvell/pxa168_eth.c | 4 drivers/net/ethernet/natsemi/jazzsonic.c | 4 drivers/net/ethernet/natsemi/macsonic.c | 4 drivers/net/ethernet/natsemi/xtsonic.c | 4 drivers/net/ethernet/sun/sunbmac.c | 4 drivers/net/ethernet/sun/sunhme.c | 1 drivers/net/ethernet/sun/sunqe.c | 4 drivers/oprofile/buffer_sync.c | 12 drivers/sbus/char/flash.c | 1 drivers/sbus/char/uctrl.c | 1 drivers/scsi/53c700.c | 4 drivers/scsi/a2091.c | 1 drivers/scsi/a3000.c | 1 drivers/scsi/arm/cumana_2.c | 4 drivers/scsi/arm/eesox.c | 4 drivers/scsi/arm/powertec.c | 4 drivers/scsi/dpt_i2o.c | 4 drivers/scsi/gvp11.c | 1 drivers/scsi/lasi700.c | 1 drivers/scsi/mac53c94.c | 4 drivers/scsi/mesh.c | 4 drivers/scsi/mvme147.c | 1 drivers/scsi/qlogicpti.c | 4 drivers/scsi/sni_53c710.c | 1 drivers/scsi/zorro_esp.c | 4 drivers/staging/android/ashmem.c | 4 drivers/staging/comedi/comedi_fops.c | 2 drivers/staging/kpc2000/kpc_dma/fileops.c | 4 drivers/staging/media/atomisp/pci/hmm/hmm_bo.c | 4 drivers/tee/optee/call.c | 4 drivers/tty/sysrq.c | 4 drivers/tty/vt/consolemap.c | 2 drivers/vfio/pci/vfio_pci.c | 22 drivers/vfio/vfio_iommu_type1.c | 8 drivers/vhost/vdpa.c | 4 drivers/video/console/newport_con.c | 1 drivers/video/fbdev/acornfb.c | 1 drivers/video/fbdev/atafb.c | 1 drivers/video/fbdev/cirrusfb.c | 1 drivers/video/fbdev/cyber2000fb.c | 1 drivers/video/fbdev/fb-puv3.c | 1 drivers/video/fbdev/hitfb.c | 1 drivers/video/fbdev/neofb.c | 1 drivers/video/fbdev/q40fb.c | 1 drivers/video/fbdev/savage/savagefb_driver.c | 1 drivers/xen/balloon.c | 1 drivers/xen/gntdev.c | 6 drivers/xen/grant-table.c | 1 drivers/xen/privcmd.c | 15 drivers/xen/xenbus/xenbus_probe.c | 1 drivers/xen/xenbus/xenbus_probe_backend.c | 1 drivers/xen/xenbus/xenbus_probe_frontend.c | 1 fs/aio.c | 4 fs/coredump.c | 8 fs/exec.c | 18 fs/ext2/file.c | 2 fs/ext4/super.c | 6 fs/hugetlbfs/inode.c | 2 fs/io_uring.c | 4 fs/kernfs/file.c | 4 fs/proc/array.c | 1 fs/proc/base.c | 24 fs/proc/meminfo.c | 1 fs/proc/nommu.c | 1 fs/proc/task_mmu.c | 34 fs/proc/task_nommu.c | 18 fs/proc/vmcore.c | 1 fs/userfaultfd.c | 46 fs/xfs/xfs_file.c | 2 fs/xfs/xfs_inode.c | 14 fs/xfs/xfs_iops.c | 4 include/asm-generic/io.h | 2 include/asm-generic/pgtable-nopmd.h | 1 include/asm-generic/pgtable-nopud.h | 1 include/asm-generic/pgtable.h | 1322 ---------------- include/linux/cache.h | 10 include/linux/crash_dump.h | 3 include/linux/dax.h | 1 include/linux/dma-noncoherent.h | 2 include/linux/fs.h | 4 include/linux/hmm.h | 2 include/linux/huge_mm.h | 2 include/linux/hugetlb.h | 2 include/linux/io-mapping.h | 4 include/linux/kallsyms.h | 4 include/linux/kasan.h | 4 include/linux/mempolicy.h | 2 include/linux/mm.h | 15 include/linux/mm_types.h | 4 include/linux/mmap_lock.h | 128 + include/linux/mmu_notifier.h | 13 include/linux/pagemap.h | 2 include/linux/pgtable.h | 1444 +++++++++++++++++- include/linux/rmap.h | 2 include/linux/sched/debug.h | 7 include/linux/sched/mm.h | 10 include/linux/uaccess.h | 62 include/xen/arm/page.h | 4 init/init_task.c | 1 ipc/shm.c | 8 kernel/acct.c | 6 kernel/bpf/stackmap.c | 21 kernel/bpf/syscall.c | 2 kernel/cgroup/cpuset.c | 4 kernel/debug/kdb/kdb_bt.c | 17 kernel/events/core.c | 10 kernel/events/uprobes.c | 20 kernel/exit.c | 11 kernel/fork.c | 15 kernel/futex.c | 4 kernel/locking/lockdep.c | 4 kernel/locking/rtmutex-debug.c | 4 kernel/power/snapshot.c | 1 kernel/relay.c | 2 kernel/sched/core.c | 10 kernel/sched/fair.c | 4 kernel/sys.c | 22 kernel/trace/bpf_trace.c | 176 +- kernel/trace/ftrace.c | 8 kernel/trace/trace_kprobe.c | 80 kernel/trace/trace_output.c | 4 lib/dump_stack.c | 4 lib/ioremap.c | 1 lib/test_hmm.c | 14 lib/test_lockup.c | 16 mm/debug.c | 10 mm/debug_vm_pgtable.c | 1 mm/filemap.c | 46 mm/frame_vector.c | 6 mm/gup.c | 73 mm/hmm.c | 2 mm/huge_memory.c | 8 mm/hugetlb.c | 3 mm/init-mm.c | 6 mm/internal.h | 6 mm/khugepaged.c | 72 mm/ksm.c | 48 mm/maccess.c | 496 +++--- mm/madvise.c | 40 mm/memcontrol.c | 10 mm/memory.c | 61 mm/mempolicy.c | 36 mm/migrate.c | 16 mm/mincore.c | 8 mm/mlock.c | 22 mm/mmap.c | 74 mm/mmu_gather.c | 2 mm/mmu_notifier.c | 22 mm/mprotect.c | 22 mm/mremap.c | 14 mm/msync.c | 8 mm/nommu.c | 22 mm/oom_kill.c | 14 mm/page_io.c | 1 mm/page_reporting.h | 2 mm/pagewalk.c | 12 mm/pgtable-generic.c | 6 mm/process_vm_access.c | 4 mm/ptdump.c | 4 mm/rmap.c | 12 mm/shmem.c | 5 mm/sparse-vmemmap.c | 1 mm/sparse.c | 1 mm/swap_state.c | 5 mm/swapfile.c | 5 mm/userfaultfd.c | 26 mm/util.c | 12 mm/vmacache.c | 1 mm/zsmalloc.c | 4 net/ipv4/tcp.c | 8 net/xdp/xdp_umem.c | 4 security/keys/keyctl.c | 2 sound/core/oss/pcm_oss.c | 2 sound/core/sgbuf.c | 1 sound/pci/hda/hda_intel.c | 4 sound/soc/intel/common/sst-firmware.c | 4 sound/soc/intel/haswell/sst-haswell-pcm.c | 4 tools/include/linux/kallsyms.h | 2 virt/kvm/async_pf.c | 4 virt/kvm/kvm_main.c | 9 942 files changed, 4580 insertions(+), 5662 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-06-09 4:29 incoming Andrew Morton @ 2020-06-09 16:58 ` Linus Torvalds 0 siblings, 0 replies; 370+ messages in thread From: Linus Torvalds @ 2020-06-09 16:58 UTC (permalink / raw) To: Andrew Morton; +Cc: mm-commits, Linux-MM On Mon, Jun 8, 2020 at 9:29 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > 942 files changed, 4580 insertions(+), 5662 deletions(-) If you use proper tools, add a "-M" to your diff script, so that you see 941 files changed, 2614 insertions(+), 3696 deletions(-) because a big portion of the lines were due to a rename: rename include/{asm-generic => linux}/pgtable.h (91%) but at some earlier point you mentioned "diffstat", so I guess "proper tools" isn't an option ;( Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-06-08 4:35 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-06-08 4:35 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm Various trees. Mainly those parts of MM whose linux-next dependents are now merged. I'm still sitting on ~160 patches which await merges from -next. 54 patches, based on 9aa900c8094dba7a60dc805ecec1e9f720744ba1. Subsystems affected by this patch series: mm/proc ipc dynamic-debug panic lib sysctl mm/gup mm/pagemap Subsystem: mm/proc SeongJae Park <sjpark@amazon.de>: mm/page_idle.c: skip offline pages Subsystem: ipc Jules Irenge <jbi.octave@gmail.com>: ipc/msg: add missing annotation for freeque() Giuseppe Scrivano <gscrivan@redhat.com>: ipc/namespace.c: use a work queue to free_ipc Subsystem: dynamic-debug Orson Zhai <orson.zhai@unisoc.com>: dynamic_debug: add an option to enable dynamic debug for modules only Subsystem: panic Rafael Aquini <aquini@redhat.com>: kernel: add panic_on_taint Subsystem: lib Manfred Spraul <manfred@colorfullife.com>: xarray.h: correct return code documentation for xa_store_{bh,irq}() Subsystem: sysctl Vlastimil Babka <vbabka@suse.cz>: Patch series "support setting sysctl parameters from kernel command line", v3: kernel/sysctl: support setting sysctl parameters from kernel command line kernel/sysctl: support handling command line aliases kernel/hung_task convert hung_task_panic boot parameter to sysctl tools/testing/selftests/sysctl/sysctl.sh: support CONFIG_TEST_SYSCTL=y lib/test_sysctl: support testing of sysctl. boot parameter "Guilherme G. Piccoli" <gpiccoli@canonical.com>: kernel/watchdog.c: convert {soft/hard}lockup boot parameters to sysctl aliases kernel/hung_task.c: introduce sysctl to print all traces when a hung task is detected panic: add sysctl to dump all CPUs backtraces on oops event Rafael Aquini <aquini@redhat.com>: kernel/sysctl.c: ignore out-of-range taint bits introduced via kernel.tainted Subsystem: mm/gup Souptick Joarder <jrdr.linux@gmail.com>: mm/gup.c: convert to use get_user_{page|pages}_fast_only() John Hubbard <jhubbard@nvidia.com>: mm/gup: update pin_user_pages.rst for "case 3" (mmu notifiers) Patch series "mm/gup: introduce pin_user_pages_locked(), use it in frame_vector.c", v2: mm/gup: introduce pin_user_pages_locked() mm/gup: frame_vector: convert get_user_pages() --> pin_user_pages() mm/gup: documentation fix for pin_user_pages*() APIs Patch series "vhost, docs: convert to pin_user_pages(), new "case 5"": docs: mm/gup: pin_user_pages.rst: add a "case 5" vhost: convert get_user_pages() --> pin_user_pages() Subsystem: mm/pagemap Alexander Gordeev <agordeev@linux.ibm.com>: mm/mmap.c: add more sanity checks to get_unmapped_area() mm/mmap.c: do not allow mappings outside of allowed limits Christoph Hellwig <hch@lst.de>: Patch series "sort out the flush_icache_range mess", v2: arm: fix the flush_icache_range arguments in set_fiq_handler nds32: unexport flush_icache_page powerpc: unexport flush_icache_user_range unicore32: remove flush_cache_user_range asm-generic: fix the inclusion guards for cacheflush.h asm-generic: don't include <linux/mm.h> in cacheflush.h asm-generic: improve the flush_dcache_page stub alpha: use asm-generic/cacheflush.h arm64: use asm-generic/cacheflush.h c6x: use asm-generic/cacheflush.h hexagon: use asm-generic/cacheflush.h ia64: use asm-generic/cacheflush.h microblaze: use asm-generic/cacheflush.h m68knommu: use asm-generic/cacheflush.h openrisc: use asm-generic/cacheflush.h powerpc: use asm-generic/cacheflush.h riscv: use asm-generic/cacheflush.h arm,sparc,unicore32: remove flush_icache_user_range mm: rename flush_icache_user_range to flush_icache_user_page asm-generic: add a flush_icache_user_range stub sh: implement flush_icache_user_range xtensa: implement flush_icache_user_range arm: rename flush_cache_user_range to flush_icache_user_range m68k: implement flush_icache_user_range exec: only build read_code when needed exec: use flush_icache_user_range in read_code binfmt_flat: use flush_icache_user_range nommu: use flush_icache_user_range in brk and mmap module: move the set_fs hack for flush_icache_range to m68k Konstantin Khlebnikov <khlebnikov@yandex-team.ru>: doc: cgroup: update note about conditions when oom killer is invoked Documentation/admin-guide/cgroup-v2.rst | 17 +- Documentation/admin-guide/dynamic-debug-howto.rst | 5 Documentation/admin-guide/kdump/kdump.rst | 8 + Documentation/admin-guide/kernel-parameters.txt | 34 +++- Documentation/admin-guide/sysctl/kernel.rst | 37 ++++ Documentation/core-api/pin_user_pages.rst | 47 ++++-- arch/alpha/include/asm/cacheflush.h | 38 +---- arch/alpha/kernel/smp.c | 2 arch/arm/include/asm/cacheflush.h | 7 arch/arm/kernel/fiq.c | 4 arch/arm/kernel/traps.c | 2 arch/arm64/include/asm/cacheflush.h | 46 ------ arch/c6x/include/asm/cacheflush.h | 19 -- arch/hexagon/include/asm/cacheflush.h | 19 -- arch/ia64/include/asm/cacheflush.h | 30 ---- arch/m68k/include/asm/cacheflush_mm.h | 6 arch/m68k/include/asm/cacheflush_no.h | 19 -- arch/m68k/mm/cache.c | 13 + arch/microblaze/include/asm/cacheflush.h | 29 --- arch/nds32/include/asm/cacheflush.h | 4 arch/nds32/mm/cacheflush.c | 3 arch/openrisc/include/asm/cacheflush.h | 33 ---- arch/powerpc/include/asm/cacheflush.h | 46 +----- arch/powerpc/kvm/book3s_64_mmu_hv.c | 2 arch/powerpc/kvm/book3s_64_mmu_radix.c | 2 arch/powerpc/mm/mem.c | 3 arch/powerpc/perf/callchain_64.c | 4 arch/riscv/include/asm/cacheflush.h | 65 -------- arch/sh/include/asm/cacheflush.h | 1 arch/sparc/include/asm/cacheflush_32.h | 2 arch/sparc/include/asm/cacheflush_64.h | 1 arch/um/include/asm/tlb.h | 2 arch/unicore32/include/asm/cacheflush.h | 11 - arch/x86/include/asm/cacheflush.h | 2 arch/xtensa/include/asm/cacheflush.h | 2 drivers/media/platform/omap3isp/ispvideo.c | 2 drivers/nvdimm/pmem.c | 3 drivers/vhost/vhost.c | 5 fs/binfmt_flat.c | 2 fs/exec.c | 5 fs/proc/proc_sysctl.c | 163 ++++++++++++++++++++-- include/asm-generic/cacheflush.h | 25 +-- include/linux/dev_printk.h | 6 include/linux/dynamic_debug.h | 2 include/linux/ipc_namespace.h | 2 include/linux/kernel.h | 9 + include/linux/mm.h | 12 + include/linux/net.h | 3 include/linux/netdevice.h | 6 include/linux/printk.h | 9 - include/linux/sched/sysctl.h | 7 include/linux/sysctl.h | 4 include/linux/xarray.h | 4 include/rdma/ib_verbs.h | 6 init/main.c | 2 ipc/msg.c | 2 ipc/namespace.c | 24 ++- kernel/events/core.c | 4 kernel/events/uprobes.c | 2 kernel/hung_task.c | 30 ++-- kernel/module.c | 8 - kernel/panic.c | 45 ++++++ kernel/sysctl.c | 38 ++++- kernel/watchdog.c | 37 +--- lib/Kconfig.debug | 12 + lib/Makefile | 2 lib/dynamic_debug.c | 9 - lib/test_sysctl.c | 13 + mm/frame_vector.c | 7 mm/gup.c | 74 +++++++-- mm/mmap.c | 28 ++- mm/nommu.c | 4 mm/page_alloc.c | 9 - mm/page_idle.c | 7 tools/testing/selftests/sysctl/sysctl.sh | 44 +++++ virt/kvm/kvm_main.c | 8 - 76 files changed, 732 insertions(+), 517 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-06-04 23:45 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-06-04 23:45 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits - More MM work. 100ish more to go. Mike's "mm: remove __ARCH_HAS_5LEVEL_HACK" series should fix the current ppc issue. - Various other little subsystems 127 patches, based on 6929f71e46bdddbf1c4d67c2728648176c67c555. Subsystems affected by this patch series: kcov mm/pagemap mm/vmalloc mm/kmap mm/util mm/memory-hotplug mm/cleanups mm/zram procfs core-kernel get_maintainer lib bitops checkpatch binfmt init fat seq_file exec rapidio relay selftests ubsan Subsystem: kcov Andrey Konovalov <andreyknvl@google.com>: Patch series "kcov: collect coverage from usb soft interrupts", v4: kcov: cleanup debug messages kcov: fix potential use-after-free in kcov_remote_start kcov: move t->kcov assignments into kcov_start/stop kcov: move t->kcov_sequence assignment kcov: use t->kcov_mode as enabled indicator kcov: collect coverage from interrupts usb: core: kcov: collect coverage from usb complete callback Subsystem: mm/pagemap Feng Tang <feng.tang@intel.com>: mm/util.c: remove the VM_WARN_ONCE for vm_committed_as underflow check Mike Rapoport <rppt@linux.ibm.com>: Patch series "mm: remove __ARCH_HAS_5LEVEL_HACK", v4: h8300: remove usage of __ARCH_USE_5LEVEL_HACK arm: add support for folded p4d page tables arm64: add support for folded p4d page tables hexagon: remove __ARCH_USE_5LEVEL_HACK ia64: add support for folded p4d page tables nios2: add support for folded p4d page tables openrisc: add support for folded p4d page tables powerpc: add support for folded p4d page tables Geert Uytterhoeven <geert+renesas@glider.be>: sh: fault: modernize printing of kernel messages Mike Rapoport <rppt@linux.ibm.com>: sh: drop __pXd_offset() macros that duplicate pXd_index() ones sh: add support for folded p4d page tables unicore32: remove __ARCH_USE_5LEVEL_HACK asm-generic: remove pgtable-nop4d-hack.h mm: remove __ARCH_HAS_5LEVEL_HACK and include/asm-generic/5level-fixup.h Anshuman Khandual <anshuman.khandual@arm.com>: Patch series "mm/debug: Add tests validating architecture page table: x86/mm: define mm_p4d_folded() mm/debug: add tests validating architecture page table helpers Subsystem: mm/vmalloc Jeongtae Park <jtp.park@samsung.com>: mm/vmalloc: fix a typo in comment Subsystem: mm/kmap Ira Weiny <ira.weiny@intel.com>: Patch series "Remove duplicated kmap code", v3: arch/kmap: remove BUG_ON() arch/xtensa: move kmap build bug out of the way arch/kmap: remove redundant arch specific kmaps arch/kunmap: remove duplicate kunmap implementations {x86,powerpc,microblaze}/kmap: move preempt disable arch/kmap_atomic: consolidate duplicate code arch/kunmap_atomic: consolidate duplicate code arch/kmap: ensure kmap_prot visibility arch/kmap: don't hard code kmap_prot values arch/kmap: define kmap_atomic_prot() for all arch's drm: remove drm specific kmap_atomic code kmap: remove kmap_atomic_to_page() parisc/kmap: remove duplicate kmap code sparc: remove unnecessary includes kmap: consolidate kmap_prot definitions Subsystem: mm/util Waiman Long <longman@redhat.com>: mm: add kvfree_sensitive() for freeing sensitive data objects Subsystem: mm/memory-hotplug Vishal Verma <vishal.l.verma@intel.com>: mm/memory_hotplug: refrain from adding memory into an impossible node David Hildenbrand <david@redhat.com>: powerpc/pseries/hotplug-memory: stop checking is_mem_section_removable() mm/memory_hotplug: remove is_mem_section_removable() Patch series "mm/memory_hotplug: handle memblocks only with: mm/memory_hotplug: set node_start_pfn of hotadded pgdat to 0 mm/memory_hotplug: handle memblocks only with CONFIG_ARCH_KEEP_MEMBLOCK Patch series "mm/memory_hotplug: Interface to add driver-managed system: mm/memory_hotplug: introduce add_memory_driver_managed() kexec_file: don't place kexec images on IORESOURCE_MEM_DRIVER_MANAGED device-dax: add memory via add_memory_driver_managed() Michal Hocko <mhocko@kernel.org>: mm/memory_hotplug: disable the functionality for 32b Subsystem: mm/cleanups chenqiwu <chenqiwu@xiaomi.com>: mm: replace zero-length array with flexible-array member Ethon Paul <ethp@qq.com>: mm/memory_hotplug: fix a typo in comment "recoreded"->"recorded" mm: ksm: fix a typo in comment "alreaady"->"already" mm: mmap: fix a typo in comment "compatbility"->"compatibility" mm/hugetlb: fix a typos in comments mm/vmsan: fix some typos in comment mm/compaction: fix a typo in comment "pessemistic"->"pessimistic" mm/memblock: fix a typo in comment "implict"->"implicit" mm/list_lru: fix a typo in comment "numbesr"->"numbers" mm/filemap: fix a typo in comment "unneccssary"->"unnecessary" mm/frontswap: fix some typos in frontswap.c mm, memcg: fix some typos in memcontrol.c mm: fix a typo in comment "strucure"->"structure" mm/slub: fix a typo in comment "disambiguiation"->"disambiguation" mm/sparse: fix a typo in comment "convienence"->"convenience" mm/page-writeback: fix a typo in comment "effictive"->"effective" mm/memory: fix a typo in comment "attampt"->"attempt" Zou Wei <zou_wei@huawei.com>: mm: use false for bool variable Jason Yan <yanaijie@huawei.com>: include/linux/mm.h: return true in cpupid_pid_unset() Subsystem: mm/zram Andy Shevchenko <andriy.shevchenko@linux.intel.com>: zcomp: Use ARRAY_SIZE() for backends list Subsystem: procfs Alexey Dobriyan <adobriyan@gmail.com>: proc: rename "catch" function argument Subsystem: core-kernel Jason Yan <yanaijie@huawei.com>: user.c: make uidhash_table static Subsystem: get_maintainer Joe Perches <joe@perches.com>: get_maintainer: add email addresses from .yaml files get_maintainer: fix unexpected behavior for path/to//file (double slashes) Subsystem: lib Christophe JAILLET <christophe.jaillet@wanadoo.fr>: lib/math: avoid trailing newline hidden in pr_fmt() KP Singh <kpsingh@chromium.org>: lib: Add might_fault() to strncpy_from_user. Jason Yan <yanaijie@huawei.com>: lib/test_lockup.c: make test_inode static Jann Horn <jannh@google.com>: lib/zlib: remove outdated and incorrect pre-increment optimization Joe Perches <joe@perches.com>: lib/percpu-refcount.c: use a more common logging style Tan Hu <tan.hu@zte.com.cn>: lib/flex_proportions.c: cleanup __fprop_inc_percpu_max Jesse Brandeburg <jesse.brandeburg@intel.com>: lib: make a test module with set/clear bit Subsystem: bitops Arnd Bergmann <arnd@arndb.de>: include/linux/bitops.h: avoid clang shift-count-overflow warnings Subsystem: checkpatch Joe Perches <joe@perches.com>: checkpatch: additional MAINTAINER section entry ordering checks checkpatch: look for c99 comments in ctx_locate_comment checkpatch: disallow --git and --file/--fix Geert Uytterhoeven <geert+renesas@glider.be>: checkpatch: use patch subject when reading from stdin Subsystem: binfmt Anthony Iliopoulos <ailiop@suse.com>: fs/binfmt_elf: remove redundant elf_map ifndef Nick Desaulniers <ndesaulniers@google.com>: elfnote: mark all .note sections SHF_ALLOC Subsystem: init Chris Down <chris@chrisdown.name>: init: allow distribution configuration of default init Subsystem: fat OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>: fat: don't allow to mount if the FAT length == 0 fat: improve the readahead for FAT entries Subsystem: seq_file Joe Perches <joe@perches.com>: fs/seq_file.c: seq_read: Update pr_info_ratelimited Kefeng Wang <wangkefeng.wang@huawei.com>: Patch series "seq_file: Introduce DEFINE_SEQ_ATTRIBUTE() helper macro": include/linux/seq_file.h: introduce DEFINE_SEQ_ATTRIBUTE() helper macro mm/vmstat.c: convert to use DEFINE_SEQ_ATTRIBUTE macro kernel/kprobes.c: convert to use DEFINE_SEQ_ATTRIBUTE macro Subsystem: exec Christoph Hellwig <hch@lst.de>: exec: simplify the copy_strings_kernel calling convention exec: open code copy_string_kernel Subsystem: rapidio Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>: rapidio: avoid data race between file operation callbacks and mport_cdev_add(). John Hubbard <jhubbard@nvidia.com>: rapidio: convert get_user_pages() --> pin_user_pages() Subsystem: relay Daniel Axtens <dja@axtens.net>: kernel/relay.c: handle alloc_percpu returning NULL in relay_open Pengcheng Yang <yangpc@wangsu.com>: kernel/relay.c: fix read_pos error when multiple readers Subsystem: selftests Ram Pai <linuxram@us.ibm.com>: Patch series "selftests, powerpc, x86: Memory Protection Keys", v19: selftests/x86/pkeys: move selftests to arch-neutral directory selftests/vm/pkeys: rename all references to pkru to a generic name selftests/vm/pkeys: move generic definitions to header file Thiago Jung Bauermann <bauerman@linux.ibm.com>: selftests/vm/pkeys: move some definitions to arch-specific header selftests/vm/pkeys: make gcc check arguments of sigsafe_printf() Sandipan Das <sandipan@linux.ibm.com>: selftests: vm: pkeys: Use sane types for pkey register selftests: vm: pkeys: add helpers for pkey bits Ram Pai <linuxram@us.ibm.com>: selftests/vm/pkeys: fix pkey_disable_clear() selftests/vm/pkeys: fix assertion in pkey_disable_set/clear() selftests/vm/pkeys: fix alloc_random_pkey() to make it really random Sandipan Das <sandipan@linux.ibm.com>: selftests: vm: pkeys: use the correct huge page size Ram Pai <linuxram@us.ibm.com>: selftests/vm/pkeys: introduce generic pkey abstractions selftests/vm/pkeys: introduce powerpc support "Desnes A. Nunes do Rosario" <desnesn@linux.vnet.ibm.com>: selftests/vm/pkeys: fix number of reserved powerpc pkeys Ram Pai <linuxram@us.ibm.com>: selftests/vm/pkeys: fix assertion in test_pkey_alloc_exhaust() selftests/vm/pkeys: improve checks to determine pkey support selftests/vm/pkeys: associate key on a mapped page and detect access violation selftests/vm/pkeys: associate key on a mapped page and detect write violation selftests/vm/pkeys: detect write violation on a mapped access-denied-key page selftests/vm/pkeys: introduce a sub-page allocator selftests/vm/pkeys: test correct behaviour of pkey-0 selftests/vm/pkeys: override access right definitions on powerpc Sandipan Das <sandipan@linux.ibm.com>: selftests: vm: pkeys: use the correct page size on powerpc selftests: vm: pkeys: fix multilib builds for x86 Jagadeesh Pagadala <jagdsh.linux@gmail.com>: tools/testing/selftests/vm: remove duplicate headers Subsystem: ubsan Arnd Bergmann <arnd@arndb.de>: lib/ubsan.c: fix gcc-10 warnings Documentation/dev-tools/kcov.rst | 17 Documentation/features/debug/debug-vm-pgtable/arch-support.txt | 34 arch/arc/Kconfig | 1 arch/arc/include/asm/highmem.h | 20 arch/arc/mm/highmem.c | 34 arch/arm/include/asm/highmem.h | 9 arch/arm/include/asm/pgtable.h | 1 arch/arm/lib/uaccess_with_memcpy.c | 7 arch/arm/mach-sa1100/assabet.c | 2 arch/arm/mm/dump.c | 29 arch/arm/mm/fault-armv.c | 7 arch/arm/mm/fault.c | 22 arch/arm/mm/highmem.c | 41 arch/arm/mm/idmap.c | 3 arch/arm/mm/init.c | 2 arch/arm/mm/ioremap.c | 12 arch/arm/mm/mm.h | 2 arch/arm/mm/mmu.c | 35 arch/arm/mm/pgd.c | 40 arch/arm64/Kconfig | 1 arch/arm64/include/asm/kvm_mmu.h | 10 arch/arm64/include/asm/pgalloc.h | 10 arch/arm64/include/asm/pgtable-types.h | 5 arch/arm64/include/asm/pgtable.h | 37 arch/arm64/include/asm/stage2_pgtable.h | 48 arch/arm64/kernel/hibernate.c | 44 arch/arm64/kvm/mmu.c | 209 arch/arm64/mm/fault.c | 9 arch/arm64/mm/hugetlbpage.c | 15 arch/arm64/mm/kasan_init.c | 26 arch/arm64/mm/mmu.c | 52 arch/arm64/mm/pageattr.c | 7 arch/csky/include/asm/highmem.h | 12 arch/csky/mm/highmem.c | 64 arch/h8300/include/asm/pgtable.h | 1 arch/hexagon/include/asm/fixmap.h | 4 arch/hexagon/include/asm/pgtable.h | 1 arch/ia64/include/asm/pgalloc.h | 4 arch/ia64/include/asm/pgtable.h | 17 arch/ia64/mm/fault.c | 7 arch/ia64/mm/hugetlbpage.c | 18 arch/ia64/mm/init.c | 28 arch/microblaze/include/asm/highmem.h | 55 arch/microblaze/mm/highmem.c | 21 arch/microblaze/mm/init.c | 3 arch/mips/include/asm/highmem.h | 11 arch/mips/mm/cache.c | 6 arch/mips/mm/highmem.c | 62 arch/nds32/include/asm/highmem.h | 9 arch/nds32/mm/highmem.c | 49 arch/nios2/include/asm/pgtable.h | 3 arch/nios2/mm/fault.c | 9 arch/nios2/mm/ioremap.c | 6 arch/openrisc/include/asm/pgtable.h | 1 arch/openrisc/mm/fault.c | 10 arch/openrisc/mm/init.c | 4 arch/parisc/include/asm/cacheflush.h | 32 arch/powerpc/Kconfig | 1 arch/powerpc/include/asm/book3s/32/pgtable.h | 1 arch/powerpc/include/asm/book3s/64/hash.h | 4 arch/powerpc/include/asm/book3s/64/pgalloc.h | 4 arch/powerpc/include/asm/book3s/64/pgtable.h | 60 arch/powerpc/include/asm/book3s/64/radix.h | 6 arch/powerpc/include/asm/highmem.h | 56 arch/powerpc/include/asm/nohash/32/pgtable.h | 1 arch/powerpc/include/asm/nohash/64/pgalloc.h | 2 arch/powerpc/include/asm/nohash/64/pgtable-4k.h | 32 arch/powerpc/include/asm/nohash/64/pgtable.h | 6 arch/powerpc/include/asm/pgtable.h | 10 arch/powerpc/kvm/book3s_64_mmu_radix.c | 32 arch/powerpc/lib/code-patching.c | 7 arch/powerpc/mm/book3s64/hash_pgtable.c | 4 arch/powerpc/mm/book3s64/radix_pgtable.c | 26 arch/powerpc/mm/book3s64/subpage_prot.c | 6 arch/powerpc/mm/highmem.c | 26 arch/powerpc/mm/hugetlbpage.c | 28 arch/powerpc/mm/kasan/kasan_init_32.c | 2 arch/powerpc/mm/mem.c | 3 arch/powerpc/mm/nohash/book3e_pgtable.c | 15 arch/powerpc/mm/pgtable.c | 30 arch/powerpc/mm/pgtable_64.c | 10 arch/powerpc/mm/ptdump/hashpagetable.c | 20 arch/powerpc/mm/ptdump/ptdump.c | 12 arch/powerpc/platforms/pseries/hotplug-memory.c | 26 arch/powerpc/xmon/xmon.c | 27 arch/s390/Kconfig | 1 arch/sh/include/asm/pgtable-2level.h | 1 arch/sh/include/asm/pgtable-3level.h | 1 arch/sh/include/asm/pgtable_32.h | 5 arch/sh/include/asm/pgtable_64.h | 5 arch/sh/kernel/io_trapped.c | 7 arch/sh/mm/cache-sh4.c | 4 arch/sh/mm/cache-sh5.c | 7 arch/sh/mm/fault.c | 64 arch/sh/mm/hugetlbpage.c | 28 arch/sh/mm/init.c | 15 arch/sh/mm/kmap.c | 2 arch/sh/mm/tlbex_32.c | 6 arch/sh/mm/tlbex_64.c | 7 arch/sparc/include/asm/highmem.h | 29 arch/sparc/mm/highmem.c | 31 arch/sparc/mm/io-unit.c | 1 arch/sparc/mm/iommu.c | 1 arch/unicore32/include/asm/pgtable.h | 1 arch/unicore32/kernel/hibernate.c | 4 arch/x86/Kconfig | 1 arch/x86/include/asm/fixmap.h | 1 arch/x86/include/asm/highmem.h | 37 arch/x86/include/asm/pgtable_64.h | 6 arch/x86/mm/highmem_32.c | 52 arch/xtensa/include/asm/highmem.h | 31 arch/xtensa/mm/highmem.c | 28 drivers/block/zram/zcomp.c | 7 drivers/dax/dax-private.h | 1 drivers/dax/kmem.c | 28 drivers/gpu/drm/ttm/ttm_bo_util.c | 56 drivers/gpu/drm/vmwgfx/vmwgfx_blit.c | 17 drivers/rapidio/devices/rio_mport_cdev.c | 27 drivers/usb/core/hcd.c | 3 fs/binfmt_elf.c | 4 fs/binfmt_em86.c | 6 fs/binfmt_misc.c | 4 fs/binfmt_script.c | 6 fs/exec.c | 58 fs/fat/fatent.c | 103 fs/fat/inode.c | 6 fs/proc/array.c | 8 fs/seq_file.c | 7 include/asm-generic/5level-fixup.h | 59 include/asm-generic/pgtable-nop4d-hack.h | 64 include/asm-generic/pgtable-nopud.h | 4 include/drm/ttm/ttm_bo_api.h | 4 include/linux/binfmts.h | 3 include/linux/bitops.h | 2 include/linux/elfnote.h | 2 include/linux/highmem.h | 89 include/linux/ioport.h | 1 include/linux/memory_hotplug.h | 9 include/linux/mm.h | 12 include/linux/sched.h | 3 include/linux/seq_file.h | 19 init/Kconfig | 10 init/main.c | 10 kernel/kcov.c | 282 - kernel/kexec_file.c | 5 kernel/kprobes.c | 34 kernel/relay.c | 22 kernel/user.c | 2 lib/Kconfig.debug | 44 lib/Makefile | 2 lib/flex_proportions.c | 7 lib/math/prime_numbers.c | 10 lib/percpu-refcount.c | 6 lib/strncpy_from_user.c | 1 lib/test_bitops.c | 60 lib/test_lockup.c | 2 lib/ubsan.c | 33 lib/zlib_inflate/inffast.c | 91 mm/Kconfig | 4 mm/Makefile | 1 mm/compaction.c | 2 mm/debug_vm_pgtable.c | 382 + mm/filemap.c | 2 mm/frontswap.c | 6 mm/huge_memory.c | 2 mm/hugetlb.c | 16 mm/internal.h | 2 mm/kasan/init.c | 11 mm/ksm.c | 10 mm/list_lru.c | 2 mm/memblock.c | 2 mm/memcontrol.c | 4 mm/memory.c | 10 mm/memory_hotplug.c | 179 mm/mmap.c | 2 mm/mremap.c | 2 mm/page-writeback.c | 2 mm/slub.c | 2 mm/sparse.c | 2 mm/util.c | 22 mm/vmalloc.c | 2 mm/vmscan.c | 6 mm/vmstat.c | 32 mm/zbud.c | 2 scripts/checkpatch.pl | 62 scripts/get_maintainer.pl | 46 security/keys/internal.h | 11 security/keys/keyctl.c | 16 tools/testing/selftests/lib/config | 1 tools/testing/selftests/vm/.gitignore | 1 tools/testing/selftests/vm/Makefile | 75 tools/testing/selftests/vm/mremap_dontunmap.c | 1 tools/testing/selftests/vm/pkey-helpers.h | 557 +- tools/testing/selftests/vm/pkey-powerpc.h | 153 tools/testing/selftests/vm/pkey-x86.h | 191 tools/testing/selftests/vm/protection_keys.c | 2370 ++++++++-- tools/testing/selftests/x86/.gitignore | 1 tools/testing/selftests/x86/Makefile | 2 tools/testing/selftests/x86/pkey-helpers.h | 219 tools/testing/selftests/x86/protection_keys.c | 1506 ------ 200 files changed, 5182 insertions(+), 4033 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-06-03 22:55 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-06-03 22:55 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm More mm/ work, plenty more to come. 131 patches, based on d6f9469a03d832dcd17041ed67774ffb5f3e73b3. Subsystems affected by this patch series: mm/slub mm/memcg mm/gup mm/kasan mm/pagealloc mm/hugetlb mm/vmscan mm/tools mm/mempolicy mm/memblock mm/hugetlbfs mm/thp mm/mmap mm/kconfig Subsystem: mm/slub Wang Hai <wanghai38@huawei.com>: mm/slub: fix a memory leak in sysfs_slab_add() Subsystem: mm/memcg Shakeel Butt <shakeelb@google.com>: mm/memcg: optimize memory.numa_stat like memory.stat Subsystem: mm/gup John Hubbard <jhubbard@nvidia.com>: Patch series "mm/gup, drm/i915: refactor gup_fast, convert to pin_user_pages()", v2: mm/gup: move __get_user_pages_fast() down a few lines in gup.c mm/gup: refactor and de-duplicate gup_fast() code mm/gup: introduce pin_user_pages_fast_only() drm/i915: convert get_user_pages() --> pin_user_pages() mm/gup: might_lock_read(mmap_sem) in get_user_pages_fast() Subsystem: mm/kasan Daniel Axtens <dja@axtens.net>: Patch series "Fix some incompatibilites between KASAN and FORTIFY_SOURCE", v4: kasan: stop tests being eliminated as dead code with FORTIFY_SOURCE string.h: fix incompatibility between FORTIFY_SOURCE and KASAN Subsystem: mm/pagealloc Michal Hocko <mhocko@suse.com>: mm: clarify __GFP_MEMALLOC usage Mike Rapoport <rppt@linux.ibm.com>: Patch series "mm: rework free_area_init*() funcitons": mm: memblock: replace dereferences of memblock_region.nid with API calls mm: make early_pfn_to_nid() and related defintions close to each other mm: remove CONFIG_HAVE_MEMBLOCK_NODE_MAP option mm: free_area_init: use maximal zone PFNs rather than zone sizes mm: use free_area_init() instead of free_area_init_nodes() alpha: simplify detection of memory zone boundaries arm: simplify detection of memory zone boundaries arm64: simplify detection of memory zone boundaries for UMA configs csky: simplify detection of memory zone boundaries m68k: mm: simplify detection of memory zone boundaries parisc: simplify detection of memory zone boundaries sparc32: simplify detection of memory zone boundaries unicore32: simplify detection of memory zone boundaries xtensa: simplify detection of memory zone boundaries Baoquan He <bhe@redhat.com>: mm: memmap_init: iterate over memblock regions rather that check each PFN Mike Rapoport <rppt@linux.ibm.com>: mm: remove early_pfn_in_nid() and CONFIG_NODES_SPAN_OTHER_NODES mm: free_area_init: allow defining max_zone_pfn in descending order mm: rename free_area_init_node() to free_area_init_memoryless_node() mm: clean up free_area_init_node() and its helpers mm: simplify find_min_pfn_with_active_regions() docs/vm: update memory-models documentation Wei Yang <richard.weiyang@gmail.com>: Patch series "mm/page_alloc.c: cleanup on check page", v3: mm/page_alloc.c: bad_[reason|flags] is not necessary when PageHWPoison mm/page_alloc.c: bad_flags is not necessary for bad_page() mm/page_alloc.c: rename free_pages_check_bad() to check_free_page_bad() mm/page_alloc.c: rename free_pages_check() to check_free_page() mm/page_alloc.c: extract check_[new|free]_page_bad() common part to page_bad_reason() Roman Gushchin <guro@fb.com>: mm,page_alloc,cma: conditionally prefer cma pageblocks for movable allocations Baoquan He <bhe@redhat.com>: mm/page_alloc.c: remove unused free_bootmem_with_active_regions Patch series "improvements about lowmem_reserve and /proc/zoneinfo", v2: mm/page_alloc.c: only tune sysctl_lowmem_reserve_ratio value once when changing it mm/page_alloc.c: clear out zone->lowmem_reserve[] if the zone is empty mm/vmstat.c: do not show lowmem reserve protection information of empty zone Joonsoo Kim <iamjoonsoo.kim@lge.com>: Patch series "integrate classzone_idx and high_zoneidx", v5: mm/page_alloc: use ac->high_zoneidx for classzone_idx mm/page_alloc: integrate classzone_idx and high_zoneidx Wei Yang <richard.weiyang@gmail.com>: mm/page_alloc.c: use NODE_MASK_NONE in build_zonelists() mm: rename gfpflags_to_migratetype to gfp_migratetype for same convention Sandipan Das <sandipan@linux.ibm.com>: mm/page_alloc.c: reset numa stats for boot pagesets Charan Teja Reddy <charante@codeaurora.org>: mm, page_alloc: reset the zone->watermark_boost early Anshuman Khandual <anshuman.khandual@arm.com>: mm/page_alloc: restrict and formalize compound_page_dtors[] Daniel Jordan <daniel.m.jordan@oracle.com>: Patch series "initialize deferred pages with interrupts enabled", v4: mm/pagealloc.c: call touch_nmi_watchdog() on max order boundaries in deferred init Pavel Tatashin <pasha.tatashin@soleen.com>: mm: initialize deferred pages with interrupts enabled mm: call cond_resched() from deferred_init_memmap() Daniel Jordan <daniel.m.jordan@oracle.com>: Patch series "padata: parallelize deferred page init", v3: padata: remove exit routine padata: initialize earlier padata: allocate work structures for parallel jobs from a pool padata: add basic support for multithreaded jobs mm: don't track number of pages during deferred initialization mm: parallelize deferred_init_memmap() mm: make deferred init's max threads arch-specific padata: document multithreaded jobs Chen Tao <chentao107@huawei.com>: mm/page_alloc.c: add missing newline Subsystem: mm/hugetlb "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>: Patch series "thp/khugepaged improvements and CoW semantics", v4: khugepaged: add self test khugepaged: do not stop collapse if less than half PTEs are referenced khugepaged: drain all LRU caches before scanning pages khugepaged: drain LRU add pagevec after swapin khugepaged: allow to collapse a page shared across fork khugepaged: allow to collapse PTE-mapped compound pages thp: change CoW semantics for anon-THP khugepaged: introduce 'max_ptes_shared' tunable Mike Kravetz <mike.kravetz@oracle.com>: Patch series "Clean up hugetlb boot command line processing", v4: hugetlbfs: add arch_hugetlb_valid_size hugetlbfs: move hugepagesz= parsing to arch independent code hugetlbfs: remove hugetlb_add_hstate() warning for existing hstate hugetlbfs: clean up command line processing hugetlbfs: fix changes to command line processing Li Xinhai <lixinhai.lxh@gmail.com>: mm/hugetlb: avoid unnecessary check on pud and pmd entry in huge_pte_offset Anshuman Khandual <anshuman.khandual@arm.com>: Patch series "mm/hugetlb: Add some new generic fallbacks", v3: arm64/mm: drop __HAVE_ARCH_HUGE_PTEP_GET mm/hugetlb: define a generic fallback for is_hugepage_only_range() mm/hugetlb: define a generic fallback for arch_clear_hugepage_flags() "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm: simplify calling a compound page destructor Subsystem: mm/vmscan Wei Yang <richard.weiyang@gmail.com>: mm/vmscan.c: use update_lru_size() in update_lru_sizes() Jaewon Kim <jaewon31.kim@samsung.com>: mm/vmscan: count layzfree pages and fix nr_isolated_* mismatch Maninder Singh <maninder1.s@samsung.com>: mm/vmscan.c: change prototype for shrink_page_list Qiwu Chen <qiwuchen55@gmail.com>: mm/vmscan: update the comment of should_continue_reclaim() Johannes Weiner <hannes@cmpxchg.org>: Patch series "mm: memcontrol: charge swapin pages on instantiation", v2: mm: fix NUMA node file count error in replace_page_cache() mm: memcontrol: fix stat-corrupting race in charge moving mm: memcontrol: drop @compound parameter from memcg charging API mm: shmem: remove rare optimization when swapin races with hole punching mm: memcontrol: move out cgroup swaprate throttling mm: memcontrol: convert page cache to a new mem_cgroup_charge() API mm: memcontrol: prepare uncharging for removal of private page type counters mm: memcontrol: prepare move_account for removal of private page type counters mm: memcontrol: prepare cgroup vmstat infrastructure for native anon counters mm: memcontrol: switch to native NR_FILE_PAGES and NR_SHMEM counters mm: memcontrol: switch to native NR_ANON_MAPPED counter mm: memcontrol: switch to native NR_ANON_THPS counter mm: memcontrol: convert anon and file-thp to new mem_cgroup_charge() API mm: memcontrol: drop unused try/commit/cancel charge API mm: memcontrol: prepare swap controller setup for integration mm: memcontrol: make swap tracking an integral part of memory control mm: memcontrol: charge swapin pages on instantiation Alex Shi <alex.shi@linux.alibaba.com>: mm: memcontrol: document the new swap control behavior Johannes Weiner <hannes@cmpxchg.org>: mm: memcontrol: delete unused lrucare handling mm: memcontrol: update page->mem_cgroup stability rules mm: fix LRU balancing effect of new transparent huge pages mm: keep separate anon and file statistics on page reclaim activity mm: allow swappiness that prefers reclaiming anon over the file workingset mm: fold and remove lru_cache_add_anon() and lru_cache_add_file() mm: workingset: let cache workingset challenge anon mm: remove use-once cache bias from LRU balancing mm: vmscan: drop unnecessary div0 avoidance rounding in get_scan_count() mm: base LRU balancing on an explicit cost model mm: deactivations shouldn't bias the LRU balance mm: only count actual rotations as LRU reclaim cost mm: balance LRU lists based on relative thrashing mm: vmscan: determine anon/file pressure balance at the reclaim root mm: vmscan: reclaim writepage is IO cost mm: vmscan: limit the range of LRU type balancing Shakeel Butt <shakeelb@google.com>: mm: swap: fix vmstats for huge pages mm: swap: memcg: fix memcg stats for huge pages Subsystem: mm/tools Changhee Han <ch0.han@lge.com>: tools/vm/page_owner_sort.c: filter out unneeded line Subsystem: mm/mempolicy Michal Hocko <mhocko@suse.com>: mm, mempolicy: fix up gup usage in lookup_node Subsystem: mm/memblock chenqiwu <chenqiwu@xiaomi.com>: include/linux/memblock.h: fix minor typo and unclear comment Mike Rapoport <rppt@linux.ibm.com>: sparc32: register memory occupied by kernel as memblock.memory Subsystem: mm/hugetlbfs Shijie Hu <hushijie3@huawei.com>: hugetlbfs: get unmapped area below TASK_UNMAPPED_BASE for hugetlbfs Subsystem: mm/thp Yang Shi <yang.shi@linux.alibaba.com>: mm: thp: don't need to drain lru cache when splitting and mlocking THP Anshuman Khandual <anshuman.khandual@arm.com>: Patch series "mm/thp: Rename pmd_mknotpresent() as pmd_mknotvalid()", v2: powerpc/mm: drop platform defined pmd_mknotpresent() mm/thp: rename pmd_mknotpresent() as pmd_mkinvalid() Subsystem: mm/mmap Scott Cheloha <cheloha@linux.vnet.ibm.com>: drivers/base/memory.c: cache memory blocks in xarray to accelerate lookup Subsystem: mm/kconfig Zong Li <zong.li@sifive.com>: Patch series "Extract DEBUG_WX to shared use": mm: add DEBUG_WX support riscv: support DEBUG_WX x86: mm: use ARCH_HAS_DEBUG_WX instead of arch defined arm64: mm: use ARCH_HAS_DEBUG_WX instead of arch defined Documentation/admin-guide/cgroup-v1/memory.rst | 19 Documentation/admin-guide/kernel-parameters.txt | 40 Documentation/admin-guide/mm/hugetlbpage.rst | 35 Documentation/admin-guide/mm/transhuge.rst | 7 Documentation/admin-guide/sysctl/vm.rst | 23 Documentation/core-api/padata.rst | 41 Documentation/features/vm/numa-memblock/arch-support.txt | 34 Documentation/vm/memory-model.rst | 9 Documentation/vm/page_owner.rst | 3 arch/alpha/mm/init.c | 16 arch/alpha/mm/numa.c | 22 arch/arc/include/asm/hugepage.h | 2 arch/arc/mm/init.c | 41 arch/arm/include/asm/hugetlb.h | 7 arch/arm/include/asm/pgtable-3level.h | 2 arch/arm/mm/init.c | 66 arch/arm64/Kconfig | 2 arch/arm64/Kconfig.debug | 29 arch/arm64/include/asm/hugetlb.h | 13 arch/arm64/include/asm/pgtable.h | 2 arch/arm64/mm/hugetlbpage.c | 48 arch/arm64/mm/init.c | 56 arch/arm64/mm/numa.c | 9 arch/c6x/mm/init.c | 8 arch/csky/kernel/setup.c | 26 arch/h8300/mm/init.c | 6 arch/hexagon/mm/init.c | 6 arch/ia64/Kconfig | 1 arch/ia64/include/asm/hugetlb.h | 5 arch/ia64/mm/contig.c | 2 arch/ia64/mm/discontig.c | 2 arch/m68k/mm/init.c | 6 arch/m68k/mm/mcfmmu.c | 9 arch/m68k/mm/motorola.c | 15 arch/m68k/mm/sun3mmu.c | 10 arch/microblaze/Kconfig | 1 arch/microblaze/mm/init.c | 2 arch/mips/Kconfig | 1 arch/mips/include/asm/hugetlb.h | 11 arch/mips/include/asm/pgtable.h | 2 arch/mips/loongson64/numa.c | 2 arch/mips/mm/init.c | 2 arch/mips/sgi-ip27/ip27-memory.c | 2 arch/nds32/mm/init.c | 11 arch/nios2/mm/init.c | 8 arch/openrisc/mm/init.c | 9 arch/parisc/include/asm/hugetlb.h | 10 arch/parisc/mm/init.c | 22 arch/powerpc/Kconfig | 10 arch/powerpc/include/asm/book3s/64/pgtable.h | 4 arch/powerpc/include/asm/hugetlb.h | 5 arch/powerpc/mm/hugetlbpage.c | 38 arch/powerpc/mm/mem.c | 2 arch/riscv/Kconfig | 2 arch/riscv/include/asm/hugetlb.h | 10 arch/riscv/include/asm/ptdump.h | 11 arch/riscv/mm/hugetlbpage.c | 44 arch/riscv/mm/init.c | 5 arch/s390/Kconfig | 1 arch/s390/include/asm/hugetlb.h | 8 arch/s390/mm/hugetlbpage.c | 34 arch/s390/mm/init.c | 2 arch/sh/Kconfig | 1 arch/sh/include/asm/hugetlb.h | 7 arch/sh/mm/init.c | 2 arch/sparc/Kconfig | 10 arch/sparc/include/asm/hugetlb.h | 10 arch/sparc/mm/init_32.c | 1 arch/sparc/mm/init_64.c | 67 arch/sparc/mm/srmmu.c | 21 arch/um/kernel/mem.c | 12 arch/unicore32/include/asm/memory.h | 2 arch/unicore32/include/mach/memory.h | 6 arch/unicore32/kernel/pci.c | 14 arch/unicore32/mm/init.c | 43 arch/x86/Kconfig | 11 arch/x86/Kconfig.debug | 27 arch/x86/include/asm/hugetlb.h | 10 arch/x86/include/asm/pgtable.h | 2 arch/x86/mm/hugetlbpage.c | 35 arch/x86/mm/init.c | 2 arch/x86/mm/init_64.c | 12 arch/x86/mm/kmmio.c | 2 arch/x86/mm/numa.c | 11 arch/xtensa/mm/init.c | 8 drivers/base/memory.c | 44 drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 22 fs/cifs/file.c | 10 fs/fuse/dev.c | 2 fs/hugetlbfs/inode.c | 67 include/asm-generic/hugetlb.h | 2 include/linux/compaction.h | 9 include/linux/gfp.h | 7 include/linux/hugetlb.h | 16 include/linux/memblock.h | 15 include/linux/memcontrol.h | 102 - include/linux/mm.h | 52 include/linux/mmzone.h | 46 include/linux/padata.h | 43 include/linux/string.h | 60 include/linux/swap.h | 17 include/linux/vm_event_item.h | 4 include/linux/vmstat.h | 2 include/trace/events/compaction.h | 22 include/trace/events/huge_memory.h | 3 include/trace/events/vmscan.h | 14 init/Kconfig | 17 init/main.c | 2 kernel/events/uprobes.c | 22 kernel/padata.c | 293 +++- kernel/sysctl.c | 3 lib/test_kasan.c | 29 mm/Kconfig | 9 mm/Kconfig.debug | 32 mm/compaction.c | 70 - mm/filemap.c | 55 mm/gup.c | 237 ++- mm/huge_memory.c | 282 ---- mm/hugetlb.c | 260 ++- mm/internal.h | 25 mm/khugepaged.c | 316 ++-- mm/memblock.c | 19 mm/memcontrol.c | 642 +++------ mm/memory.c | 103 - mm/memory_hotplug.c | 10 mm/mempolicy.c | 5 mm/migrate.c | 30 mm/oom_kill.c | 4 mm/page_alloc.c | 735 ++++------ mm/page_owner.c | 7 mm/pgtable-generic.c | 2 mm/rmap.c | 53 mm/shmem.c | 156 -- mm/slab.c | 4 mm/slub.c | 8 mm/swap.c | 199 +- mm/swap_cgroup.c | 10 mm/swap_state.c | 110 - mm/swapfile.c | 39 mm/userfaultfd.c | 15 mm/vmscan.c | 344 ++-- mm/vmstat.c | 16 mm/workingset.c | 23 tools/testing/selftests/vm/.gitignore | 1 tools/testing/selftests/vm/Makefile | 1 tools/testing/selftests/vm/khugepaged.c | 1035 +++++++++++++++ tools/vm/page_owner_sort.c | 5 147 files changed, 3876 insertions(+), 3108 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-06-02 20:09 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-06-02 20:09 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm A few little subsystems and a start of a lot of MM patches. 128 patches, based on f359287765c04711ff54fbd11645271d8e5ff763: Subsystems affected by this patch series: squashfs ocfs2 parisc vfs mm/slab-generic mm/slub mm/debug mm/pagecache mm/gup mm/swap mm/memcg mm/pagemap mm/memory-failure mm/vmalloc mm/kasan Subsystem: squashfs Philippe Liard <pliard@google.com>: squashfs: migrate from ll_rw_block usage to BIO Subsystem: ocfs2 Jules Irenge <jbi.octave@gmail.com>: ocfs2: add missing annotation for dlm_empty_lockres() Gang He <ghe@suse.com>: ocfs2: mount shared volume without ha stack Subsystem: parisc Andrew Morton <akpm@linux-foundation.org>: arch/parisc/include/asm/pgtable.h: remove unused `old_pte' Subsystem: vfs Jeff Layton <jlayton@redhat.com>: Patch series "vfs: have syncfs() return error when there are writeback: vfs: track per-sb writeback errors and report them to syncfs fs/buffer.c: record blockdev write errors in super_block that it backs Subsystem: mm/slab-generic Vlastimil Babka <vbabka@suse.cz>: usercopy: mark dma-kmalloc caches as usercopy caches Subsystem: mm/slub Dongli Zhang <dongli.zhang@oracle.com>: mm/slub.c: fix corrupted freechain in deactivate_slab() Christoph Lameter <cl@linux.com>: slub: Remove userspace notifier for cache add/remove Christopher Lameter <cl@linux.com>: slub: remove kmalloc under list_lock from list_slab_objects() V2 Qian Cai <cai@lca.pw>: mm/slub: fix stack overruns with SLUB_STATS Andrew Morton <akpm@linux-foundation.org>: Documentation/vm/slub.rst: s/Toggle/Enable/ Subsystem: mm/debug Vlastimil Babka <vbabka@suse.cz>: mm, dump_page(): do not crash with invalid mapping pointer Subsystem: mm/pagecache "Matthew Wilcox (Oracle)" <willy@infradead.org>: Patch series "Change readahead API", v11: mm: move readahead prototypes from mm.h mm: return void from various readahead functions mm: ignore return value of ->readpages mm: move readahead nr_pages check into read_pages mm: add new readahead_control API mm: use readahead_control to pass arguments mm: rename various 'offset' parameters to 'index' mm: rename readahead loop variable to 'i' mm: remove 'page_offset' from readahead loop mm: put readahead pages in cache earlier mm: add readahead address space operation mm: move end_index check out of readahead loop mm: add page_cache_readahead_unbounded mm: document why we don't set PageReadahead mm: use memalloc_nofs_save in readahead path fs: convert mpage_readpages to mpage_readahead btrfs: convert from readpages to readahead erofs: convert uncompressed files from readpages to readahead erofs: convert compressed files from readpages to readahead ext4: convert from readpages to readahead ext4: pass the inode to ext4_mpage_readpages f2fs: convert from readpages to readahead f2fs: pass the inode to f2fs_mpage_readpages fuse: convert from readpages to readahead iomap: convert from readpages to readahead Guoqing Jiang <guoqing.jiang@cloud.ionos.com>: Patch series "Introduce attach/detach_page_private to cleanup code": include/linux/pagemap.h: introduce attach/detach_page_private md: remove __clear_page_buffers and use attach/detach_page_private btrfs: use attach/detach_page_private fs/buffer.c: use attach/detach_page_private f2fs: use attach/detach_page_private iomap: use attach/detach_page_private ntfs: replace attach_page_buffers with attach_page_private orangefs: use attach/detach_page_private buffer_head.h: remove attach_page_buffers mm/migrate.c: call detach_page_private to cleanup code mm_types.h: change set_page_private to inline function "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm/filemap.c: remove misleading comment Chao Yu <yuchao0@huawei.com>: mm/page-writeback.c: remove unused variable NeilBrown <neilb@suse.de>: mm/writeback: replace PF_LESS_THROTTLE with PF_LOCAL_THROTTLE mm/writeback: discard NR_UNSTABLE_NFS, use NR_WRITEBACK instead Subsystem: mm/gup Souptick Joarder <jrdr.linux@gmail.com>: mm/gup.c: update the documentation John Hubbard <jhubbard@nvidia.com>: mm/gup: introduce pin_user_pages_unlocked ivtv: convert get_user_pages() --> pin_user_pages() Miles Chen <miles.chen@mediatek.com>: mm/gup.c: further document vma_permits_fault() Subsystem: mm/swap chenqiwu <chenqiwu@xiaomi.com>: mm/swapfile: use list_{prev,next}_entry() instead of open-coding Qian Cai <cai@lca.pw>: mm/swap_state: fix a data race in swapin_nr_pages Andrea Righi <andrea.righi@canonical.com>: mm: swap: properly update readahead statistics in unuse_pte_range() Wei Yang <richard.weiyang@gmail.com>: mm/swapfile.c: offset is only used when there is more slots mm/swapfile.c: explicitly show ssd/non-ssd is handled mutually exclusive mm/swapfile.c: remove the unnecessary goto for SSD case mm/swapfile.c: simplify the calculation of n_goal mm/swapfile.c: remove the extra check in scan_swap_map_slots() mm/swapfile.c: found_free could be represented by (tmp < max) mm/swapfile.c: tmp is always smaller than max mm/swapfile.c: omit a duplicate code by compare tmp and max first Huang Ying <ying.huang@intel.com>: swap: try to scan more free slots even when fragmented Wei Yang <richard.weiyang@gmail.com>: mm/swapfile.c: classify SWAP_MAP_XXX to make it more readable mm/swapfile.c: __swap_entry_free() always free 1 entry Huang Ying <ying.huang@intel.com>: mm/swapfile.c: use prandom_u32_max() swap: reduce lock contention on swap cache from swap slots allocation Randy Dunlap <rdunlap@infradead.org>: mm: swapfile: fix /proc/swaps heading and Size/Used/Priority alignment Miaohe Lin <linmiaohe@huawei.com>: include/linux/swap.h: delete meaningless __add_to_swap_cache() declaration Subsystem: mm/memcg Yafang Shao <laoar.shao@gmail.com>: mm, memcg: add workingset_restore in memory.stat Kaixu Xia <kaixuxia@tencent.com>: mm: memcontrol: simplify value comparison between count and limit Shakeel Butt <shakeelb@google.com>: memcg: expose root cgroup's memory.stat Jakub Kicinski <kuba@kernel.org>: Patch series "memcg: Slow down swap allocation as the available space gets: mm/memcg: prepare for swap over-high accounting and penalty calculation mm/memcg: move penalty delay clamping out of calculate_high_delay() mm/memcg: move cgroup high memory limit setting into struct page_counter mm/memcg: automatically penalize tasks with high swap use Zefan Li <lizefan@huawei.com>: memcg: fix memcg_kmem_bypass() for remote memcg charging Subsystem: mm/pagemap Steven Price <steven.price@arm.com>: Patch series "Fix W+X debug feature on x86": x86: mm: ptdump: calculate effective permissions correctly mm: ptdump: expand type of 'val' in note_page() Huang Ying <ying.huang@intel.com>: /proc/PID/smaps: Add PMD migration entry parsing chenqiwu <chenqiwu@xiaomi.com>: mm/memory: remove unnecessary pte_devmap case in copy_one_pte() Subsystem: mm/memory-failure Wetp Zhang <wetp.zy@linux.alibaba.com>: mm, memory_failure: don't send BUS_MCEERR_AO for action required error Subsystem: mm/vmalloc Christoph Hellwig <hch@lst.de>: Patch series "decruft the vmalloc API", v2: x86/hyperv: use vmalloc_exec for the hypercall page x86: fix vmap arguments in map_irq_stack staging: android: ion: use vmap instead of vm_map_ram staging: media: ipu3: use vmap instead of reimplementing it dma-mapping: use vmap insted of reimplementing it powerpc: add an ioremap_phb helper powerpc: remove __ioremap_at and __iounmap_at mm: remove __get_vm_area mm: unexport unmap_kernel_range_noflush mm: rename CONFIG_PGTABLE_MAPPING to CONFIG_ZSMALLOC_PGTABLE_MAPPING mm: only allow page table mappings for built-in zsmalloc mm: pass addr as unsigned long to vb_free mm: remove vmap_page_range_noflush and vunmap_page_range mm: rename vmap_page_range to map_kernel_range mm: don't return the number of pages from map_kernel_range{,_noflush} mm: remove map_vm_range mm: remove unmap_vmap_area mm: remove the prot argument from vm_map_ram mm: enforce that vmap can't map pages executable gpu/drm: remove the powerpc hack in drm_legacy_sg_alloc mm: remove the pgprot argument to __vmalloc mm: remove the prot argument to __vmalloc_node mm: remove both instances of __vmalloc_node_flags mm: remove __vmalloc_node_flags_caller mm: switch the test_vmalloc module to use __vmalloc_node mm: remove vmalloc_user_node_flags arm64: use __vmalloc_node in arch_alloc_vmap_stack powerpc: use __vmalloc_node in alloc_vm_stack s390: use __vmalloc_node in stack_alloc Joerg Roedel <jroedel@suse.de>: Patch series "mm: Get rid of vmalloc_sync_(un)mappings()", v3: mm: add functions to track page directory modifications mm/vmalloc: track which page-table levels were modified mm/ioremap: track which page-table levels were modified x86/mm/64: implement arch_sync_kernel_mappings() x86/mm/32: implement arch_sync_kernel_mappings() mm: remove vmalloc_sync_(un)mappings() x86/mm: remove vmalloc faulting Subsystem: mm/kasan Andrey Konovalov <andreyknvl@google.com>: kasan: fix clang compilation warning due to stack protector Kees Cook <keescook@chromium.org>: ubsan: entirely disable alignment checks under UBSAN_TRAP Jing Xia <jing.xia@unisoc.com>: mm/mm_init.c: report kasan-tag information stored in page->flags Andrey Konovalov <andreyknvl@google.com>: kasan: move kasan_report() into report.c Documentation/admin-guide/cgroup-v2.rst | 24 + Documentation/core-api/cachetlb.rst | 2 Documentation/filesystems/locking.rst | 6 Documentation/filesystems/proc.rst | 4 Documentation/filesystems/vfs.rst | 15 Documentation/vm/slub.rst | 2 arch/arm/configs/omap2plus_defconfig | 2 arch/arm64/include/asm/pgtable.h | 3 arch/arm64/include/asm/vmap_stack.h | 6 arch/arm64/mm/dump.c | 2 arch/parisc/include/asm/pgtable.h | 2 arch/powerpc/include/asm/io.h | 10 arch/powerpc/include/asm/pci-bridge.h | 2 arch/powerpc/kernel/irq.c | 5 arch/powerpc/kernel/isa-bridge.c | 28 + arch/powerpc/kernel/pci_64.c | 56 +- arch/powerpc/mm/ioremap_64.c | 50 -- arch/riscv/include/asm/pgtable.h | 4 arch/riscv/mm/ptdump.c | 2 arch/s390/kernel/setup.c | 9 arch/sh/kernel/cpu/sh4/sq.c | 3 arch/x86/hyperv/hv_init.c | 5 arch/x86/include/asm/kvm_host.h | 3 arch/x86/include/asm/pgtable-2level_types.h | 2 arch/x86/include/asm/pgtable-3level_types.h | 2 arch/x86/include/asm/pgtable_64_types.h | 2 arch/x86/include/asm/pgtable_types.h | 8 arch/x86/include/asm/switch_to.h | 23 - arch/x86/kernel/irq_64.c | 2 arch/x86/kernel/setup_percpu.c | 6 arch/x86/kvm/svm/sev.c | 3 arch/x86/mm/dump_pagetables.c | 35 + arch/x86/mm/fault.c | 196 ---------- arch/x86/mm/init_64.c | 5 arch/x86/mm/pti.c | 8 arch/x86/mm/tlb.c | 37 - block/blk-core.c | 1 drivers/acpi/apei/ghes.c | 6 drivers/base/node.c | 2 drivers/block/drbd/drbd_bitmap.c | 4 drivers/block/loop.c | 2 drivers/dax/device.c | 1 drivers/gpu/drm/drm_scatter.c | 11 drivers/gpu/drm/etnaviv/etnaviv_dump.c | 4 drivers/gpu/drm/i915/gem/selftests/mock_dmabuf.c | 2 drivers/lightnvm/pblk-init.c | 5 drivers/md/dm-bufio.c | 4 drivers/md/md-bitmap.c | 12 drivers/media/common/videobuf2/videobuf2-dma-sg.c | 3 drivers/media/common/videobuf2/videobuf2-vmalloc.c | 3 drivers/media/pci/ivtv/ivtv-udma.c | 19 - drivers/media/pci/ivtv/ivtv-yuv.c | 17 drivers/media/pci/ivtv/ivtvfb.c | 4 drivers/mtd/ubi/io.c | 4 drivers/pcmcia/electra_cf.c | 45 -- drivers/scsi/sd_zbc.c | 3 drivers/staging/android/ion/ion_heap.c | 4 drivers/staging/media/ipu3/ipu3-css-pool.h | 4 drivers/staging/media/ipu3/ipu3-dmamap.c | 30 - fs/block_dev.c | 7 fs/btrfs/disk-io.c | 4 fs/btrfs/extent_io.c | 64 --- fs/btrfs/extent_io.h | 3 fs/btrfs/inode.c | 39 -- fs/buffer.c | 23 - fs/erofs/data.c | 41 -- fs/erofs/decompressor.c | 2 fs/erofs/zdata.c | 31 - fs/exfat/inode.c | 7 fs/ext2/inode.c | 10 fs/ext4/ext4.h | 5 fs/ext4/inode.c | 25 - fs/ext4/readpage.c | 25 - fs/ext4/verity.c | 35 - fs/f2fs/data.c | 56 +- fs/f2fs/f2fs.h | 14 fs/f2fs/verity.c | 35 - fs/fat/inode.c | 7 fs/file_table.c | 1 fs/fs-writeback.c | 1 fs/fuse/file.c | 100 +---- fs/gfs2/aops.c | 23 - fs/gfs2/dir.c | 9 fs/gfs2/quota.c | 2 fs/hpfs/file.c | 7 fs/iomap/buffered-io.c | 113 +---- fs/iomap/trace.h | 2 fs/isofs/inode.c | 7 fs/jfs/inode.c | 7 fs/mpage.c | 38 -- fs/nfs/blocklayout/extent_tree.c | 2 fs/nfs/internal.h | 10 fs/nfs/write.c | 4 fs/nfsd/vfs.c | 9 fs/nilfs2/inode.c | 15 fs/ntfs/aops.c | 2 fs/ntfs/malloc.h | 2 fs/ntfs/mft.c | 2 fs/ocfs2/aops.c | 34 - fs/ocfs2/dlm/dlmmaster.c | 1 fs/ocfs2/ocfs2.h | 4 fs/ocfs2/slot_map.c | 46 +- fs/ocfs2/super.c | 21 + fs/omfs/file.c | 7 fs/open.c | 3 fs/orangefs/inode.c | 32 - fs/proc/meminfo.c | 3 fs/proc/task_mmu.c | 16 fs/qnx6/inode.c | 7 fs/reiserfs/inode.c | 8 fs/squashfs/block.c | 273 +++++++------- fs/squashfs/decompressor.h | 5 fs/squashfs/decompressor_multi.c | 9 fs/squashfs/decompressor_multi_percpu.c | 17 fs/squashfs/decompressor_single.c | 9 fs/squashfs/lz4_wrapper.c | 17 fs/squashfs/lzo_wrapper.c | 17 fs/squashfs/squashfs.h | 4 fs/squashfs/xz_wrapper.c | 51 +- fs/squashfs/zlib_wrapper.c | 63 +-- fs/squashfs/zstd_wrapper.c | 62 +-- fs/sync.c | 6 fs/ubifs/debug.c | 2 fs/ubifs/lprops.c | 2 fs/ubifs/lpt_commit.c | 4 fs/ubifs/orphan.c | 2 fs/udf/inode.c | 7 fs/xfs/kmem.c | 2 fs/xfs/xfs_aops.c | 13 fs/xfs/xfs_buf.c | 2 fs/zonefs/super.c | 7 include/asm-generic/5level-fixup.h | 5 include/asm-generic/pgtable.h | 27 + include/linux/buffer_head.h | 8 include/linux/fs.h | 18 include/linux/iomap.h | 3 include/linux/memcontrol.h | 4 include/linux/mm.h | 67 ++- include/linux/mm_types.h | 6 include/linux/mmzone.h | 1 include/linux/mpage.h | 4 include/linux/page_counter.h | 8 include/linux/pagemap.h | 193 ++++++++++ include/linux/ptdump.h | 3 include/linux/sched.h | 3 include/linux/swap.h | 17 include/linux/vmalloc.h | 49 +- include/linux/zsmalloc.h | 2 include/trace/events/erofs.h | 6 include/trace/events/f2fs.h | 6 include/trace/events/writeback.h | 5 kernel/bpf/core.c | 6 kernel/bpf/syscall.c | 29 - kernel/dma/remap.c | 48 -- kernel/groups.c | 2 kernel/module.c | 3 kernel/notifier.c | 1 kernel/sys.c | 2 kernel/trace/trace.c | 12 lib/Kconfig.ubsan | 2 lib/ioremap.c | 46 +- lib/test_vmalloc.c | 26 - mm/Kconfig | 4 mm/debug.c | 56 ++ mm/fadvise.c | 6 mm/filemap.c | 1 mm/gup.c | 77 +++- mm/internal.h | 14 mm/kasan/Makefile | 21 - mm/kasan/common.c | 19 - mm/kasan/report.c | 22 + mm/memcontrol.c | 198 +++++++--- mm/memory-failure.c | 15 mm/memory.c | 2 mm/migrate.c | 9 mm/mm_init.c | 16 mm/nommu.c | 52 +- mm/page-writeback.c | 62 ++- mm/page_alloc.c | 7 mm/percpu.c | 2 mm/ptdump.c | 17 mm/readahead.c | 349 ++++++++++-------- mm/slab_common.c | 3 mm/slub.c | 67 ++- mm/swap_state.c | 5 mm/swapfile.c | 194 ++++++---- mm/util.c | 2 mm/vmalloc.c | 399 ++++++++------------- mm/vmscan.c | 4 mm/vmstat.c | 11 mm/zsmalloc.c | 12 net/bridge/netfilter/ebtables.c | 6 net/ceph/ceph_common.c | 3 sound/core/memalloc.c | 2 sound/core/pcm_memory.c | 2 195 files changed, 2292 insertions(+), 2288 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-06-02 4:44 Andrew Morton 2020-06-02 20:08 ` incoming Andrew Morton 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2020-06-02 4:44 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm A few little subsystems and a start of a lot of MM patches. 128 patches, based on 9bf9511e3d9f328c03f6f79bfb741c3d18f2f2c0: Subsystems affected by this patch series: squashfs ocfs2 parisc vfs mm/slab-generic mm/slub mm/debug mm/pagecache mm/gup mm/swap mm/memcg mm/pagemap mm/memory-failure mm/vmalloc mm/kasan Subsystem: squashfs Philippe Liard <pliard@google.com>: squashfs: migrate from ll_rw_block usage to BIO Subsystem: ocfs2 Jules Irenge <jbi.octave@gmail.com>: ocfs2: add missing annotation for dlm_empty_lockres() Gang He <ghe@suse.com>: ocfs2: mount shared volume without ha stack Subsystem: parisc Andrew Morton <akpm@linux-foundation.org>: arch/parisc/include/asm/pgtable.h: remove unused `old_pte' Subsystem: vfs Jeff Layton <jlayton@redhat.com>: Patch series "vfs: have syncfs() return error when there are writeback: vfs: track per-sb writeback errors and report them to syncfs fs/buffer.c: record blockdev write errors in super_block that it backs Subsystem: mm/slab-generic Vlastimil Babka <vbabka@suse.cz>: usercopy: mark dma-kmalloc caches as usercopy caches Subsystem: mm/slub Dongli Zhang <dongli.zhang@oracle.com>: mm/slub.c: fix corrupted freechain in deactivate_slab() Christoph Lameter <cl@linux.com>: slub: Remove userspace notifier for cache add/remove Christopher Lameter <cl@linux.com>: slub: remove kmalloc under list_lock from list_slab_objects() V2 Qian Cai <cai@lca.pw>: mm/slub: fix stack overruns with SLUB_STATS Andrew Morton <akpm@linux-foundation.org>: Documentation/vm/slub.rst: s/Toggle/Enable/ Subsystem: mm/debug Vlastimil Babka <vbabka@suse.cz>: mm, dump_page(): do not crash with invalid mapping pointer Subsystem: mm/pagecache "Matthew Wilcox (Oracle)" <willy@infradead.org>: Patch series "Change readahead API", v11: mm: move readahead prototypes from mm.h mm: return void from various readahead functions mm: ignore return value of ->readpages mm: move readahead nr_pages check into read_pages mm: add new readahead_control API mm: use readahead_control to pass arguments mm: rename various 'offset' parameters to 'index' mm: rename readahead loop variable to 'i' mm: remove 'page_offset' from readahead loop mm: put readahead pages in cache earlier mm: add readahead address space operation mm: move end_index check out of readahead loop mm: add page_cache_readahead_unbounded mm: document why we don't set PageReadahead mm: use memalloc_nofs_save in readahead path fs: convert mpage_readpages to mpage_readahead btrfs: convert from readpages to readahead erofs: convert uncompressed files from readpages to readahead erofs: convert compressed files from readpages to readahead ext4: convert from readpages to readahead ext4: pass the inode to ext4_mpage_readpages f2fs: convert from readpages to readahead f2fs: pass the inode to f2fs_mpage_readpages fuse: convert from readpages to readahead iomap: convert from readpages to readahead Guoqing Jiang <guoqing.jiang@cloud.ionos.com>: Patch series "Introduce attach/detach_page_private to cleanup code": include/linux/pagemap.h: introduce attach/detach_page_private md: remove __clear_page_buffers and use attach/detach_page_private btrfs: use attach/detach_page_private fs/buffer.c: use attach/detach_page_private f2fs: use attach/detach_page_private iomap: use attach/detach_page_private ntfs: replace attach_page_buffers with attach_page_private orangefs: use attach/detach_page_private buffer_head.h: remove attach_page_buffers mm/migrate.c: call detach_page_private to cleanup code mm_types.h: change set_page_private to inline function "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm/filemap.c: remove misleading comment Chao Yu <yuchao0@huawei.com>: mm/page-writeback.c: remove unused variable NeilBrown <neilb@suse.de>: mm/writeback: replace PF_LESS_THROTTLE with PF_LOCAL_THROTTLE mm/writeback: discard NR_UNSTABLE_NFS, use NR_WRITEBACK instead Subsystem: mm/gup Souptick Joarder <jrdr.linux@gmail.com>: mm/gup.c: update the documentation John Hubbard <jhubbard@nvidia.com>: mm/gup: introduce pin_user_pages_unlocked ivtv: convert get_user_pages() --> pin_user_pages() Miles Chen <miles.chen@mediatek.com>: mm/gup.c: further document vma_permits_fault() Subsystem: mm/swap chenqiwu <chenqiwu@xiaomi.com>: mm/swapfile: use list_{prev,next}_entry() instead of open-coding Qian Cai <cai@lca.pw>: mm/swap_state: fix a data race in swapin_nr_pages Andrea Righi <andrea.righi@canonical.com>: mm: swap: properly update readahead statistics in unuse_pte_range() Wei Yang <richard.weiyang@gmail.com>: mm/swapfile.c: offset is only used when there is more slots mm/swapfile.c: explicitly show ssd/non-ssd is handled mutually exclusive mm/swapfile.c: remove the unnecessary goto for SSD case mm/swapfile.c: simplify the calculation of n_goal mm/swapfile.c: remove the extra check in scan_swap_map_slots() mm/swapfile.c: found_free could be represented by (tmp < max) mm/swapfile.c: tmp is always smaller than max mm/swapfile.c: omit a duplicate code by compare tmp and max first Huang Ying <ying.huang@intel.com>: swap: try to scan more free slots even when fragmented Wei Yang <richard.weiyang@gmail.com>: mm/swapfile.c: classify SWAP_MAP_XXX to make it more readable mm/swapfile.c: __swap_entry_free() always free 1 entry Huang Ying <ying.huang@intel.com>: mm/swapfile.c: use prandom_u32_max() swap: reduce lock contention on swap cache from swap slots allocation Randy Dunlap <rdunlap@infradead.org>: mm: swapfile: fix /proc/swaps heading and Size/Used/Priority alignment Miaohe Lin <linmiaohe@huawei.com>: include/linux/swap.h: delete meaningless __add_to_swap_cache() declaration Subsystem: mm/memcg Yafang Shao <laoar.shao@gmail.com>: mm, memcg: add workingset_restore in memory.stat Kaixu Xia <kaixuxia@tencent.com>: mm: memcontrol: simplify value comparison between count and limit Shakeel Butt <shakeelb@google.com>: memcg: expose root cgroup's memory.stat Jakub Kicinski <kuba@kernel.org>: Patch series "memcg: Slow down swap allocation as the available space gets: mm/memcg: prepare for swap over-high accounting and penalty calculation mm/memcg: move penalty delay clamping out of calculate_high_delay() mm/memcg: move cgroup high memory limit setting into struct page_counter mm/memcg: automatically penalize tasks with high swap use Zefan Li <lizefan@huawei.com>: memcg: fix memcg_kmem_bypass() for remote memcg charging Subsystem: mm/pagemap Steven Price <steven.price@arm.com>: Patch series "Fix W+X debug feature on x86": x86: mm: ptdump: calculate effective permissions correctly mm: ptdump: expand type of 'val' in note_page() Huang Ying <ying.huang@intel.com>: /proc/PID/smaps: Add PMD migration entry parsing chenqiwu <chenqiwu@xiaomi.com>: mm/memory: remove unnecessary pte_devmap case in copy_one_pte() Subsystem: mm/memory-failure Wetp Zhang <wetp.zy@linux.alibaba.com>: mm, memory_failure: don't send BUS_MCEERR_AO for action required error Subsystem: mm/vmalloc Christoph Hellwig <hch@lst.de>: Patch series "decruft the vmalloc API", v2: x86/hyperv: use vmalloc_exec for the hypercall page x86: fix vmap arguments in map_irq_stack staging: android: ion: use vmap instead of vm_map_ram staging: media: ipu3: use vmap instead of reimplementing it dma-mapping: use vmap insted of reimplementing it powerpc: add an ioremap_phb helper powerpc: remove __ioremap_at and __iounmap_at mm: remove __get_vm_area mm: unexport unmap_kernel_range_noflush mm: rename CONFIG_PGTABLE_MAPPING to CONFIG_ZSMALLOC_PGTABLE_MAPPING mm: only allow page table mappings for built-in zsmalloc mm: pass addr as unsigned long to vb_free mm: remove vmap_page_range_noflush and vunmap_page_range mm: rename vmap_page_range to map_kernel_range mm: don't return the number of pages from map_kernel_range{,_noflush} mm: remove map_vm_range mm: remove unmap_vmap_area mm: remove the prot argument from vm_map_ram mm: enforce that vmap can't map pages executable gpu/drm: remove the powerpc hack in drm_legacy_sg_alloc mm: remove the pgprot argument to __vmalloc mm: remove the prot argument to __vmalloc_node mm: remove both instances of __vmalloc_node_flags mm: remove __vmalloc_node_flags_caller mm: switch the test_vmalloc module to use __vmalloc_node mm: remove vmalloc_user_node_flags arm64: use __vmalloc_node in arch_alloc_vmap_stack powerpc: use __vmalloc_node in alloc_vm_stack s390: use __vmalloc_node in stack_alloc Joerg Roedel <jroedel@suse.de>: Patch series "mm: Get rid of vmalloc_sync_(un)mappings()", v3: mm: add functions to track page directory modifications mm/vmalloc: track which page-table levels were modified mm/ioremap: track which page-table levels were modified x86/mm/64: implement arch_sync_kernel_mappings() x86/mm/32: implement arch_sync_kernel_mappings() mm: remove vmalloc_sync_(un)mappings() x86/mm: remove vmalloc faulting Subsystem: mm/kasan Andrey Konovalov <andreyknvl@google.com>: kasan: fix clang compilation warning due to stack protector Kees Cook <keescook@chromium.org>: ubsan: entirely disable alignment checks under UBSAN_TRAP Jing Xia <jing.xia@unisoc.com>: mm/mm_init.c: report kasan-tag information stored in page->flags Andrey Konovalov <andreyknvl@google.com>: kasan: move kasan_report() into report.c Documentation/admin-guide/cgroup-v2.rst | 24 + Documentation/core-api/cachetlb.rst | 2 Documentation/filesystems/locking.rst | 6 Documentation/filesystems/proc.rst | 4 Documentation/filesystems/vfs.rst | 15 Documentation/vm/slub.rst | 2 arch/arm/configs/omap2plus_defconfig | 2 arch/arm64/include/asm/pgtable.h | 3 arch/arm64/include/asm/vmap_stack.h | 6 arch/arm64/mm/dump.c | 2 arch/parisc/include/asm/pgtable.h | 2 arch/powerpc/include/asm/io.h | 10 arch/powerpc/include/asm/pci-bridge.h | 2 arch/powerpc/kernel/irq.c | 5 arch/powerpc/kernel/isa-bridge.c | 28 + arch/powerpc/kernel/pci_64.c | 56 +- arch/powerpc/mm/ioremap_64.c | 50 -- arch/riscv/include/asm/pgtable.h | 4 arch/riscv/mm/ptdump.c | 2 arch/s390/kernel/setup.c | 9 arch/sh/kernel/cpu/sh4/sq.c | 3 arch/x86/hyperv/hv_init.c | 5 arch/x86/include/asm/kvm_host.h | 3 arch/x86/include/asm/pgtable-2level_types.h | 2 arch/x86/include/asm/pgtable-3level_types.h | 2 arch/x86/include/asm/pgtable_64_types.h | 2 arch/x86/include/asm/pgtable_types.h | 8 arch/x86/include/asm/switch_to.h | 23 - arch/x86/kernel/irq_64.c | 2 arch/x86/kernel/setup_percpu.c | 6 arch/x86/kvm/svm/sev.c | 3 arch/x86/mm/dump_pagetables.c | 35 + arch/x86/mm/fault.c | 196 ---------- arch/x86/mm/init_64.c | 5 arch/x86/mm/pti.c | 8 arch/x86/mm/tlb.c | 37 - block/blk-core.c | 1 drivers/acpi/apei/ghes.c | 6 drivers/base/node.c | 2 drivers/block/drbd/drbd_bitmap.c | 4 drivers/block/loop.c | 2 drivers/dax/device.c | 1 drivers/gpu/drm/drm_scatter.c | 11 drivers/gpu/drm/etnaviv/etnaviv_dump.c | 4 drivers/gpu/drm/i915/gem/selftests/mock_dmabuf.c | 2 drivers/lightnvm/pblk-init.c | 5 drivers/md/dm-bufio.c | 4 drivers/md/md-bitmap.c | 12 drivers/media/common/videobuf2/videobuf2-dma-sg.c | 3 drivers/media/common/videobuf2/videobuf2-vmalloc.c | 3 drivers/media/pci/ivtv/ivtv-udma.c | 19 - drivers/media/pci/ivtv/ivtv-yuv.c | 17 drivers/media/pci/ivtv/ivtvfb.c | 4 drivers/mtd/ubi/io.c | 4 drivers/pcmcia/electra_cf.c | 45 -- drivers/scsi/sd_zbc.c | 3 drivers/staging/android/ion/ion_heap.c | 4 drivers/staging/media/ipu3/ipu3-css-pool.h | 4 drivers/staging/media/ipu3/ipu3-dmamap.c | 30 - fs/block_dev.c | 7 fs/btrfs/disk-io.c | 4 fs/btrfs/extent_io.c | 64 --- fs/btrfs/extent_io.h | 3 fs/btrfs/inode.c | 39 -- fs/buffer.c | 23 - fs/erofs/data.c | 41 -- fs/erofs/decompressor.c | 2 fs/erofs/zdata.c | 31 - fs/exfat/inode.c | 7 fs/ext2/inode.c | 10 fs/ext4/ext4.h | 5 fs/ext4/inode.c | 25 - fs/ext4/readpage.c | 25 - fs/ext4/verity.c | 35 - fs/f2fs/data.c | 56 +- fs/f2fs/f2fs.h | 14 fs/f2fs/verity.c | 35 - fs/fat/inode.c | 7 fs/file_table.c | 1 fs/fs-writeback.c | 1 fs/fuse/file.c | 100 +---- fs/gfs2/aops.c | 23 - fs/gfs2/dir.c | 9 fs/gfs2/quota.c | 2 fs/hpfs/file.c | 7 fs/iomap/buffered-io.c | 113 +---- fs/iomap/trace.h | 2 fs/isofs/inode.c | 7 fs/jfs/inode.c | 7 fs/mpage.c | 38 -- fs/nfs/blocklayout/extent_tree.c | 2 fs/nfs/internal.h | 10 fs/nfs/write.c | 4 fs/nfsd/vfs.c | 9 fs/nilfs2/inode.c | 15 fs/ntfs/aops.c | 2 fs/ntfs/malloc.h | 2 fs/ntfs/mft.c | 2 fs/ocfs2/aops.c | 34 - fs/ocfs2/dlm/dlmmaster.c | 1 fs/ocfs2/ocfs2.h | 4 fs/ocfs2/slot_map.c | 46 +- fs/ocfs2/super.c | 21 + fs/omfs/file.c | 7 fs/open.c | 3 fs/orangefs/inode.c | 32 - fs/proc/meminfo.c | 3 fs/proc/task_mmu.c | 16 fs/qnx6/inode.c | 7 fs/reiserfs/inode.c | 8 fs/squashfs/block.c | 273 +++++++------- fs/squashfs/decompressor.h | 5 fs/squashfs/decompressor_multi.c | 9 fs/squashfs/decompressor_multi_percpu.c | 17 fs/squashfs/decompressor_single.c | 9 fs/squashfs/lz4_wrapper.c | 17 fs/squashfs/lzo_wrapper.c | 17 fs/squashfs/squashfs.h | 4 fs/squashfs/xz_wrapper.c | 51 +- fs/squashfs/zlib_wrapper.c | 63 +-- fs/squashfs/zstd_wrapper.c | 62 +-- fs/sync.c | 6 fs/ubifs/debug.c | 2 fs/ubifs/lprops.c | 2 fs/ubifs/lpt_commit.c | 4 fs/ubifs/orphan.c | 2 fs/udf/inode.c | 7 fs/xfs/kmem.c | 2 fs/xfs/xfs_aops.c | 13 fs/xfs/xfs_buf.c | 2 fs/zonefs/super.c | 7 include/asm-generic/5level-fixup.h | 5 include/asm-generic/pgtable.h | 27 + include/linux/buffer_head.h | 8 include/linux/fs.h | 18 include/linux/iomap.h | 3 include/linux/memcontrol.h | 4 include/linux/mm.h | 67 ++- include/linux/mm_types.h | 6 include/linux/mmzone.h | 1 include/linux/mpage.h | 4 include/linux/page_counter.h | 8 include/linux/pagemap.h | 193 ++++++++++ include/linux/ptdump.h | 3 include/linux/sched.h | 3 include/linux/swap.h | 17 include/linux/vmalloc.h | 49 +- include/linux/zsmalloc.h | 2 include/trace/events/erofs.h | 6 include/trace/events/f2fs.h | 6 include/trace/events/writeback.h | 5 kernel/bpf/core.c | 6 kernel/bpf/syscall.c | 29 - kernel/dma/remap.c | 48 -- kernel/groups.c | 2 kernel/module.c | 3 kernel/notifier.c | 1 kernel/sys.c | 2 kernel/trace/trace.c | 12 lib/Kconfig.ubsan | 2 lib/ioremap.c | 46 +- lib/test_vmalloc.c | 26 - mm/Kconfig | 4 mm/debug.c | 56 ++ mm/fadvise.c | 6 mm/filemap.c | 1 mm/gup.c | 77 +++- mm/internal.h | 14 mm/kasan/Makefile | 21 - mm/kasan/common.c | 19 - mm/kasan/report.c | 22 + mm/memcontrol.c | 198 +++++++--- mm/memory-failure.c | 15 mm/memory.c | 2 mm/migrate.c | 9 mm/mm_init.c | 16 mm/nommu.c | 52 +- mm/page-writeback.c | 62 ++- mm/page_alloc.c | 7 mm/percpu.c | 2 mm/ptdump.c | 17 mm/readahead.c | 349 ++++++++++-------- mm/slab_common.c | 3 mm/slub.c | 67 ++- mm/swap_state.c | 5 mm/swapfile.c | 194 ++++++---- mm/util.c | 2 mm/vmalloc.c | 399 ++++++++------------- mm/vmscan.c | 4 mm/vmstat.c | 11 mm/zsmalloc.c | 12 net/bridge/netfilter/ebtables.c | 6 net/ceph/ceph_common.c | 3 sound/core/memalloc.c | 2 sound/core/pcm_memory.c | 2 195 files changed, 2292 insertions(+), 2288 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-06-02 4:44 incoming Andrew Morton @ 2020-06-02 20:08 ` Andrew Morton 2020-06-02 20:45 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2020-06-02 20:08 UTC (permalink / raw) To: Linus Torvalds, mm-commits, linux-mm The local_lock merge made rather a mess of all of this. I'm cooking up a full resend of the same material. ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-06-02 20:08 ` incoming Andrew Morton @ 2020-06-02 20:45 ` Linus Torvalds 2020-06-02 21:38 ` incoming Andrew Morton 0 siblings, 1 reply; 370+ messages in thread From: Linus Torvalds @ 2020-06-02 20:45 UTC (permalink / raw) To: Andrew Morton; +Cc: mm-commits, Linux-MM On Tue, Jun 2, 2020 at 1:08 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > The local_lock merge made rather a mess of all of this. I'm > cooking up a full resend of the same material. Hmm. I have no issues with conflicts, and already took your previous series. I've pushed it out now - does my tree match what you expect? Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-06-02 20:45 ` incoming Linus Torvalds @ 2020-06-02 21:38 ` Andrew Morton 2020-06-02 22:18 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2020-06-02 21:38 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, Linux-MM On Tue, 2 Jun 2020 13:45:49 -0700 Linus Torvalds <torvalds@linux-foundation.org> wrote: > On Tue, Jun 2, 2020 at 1:08 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > > > The local_lock merge made rather a mess of all of this. I'm > > cooking up a full resend of the same material. > > Hmm. I have no issues with conflicts, and already took your previous series. Well that's odd. > I've pushed it out now - does my tree match what you expect? Yup, thanks. ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-06-02 21:38 ` incoming Andrew Morton @ 2020-06-02 22:18 ` Linus Torvalds 0 siblings, 0 replies; 370+ messages in thread From: Linus Torvalds @ 2020-06-02 22:18 UTC (permalink / raw) To: Andrew Morton; +Cc: mm-commits, Linux-MM On Tue, Jun 2, 2020 at 2:38 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > On Tue, 2 Jun 2020 13:45:49 -0700 Linus Torvalds <torvalds@linux-foundation.org> wrote: > > > > Hmm. I have no issues with conflicts, and already took your previous series. > > Well that's odd. I meant "I saw the conflicts and had no issue with them". Nothing odd. And I actually much prefer seeing conflicts from your series (against other pulls I've done) over having you delay your patch bombs because of any fear for them. Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-05-28 5:20 Andrew Morton 2020-05-28 20:10 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2020-05-28 5:20 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 5 fixes, based on 444fc5cde64330661bf59944c43844e7d4c2ccd8: Qian Cai <cai@lca.pw>: mm/z3fold: silence kmemleak false positives of slots Hugh Dickins <hughd@google.com>: mm,thp: stop leaking unreleased file pages Konstantin Khlebnikov <khlebnikov@yandex-team.ru>: mm: remove VM_BUG_ON(PageSlab()) from page_mapcount() Alexander Potapenko <glider@google.com>: fs/binfmt_elf.c: allocate initialized memory in fill_thread_core_info() Arnd Bergmann <arnd@arndb.de>: include/asm-generic/topology.h: guard cpumask_of_node() macro argument fs/binfmt_elf.c | 2 +- include/asm-generic/topology.h | 2 +- include/linux/mm.h | 19 +++++++++++++++---- mm/khugepaged.c | 1 + mm/z3fold.c | 3 +++ 5 files changed, 21 insertions(+), 6 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-05-28 5:20 incoming Andrew Morton @ 2020-05-28 20:10 ` Linus Torvalds 2020-05-29 20:31 ` incoming Andrew Morton 0 siblings, 1 reply; 370+ messages in thread From: Linus Torvalds @ 2020-05-28 20:10 UTC (permalink / raw) To: Andrew Morton; +Cc: mm-commits, Linux-MM Hmm.. On Wed, May 27, 2020 at 10:20 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > fs/binfmt_elf.c | 2 +- > include/asm-generic/topology.h | 2 +- > include/linux/mm.h | 19 +++++++++++++++---- > mm/khugepaged.c | 1 + > mm/z3fold.c | 3 +++ > 5 files changed, 21 insertions(+), 6 deletions(-) I wonder how you generate that diffstat. The change to <linux/mm.h> simply doesn't match what you sent me. The patch you sent me that changed mm.h had this: include/linux/mm.h | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (note 15 lines changed: it's +13 and -2) but now suddenly in your overall diffstat you have that include/linux/mm.h | 19 +++++++++++++++---- with +15/-4. So your diffstat simply doesn't match what you are sending. What's going on? Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-05-28 20:10 ` incoming Linus Torvalds @ 2020-05-29 20:31 ` Andrew Morton 2020-05-29 20:38 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2020-05-29 20:31 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, Linux-MM On Thu, 28 May 2020 13:10:18 -0700 Linus Torvalds <torvalds@linux-foundation.org> wrote: > Hmm.. > > On Wed, May 27, 2020 at 10:20 PM Andrew Morton > <akpm@linux-foundation.org> wrote: > > > > fs/binfmt_elf.c | 2 +- > > include/asm-generic/topology.h | 2 +- > > include/linux/mm.h | 19 +++++++++++++++---- > > mm/khugepaged.c | 1 + > > mm/z3fold.c | 3 +++ > > 5 files changed, 21 insertions(+), 6 deletions(-) > > I wonder how you generate that diffstat. > > The change to <linux/mm.h> simply doesn't match what you sent me. The > patch you sent me that changed mm.h had this: > > include/linux/mm.h | 15 +++++++++++++-- > 1 file changed, 13 insertions(+), 2 deletions(-) > > (note 15 lines changed: it's +13 and -2) but now suddenly in your > overall diffstat you have that > > include/linux/mm.h | 19 +++++++++++++++---- > > with +15/-4. > > So your diffstat simply doesn't match what you are sending. What's going on? > Bah. I got lazy (didn't want to interrupt an ongoing build) so I generated the diffstat prior to folding two patches into a single one. Evidently diffstat isn't as smart as I had assumed! ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-05-29 20:31 ` incoming Andrew Morton @ 2020-05-29 20:38 ` Linus Torvalds 2020-05-29 21:12 ` incoming Andrew Morton 0 siblings, 1 reply; 370+ messages in thread From: Linus Torvalds @ 2020-05-29 20:38 UTC (permalink / raw) To: Andrew Morton; +Cc: mm-commits, Linux-MM On Fri, May 29, 2020 at 1:31 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > Bah. I got lazy (didn't want to interrupt an ongoing build) so I > generated the diffstat prior to folding two patches into a single one. > Evidently diffstat isn't as smart as I had assumed! Ahh. Yes - given two patches, diffstat just adds up the line number counts for the individual diffs, it doesn't count some kind of "combined diff result" line counts. Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-05-29 20:38 ` incoming Linus Torvalds @ 2020-05-29 21:12 ` Andrew Morton 2020-05-29 21:20 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2020-05-29 21:12 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, Linux-MM On Fri, 29 May 2020 13:38:35 -0700 Linus Torvalds <torvalds@linux-foundation.org> wrote: > On Fri, May 29, 2020 at 1:31 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > > > Bah. I got lazy (didn't want to interrupt an ongoing build) so I > > generated the diffstat prior to folding two patches into a single one. > > Evidently diffstat isn't as smart as I had assumed! > > Ahh. Yes - given two patches, diffstat just adds up the line number > counts for the individual diffs, it doesn't count some kind of > "combined diff result" line counts. Stupid diffstat. Means that basically all my diffstats are very wrong. Thanks for spotting it. I can fix that... ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-05-29 21:12 ` incoming Andrew Morton @ 2020-05-29 21:20 ` Linus Torvalds 0 siblings, 0 replies; 370+ messages in thread From: Linus Torvalds @ 2020-05-29 21:20 UTC (permalink / raw) To: Andrew Morton; +Cc: mm-commits, Linux-MM On Fri, May 29, 2020 at 2:12 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > Stupid diffstat. Means that basically all my diffstats are very wrong. I'm actually used to diffstats not matching 100%/ Usually it's not due to this issue - a "git diff --stat" *will* give the stat from the actual combined diff result - but with git diffstats the issue is that I might have gotten a patch from another source. So the diffstat I see after-the-merge is possibly different from the pre-merge diffstat simply due to merge issues. So then I usually take a look at "ok, why did that diffstat differ" and go "Ahh". In your case, when I looked at the diffstat, I couldn't for the life of me see how you would have gotten the diffstat you did, since I only saw a single patch with no merge issues. > Thanks for spotting it. > > I can fix that... I can also just live with it, knowing what your workflow is. The diffstat matching exactly just isn't that important - in fact, different versions of "diff" can give slightly different output anyway depending on diff algorithms even when they are looking at the exact same before/after state. There's not necessarily always only one way to generate a valid diff. So to me, the diffstat is more of a guide than a hard thing, and I want to see the rough outline, In fact, one reason I want to see it in pull requests is actually just that I want to get a feel for what changes even before I do the pull or merge, so it's not just a "match against what I get" thing. Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-05-23 5:22 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-05-23 5:22 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 11 fixes, based on 444565650a5fe9c63ddf153e6198e31705dedeb2: David Hildenbrand <david@redhat.com>: device-dax: don't leak kernel memory to user space after unloading kmem Nick Desaulniers <ndesaulniers@google.com>: x86: bitops: fix build regression John Hubbard <jhubbard@nvidia.com>: rapidio: fix an error in get_user_pages_fast() error handling selftests/vm/.gitignore: add mremap_dontunmap selftests/vm/write_to_hugetlbfs.c: fix unused variable warning Marco Elver <elver@google.com>: kasan: disable branch tracing for core runtime Arnd Bergmann <arnd@arndb.de>: sh: include linux/time_types.h for sockios Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>: MAINTAINERS: update email address for Naoya Horiguchi Mike Rapoport <rppt@linux.ibm.com>: sparc32: use PUD rather than PGD to get PMD in srmmu_nocache_init() Uladzislau Rezki <uladzislau.rezki@sony.com>: z3fold: fix use-after-free when freeing handles Baoquan He <bhe@redhat.com>: MAINTAINERS: add files related to kdump MAINTAINERS | 7 ++++++- arch/sh/include/uapi/asm/sockios.h | 2 ++ arch/sparc/mm/srmmu.c | 2 +- arch/x86/include/asm/bitops.h | 12 ++++++------ drivers/dax/kmem.c | 14 +++++++++++--- drivers/rapidio/devices/rio_mport_cdev.c | 5 +++++ mm/kasan/Makefile | 16 ++++++++-------- mm/kasan/generic.c | 1 - mm/kasan/tags.c | 1 - mm/z3fold.c | 11 ++++++----- tools/testing/selftests/vm/.gitignore | 1 + tools/testing/selftests/vm/write_to_hugetlbfs.c | 2 -- 12 files changed, 46 insertions(+), 28 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-05-14 0:50 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-05-14 0:50 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 7 fixes, based on 24085f70a6e1b0cb647ec92623284641d8270637: Yafang Shao <laoar.shao@gmail.com>: mm, memcg: fix inconsistent oom event behavior Roman Penyaev <rpenyaev@suse.de>: epoll: call final ep_events_available() check under the lock Peter Xu <peterx@redhat.com>: mm/gup: fix fixup_user_fault() on multiple retries Brian Geffon <bgeffon@google.com>: userfaultfd: fix remap event with MREMAP_DONTUNMAP Vasily Averin <vvs@virtuozzo.com>: ipc/util.c: sysvipc_find_ipc() incorrectly updates position index Andrey Konovalov <andreyknvl@google.com>: kasan: consistently disable debugging features kasan: add missing functions declarations to kasan.h fs/eventpoll.c | 48 ++++++++++++++++++++++++++------------------- include/linux/memcontrol.h | 2 + ipc/util.c | 12 +++++------ mm/gup.c | 12 ++++++----- mm/kasan/Makefile | 15 +++++++++----- mm/kasan/kasan.h | 34 ++++++++++++++++++++++++++++++- mm/mremap.c | 2 - 7 files changed, 86 insertions(+), 39 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-05-08 1:35 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-05-08 1:35 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 14 fixes and one selftest to verify the ipc fixes herein. 15 patches, based on a811c1fa0a02c062555b54651065899437bacdbe: Oleg Nesterov <oleg@redhat.com>: ipc/mqueue.c: change __do_notify() to bypass check_kill_permission() Yafang Shao <laoar.shao@gmail.com>: mm, memcg: fix error return value of mem_cgroup_css_alloc() David Hildenbrand <david@redhat.com>: mm/page_alloc: fix watchdog soft lockups during set_zone_contiguous() Maciej Grochowski <maciej.grochowski@pm.me>: kernel/kcov.c: fix typos in kcov_remote_start documentation Ivan Delalande <colona@arista.com>: scripts/decodecode: fix trapping instruction formatting Janakarajan Natarajan <Janakarajan.Natarajan@amd.com>: arch/x86/kvm/svm/sev.c: change flag passed to GUP fast in sev_pin_memory() Khazhismel Kumykov <khazhy@google.com>: eventpoll: fix missing wakeup for ovflist in ep_poll_callback Aymeric Agon-Rambosson <aymeric.agon@yandex.com>: scripts/gdb: repair rb_first() and rb_last() Waiman Long <longman@redhat.com>: mm/slub: fix incorrect interpretation of s->offset Filipe Manana <fdmanana@suse.com>: percpu: make pcpu_alloc() aware of current gfp context Roman Penyaev <rpenyaev@suse.de>: kselftests: introduce new epoll60 testcase for catching lost wakeups epoll: atomically remove wait entry on wake up Qiwu Chen <qiwuchen55@gmail.com>: mm/vmscan: remove unnecessary argument description of isolate_lru_pages() Kees Cook <keescook@chromium.org>: ubsan: disable UBSAN_ALIGNMENT under COMPILE_TEST Henry Willard <henry.willard@oracle.com>: mm: limit boost_watermark on small zones arch/x86/kvm/svm/sev.c | 2 fs/eventpoll.c | 61 ++-- ipc/mqueue.c | 34 +- kernel/kcov.c | 4 lib/Kconfig.ubsan | 15 - mm/memcontrol.c | 15 - mm/page_alloc.c | 9 mm/percpu.c | 14 mm/slub.c | 45 ++- mm/vmscan.c | 1 scripts/decodecode | 2 scripts/gdb/linux/rbtree.py | 4 tools/testing/selftests/filesystems/epoll/epoll_wakeup_test.c | 146 ++++++++++ tools/testing/selftests/wireguard/qemu/debug.config | 1 14 files changed, 275 insertions(+), 78 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-04-21 1:13 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-21 1:13 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 15 fixes, based on ae83d0b416db002fe95601e7f97f64b59514d936: Masahiro Yamada <masahiroy@kernel.org>: sh: fix build error in mm/init.c Kees Cook <keescook@chromium.org>: slub: avoid redzone when choosing freepointer location Peter Xu <peterx@redhat.com>: mm/userfaultfd: disable userfaultfd-wp on x86_32 Bartosz Golaszewski <bgolaszewski@baylibre.com>: MAINTAINERS: add an entry for kfifo Longpeng <longpeng2@huawei.com>: mm/hugetlb: fix a addressing exception caused by huge_pte_offset Michal Hocko <mhocko@suse.com>: mm, gup: return EINTR when gup is interrupted by fatal signals Christophe JAILLET <christophe.jaillet@wanadoo.fr>: checkpatch: fix a typo in the regex for $allocFunctions George Burgess IV <gbiv@google.com>: tools/build: tweak unused value workaround Muchun Song <songmuchun@bytedance.com>: mm/ksm: fix NULL pointer dereference when KSM zero page is enabled Hugh Dickins <hughd@google.com>: mm/shmem: fix build without THP Jann Horn <jannh@google.com>: vmalloc: fix remap_vmalloc_range() bounds checks Hugh Dickins <hughd@google.com>: shmem: fix possible deadlocks on shmlock_user_lock Yang Shi <yang.shi@linux.alibaba.com>: mm: shmem: disable interrupt when acquiring info->lock in userfaultfd_copy path Sudip Mukherjee <sudipm.mukherjee@gmail.com>: coredump: fix null pointer dereference on coredump Lucas Stach <l.stach@pengutronix.de>: tools/vm: fix cross-compile build MAINTAINERS | 7 +++++++ arch/sh/mm/init.c | 2 +- arch/x86/Kconfig | 2 +- fs/coredump.c | 2 ++ fs/proc/vmcore.c | 5 +++-- include/linux/vmalloc.h | 2 +- mm/gup.c | 2 +- mm/hugetlb.c | 14 ++++++++------ mm/ksm.c | 12 ++++++++++-- mm/shmem.c | 13 ++++++++----- mm/slub.c | 12 ++++++++++-- mm/vmalloc.c | 16 +++++++++++++--- samples/vfio-mdev/mdpy.c | 2 +- scripts/checkpatch.pl | 2 +- tools/build/feature/test-sync-compare-and-swap.c | 2 +- tools/vm/Makefile | 2 ++ 16 files changed, 70 insertions(+), 27 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-04-12 7:41 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-12 7:41 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm A straggler. This patch caused a lot of build errors on a lot of architectures for a long time, but Anshuman believes it's all fixed up now. 1 patch, based on GIT b032227c62939b5481bcd45442b36dfa263f4a7c. Anshuman Khandual <anshuman.khandual@arm.com>: mm/debug: add tests validating architecture page table helpers Documentation/features/debug/debug-vm-pgtable/arch-support.txt | 34 arch/arc/Kconfig | 1 arch/arm64/Kconfig | 1 arch/powerpc/Kconfig | 1 arch/s390/Kconfig | 1 arch/x86/Kconfig | 1 arch/x86/include/asm/pgtable_64.h | 6 include/linux/mmdebug.h | 5 init/main.c | 2 lib/Kconfig.debug | 26 mm/Makefile | 1 mm/debug_vm_pgtable.c | 392 ++++++++++ 12 files changed, 471 insertions(+) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-04-10 21:30 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-10 21:30 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm Almost all of the rest of MM. Various other things. 35 patches, based on c0cc271173b2e1c2d8d0ceaef14e4dfa79eefc0d. Subsystems affected by this patch series: hfs mm/memcg mm/slab-generic mm/slab mm/pagealloc mm/gup ocfs2 mm/hugetlb mm/pagemap mm/memremap kmod misc seqfile Subsystem: hfs Simon Gander <simon@tuxera.com>: hfsplus: fix crash and filesystem corruption when deleting files Subsystem: mm/memcg Jakub Kicinski <kuba@kernel.org>: mm, memcg: do not high throttle allocators based on wraparound Subsystem: mm/slab-generic Qiujun Huang <hqjagain@gmail.com>: mm, slab_common: fix a typo in comment "eariler"->"earlier" Subsystem: mm/slab Mauro Carvalho Chehab <mchehab+huawei@kernel.org>: docs: mm: slab.h: fix a broken cross-reference Subsystem: mm/pagealloc Randy Dunlap <rdunlap@infradead.org>: mm/page_alloc.c: fix kernel-doc warning Jason Yan <yanaijie@huawei.com>: mm/page_alloc: make pcpu_drain_mutex and pcpu_drain static Subsystem: mm/gup Miles Chen <miles.chen@mediatek.com>: mm/gup: fix null pointer dereference detected by coverity Subsystem: ocfs2 Changwei Ge <chge@linux.alibaba.com>: ocfs2: no need try to truncate file beyond i_size Subsystem: mm/hugetlb Aslan Bakirov <aslan@fb.com>: mm: cma: NUMA node interface Roman Gushchin <guro@fb.com>: mm: hugetlb: optionally allocate gigantic hugepages using cma Subsystem: mm/pagemap Jaewon Kim <jaewon31.kim@samsung.com>: mm/mmap.c: initialize align_offset explicitly for vm_unmapped_area Arjun Roy <arjunroy@google.com>: mm/memory.c: refactor insert_page to prepare for batched-lock insert mm: bring sparc pte_index() semantics inline with other platforms mm: define pte_index as macro for x86 mm/memory.c: add vm_insert_pages() Anshuman Khandual <anshuman.khandual@arm.com>: mm/vma: define a default value for VM_DATA_DEFAULT_FLAGS mm/vma: introduce VM_ACCESS_FLAGS mm/special: create generic fallbacks for pte_special() and pte_mkspecial() Subsystem: mm/memremap Logan Gunthorpe <logang@deltatee.com>: Patch series "Allow setting caching mode in arch_add_memory() for P2PDMA", v4: mm/memory_hotplug: drop the flags field from struct mhp_restrictions mm/memory_hotplug: rename mhp_restrictions to mhp_params x86/mm: thread pgprot_t through init_memory_mapping() x86/mm: introduce __set_memory_prot() powerpc/mm: thread pgprot_t through create_section_mapping() mm/memory_hotplug: add pgprot_t to mhp_params mm/memremap: set caching mode for PCI P2PDMA memory to WC Subsystem: kmod Eric Biggers <ebiggers@google.com>: Patch series "module autoloading fixes and cleanups", v5: kmod: make request_module() return an error when autoloading is disabled fs/filesystems.c: downgrade user-reachable WARN_ONCE() to pr_warn_once() docs: admin-guide: document the kernel.modprobe sysctl selftests: kmod: fix handling test numbers above 9 selftests: kmod: test disabling module autoloading Subsystem: misc Pali Rohár <pali@kernel.org>: change email address for Pali Rohár kbuild test robot <lkp@intel.com>: drivers/dma/tegra20-apb-dma.c: fix platform_get_irq.cocci warnings Subsystem: seqfile Vasily Averin <vvs@virtuozzo.com>: Patch series "seq_file .next functions should increase position index": fs/seq_file.c: seq_read(): add info message about buggy .next functions kernel/gcov/fs.c: gcov_seq_next() should increase position index ipc/util.c: sysvipc_find_ipc() should increase position index Documentation/ABI/testing/sysfs-platform-dell-laptop | 8 Documentation/admin-guide/kernel-parameters.txt | 8 Documentation/admin-guide/sysctl/kernel.rst | 21 ++ MAINTAINERS | 16 - arch/alpha/include/asm/page.h | 3 arch/alpha/include/asm/pgtable.h | 2 arch/arc/include/asm/page.h | 2 arch/arm/include/asm/page.h | 4 arch/arm/include/asm/pgtable-2level.h | 2 arch/arm/include/asm/pgtable.h | 15 - arch/arm/mach-omap2/omap-secure.c | 2 arch/arm/mach-omap2/omap-secure.h | 2 arch/arm/mach-omap2/omap-smc.S | 2 arch/arm/mm/fault.c | 2 arch/arm/mm/mmu.c | 14 + arch/arm64/include/asm/page.h | 4 arch/arm64/mm/fault.c | 2 arch/arm64/mm/init.c | 6 arch/arm64/mm/mmu.c | 7 arch/c6x/include/asm/page.h | 5 arch/csky/include/asm/page.h | 3 arch/csky/include/asm/pgtable.h | 3 arch/h8300/include/asm/page.h | 2 arch/hexagon/include/asm/page.h | 3 arch/hexagon/include/asm/pgtable.h | 2 arch/ia64/include/asm/page.h | 5 arch/ia64/include/asm/pgtable.h | 2 arch/ia64/mm/init.c | 7 arch/m68k/include/asm/mcf_pgtable.h | 10 - arch/m68k/include/asm/motorola_pgtable.h | 2 arch/m68k/include/asm/page.h | 3 arch/m68k/include/asm/sun3_pgtable.h | 2 arch/microblaze/include/asm/page.h | 2 arch/microblaze/include/asm/pgtable.h | 4 arch/mips/include/asm/page.h | 5 arch/mips/include/asm/pgtable.h | 44 +++- arch/nds32/include/asm/page.h | 3 arch/nds32/include/asm/pgtable.h | 9 - arch/nds32/mm/fault.c | 2 arch/nios2/include/asm/page.h | 3 arch/nios2/include/asm/pgtable.h | 3 arch/openrisc/include/asm/page.h | 5 arch/openrisc/include/asm/pgtable.h | 2 arch/parisc/include/asm/page.h | 3 arch/parisc/include/asm/pgtable.h | 2 arch/powerpc/include/asm/book3s/64/hash.h | 3 arch/powerpc/include/asm/book3s/64/radix.h | 3 arch/powerpc/include/asm/page.h | 9 - arch/powerpc/include/asm/page_64.h | 7 arch/powerpc/include/asm/sparsemem.h | 3 arch/powerpc/mm/book3s64/hash_utils.c | 5 arch/powerpc/mm/book3s64/pgtable.c | 7 arch/powerpc/mm/book3s64/pkeys.c | 2 arch/powerpc/mm/book3s64/radix_pgtable.c | 18 +- arch/powerpc/mm/mem.c | 12 - arch/riscv/include/asm/page.h | 3 arch/s390/include/asm/page.h | 3 arch/s390/mm/fault.c | 2 arch/s390/mm/init.c | 9 - arch/sh/include/asm/page.h | 3 arch/sh/mm/init.c | 7 arch/sparc/include/asm/page_32.h | 3 arch/sparc/include/asm/page_64.h | 3 arch/sparc/include/asm/pgtable_32.h | 7 arch/sparc/include/asm/pgtable_64.h | 10 - arch/um/include/asm/pgtable.h | 10 - arch/unicore32/include/asm/page.h | 3 arch/unicore32/include/asm/pgtable.h | 3 arch/unicore32/mm/fault.c | 2 arch/x86/include/asm/page_types.h | 7 arch/x86/include/asm/pgtable.h | 6 arch/x86/include/asm/set_memory.h | 1 arch/x86/kernel/amd_gart_64.c | 3 arch/x86/kernel/setup.c | 4 arch/x86/mm/init.c | 9 - arch/x86/mm/init_32.c | 19 +- arch/x86/mm/init_64.c | 42 ++-- arch/x86/mm/mm_internal.h | 3 arch/x86/mm/pat/set_memory.c | 13 + arch/x86/mm/pkeys.c | 2 arch/x86/platform/uv/bios_uv.c | 3 arch/x86/um/asm/vm-flags.h | 10 - arch/xtensa/include/asm/page.h | 3 arch/xtensa/include/asm/pgtable.h | 3 drivers/char/hw_random/omap3-rom-rng.c | 4 drivers/dma/tegra20-apb-dma.c | 1 drivers/hwmon/dell-smm-hwmon.c | 4 drivers/platform/x86/dell-laptop.c | 4 drivers/platform/x86/dell-rbtn.c | 4 drivers/platform/x86/dell-rbtn.h | 2 drivers/platform/x86/dell-smbios-base.c | 4 drivers/platform/x86/dell-smbios-smm.c | 2 drivers/platform/x86/dell-smbios.h | 2 drivers/platform/x86/dell-smo8800.c | 2 drivers/platform/x86/dell-wmi.c | 4 drivers/power/supply/bq2415x_charger.c | 4 drivers/power/supply/bq27xxx_battery.c | 2 drivers/power/supply/isp1704_charger.c | 2 drivers/power/supply/rx51_battery.c | 4 drivers/staging/gasket/gasket_core.c | 2 fs/filesystems.c | 4 fs/hfsplus/attributes.c | 4 fs/ocfs2/alloc.c | 4 fs/seq_file.c | 7 fs/udf/ecma_167.h | 2 fs/udf/osta_udf.h | 2 include/linux/cma.h | 14 + include/linux/hugetlb.h | 12 + include/linux/memblock.h | 3 include/linux/memory_hotplug.h | 21 +- include/linux/mm.h | 34 +++ include/linux/power/bq2415x_charger.h | 2 include/linux/slab.h | 2 ipc/util.c | 2 kernel/gcov/fs.c | 2 kernel/kmod.c | 4 mm/cma.c | 16 + mm/gup.c | 3 mm/hugetlb.c | 109 ++++++++++++ mm/memblock.c | 2 mm/memcontrol.c | 3 mm/memory.c | 168 +++++++++++++++++-- mm/memory_hotplug.c | 13 - mm/memremap.c | 17 + mm/mmap.c | 4 mm/mprotect.c | 4 mm/page_alloc.c | 5 mm/slab_common.c | 2 tools/laptop/freefall/freefall.c | 2 tools/testing/selftests/kmod/kmod.sh | 43 ++++ 130 files changed, 710 insertions(+), 370 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-04-07 3:02 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-04-07 3:02 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits - a lot more of MM, quite a bit more yet to come. - various other subsystems 166 patches based on 7e63420847ae5f1036e4f7c42f0b3282e73efbc2. Subsystems affected by this patch series: mm/memcg mm/pagemap mm/vmalloc mm/pagealloc mm/migration mm/thp mm/ksm mm/madvise mm/virtio mm/userfaultfd mm/memory-hotplug mm/shmem mm/rmap mm/zswap mm/zsmalloc mm/cleanups procfs misc MAINTAINERS bitops lib checkpatch epoll binfmt kallsyms reiserfs kmod gcov kconfig kcov ubsan fault-injection ipc Subsystem: mm/memcg Chris Down <chris@chrisdown.name>: mm, memcg: bypass high reclaim iteration for cgroup hierarchy root Subsystem: mm/pagemap Li Xinhai <lixinhai.lxh@gmail.com>: Patch series "mm: Fix misuse of parent anon_vma in dup_mmap path": mm: don't prepare anon_vma if vma has VM_WIPEONFORK Revert "mm/rmap.c: reuse mergeable anon_vma as parent when fork" mm: set vm_next and vm_prev to NULL in vm_area_dup() Anshuman Khandual <anshuman.khandual@arm.com>: Patch series "mm/vma: Use all available wrappers when possible", v2: mm/vma: add missing VMA flag readable name for VM_SYNC mm/vma: make vma_is_accessible() available for general use mm/vma: replace all remaining open encodings with is_vm_hugetlb_page() mm/vma: replace all remaining open encodings with vma_is_anonymous() mm/vma: append unlikely() while testing VMA access permissions Subsystem: mm/vmalloc Qiujun Huang <hqjagain@gmail.com>: mm/vmalloc: fix a typo in comment Subsystem: mm/pagealloc Michal Hocko <mhocko@suse.com>: mm: make it clear that gfp reclaim modifiers are valid only for sleepable allocations Subsystem: mm/migration Wei Yang <richardw.yang@linux.intel.com>: Patch series "cleanup on do_pages_move()", v5: mm/migrate.c: no need to check for i > start in do_pages_move() mm/migrate.c: wrap do_move_pages_to_node() and store_status() mm/migrate.c: check pagelist in move_pages_and_store_status() mm/migrate.c: unify "not queued for migration" handling in do_pages_move() Yang Shi <yang.shi@linux.alibaba.com>: mm/migrate.c: migrate PG_readahead flag Subsystem: mm/thp David Rientjes <rientjes@google.com>: mm, shmem: add vmstat for hugepage fallback mm, thp: track fallbacks due to failed memcg charges separately "Matthew Wilcox (Oracle)" <willy@infradead.org>: include/linux/pagemap.h: optimise find_subpage for !THP mm: remove CONFIG_TRANSPARENT_HUGE_PAGECACHE Subsystem: mm/ksm Li Chen <chenli@uniontech.com>: mm/ksm.c: update get_user_pages() argument in comment Subsystem: mm/madvise Huang Ying <ying.huang@intel.com>: mm: code cleanup for MADV_FREE Subsystem: mm/virtio Alexander Duyck <alexander.h.duyck@linux.intel.com>: Patch series "mm / virtio: Provide support for free page reporting", v17: mm: adjust shuffle code to allow for future coalescing mm: use zone and order instead of free area in free_list manipulators mm: add function __putback_isolated_page mm: introduce Reported pages virtio-balloon: pull page poisoning config out of free page hinting virtio-balloon: add support for providing free page reports to host mm/page_reporting: rotate reported pages to the tail of the list mm/page_reporting: add budget limit on how many pages can be reported per pass mm/page_reporting: add free page reporting documentation David Hildenbrand <david@redhat.com>: virtio-balloon: switch back to OOM handler for VIRTIO_BALLOON_F_DEFLATE_ON_OOM Subsystem: mm/userfaultfd Shaohua Li <shli@fb.com>: Patch series "userfaultfd: write protection support", v6: userfaultfd: wp: add helper for writeprotect check Andrea Arcangeli <aarcange@redhat.com>: userfaultfd: wp: hook userfault handler to write protection fault userfaultfd: wp: add WP pagetable tracking to x86 userfaultfd: wp: userfaultfd_pte/huge_pmd_wp() helpers userfaultfd: wp: add UFFDIO_COPY_MODE_WP Peter Xu <peterx@redhat.com>: mm: merge parameters for change_protection() userfaultfd: wp: apply _PAGE_UFFD_WP bit userfaultfd: wp: drop _PAGE_UFFD_WP properly when fork userfaultfd: wp: add pmd_swp_*uffd_wp() helpers userfaultfd: wp: support swap and page migration khugepaged: skip collapse if uffd-wp detected Shaohua Li <shli@fb.com>: userfaultfd: wp: support write protection for userfault vma range Andrea Arcangeli <aarcange@redhat.com>: userfaultfd: wp: add the writeprotect API to userfaultfd ioctl Shaohua Li <shli@fb.com>: userfaultfd: wp: enabled write protection in userfaultfd API Peter Xu <peterx@redhat.com>: userfaultfd: wp: don't wake up when doing write protect Martin Cracauer <cracauer@cons.org>: userfaultfd: wp: UFFDIO_REGISTER_MODE_WP documentation update Peter Xu <peterx@redhat.com>: userfaultfd: wp: declare _UFFDIO_WRITEPROTECT conditionally userfaultfd: selftests: refactor statistics userfaultfd: selftests: add write-protect test Subsystem: mm/memory-hotplug David Hildenbrand <david@redhat.com>: Patch series "mm: drop superfluous section checks when onlining/offlining": drivers/base/memory.c: drop section_count drivers/base/memory.c: drop pages_correctly_probed() mm/page_ext.c: drop pfn_present() check when onlining Baoquan He <bhe@redhat.com>: mm/memory_hotplug.c: only respect mem= parameter during boot stage David Hildenbrand <david@redhat.com>: mm/memory_hotplug.c: simplify calculation of number of pages in __remove_pages() mm/memory_hotplug.c: cleanup __add_pages() Baoquan He <bhe@redhat.com>: Patch series "mm/hotplug: Only use subsection map for VMEMMAP", v4: mm/sparse.c: introduce new function fill_subsection_map() mm/sparse.c: introduce a new function clear_subsection_map() mm/sparse.c: only use subsection map in VMEMMAP case mm/sparse.c: add note about only VMEMMAP supporting sub-section hotplug mm/sparse.c: move subsection_map related functions together David Hildenbrand <david@redhat.com>: Patch series "mm/memory_hotplug: allow to specify a default online_type", v3: drivers/base/memory: rename MMOP_ONLINE_KEEP to MMOP_ONLINE drivers/base/memory: map MMOP_OFFLINE to 0 drivers/base/memory: store mapping between MMOP_* and string in an array powernv/memtrace: always online added memory blocks hv_balloon: don't check for memhp_auto_online manually mm/memory_hotplug: unexport memhp_auto_online mm/memory_hotplug: convert memhp_auto_online to store an online_type mm/memory_hotplug: allow to specify a default online_type chenqiwu <chenqiwu@xiaomi.com>: mm/memory_hotplug.c: use __pfn_to_section() instead of open-coding Subsystem: mm/shmem Kees Cook <keescook@chromium.org>: mm/shmem.c: distribute switch variables for initialization Mateusz Nosek <mateusznosek0@gmail.com>: mm/shmem.c: clean code by removing unnecessary assignment Hugh Dickins <hughd@google.com>: mm: huge tmpfs: try to split_huge_page() when punching hole Subsystem: mm/rmap Palmer Dabbelt <palmerdabbelt@google.com>: mm: prevent a warning when casting void* -> enum Subsystem: mm/zswap "Maciej S. Szmigiero" <mail@maciej.szmigiero.name>: mm/zswap: allow setting default status, compressor and allocator in Kconfig Subsystem: mm/zsmalloc Subsystem: mm/cleanups Jules Irenge <jbi.octave@gmail.com>: mm/compaction: add missing annotation for compact_lock_irqsave mm/hugetlb: add missing annotation for gather_surplus_pages() mm/mempolicy: add missing annotation for queue_pages_pmd() mm/slub: add missing annotation for get_map() mm/slub: add missing annotation for put_map() mm/zsmalloc: add missing annotation for migrate_read_lock() mm/zsmalloc: add missing annotation for migrate_read_unlock() mm/zsmalloc: add missing annotation for pin_tag() mm/zsmalloc: add missing annotation for unpin_tag() chenqiwu <chenqiwu@xiaomi.com>: mm: fix ambiguous comments for better code readability Mateusz Nosek <mateusznosek0@gmail.com>: mm/mm_init.c: clean code. Use BUILD_BUG_ON when comparing compile time constant Joe Perches <joe@perches.com>: mm: use fallthrough; Steven Price <steven.price@arm.com>: include/linux/swapops.h: correct guards for non_swap_entry() Ira Weiny <ira.weiny@intel.com>: include/linux/memremap.h: remove stale comments Mateusz Nosek <mateusznosek0@gmail.com>: mm/dmapool.c: micro-optimisation remove unnecessary branch Waiman Long <longman@redhat.com>: mm: remove dummy struct bootmem_data/bootmem_data_t Subsystem: procfs Jules Irenge <jbi.octave@gmail.com>: fs/proc/inode.c: annotate close_pdeo() for sparse Alexey Dobriyan <adobriyan@gmail.com>: proc: faster open/read/close with "permanent" files proc: speed up /proc/*/statm "Matthew Wilcox (Oracle)" <willy@infradead.org>: proc: inline vma_stop into m_stop proc: remove m_cache_vma proc: use ppos instead of m->version seq_file: remove m->version proc: inline m_next_vma into m_next Subsystem: misc Michal Simek <michal.simek@xilinx.com>: asm-generic: fix unistd_32.h generation format Nathan Chancellor <natechancellor@gmail.com>: kernel/extable.c: use address-of operator on section symbols Masahiro Yamada <masahiroy@kernel.org>: sparc,x86: vdso: remove meaningless undefining CONFIG_OPTIMIZE_INLINING compiler: remove CONFIG_OPTIMIZE_INLINING entirely Vegard Nossum <vegard.nossum@oracle.com>: compiler.h: fix error in BUILD_BUG_ON() reporting Subsystem: MAINTAINERS Joe Perches <joe@perches.com>: MAINTAINERS: list the section entries in the preferred order Subsystem: bitops Josh Poimboeuf <jpoimboe@redhat.com>: bitops: always inline sign extension helpers Subsystem: lib Konstantin Khlebnikov <khlebnikov@yandex-team.ru>: lib/test_lockup: test module to generate lockups Colin Ian King <colin.king@canonical.com>: lib/test_lockup.c: fix spelling mistake "iteraions" -> "iterations" Konstantin Khlebnikov <khlebnikov@yandex-team.ru>: lib/test_lockup.c: add parameters for locking generic vfs locks "Gustavo A. R. Silva" <gustavo@embeddedor.com>: lib/bch.c: replace zero-length array with flexible-array member lib/ts_bm.c: replace zero-length array with flexible-array member lib/ts_fsm.c: replace zero-length array with flexible-array member lib/ts_kmp.c: replace zero-length array with flexible-array member Geert Uytterhoeven <geert+renesas@glider.be>: lib/scatterlist: fix sg_copy_buffer() kerneldoc Kees Cook <keescook@chromium.org>: lib: test_stackinit.c: XFAIL switch variable init tests Alexander Potapenko <glider@google.com>: lib/stackdepot.c: check depot_index before accessing the stack slab lib/stackdepot.c: fix a condition in stack_depot_fetch() lib/stackdepot.c: build with -fno-builtin kasan: stackdepot: move filter_irq_stacks() to stackdepot.c Qian Cai <cai@lca.pw>: percpu_counter: fix a data race at vm_committed_as Andy Shevchenko <andriy.shevchenko@linux.intel.com>: lib/test_bitmap.c: make use of EXP2_IN_BITS chenqiwu <chenqiwu@xiaomi.com>: lib/rbtree: fix coding style of assignments Dan Carpenter <dan.carpenter@oracle.com>: lib/test_kmod.c: remove a NULL test Rikard Falkeborn <rikard.falkeborn@gmail.com>: linux/bits.h: add compile time sanity check of GENMASK inputs Chris Wilson <chris@chris-wilson.co.uk>: lib/list: prevent compiler reloads inside 'safe' list iteration Nathan Chancellor <natechancellor@gmail.com>: lib/dynamic_debug.c: use address-of operator on section symbols Subsystem: checkpatch Joe Perches <joe@perches.com>: checkpatch: remove email address comment from email address comparisons Lubomir Rintel <lkundrak@v3.sk>: checkpatch: check SPDX tags in YAML files John Hubbard <jhubbard@nvidia.com>: checkpatch: support "base-commit:" format Joe Perches <joe@perches.com>: checkpatch: prefer fallthrough; over fallthrough comments Antonio Borneo <borneo.antonio@gmail.com>: checkpatch: fix minor typo and mixed space+tab in indentation checkpatch: fix multiple const * types checkpatch: add command-line option for TAB size Joe Perches <joe@perches.com>: checkpatch: improve Gerrit Change-Id: test Lubomir Rintel <lkundrak@v3.sk>: checkpatch: check proper licensing of Devicetree bindings Joe Perches <joe@perches.com>: checkpatch: avoid warning about uninitialized_var() Subsystem: epoll Roman Penyaev <rpenyaev@suse.de>: kselftest: introduce new epoll test case Jason Baron <jbaron@akamai.com>: fs/epoll: make nesting accounting safe for -rt kernel Subsystem: binfmt Alexey Dobriyan <adobriyan@gmail.com>: fs/binfmt_elf.c: delete "loc" variable fs/binfmt_elf.c: allocate less for static executable fs/binfmt_elf.c: don't free interpreter's ELF pheaders on common path Subsystem: kallsyms Will Deacon <will@kernel.org>: Patch series "Unexport kallsyms_lookup_name() and kallsyms_on_each_symbol()": samples/hw_breakpoint: drop HW_BREAKPOINT_R when reporting writes samples/hw_breakpoint: drop use of kallsyms_lookup_name() kallsyms: unexport kallsyms_lookup_name() and kallsyms_on_each_symbol() Subsystem: reiserfs Colin Ian King <colin.king@canonical.com>: reiserfs: clean up several indentation issues Subsystem: kmod Qiujun Huang <hqjagain@gmail.com>: kernel/kmod.c: fix a typo "assuems" -> "assumes" Subsystem: gcov "Gustavo A. R. Silva" <gustavo@embeddedor.com>: gcov: gcc_4_7: replace zero-length array with flexible-array member gcov: gcc_3_4: replace zero-length array with flexible-array member kernel/gcov/fs.c: replace zero-length array with flexible-array member Subsystem: kconfig Krzysztof Kozlowski <krzk@kernel.org>: init/Kconfig: clean up ANON_INODES and old IO schedulers options Subsystem: kcov Andrey Konovalov <andreyknvl@google.com>: Patch series "kcov: collect coverage from usb soft interrupts", v4: kcov: cleanup debug messages kcov: fix potential use-after-free in kcov_remote_start kcov: move t->kcov assignments into kcov_start/stop kcov: move t->kcov_sequence assignment kcov: use t->kcov_mode as enabled indicator kcov: collect coverage from interrupts usb: core: kcov: collect coverage from usb complete callback Subsystem: ubsan Kees Cook <keescook@chromium.org>: Patch series "ubsan: Split out bounds checker", v5: ubsan: add trap instrumentation option ubsan: split "bounds" checker from other options drivers/misc/lkdtm/bugs.c: add arithmetic overflow and array bounds checks ubsan: check panic_on_warn kasan: unset panic_on_warn before calling panic() ubsan: include bug type in report header Subsystem: fault-injection Qiujun Huang <hqjagain@gmail.com>: lib/Kconfig.debug: fix a typo "capabilitiy" -> "capability" Subsystem: ipc Somala Swaraj <somalaswaraj@gmail.com>: ipc/mqueue.c: fix a brace coding style issue Jason Yan <yanaijie@huawei.com>: ipc/shm.c: make compat_ksys_shmctl() static Documentation/admin-guide/kernel-parameters.txt | 13 Documentation/admin-guide/mm/transhuge.rst | 14 Documentation/admin-guide/mm/userfaultfd.rst | 51 Documentation/dev-tools/kcov.rst | 17 Documentation/vm/free_page_reporting.rst | 41 Documentation/vm/zswap.rst | 20 MAINTAINERS | 35 arch/alpha/include/asm/mmzone.h | 2 arch/alpha/kernel/syscalls/syscallhdr.sh | 2 arch/csky/mm/fault.c | 4 arch/ia64/kernel/syscalls/syscallhdr.sh | 2 arch/ia64/kernel/vmlinux.lds.S | 2 arch/m68k/mm/fault.c | 4 arch/microblaze/kernel/syscalls/syscallhdr.sh | 2 arch/mips/kernel/syscalls/syscallhdr.sh | 3 arch/mips/mm/fault.c | 4 arch/nds32/kernel/vmlinux.lds.S | 1 arch/parisc/kernel/syscalls/syscallhdr.sh | 2 arch/powerpc/kernel/syscalls/syscallhdr.sh | 3 arch/powerpc/kvm/e500_mmu_host.c | 2 arch/powerpc/mm/fault.c | 2 arch/powerpc/platforms/powernv/memtrace.c | 14 arch/sh/kernel/syscalls/syscallhdr.sh | 2 arch/sh/mm/fault.c | 2 arch/sparc/kernel/syscalls/syscallhdr.sh | 2 arch/sparc/vdso/vdso32/vclock_gettime.c | 4 arch/x86/Kconfig | 1 arch/x86/configs/i386_defconfig | 1 arch/x86/configs/x86_64_defconfig | 1 arch/x86/entry/vdso/vdso32/vclock_gettime.c | 4 arch/x86/include/asm/pgtable.h | 67 + arch/x86/include/asm/pgtable_64.h | 8 arch/x86/include/asm/pgtable_types.h | 12 arch/x86/mm/fault.c | 2 arch/xtensa/kernel/syscalls/syscallhdr.sh | 2 drivers/base/memory.c | 138 -- drivers/hv/hv_balloon.c | 25 drivers/misc/lkdtm/bugs.c | 75 + drivers/misc/lkdtm/core.c | 3 drivers/misc/lkdtm/lkdtm.h | 3 drivers/usb/core/hcd.c | 3 drivers/virtio/Kconfig | 1 drivers/virtio/virtio_balloon.c | 190 ++- fs/binfmt_elf.c | 56 fs/eventpoll.c | 64 - fs/proc/array.c | 39 fs/proc/cpuinfo.c | 1 fs/proc/generic.c | 31 fs/proc/inode.c | 188 ++- fs/proc/internal.h | 6 fs/proc/kmsg.c | 1 fs/proc/stat.c | 1 fs/proc/task_mmu.c | 97 - fs/reiserfs/do_balan.c | 2 fs/reiserfs/ioctl.c | 11 fs/reiserfs/namei.c | 10 fs/seq_file.c | 28 fs/userfaultfd.c | 116 + include/asm-generic/pgtable.h | 1 include/asm-generic/pgtable_uffd.h | 66 + include/asm-generic/tlb.h | 3 include/linux/bitops.h | 4 include/linux/bits.h | 22 include/linux/compiler.h | 2 include/linux/compiler_types.h | 11 include/linux/gfp.h | 2 include/linux/huge_mm.h | 2 include/linux/list.h | 50 include/linux/memory.h | 1 include/linux/memory_hotplug.h | 13 include/linux/memremap.h | 2 include/linux/mm.h | 25 include/linux/mm_inline.h | 15 include/linux/mm_types.h | 4 include/linux/mmzone.h | 47 include/linux/page-flags.h | 16 include/linux/page_reporting.h | 26 include/linux/pagemap.h | 4 include/linux/percpu_counter.h | 4 include/linux/proc_fs.h | 17 include/linux/sched.h | 3 include/linux/seq_file.h | 1 include/linux/shmem_fs.h | 10 include/linux/stackdepot.h | 2 include/linux/swapops.h | 5 include/linux/userfaultfd_k.h | 42 include/linux/vm_event_item.h | 5 include/trace/events/huge_memory.h | 1 include/trace/events/mmflags.h | 1 include/trace/events/vmscan.h | 2 include/uapi/linux/userfaultfd.h | 40 include/uapi/linux/virtio_balloon.h | 1 init/Kconfig | 8 ipc/mqueue.c | 5 ipc/shm.c | 2 ipc/util.c | 1 kernel/configs/tiny.config | 1 kernel/events/core.c | 3 kernel/extable.c | 3 kernel/fork.c | 10 kernel/gcov/fs.c | 2 kernel/gcov/gcc_3_4.c | 6 kernel/gcov/gcc_4_7.c | 2 kernel/kallsyms.c | 2 kernel/kcov.c | 282 +++- kernel/kmod.c | 2 kernel/module.c | 1 kernel/sched/fair.c | 2 lib/Kconfig.debug | 35 lib/Kconfig.ubsan | 51 lib/Makefile | 8 lib/bch.c | 2 lib/dynamic_debug.c | 2 lib/rbtree.c | 4 lib/scatterlist.c | 2 lib/stackdepot.c | 39 lib/test_bitmap.c | 2 lib/test_kmod.c | 2 lib/test_lockup.c | 601 +++++++++- lib/test_stackinit.c | 28 lib/ts_bm.c | 2 lib/ts_fsm.c | 2 lib/ts_kmp.c | 2 lib/ubsan.c | 47 mm/Kconfig | 135 ++ mm/Makefile | 1 mm/compaction.c | 3 mm/dmapool.c | 4 mm/filemap.c | 14 mm/gup.c | 9 mm/huge_memory.c | 36 mm/hugetlb.c | 1 mm/hugetlb_cgroup.c | 6 mm/internal.h | 2 mm/kasan/common.c | 23 mm/kasan/report.c | 10 mm/khugepaged.c | 39 mm/ksm.c | 5 mm/list_lru.c | 2 mm/memcontrol.c | 5 mm/memory-failure.c | 2 mm/memory.c | 42 mm/memory_hotplug.c | 53 mm/mempolicy.c | 11 mm/migrate.c | 122 +- mm/mm_init.c | 2 mm/mmap.c | 10 mm/mprotect.c | 76 - mm/page_alloc.c | 174 ++ mm/page_ext.c | 5 mm/page_isolation.c | 6 mm/page_reporting.c | 384 ++++++ mm/page_reporting.h | 54 mm/rmap.c | 23 mm/shmem.c | 168 +- mm/shuffle.c | 12 mm/shuffle.h | 6 mm/slab_common.c | 1 mm/slub.c | 3 mm/sparse.c | 236 ++- mm/swap.c | 20 mm/swapfile.c | 1 mm/userfaultfd.c | 98 + mm/vmalloc.c | 2 mm/vmscan.c | 12 mm/vmstat.c | 3 mm/zsmalloc.c | 10 mm/zswap.c | 24 samples/hw_breakpoint/data_breakpoint.c | 11 scripts/Makefile.ubsan | 16 scripts/checkpatch.pl | 155 +- tools/lib/rbtree.c | 4 tools/testing/selftests/filesystems/epoll/epoll_wakeup_test.c | 67 + tools/testing/selftests/vm/userfaultfd.c | 233 +++ 174 files changed, 3990 insertions(+), 1399 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-03-29 2:14 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-03-29 2:14 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 5 fixes, based on 83fd69c93340177dcd66fd26ce6441fb581c1dbf: Naohiro Aota <naohiro.aota@wdc.com>: mm/swapfile.c: move inode_lock out of claim_swapfile David Hildenbrand <david@redhat.com>: drivers/base/memory.c: indicate all memory blocks as removable Mina Almasry <almasrymina@google.com>: hugetlb_cgroup: fix illegal access to memory Roman Gushchin <guro@fb.com>: mm: fork: fix kernel_stack memcg stats for various stack implementations "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>: mm/sparse: fix kernel crash with pfn_section_valid check drivers/base/memory.c | 23 +++-------------------- include/linux/memcontrol.h | 12 ++++++++++++ kernel/fork.c | 4 ++-- mm/hugetlb_cgroup.c | 3 +-- mm/memcontrol.c | 38 ++++++++++++++++++++++++++++++++++++++ mm/sparse.c | 6 ++++++ mm/swapfile.c | 41 ++++++++++++++++++++--------------------- 7 files changed, 82 insertions(+), 45 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-03-22 1:19 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-03-22 1:19 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 10 fixes, based on c63c50fc2ec9afc4de21ef9ead2eac64b178cce1: Chunguang Xu <brookxu@tencent.com>: memcg: fix NULL pointer dereference in __mem_cgroup_usage_unregister_event Baoquan He <bhe@redhat.com>: mm/hotplug: fix hot remove failure in SPARSEMEM|!VMEMMAP case Qian Cai <cai@lca.pw>: page-flags: fix a crash at SetPageError(THP_SWAP) Chris Down <chris@chrisdown.name>: mm, memcg: fix corruption on 64-bit divisor in memory.high throttling mm, memcg: throttle allocators based on ancestral memory.high Michal Hocko <mhocko@suse.com>: mm: do not allow MADV_PAGEOUT for CoW pages Roman Penyaev <rpenyaev@suse.de>: epoll: fix possible lost wakeup on epoll_ctl() path Qian Cai <cai@lca.pw>: mm/mmu_notifier: silence PROVE_RCU_LIST warnings Vlastimil Babka <vbabka@suse.cz>: mm, slub: prevent kmalloc_node crashes and memory leaks Joerg Roedel <jroedel@suse.de>: x86/mm: split vmalloc_sync_all() arch/x86/mm/fault.c | 26 ++++++++++- drivers/acpi/apei/ghes.c | 2 fs/eventpoll.c | 8 +-- include/linux/page-flags.h | 2 include/linux/vmalloc.h | 5 +- kernel/notifier.c | 2 mm/madvise.c | 12 +++-- mm/memcontrol.c | 105 ++++++++++++++++++++++++++++----------------- mm/mmu_notifier.c | 27 +++++++---- mm/nommu.c | 10 +++- mm/slub.c | 26 +++++++---- mm/sparse.c | 8 ++- mm/vmalloc.c | 11 +++- 13 files changed, 165 insertions(+), 79 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-03-06 6:27 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-03-06 6:27 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 7 fixes, based on 9f65ed5fe41ce08ed1cb1f6a950f9ec694c142ad: Mel Gorman <mgorman@techsingularity.net>: mm, numa: fix bad pmd by atomically check for pmd_trans_huge when marking page tables prot_numa Huang Ying <ying.huang@intel.com>: mm: fix possible PMD dirty bit lost in set_pmd_migration_entry() "Kirill A. Shutemov" <kirill@shutemov.name>: mm: avoid data corruption on CoW fault into PFN-mapped VMA OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>: fat: fix uninit-memory access for partial initialized inode Sebastian Andrzej Siewior <bigeasy@linutronix.de>: mm/z3fold.c: do not include rwlock.h directly Vlastimil Babka <vbabka@suse.cz>: mm, hotplug: fix page online with DEBUG_PAGEALLOC compiled but not enabled Miroslav Benes <mbenes@suse.cz>: arch/Kconfig: update HAVE_RELIABLE_STACKTRACE description arch/Kconfig | 5 +++-- fs/fat/inode.c | 19 +++++++------------ include/linux/mm.h | 4 ++++ mm/huge_memory.c | 3 +-- mm/memory.c | 35 +++++++++++++++++++++++++++-------- mm/memory_hotplug.c | 8 +++++++- mm/mprotect.c | 38 ++++++++++++++++++++++++++++++++++++-- mm/z3fold.c | 1 - 8 files changed, 85 insertions(+), 28 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-02-21 4:00 Andrew Morton 2020-02-21 4:03 ` incoming Andrew Morton 2020-02-21 18:21 ` incoming Linus Torvalds 0 siblings, 2 replies; 370+ messages in thread From: Andrew Morton @ 2020-02-21 4:00 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits - A few y2038 fixes which missed the merge window whiole dependencies in NFS were being sorted out. - A bunch of fixes. Some minor, some not. Subsystems affected by this patch series: Arnd Bergmann <arnd@arndb.de>: y2038: remove ktime to/from timespec/timeval conversion y2038: remove unused time32 interfaces y2038: hide timeval/timespec/itimerval/itimerspec types Ioanna Alifieraki <ioanna-maria.alifieraki@canonical.com>: Revert "ipc,sem: remove uneeded sem_undo_list lock usage in exit_sem()" Christian Borntraeger <borntraeger@de.ibm.com>: include/uapi/linux/swab.h: fix userspace breakage, use __BITS_PER_LONG for swap SeongJae Park <sjpark@amazon.de>: selftests/vm: add missed tests in run_vmtests Joe Perches <joe@perches.com>: get_maintainer: remove uses of P: for maintainer name Douglas Anderson <dianders@chromium.org>: scripts/get_maintainer.pl: deprioritize old Fixes: addresses Christoph Hellwig <hch@lst.de>: mm/swapfile.c: fix a comment in sys_swapon() Vasily Averin <vvs@virtuozzo.com>: mm/memcontrol.c: lost css_put in memcg_expand_shrinker_maps() Alexandru Ardelean <alexandru.ardelean@analog.com>: lib/string.c: update match_string() doc-strings with correct behavior Gavin Shan <gshan@redhat.com>: mm/vmscan.c: don't round up scan size for online memory cgroup Wei Yang <richardw.yang@linux.intel.com>: mm/sparsemem: pfn_to_page is not valid yet on SPARSEMEM Alexander Potapenko <glider@google.com>: lib/stackdepot.c: fix global out-of-bounds in stack_slabs Randy Dunlap <rdunlap@infradead.org>: MAINTAINERS: use tabs for SAFESETID MAINTAINERS | 8 - include/linux/compat.h | 29 ------ include/linux/ktime.h | 37 ------- include/linux/time32.h | 154 --------------------------------- include/linux/timekeeping32.h | 32 ------ include/linux/types.h | 5 - include/uapi/asm-generic/posix_types.h | 2 include/uapi/linux/swab.h | 4 include/uapi/linux/time.h | 22 ++-- ipc/sem.c | 6 - kernel/compat.c | 64 ------------- kernel/time/time.c | 43 --------- lib/stackdepot.c | 8 + lib/string.c | 16 +++ mm/memcontrol.c | 4 mm/sparse.c | 2 mm/swapfile.c | 2 mm/vmscan.c | 9 + scripts/get_maintainer.pl | 32 ------ tools/testing/selftests/vm/run_vmtests | 33 +++++++ 20 files changed, 93 insertions(+), 419 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-02-21 4:00 incoming Andrew Morton @ 2020-02-21 4:03 ` Andrew Morton 2020-02-21 18:21 ` incoming Linus Torvalds 1 sibling, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-02-21 4:03 UTC (permalink / raw) To: Linus Torvalds, linux-mm, mm-commits On Thu, 20 Feb 2020 20:00:30 -0800 Andrew Morton <akpm@linux-foundation.org> wrote: > - A few y2038 fixes which missed the merge window whiole dependencies > in NFS were being sorted out. > > - A bunch of fixes. Some minor, some not. 15 patches, based on ca7e1fd1026c5af6a533b4b5447e1d2f153e28f2 ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-02-21 4:00 incoming Andrew Morton 2020-02-21 4:03 ` incoming Andrew Morton @ 2020-02-21 18:21 ` Linus Torvalds 2020-02-21 18:32 ` incoming Konstantin Ryabitsev 2020-02-21 19:33 ` incoming Linus Torvalds 1 sibling, 2 replies; 370+ messages in thread From: Linus Torvalds @ 2020-02-21 18:21 UTC (permalink / raw) To: Andrew Morton, Konstantin Ryabitsev; +Cc: Linux-MM, mm-commits On Thu, Feb 20, 2020 at 8:00 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > - A few y2038 fixes which missed the merge window whiole dependencies > in NFS were being sorted out. > > - A bunch of fixes. Some minor, some not. Hmm. Konstantin's nice lore script _used_ to pick up your patches, but now they don't. I'm not sure what changed. It worked with your big series of 118 patches. It doesn't work with this smaller series of fixes. I think the difference is that you've done something bad to your patch sending. That big series was properly threaded with each of the patches being a reply to the 'incoming' message. This series is not. Please, Andrew, can you make your email flow more consistent so that I can actually use the nice new tool to download a patch series? Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-02-21 18:21 ` incoming Linus Torvalds @ 2020-02-21 18:32 ` Konstantin Ryabitsev 2020-02-27 9:59 ` incoming Vlastimil Babka 2020-02-21 19:33 ` incoming Linus Torvalds 1 sibling, 1 reply; 370+ messages in thread From: Konstantin Ryabitsev @ 2020-02-21 18:32 UTC (permalink / raw) To: Linus Torvalds; +Cc: Andrew Morton, Linux-MM, mm-commits On Fri, Feb 21, 2020 at 10:21:19AM -0800, Linus Torvalds wrote: > On Thu, Feb 20, 2020 at 8:00 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > > > - A few y2038 fixes which missed the merge window whiole dependencies > > in NFS were being sorted out. > > > > - A bunch of fixes. Some minor, some not. > > Hmm. Konstantin's nice lore script _used_ to pick up your patches, but > now they don't. > > I'm not sure what changed. It worked with your big series of 118 patches. > > It doesn't work with this smaller series of fixes. > > I think the difference is that you've done something bad to your patch > sending. That big series was properly threaded with each of the > patches being a reply to the 'incoming' message. > > This series is not. This is correct -- each patch is posted without an in-reply-to, so public-inbox doesn't group them into a thread. E.g.: https://lore.kernel.org/linux-mm/20200221040350.84HaG%25akpm@linux-foundation.org/ > > Please, Andrew, can you make your email flow more consistent so that I > can actually use the nice new tool to download a patch series? Andrew, I'll be happy to provide you with a helper tool if you can describe me your workflow. E.g. if you have a quilt directory of patches plus a series file, it could easily be a tiny wrapper like: send-patches --base-commit 1234abcd --cover cover.txt patchdir/series -K ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-02-21 18:32 ` incoming Konstantin Ryabitsev @ 2020-02-27 9:59 ` Vlastimil Babka 0 siblings, 0 replies; 370+ messages in thread From: Vlastimil Babka @ 2020-02-27 9:59 UTC (permalink / raw) To: Konstantin Ryabitsev, Linus Torvalds; +Cc: Andrew Morton, Linux-MM, mm-commits On 2/21/20 7:32 PM, Konstantin Ryabitsev wrote: > On Fri, Feb 21, 2020 at 10:21:19AM -0800, Linus Torvalds wrote: >> On Thu, Feb 20, 2020 at 8:00 PM Andrew Morton <akpm@linux-foundation.org> wrote: >> > >> > - A few y2038 fixes which missed the merge window whiole dependencies >> > in NFS were being sorted out. >> > >> > - A bunch of fixes. Some minor, some not. >> >> Hmm. Konstantin's nice lore script _used_ to pick up your patches, but >> now they don't. >> >> I'm not sure what changed. It worked with your big series of 118 patches. >> >> It doesn't work with this smaller series of fixes. >> >> I think the difference is that you've done something bad to your patch >> sending. That big series was properly threaded with each of the >> patches being a reply to the 'incoming' message. >> >> This series is not. > > This is correct -- each patch is posted without an in-reply-to, so > public-inbox doesn't group them into a thread. > > E.g.: > https://lore.kernel.org/linux-mm/20200221040350.84HaG%25akpm@linux-foundation.org/ > >> >> Please, Andrew, can you make your email flow more consistent so that I >> can actually use the nice new tool to download a patch series? > > Andrew, I'll be happy to provide you with a helper tool if you can > describe me your workflow. E.g. if you have a quilt directory of patches > plus a series file, it could easily be a tiny wrapper like: > > send-patches --base-commit 1234abcd --cover cover.txt patchdir/series Once/if there is such tool, could it perhaps instead of mass e-mailing create git commits, push them to korg repo and send a pull request? Thanks, Vlastimil > -K > ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-02-21 18:21 ` incoming Linus Torvalds 2020-02-21 18:32 ` incoming Konstantin Ryabitsev @ 2020-02-21 19:33 ` Linus Torvalds 1 sibling, 0 replies; 370+ messages in thread From: Linus Torvalds @ 2020-02-21 19:33 UTC (permalink / raw) To: Andrew Morton, Konstantin Ryabitsev; +Cc: Linux-MM, mm-commits Side note: I've obviously picked it up the old-fashioned way, but I had been looking forward to seeing if I could just automate this more. Linus On Fri, Feb 21, 2020 at 10:21 AM Linus Torvalds <torvalds@linux-foundation.org> wrote: > > Please, Andrew, can you make your email flow more consistent so that I > can actually use the nice new tool to download a patch series? > > Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-02-04 1:33 Andrew Morton 2020-02-04 2:27 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2020-02-04 1:33 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm The rest of MM and the rest of everything else. Subsystems affected by this patch series: hotfixes mm/pagealloc mm/memory-hotplug ipc misc mm/cleanups mm/pagemap procfs lib cleanups arm Subsystem: hotfixes Gang He <GHe@suse.com>: ocfs2: fix oops when writing cloned file David Hildenbrand <david@redhat.com>: Patch series "mm: fix max_pfn not falling on section boundary", v2: mm/page_alloc.c: fix uninitialized memmaps on a partially populated last section fs/proc/page.c: allow inspection of last section and fix end detection mm/page_alloc.c: initialize memmap of unavailable memory directly Subsystem: mm/pagealloc David Hildenbrand <david@redhat.com>: mm/page_alloc: fix and rework pfn handling in memmap_init_zone() mm: factor out next_present_section_nr() Subsystem: mm/memory-hotplug "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>: Patch series "mm/memory_hotplug: Shrink zones before removing memory", v6: mm/memmap_init: update variable name in memmap_init_zone David Hildenbrand <david@redhat.com>: mm/memory_hotplug: poison memmap in remove_pfn_range_from_zone() mm/memory_hotplug: we always have a zone in find_(smallest|biggest)_section_pfn mm/memory_hotplug: don't check for "all holes" in shrink_zone_span() mm/memory_hotplug: drop local variables in shrink_zone_span() mm/memory_hotplug: cleanup __remove_pages() mm/memory_hotplug: drop valid_start/valid_end from test_pages_in_a_zone() Subsystem: ipc Manfred Spraul <manfred@colorfullife.com>: smp_mb__{before,after}_atomic(): update Documentation Davidlohr Bueso <dave@stgolabs.net>: ipc/mqueue.c: remove duplicated code Manfred Spraul <manfred@colorfullife.com>: ipc/mqueue.c: update/document memory barriers ipc/msg.c: update and document memory barriers ipc/sem.c: document and update memory barriers Lu Shuaibing <shuaibinglu@126.com>: ipc/msg.c: consolidate all xxxctl_down() functions drivers/block/null_blk_main.c: fix layout Subsystem: misc Andrew Morton <akpm@linux-foundation.org>: drivers/block/null_blk_main.c: fix layout drivers/block/null_blk_main.c: fix uninitialized var warnings Randy Dunlap <rdunlap@infradead.org>: pinctrl: fix pxa2xx.c build warnings Subsystem: mm/cleanups Florian Westphal <fw@strlen.de>: mm: remove __krealloc Subsystem: mm/pagemap Steven Price <steven.price@arm.com>: Patch series "Generic page walk and ptdump", v17: mm: add generic p?d_leaf() macros arc: mm: add p?d_leaf() definitions arm: mm: add p?d_leaf() definitions arm64: mm: add p?d_leaf() definitions mips: mm: add p?d_leaf() definitions powerpc: mm: add p?d_leaf() definitions riscv: mm: add p?d_leaf() definitions s390: mm: add p?d_leaf() definitions sparc: mm: add p?d_leaf() definitions x86: mm: add p?d_leaf() definitions mm: pagewalk: add p4d_entry() and pgd_entry() mm: pagewalk: allow walking without vma mm: pagewalk: don't lock PTEs for walk_page_range_novma() mm: pagewalk: fix termination condition in walk_pte_range() mm: pagewalk: add 'depth' parameter to pte_hole x86: mm: point to struct seq_file from struct pg_state x86: mm+efi: convert ptdump_walk_pgd_level() to take a mm_struct x86: mm: convert ptdump_walk_pgd_level_debugfs() to take an mm_struct mm: add generic ptdump x86: mm: convert dump_pagetables to use walk_page_range arm64: mm: convert mm/dump.c to use walk_page_range() arm64: mm: display non-present entries in ptdump mm: ptdump: reduce level numbers by 1 in note_page() x86: mm: avoid allocating struct mm_struct on the stack "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>: Patch series "Fixup page directory freeing", v4: powerpc/mmu_gather: enable RCU_TABLE_FREE even for !SMP case Peter Zijlstra <peterz@infradead.org>: mm/mmu_gather: invalidate TLB correctly on batch allocation failure and flush asm-generic/tlb: avoid potential double flush asm-gemeric/tlb: remove stray function declarations asm-generic/tlb: add missing CONFIG symbol asm-generic/tlb: rename HAVE_RCU_TABLE_FREE asm-generic/tlb: rename HAVE_MMU_GATHER_PAGE_SIZE asm-generic/tlb: rename HAVE_MMU_GATHER_NO_GATHER asm-generic/tlb: provide MMU_GATHER_TABLE_FREE Subsystem: procfs Alexey Dobriyan <adobriyan@gmail.com>: proc: decouple proc from VFS with "struct proc_ops" proc: convert everything to "struct proc_ops" Subsystem: lib Yury Norov <yury.norov@gmail.com>: Patch series "lib: rework bitmap_parse", v5: lib/string: add strnchrnul() bitops: more BITS_TO_* macros lib: add test for bitmap_parse() lib: make bitmap_parse_user a wrapper on bitmap_parse lib: rework bitmap_parse() lib: new testcases for bitmap_parse{_user} include/linux/cpumask.h: don't calculate length of the input string Subsystem: cleanups Masahiro Yamada <masahiroy@kernel.org>: treewide: remove redundant IS_ERR() before error code check Subsystem: arm Chen-Yu Tsai <wens@csie.org>: ARM: dma-api: fix max_pfn off-by-one error in __dma_supported() Documentation/memory-barriers.txt | 14 arch/Kconfig | 17 arch/alpha/kernel/srm_env.c | 17 arch/arc/include/asm/pgtable.h | 1 arch/arm/Kconfig | 2 arch/arm/include/asm/pgtable-2level.h | 1 arch/arm/include/asm/pgtable-3level.h | 1 arch/arm/include/asm/tlb.h | 6 arch/arm/kernel/atags_proc.c | 8 arch/arm/mm/alignment.c | 14 arch/arm/mm/dma-mapping.c | 2 arch/arm64/Kconfig | 3 arch/arm64/Kconfig.debug | 19 arch/arm64/include/asm/pgtable.h | 2 arch/arm64/include/asm/ptdump.h | 8 arch/arm64/mm/Makefile | 4 arch/arm64/mm/dump.c | 152 ++---- arch/arm64/mm/mmu.c | 4 arch/arm64/mm/ptdump_debugfs.c | 2 arch/ia64/kernel/salinfo.c | 24 - arch/m68k/kernel/bootinfo_proc.c | 8 arch/mips/include/asm/pgtable.h | 5 arch/mips/lasat/picvue_proc.c | 31 - arch/powerpc/Kconfig | 7 arch/powerpc/include/asm/book3s/32/pgalloc.h | 8 arch/powerpc/include/asm/book3s/64/pgalloc.h | 2 arch/powerpc/include/asm/book3s/64/pgtable.h | 3 arch/powerpc/include/asm/nohash/pgalloc.h | 8 arch/powerpc/include/asm/tlb.h | 11 arch/powerpc/kernel/proc_powerpc.c | 10 arch/powerpc/kernel/rtas-proc.c | 70 +-- arch/powerpc/kernel/rtas_flash.c | 34 - arch/powerpc/kernel/rtasd.c | 14 arch/powerpc/mm/book3s64/pgtable.c | 7 arch/powerpc/mm/numa.c | 12 arch/powerpc/platforms/pseries/lpar.c | 24 - arch/powerpc/platforms/pseries/lparcfg.c | 14 arch/powerpc/platforms/pseries/reconfig.c | 8 arch/powerpc/platforms/pseries/scanlog.c | 15 arch/riscv/include/asm/pgtable-64.h | 7 arch/riscv/include/asm/pgtable.h | 7 arch/s390/Kconfig | 4 arch/s390/include/asm/pgtable.h | 2 arch/sh/mm/alignment.c | 17 arch/sparc/Kconfig | 3 arch/sparc/include/asm/pgtable_64.h | 2 arch/sparc/include/asm/tlb_64.h | 11 arch/sparc/kernel/led.c | 15 arch/um/drivers/mconsole_kern.c | 9 arch/um/kernel/exitcode.c | 15 arch/um/kernel/process.c | 15 arch/x86/Kconfig | 3 arch/x86/Kconfig.debug | 20 arch/x86/include/asm/pgtable.h | 10 arch/x86/include/asm/tlb.h | 4 arch/x86/kernel/cpu/mtrr/if.c | 21 arch/x86/mm/Makefile | 4 arch/x86/mm/debug_pagetables.c | 18 arch/x86/mm/dump_pagetables.c | 418 +++++------------- arch/x86/platform/efi/efi_32.c | 2 arch/x86/platform/efi/efi_64.c | 4 arch/x86/platform/uv/tlb_uv.c | 14 arch/xtensa/platforms/iss/simdisk.c | 10 crypto/af_alg.c | 2 drivers/acpi/battery.c | 15 drivers/acpi/proc.c | 15 drivers/acpi/scan.c | 2 drivers/base/memory.c | 9 drivers/block/null_blk_main.c | 58 +- drivers/char/hw_random/bcm2835-rng.c | 2 drivers/char/hw_random/omap-rng.c | 4 drivers/clk/clk.c | 2 drivers/dma/mv_xor_v2.c | 2 drivers/firmware/efi/arm-runtime.c | 2 drivers/gpio/gpiolib-devres.c | 2 drivers/gpio/gpiolib-of.c | 8 drivers/gpio/gpiolib.c | 2 drivers/hwmon/dell-smm-hwmon.c | 15 drivers/i2c/busses/i2c-mv64xxx.c | 5 drivers/i2c/busses/i2c-synquacer.c | 2 drivers/ide/ide-proc.c | 19 drivers/input/input.c | 28 - drivers/isdn/capi/kcapi_proc.c | 6 drivers/macintosh/via-pmu.c | 17 drivers/md/md.c | 15 drivers/misc/sgi-gru/gruprocfs.c | 42 - drivers/mtd/ubi/build.c | 2 drivers/net/wireless/cisco/airo.c | 126 ++--- drivers/net/wireless/intel/ipw2x00/libipw_module.c | 15 drivers/net/wireless/intersil/hostap/hostap_hw.c | 4 drivers/net/wireless/intersil/hostap/hostap_proc.c | 14 drivers/net/wireless/intersil/hostap/hostap_wlan.h | 2 drivers/net/wireless/ray_cs.c | 20 drivers/of/device.c | 2 drivers/parisc/led.c | 17 drivers/pci/controller/pci-tegra.c | 2 drivers/pci/proc.c | 25 - drivers/phy/phy-core.c | 4 drivers/pinctrl/pxa/pinctrl-pxa2xx.c | 1 drivers/platform/x86/thinkpad_acpi.c | 15 drivers/platform/x86/toshiba_acpi.c | 60 +- drivers/pnp/isapnp/proc.c | 9 drivers/pnp/pnpbios/proc.c | 17 drivers/s390/block/dasd_proc.c | 15 drivers/s390/cio/blacklist.c | 14 drivers/s390/cio/css.c | 11 drivers/scsi/esas2r/esas2r_main.c | 9 drivers/scsi/scsi_devinfo.c | 15 drivers/scsi/scsi_proc.c | 29 - drivers/scsi/sg.c | 30 - drivers/spi/spi-orion.c | 3 drivers/staging/rtl8192u/ieee80211/ieee80211_module.c | 14 drivers/tty/sysrq.c | 8 drivers/usb/gadget/function/rndis.c | 17 drivers/video/fbdev/imxfb.c | 2 drivers/video/fbdev/via/viafbdev.c | 105 ++-- drivers/zorro/proc.c | 9 fs/cifs/cifs_debug.c | 108 ++-- fs/cifs/dfs_cache.c | 13 fs/cifs/dfs_cache.h | 2 fs/ext4/super.c | 2 fs/f2fs/node.c | 2 fs/fscache/internal.h | 2 fs/fscache/object-list.c | 11 fs/fscache/proc.c | 2 fs/jbd2/journal.c | 13 fs/jfs/jfs_debug.c | 14 fs/lockd/procfs.c | 12 fs/nfsd/nfsctl.c | 13 fs/nfsd/stats.c | 12 fs/ocfs2/file.c | 14 fs/ocfs2/suballoc.c | 2 fs/proc/cpuinfo.c | 12 fs/proc/generic.c | 38 - fs/proc/inode.c | 76 +-- fs/proc/internal.h | 5 fs/proc/kcore.c | 13 fs/proc/kmsg.c | 14 fs/proc/page.c | 54 +- fs/proc/proc_net.c | 32 - fs/proc/proc_sysctl.c | 2 fs/proc/root.c | 2 fs/proc/stat.c | 12 fs/proc/task_mmu.c | 4 fs/proc/vmcore.c | 10 fs/sysfs/group.c | 2 include/asm-generic/pgtable.h | 20 include/asm-generic/tlb.h | 138 +++-- include/linux/bitmap.h | 8 include/linux/bitops.h | 4 include/linux/cpumask.h | 4 include/linux/memory_hotplug.h | 4 include/linux/mm.h | 6 include/linux/mmzone.h | 10 include/linux/pagewalk.h | 49 +- include/linux/proc_fs.h | 23 include/linux/ptdump.h | 24 - include/linux/seq_file.h | 13 include/linux/slab.h | 1 include/linux/string.h | 1 include/linux/sunrpc/stats.h | 4 ipc/mqueue.c | 123 ++++- ipc/msg.c | 62 +- ipc/sem.c | 66 +- ipc/util.c | 14 kernel/configs.c | 9 kernel/irq/proc.c | 42 - kernel/kallsyms.c | 12 kernel/latencytop.c | 14 kernel/locking/lockdep_proc.c | 15 kernel/module.c | 12 kernel/profile.c | 24 - kernel/sched/psi.c | 48 +- lib/bitmap.c | 195 ++++---- lib/string.c | 17 lib/test_bitmap.c | 105 ++++ mm/Kconfig.debug | 21 mm/Makefile | 1 mm/gup.c | 2 mm/hmm.c | 66 +- mm/memory_hotplug.c | 104 +--- mm/memremap.c | 2 mm/migrate.c | 5 mm/mincore.c | 1 mm/mmu_gather.c | 158 ++++-- mm/page_alloc.c | 75 +-- mm/pagewalk.c | 167 +++++-- mm/ptdump.c | 159 ++++++ mm/slab_common.c | 37 - mm/sparse.c | 10 mm/swapfile.c | 14 net/atm/mpoa_proc.c | 17 net/atm/proc.c | 8 net/core/dev.c | 2 net/core/filter.c | 2 net/core/pktgen.c | 44 - net/ipv4/ipconfig.c | 10 net/ipv4/netfilter/ipt_CLUSTERIP.c | 16 net/ipv4/route.c | 24 - net/netfilter/xt_recent.c | 17 net/sunrpc/auth_gss/svcauth_gss.c | 10 net/sunrpc/cache.c | 45 - net/sunrpc/stats.c | 21 net/xfrm/xfrm_policy.c | 2 samples/kfifo/bytestream-example.c | 11 samples/kfifo/inttype-example.c | 11 samples/kfifo/record-example.c | 11 scripts/coccinelle/free/devm_free.cocci | 4 sound/core/info.c | 34 - sound/soc/codecs/ak4104.c | 3 sound/soc/codecs/cs4270.c | 3 sound/soc/codecs/tlv320aic32x4.c | 6 sound/soc/sunxi/sun4i-spdif.c | 2 tools/include/linux/bitops.h | 9 214 files changed, 2589 insertions(+), 2227 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-02-04 1:33 incoming Andrew Morton @ 2020-02-04 2:27 ` Linus Torvalds 2020-02-04 2:46 ` incoming Andrew Morton 0 siblings, 1 reply; 370+ messages in thread From: Linus Torvalds @ 2020-02-04 2:27 UTC (permalink / raw) To: Andrew Morton; +Cc: mm-commits, Linux-MM On Tue, Feb 4, 2020 at 1:33 AM Andrew Morton <akpm@linux-foundation.org> wrote: > > The rest of MM and the rest of everything else. What's the base? You've changed your scripts or something, and that information is no longer in your cover letter.. Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-02-04 2:27 ` incoming Linus Torvalds @ 2020-02-04 2:46 ` Andrew Morton 2020-02-04 3:11 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2020-02-04 2:46 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, Linux-MM On Tue, 4 Feb 2020 02:27:48 +0000 Linus Torvalds <torvalds@linux-foundation.org> wrote: > On Tue, Feb 4, 2020 at 1:33 AM Andrew Morton <akpm@linux-foundation.org> wrote: > > > > The rest of MM and the rest of everything else. > > What's the base? You've changed your scripts or something, and that > information is no longer in your cover letter.. > Crap, sorry, geriatric. d4e9056daedca3891414fe3c91de3449a5dad0f2 ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2020-02-04 2:46 ` incoming Andrew Morton @ 2020-02-04 3:11 ` Linus Torvalds 0 siblings, 0 replies; 370+ messages in thread From: Linus Torvalds @ 2020-02-04 3:11 UTC (permalink / raw) To: Andrew Morton; +Cc: mm-commits, Linux-MM On Tue, Feb 4, 2020 at 2:46 AM Andrew Morton <akpm@linux-foundation.org> wrote: > > On Tue, 4 Feb 2020 02:27:48 +0000 Linus Torvalds <torvalds@linux-foundation.org> wrote: > > > What's the base? You've changed your scripts or something, and that > > information is no longer in your cover letter.. > > Crap, sorry, geriatric. > > d4e9056daedca3891414fe3c91de3449a5dad0f2 Ok, I've tentatively applied it with the MIME decoding fixes I found, and I'll guess I'll let it build and sit for a while before merging it into my tree. I didn't find anything else odd in there. But... Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-01-31 6:10 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-01-31 6:10 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits Most of -mm and quite a number of other subsystems. MM is fairly quiet this time. Holidays, I assume. 119 patches, based on 39bed42de2e7d74686a2d5a45638d6a5d7e7d473: Subsystems affected by this patch series: hotfixes scripts ocfs2 mm/slub mm/kmemleak mm/debug mm/pagecache mm/gup mm/swap mm/memcg mm/pagemap mm/tracing mm/kasan mm/initialization mm/pagealloc mm/vmscan mm/tools mm/memblock mm/oom-kill mm/hugetlb mm/migration mm/mmap mm/memory-hotplug mm/zswap mm/cleanups mm/zram misc lib binfmt init reiserfs exec dma-mapping kcov Subsystem: hotfixes Andy Shevchenko <andriy.shevchenko@linux.intel.com>: lib/test_bitmap: correct test data offsets for 32-bit "Theodore Ts'o" <tytso@mit.edu>: memcg: fix a crash in wb_workfn when a device disappears Dan Carpenter <dan.carpenter@oracle.com>: mm/mempolicy.c: fix out of bounds write in mpol_parse_str() Pingfan Liu <kernelfans@gmail.com>: mm/sparse.c: reset section's mem_map when fully deactivated Wei Yang <richardw.yang@linux.intel.com>: mm/migrate.c: also overwrite error when it is bigger than zero Dan Williams <dan.j.williams@intel.com>: mm/memory_hotplug: fix remove_memory() lockdep splat Wei Yang <richardw.yang@linux.intel.com>: mm: thp: don't need care deferred split queue in memcg charge move path Yang Shi <yang.shi@linux.alibaba.com>: mm: move_pages: report the number of non-attempted pages Subsystem: scripts Xiong <xndchn@gmail.com>: scripts/spelling.txt: add more spellings to spelling.txt Luca Ceresoli <luca@lucaceresoli.net>: scripts/spelling.txt: add "issus" typo Subsystem: ocfs2 Aditya Pakki <pakki001@umn.edu>: fs: ocfs: remove unnecessary assertion in dlm_migrate_lockres zhengbin <zhengbin13@huawei.com>: ocfs2: remove unneeded semicolons Masahiro Yamada <masahiroy@kernel.org>: ocfs2: make local header paths relative to C files Colin Ian King <colin.king@canonical.com>: ocfs2/dlm: remove redundant assignment to ret Andy Shevchenko <andriy.shevchenko@linux.intel.com>: ocfs2/dlm: move BITS_TO_BYTES() to bitops.h for wider use wangyan <wangyan122@huawei.com>: ocfs2: fix a NULL pointer dereference when call ocfs2_update_inode_fsync_trans() ocfs2: use ocfs2_update_inode_fsync_trans() to access t_tid in handle->h_transaction Subsystem: mm/slub Yu Zhao <yuzhao@google.com>: mm/slub.c: avoid slub allocation while holding list_lock Subsystem: mm/kmemleak He Zhe <zhe.he@windriver.com>: mm/kmemleak: turn kmemleak_lock and object->lock to raw_spinlock_t Subsystem: mm/debug Vlastimil Babka <vbabka@suse.cz>: mm/debug.c: always print flags in dump_page() Subsystem: mm/pagecache Ira Weiny <ira.weiny@intel.com>: mm/filemap.c: clean up filemap_write_and_wait() Subsystem: mm/gup Qiujun Huang <hqjagain@gmail.com>: mm: fix gup_pud_range Wei Yang <richardw.yang@linux.intel.com>: mm/gup.c: use is_vm_hugetlb_page() to check whether to follow huge John Hubbard <jhubbard@nvidia.com>: Patch series "mm/gup: prereqs to track dma-pinned pages: FOLL_PIN", v12: mm/gup: factor out duplicate code from four routines mm/gup: move try_get_compound_head() to top, fix minor issues Dan Williams <dan.j.williams@intel.com>: mm: Cleanup __put_devmap_managed_page() vs ->page_free() John Hubbard <jhubbard@nvidia.com>: mm: devmap: refactor 1-based refcounting for ZONE_DEVICE pages goldish_pipe: rename local pin_user_pages() routine mm: fix get_user_pages_remote()'s handling of FOLL_LONGTERM vfio: fix FOLL_LONGTERM use, simplify get_user_pages_remote() call mm/gup: allow FOLL_FORCE for get_user_pages_fast() IB/umem: use get_user_pages_fast() to pin DMA pages media/v4l2-core: set pages dirty upon releasing DMA buffers mm/gup: introduce pin_user_pages*() and FOLL_PIN goldish_pipe: convert to pin_user_pages() and put_user_page() IB/{core,hw,umem}: set FOLL_PIN via pin_user_pages*(), fix up ODP mm/process_vm_access: set FOLL_PIN via pin_user_pages_remote() drm/via: set FOLL_PIN via pin_user_pages_fast() fs/io_uring: set FOLL_PIN via pin_user_pages() net/xdp: set FOLL_PIN via pin_user_pages() media/v4l2-core: pin_user_pages (FOLL_PIN) and put_user_page() conversion vfio, mm: pin_user_pages (FOLL_PIN) and put_user_page() conversion powerpc: book3s64: convert to pin_user_pages() and put_user_page() mm/gup_benchmark: use proper FOLL_WRITE flags instead of hard-coding "1" mm, tree-wide: rename put_user_page*() to unpin_user_page*() Subsystem: mm/swap Vasily Averin <vvs@virtuozzo.com>: mm/swapfile.c: swap_next should increase position index Subsystem: mm/memcg Kaitao Cheng <pilgrimtao@gmail.com>: mm/memcontrol.c: cleanup some useless code Subsystem: mm/pagemap Li Xinhai <lixinhai.lxh@gmail.com>: mm/page_vma_mapped.c: explicitly compare pfn for normal, hugetlbfs and THP page Subsystem: mm/tracing Junyong Sun <sunjy516@gmail.com>: mm, tracing: print symbol name for kmem_alloc_node call_site events Subsystem: mm/kasan "Gustavo A. R. Silva" <gustavo@embeddedor.com>: lib/test_kasan.c: fix memory leak in kmalloc_oob_krealloc_more() Subsystem: mm/initialization Andy Shevchenko <andriy.shevchenko@linux.intel.com>: mm/early_ioremap.c: use %pa to print resource_size_t variables Subsystem: mm/pagealloc "Kirill A. Shutemov" <kirill@shutemov.name>: mm/page_alloc: skip non present sections on zone initialization David Hildenbrand <david@redhat.com>: mm: remove the memory isolate notifier mm: remove "count" parameter from has_unmovable_pages() Subsystem: mm/vmscan Liu Song <liu.song11@zte.com.cn>: mm/vmscan.c: remove unused return value of shrink_node Alex Shi <alex.shi@linux.alibaba.com>: mm/vmscan: remove prefetch_prev_lru_page mm/vmscan: remove unused RECLAIM_OFF/RECLAIM_ZONE Subsystem: mm/tools Daniel Wagner <dwagner@suse.de>: tools/vm/slabinfo: fix sanity checks enabling Subsystem: mm/memblock Anshuman Khandual <anshuman.khandual@arm.com>: mm/memblock: define memblock_physmem_add() memblock: Use __func__ in remaining memblock_dbg() call sites Subsystem: mm/oom-kill David Rientjes <rientjes@google.com>: mm, oom: dump stack of victim when reaping failed Subsystem: mm/hugetlb Wei Yang <richardw.yang@linux.intel.com>: mm/huge_memory.c: use head to check huge zero page mm/huge_memory.c: use head to emphasize the purpose of page mm/huge_memory.c: reduce critical section protected by split_queue_lock Subsystem: mm/migration Ralph Campbell <rcampbell@nvidia.com>: mm/migrate: remove useless mask of start address mm/migrate: clean up some minor coding style mm/migrate: add stable check in migrate_vma_insert_page() David Rientjes <rientjes@google.com>: mm, thp: fix defrag setting if newline is not used Subsystem: mm/mmap Miaohe Lin <linmiaohe@huawei.com>: mm/mmap.c: get rid of odd jump labels in find_mergeable_anon_vma() Subsystem: mm/memory-hotplug David Hildenbrand <david@redhat.com>: Patch series "mm/memory_hotplug: pass in nid to online_pages()": mm/memory_hotplug: pass in nid to online_pages() Qian Cai <cai@lca.pw>: mm/hotplug: silence a lockdep splat with printk() mm/page_isolation: fix potential warning from user Subsystem: mm/zswap Vitaly Wool <vitaly.wool@konsulko.com>: mm/zswap.c: add allocation hysteresis if pool limit is hit Dan Carpenter <dan.carpenter@oracle.com>: zswap: potential NULL dereference on error in init_zswap() Subsystem: mm/cleanups Yu Zhao <yuzhao@google.com>: include/linux/mm.h: clean up obsolete check on space in page->flags Wei Yang <richardw.yang@linux.intel.com>: include/linux/mm.h: remove dead code totalram_pages_set() Anshuman Khandual <anshuman.khandual@arm.com>: include/linux/memory.h: drop fields 'hw' and 'phys_callback' from struct memory_block Hao Lee <haolee.swjtu@gmail.com>: mm: fix comments related to node reclaim Subsystem: mm/zram Taejoon Song <taejoon.song@lge.com>: zram: try to avoid worst-case scenario on same element pages Colin Ian King <colin.king@canonical.com>: drivers/block/zram/zram_drv.c: fix error return codes not being returned in writeback_store Subsystem: misc Akinobu Mita <akinobu.mita@gmail.com>: Patch series "add header file for kelvin to/from Celsius conversion: include/linux/units.h: add helpers for kelvin to/from Celsius conversion ACPI: thermal: switch to use <linux/units.h> helpers platform/x86: asus-wmi: switch to use <linux/units.h> helpers platform/x86: intel_menlow: switch to use <linux/units.h> helpers thermal: int340x: switch to use <linux/units.h> helpers thermal: intel_pch: switch to use <linux/units.h> helpers nvme: hwmon: switch to use <linux/units.h> helpers thermal: remove kelvin to/from Celsius conversion helpers from <linux/thermal.h> iwlegacy: use <linux/units.h> helpers iwlwifi: use <linux/units.h> helpers thermal: armada: remove unused TO_MCELSIUS macro iio: adc: qcom-vadc-common: use <linux/units.h> helpers Subsystem: lib Mikhail Zaslonko <zaslonko@linux.ibm.com>: Patch series "S390 hardware support for kernel zlib", v3: lib/zlib: add s390 hardware support for kernel zlib_deflate s390/boot: rename HEAP_SIZE due to name collision lib/zlib: add s390 hardware support for kernel zlib_inflate s390/boot: add dfltcc= kernel command line parameter lib/zlib: add zlib_deflate_dfltcc_enabled() function btrfs: use larger zlib buffer for s390 hardware compression Nathan Chancellor <natechancellor@gmail.com>: lib/scatterlist.c: adjust indentation in __sg_alloc_table Yury Norov <yury.norov@gmail.com>: uapi: rename ext2_swab() to swab() and share globally in swab.h lib/find_bit.c: join _find_next_bit{_le} lib/find_bit.c: uninline helper _find_next_bit() Subsystem: binfmt Alexey Dobriyan <adobriyan@gmail.com>: fs/binfmt_elf.c: smaller code generation around auxv vector fill fs/binfmt_elf.c: fix ->start_code calculation fs/binfmt_elf.c: don't copy ELF header around fs/binfmt_elf.c: better codegen around current->mm fs/binfmt_elf.c: make BAD_ADDR() unlikely fs/binfmt_elf.c: coredump: allocate core ELF header on stack fs/binfmt_elf.c: coredump: delete duplicated overflow check fs/binfmt_elf.c: coredump: allow process with empty address space to coredump Subsystem: init Arvind Sankar <nivedita@alum.mit.edu>: init/main.c: log arguments and environment passed to init init/main.c: remove unnecessary repair_env_string in do_initcall_level Patch series "init/main.c: minor cleanup/bugfix of envvar handling", v2: init/main.c: fix quoted value handling in unknown_bootoption Christophe Leroy <christophe.leroy@c-s.fr>: init/main.c: fix misleading "This architecture does not have kernel memory protection" message Subsystem: reiserfs Yunfeng Ye <yeyunfeng@huawei.com>: reiserfs: prevent NULL pointer dereference in reiserfs_insert_item() Subsystem: exec Alexey Dobriyan <adobriyan@gmail.com>: execve: warn if process starts with executable stack Subsystem: dma-mapping Andy Shevchenko <andriy.shevchenko@linux.intel.com>: include/linux/io-mapping.h-mapping: use PHYS_PFN() macro in io_mapping_map_atomic_wc() Subsystem: kcov Dmitry Vyukov <dvyukov@google.com>: kcov: ignore fault-inject and stacktrace Documentation/admin-guide/kernel-parameters.txt | 12 Documentation/core-api/index.rst | 1 Documentation/core-api/pin_user_pages.rst | 234 +++++ Documentation/vm/zswap.rst | 13 arch/powerpc/mm/book3s64/iommu_api.c | 14 arch/s390/boot/compressed/decompressor.c | 8 arch/s390/boot/ipl_parm.c | 14 arch/s390/include/asm/setup.h | 7 arch/s390/kernel/setup.c | 14 drivers/acpi/thermal.c | 34 drivers/base/memory.c | 25 drivers/block/zram/zram_drv.c | 10 drivers/gpu/drm/via/via_dmablit.c | 6 drivers/iio/adc/qcom-vadc-common.c | 6 drivers/iio/adc/qcom-vadc-common.h | 1 drivers/infiniband/core/umem.c | 21 drivers/infiniband/core/umem_odp.c | 13 drivers/infiniband/hw/hfi1/user_pages.c | 4 drivers/infiniband/hw/mthca/mthca_memfree.c | 8 drivers/infiniband/hw/qib/qib_user_pages.c | 4 drivers/infiniband/hw/qib/qib_user_sdma.c | 8 drivers/infiniband/hw/usnic/usnic_uiom.c | 4 drivers/infiniband/sw/siw/siw_mem.c | 4 drivers/media/v4l2-core/videobuf-dma-sg.c | 20 drivers/net/ethernet/broadcom/bnx2x/bnx2x_init.h | 1 drivers/net/wireless/intel/iwlegacy/4965-mac.c | 3 drivers/net/wireless/intel/iwlegacy/4965.c | 17 drivers/net/wireless/intel/iwlegacy/common.h | 3 drivers/net/wireless/intel/iwlwifi/dvm/dev.h | 5 drivers/net/wireless/intel/iwlwifi/dvm/devices.c | 6 drivers/nvdimm/pmem.c | 6 drivers/nvme/host/hwmon.c | 13 drivers/platform/goldfish/goldfish_pipe.c | 39 drivers/platform/x86/asus-wmi.c | 7 drivers/platform/x86/intel_menlow.c | 9 drivers/thermal/armada_thermal.c | 2 drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c | 7 drivers/thermal/intel/intel_pch_thermal.c | 3 drivers/vfio/vfio_iommu_type1.c | 39 fs/binfmt_elf.c | 154 +-- fs/btrfs/compression.c | 2 fs/btrfs/zlib.c | 135 ++ fs/exec.c | 5 fs/fs-writeback.c | 2 fs/io_uring.c | 6 fs/ocfs2/cluster/quorum.c | 2 fs/ocfs2/dlm/Makefile | 2 fs/ocfs2/dlm/dlmast.c | 8 fs/ocfs2/dlm/dlmcommon.h | 4 fs/ocfs2/dlm/dlmconvert.c | 8 fs/ocfs2/dlm/dlmdebug.c | 8 fs/ocfs2/dlm/dlmdomain.c | 8 fs/ocfs2/dlm/dlmlock.c | 8 fs/ocfs2/dlm/dlmmaster.c | 10 fs/ocfs2/dlm/dlmrecovery.c | 10 fs/ocfs2/dlm/dlmthread.c | 8 fs/ocfs2/dlm/dlmunlock.c | 8 fs/ocfs2/dlmfs/Makefile | 2 fs/ocfs2/dlmfs/dlmfs.c | 4 fs/ocfs2/dlmfs/userdlm.c | 6 fs/ocfs2/dlmglue.c | 2 fs/ocfs2/journal.h | 8 fs/ocfs2/namei.c | 3 fs/reiserfs/stree.c | 3 include/linux/backing-dev.h | 10 include/linux/bitops.h | 1 include/linux/fs.h | 6 include/linux/io-mapping.h | 5 include/linux/memblock.h | 7 include/linux/memory.h | 29 include/linux/memory_hotplug.h | 3 include/linux/mm.h | 116 +- include/linux/mmzone.h | 2 include/linux/page-isolation.h | 8 include/linux/swab.h | 1 include/linux/thermal.h | 11 include/linux/units.h | 84 + include/linux/zlib.h | 6 include/trace/events/kmem.h | 4 include/trace/events/writeback.h | 37 include/uapi/linux/swab.h | 10 include/uapi/linux/sysctl.h | 2 init/main.c | 36 kernel/Makefile | 1 lib/Kconfig | 7 lib/Makefile | 2 lib/decompress_inflate.c | 13 lib/find_bit.c | 82 - lib/scatterlist.c | 2 lib/test_bitmap.c | 9 lib/test_kasan.c | 1 lib/zlib_deflate/deflate.c | 85 + lib/zlib_deflate/deflate_syms.c | 1 lib/zlib_deflate/deftree.c | 54 - lib/zlib_deflate/defutil.h | 134 ++ lib/zlib_dfltcc/Makefile | 13 lib/zlib_dfltcc/dfltcc.c | 57 + lib/zlib_dfltcc/dfltcc.h | 155 +++ lib/zlib_dfltcc/dfltcc_deflate.c | 280 ++++++ lib/zlib_dfltcc/dfltcc_inflate.c | 149 +++ lib/zlib_dfltcc/dfltcc_syms.c | 17 lib/zlib_dfltcc/dfltcc_util.h | 123 ++ lib/zlib_inflate/inflate.c | 32 lib/zlib_inflate/inflate.h | 8 lib/zlib_inflate/infutil.h | 18 mm/Makefile | 1 mm/backing-dev.c | 1 mm/debug.c | 18 mm/early_ioremap.c | 8 mm/filemap.c | 34 mm/gup.c | 503 ++++++----- mm/gup_benchmark.c | 9 mm/huge_memory.c | 44 mm/kmemleak.c | 112 +- mm/memblock.c | 22 mm/memcontrol.c | 25 mm/memory_hotplug.c | 24 mm/mempolicy.c | 6 mm/memremap.c | 95 -- mm/migrate.c | 77 + mm/mmap.c | 30 mm/oom_kill.c | 2 mm/page_alloc.c | 83 + mm/page_isolation.c | 69 - mm/page_vma_mapped.c | 12 mm/process_vm_access.c | 32 mm/slub.c | 88 + mm/sparse.c | 2 mm/swap.c | 27 mm/swapfile.c | 2 mm/vmscan.c | 24 mm/zswap.c | 88 + net/xdp/xdp_umem.c | 4 scripts/spelling.txt | 14 tools/testing/selftests/vm/gup_benchmark.c | 6 tools/vm/slabinfo.c | 4 136 files changed, 2790 insertions(+), 1358 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-01-14 0:28 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-01-14 0:28 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 11 MM fixes, based on b3a987b0264d3ddbb24293ebff10eddfc472f653: Vlastimil Babka <vbabka@suse.cz>: mm, thp: tweak reclaim/compaction effort of local-only and all-node allocations David Hildenbrand <david@redhat.com>: mm/memory_hotplug: don't free usage map when removing a re-added early section "Kirill A. Shutemov" <kirill@shutemov.name>: Patch series "Fix two above-47bit hint address vs. THP bugs": mm/huge_memory.c: thp: fix conflict of above-47bit hint address and PMD alignment mm/shmem.c: thp, shmem: fix conflict of above-47bit hint address and PMD alignment Roman Gushchin <guro@fb.com>: mm: memcg/slab: fix percpu slab vmstats flushing Vlastimil Babka <vbabka@suse.cz>: mm, debug_pagealloc: don't rely on static keys too early Wen Yang <wenyang@linux.alibaba.com>: Patch series "use div64_ul() instead of div_u64() if the divisor is: mm/page-writeback.c: avoid potential division by zero in wb_min_max_ratio() mm/page-writeback.c: use div64_ul() for u64-by-unsigned-long divide mm/page-writeback.c: improve arithmetic divisions Adrian Huang <ahuang12@lenovo.com>: mm: memcg/slab: call flush_memcg_workqueue() only if memcg workqueue is valid Yang Shi <yang.shi@linux.alibaba.com>: mm: khugepaged: add trace status description for SCAN_PAGE_HAS_PRIVATE include/linux/mm.h | 18 +++++++++- include/linux/mmzone.h | 5 +-- include/trace/events/huge_memory.h | 3 + init/main.c | 1 mm/huge_memory.c | 38 ++++++++++++++--------- mm/memcontrol.c | 37 +++++----------------- mm/mempolicy.c | 10 ++++-- mm/page-writeback.c | 10 +++--- mm/page_alloc.c | 61 ++++++++++--------------------------- mm/shmem.c | 7 ++-- mm/slab.c | 4 +- mm/slab_common.c | 3 + mm/slub.c | 2 - mm/sparse.c | 9 ++++- mm/vmalloc.c | 4 +- 15 files changed, 102 insertions(+), 110 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2020-01-04 20:55 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2020-01-04 20:55 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 17 fixes, base on 5613970af3f5f8372c596b138bd64f3918513515: David Hildenbrand <david@redhat.com>: mm/memory_hotplug: shrink zones when offlining memory Chanho Min <chanho.min@lge.com>: mm/zsmalloc.c: fix the migrated zspage statistics. Andrey Konovalov <andreyknvl@google.com>: kcov: fix struct layout for kcov_remote_arg Shakeel Butt <shakeelb@google.com>: memcg: account security cred as well to kmemcg Yang Shi <yang.shi@linux.alibaba.com>: mm: move_pages: return valid node id in status if the page is already on the target node Eric Biggers <ebiggers@google.com>: fs/direct-io.c: include fs/internal.h for missing prototype fs/nsfs.c: include headers for missing declarations fs/namespace.c: make to_mnt_ns() static Nick Desaulniers <ndesaulniers@google.com>: hexagon: parenthesize registers in asm predicates hexagon: work around compiler crash Randy Dunlap <rdunlap@infradead.org>: fs/posix_acl.c: fix kernel-doc warnings Ilya Dryomov <idryomov@gmail.com>: mm/oom: fix pgtables units mismatch in Killed process message Navid Emamdoost <navid.emamdoost@gmail.com>: mm/gup: fix memory leak in __gup_benchmark_ioctl Waiman Long <longman@redhat.com>: mm/hugetlb: defer freeing of huge pages if in non-task context Kai Li <li.kai4@h3c.com>: ocfs2: call journal flush to mark journal as empty after journal recovery when mount Gang He <GHe@suse.com>: ocfs2: fix the crash due to call ocfs2_get_dlm_debug once less Nick Desaulniers <ndesaulniers@google.com>: hexagon: define ioremap_uc Documentation/dev-tools/kcov.rst | 10 +++---- arch/arm64/mm/mmu.c | 4 -- arch/hexagon/include/asm/atomic.h | 8 ++--- arch/hexagon/include/asm/bitops.h | 8 ++--- arch/hexagon/include/asm/cmpxchg.h | 2 - arch/hexagon/include/asm/futex.h | 6 ++-- arch/hexagon/include/asm/io.h | 1 arch/hexagon/include/asm/spinlock.h | 20 +++++++------- arch/hexagon/kernel/stacktrace.c | 4 -- arch/hexagon/kernel/vm_entry.S | 2 - arch/ia64/mm/init.c | 4 -- arch/powerpc/mm/mem.c | 3 -- arch/s390/mm/init.c | 4 -- arch/sh/mm/init.c | 4 -- arch/x86/mm/init_32.c | 4 -- arch/x86/mm/init_64.c | 4 -- fs/direct-io.c | 2 + fs/namespace.c | 2 - fs/nsfs.c | 3 ++ fs/ocfs2/dlmglue.c | 1 fs/ocfs2/journal.c | 8 +++++ fs/posix_acl.c | 7 +++- include/linux/memory_hotplug.h | 7 +++- include/uapi/linux/kcov.h | 10 +++---- kernel/cred.c | 6 ++-- mm/gup_benchmark.c | 8 ++++- mm/hugetlb.c | 51 +++++++++++++++++++++++++++++++++++- mm/memory_hotplug.c | 31 +++++++++++---------- mm/memremap.c | 2 - mm/migrate.c | 23 ++++++++++++---- mm/oom_kill.c | 2 - mm/zsmalloc.c | 5 +++ 32 files changed, 166 insertions(+), 90 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2019-12-18 4:50 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2019-12-18 4:50 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-mm, mm-commits 6 fixes based on 2187f215ebaac73ddbd814696d7c7fa34f0c3de0: Andrey Ryabinin <aryabinin@virtuozzo.com>: kasan: fix crashes on access to memory mapped by vm_map_ram() Daniel Axtens <dja@axtens.net>: mm/memory.c: add apply_to_existing_page_range() helper kasan: use apply_to_existing_page_range() for releasing vmalloc shadow kasan: don't assume percpu shadow allocations will succeed Yang Shi <yang.shi@linux.alibaba.com>: mm: vmscan: protect shrinker idr replace with CONFIG_MEMCG Changbin Du <changbin.du@gmail.com>: lib/Kconfig.debug: fix some messed up configurations include/linux/kasan.h | 15 +++-- include/linux/mm.h | 3 + lib/Kconfig.debug | 100 ++++++++++++++++++------------------ mm/kasan/common.c | 36 ++++++++----- mm/memory.c | 136 ++++++++++++++++++++++++++++++++++---------------- mm/vmalloc.c | 133 ++++++++++++++++++++++++++++-------------------- mm/vmscan.c | 2 7 files changed, 260 insertions(+), 165 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2019-12-05 0:48 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2019-12-05 0:48 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm Most of the rest of MM and various other things. Some Kconfig rework still awaits merges of dependent trees from linux-next. 86 patches, based on 63de37476ebd1e9bab6a9e17186dc5aa1da9ea99. Subsystems affected by this patch series: mm/hotfixes mm/memcg mm/vmstat mm/thp procfs sysctl misc notifiers core-kernel bitops lib checkpatch epoll binfmt init rapidio uaccess kcov ubsan ipc bitmap mm/pagemap Subsystem: mm/hotfixes zhong jiang <zhongjiang@huawei.com>: mm/kasan/common.c: fix compile error Subsystem: mm/memcg Roman Gushchin <guro@fb.com>: mm: memcg/slab: wait for !root kmem_cache refcnt killing on root kmem_cache destruction Subsystem: mm/vmstat Konstantin Khlebnikov <khlebnikov@yandex-team.ru>: mm/vmstat: add helpers to get vmstat item names for each enum type mm/memcontrol: use vmstat names for printing statistics Subsystem: mm/thp Yu Zhao <yuzhao@google.com>: mm/memory.c: replace is_zero_pfn with is_huge_zero_pmd for thp Subsystem: procfs Alexey Dobriyan <adobriyan@gmail.com>: proc: change ->nlink under proc_subdir_lock fs/proc/generic.c: delete useless "len" variable fs/proc/internal.h: shuffle "struct pde_opener" Miaohe Lin <linmiaohe@huawei.com>: include/linux/proc_fs.h: fix confusing macro arg name Krzysztof Kozlowski <krzk@kernel.org>: fs/proc/Kconfig: fix indentation Subsystem: sysctl Alessio Balsini <balsini@android.com>: include/linux/sysctl.h: inline braces for ctl_table and ctl_table_header Subsystem: misc Stephen Boyd <swboyd@chromium.org>: .gitattributes: use 'dts' diff driver for dts files Rikard Falkeborn <rikard.falkeborn@gmail.com>: linux/build_bug.h: change type to int Masahiro Yamada <yamada.masahiro@socionext.com>: linux/scc.h: make uapi linux/scc.h self-contained Krzysztof Kozlowski <krzk@kernel.org>: arch/Kconfig: fix indentation Joe Perches <joe@perches.com>: scripts/get_maintainer.pl: add signatures from Fixes: <badcommit> lines in commit message Andy Shevchenko <andriy.shevchenko@linux.intel.com>: kernel.h: update comment about simple_strto<foo>() functions auxdisplay: charlcd: deduplicate simple_strtoul() Subsystem: notifiers Xiaoming Ni <nixiaoming@huawei.com>: kernel/notifier.c: intercept duplicate registrations to avoid infinite loops kernel/notifier.c: remove notifier_chain_cond_register() kernel/notifier.c: remove blocking_notifier_chain_cond_register() Subsystem: core-kernel Nathan Chancellor <natechancellor@gmail.com>: kernel/profile.c: use cpumask_available to check for NULL cpumask Joe Perches <joe@perches.com>: kernel/sys.c: avoid copying possible padding bytes in copy_to_user Subsystem: bitops William Breathitt Gray <vilhelm.gray@gmail.com>: bitops: introduce the for_each_set_clump8 macro lib/test_bitmap.c: add for_each_set_clump8 test cases gpio: 104-dio-48e: utilize for_each_set_clump8 macro gpio: 104-idi-48: utilize for_each_set_clump8 macro gpio: gpio-mm: utilize for_each_set_clump8 macro gpio: ws16c48: utilize for_each_set_clump8 macro gpio: pci-idio-16: utilize for_each_set_clump8 macro gpio: pcie-idio-24: utilize for_each_set_clump8 macro gpio: uniphier: utilize for_each_set_clump8 macro gpio: 74x164: utilize the for_each_set_clump8 macro thermal: intel: intel_soc_dts_iosf: Utilize for_each_set_clump8 macro gpio: pisosr: utilize the for_each_set_clump8 macro gpio: max3191x: utilize the for_each_set_clump8 macro gpio: pca953x: utilize the for_each_set_clump8 macro Subsystem: lib Wei Yang <richardw.yang@linux.intel.com>: lib/rbtree: set successor's parent unconditionally lib/rbtree: get successor's color directly Laura Abbott <labbott@redhat.com>: lib/test_meminit.c: add bulk alloc/free tests Trent Piepho <tpiepho@gmail.com>: lib/math/rational.c: fix possible incorrect result from rational fractions helper Huang Shijie <sjhuang@iluvatar.ai>: lib/genalloc.c: export symbol addr_in_gen_pool lib/genalloc.c: rename addr_in_gen_pool to gen_pool_has_addr Subsystem: checkpatch Joe Perches <joe@perches.com>: checkpatch: improve ignoring CamelCase SI style variants like mA checkpatch: reduce is_maintained_obsolete lookup runtime Subsystem: epoll Jason Baron <jbaron@akamai.com>: epoll: simplify ep_poll_safewake() for CONFIG_DEBUG_LOCK_ALLOC Heiher <r@hev.cc>: fs/epoll: remove unnecessary wakeups of nested epoll selftests: add epoll selftests Subsystem: binfmt Alexey Dobriyan <adobriyan@gmail.com>: fs/binfmt_elf.c: delete unused "interp_map_addr" argument fs/binfmt_elf.c: extract elf_read() function Subsystem: init Krzysztof Kozlowski <krzk@kernel.org>: init/Kconfig: fix indentation Subsystem: rapidio "Ben Dooks (Codethink)" <ben.dooks@codethink.co.uk>: drivers/rapidio/rio-driver.c: fix missing include of <linux/rio_drv.h> drivers/rapidio/rio-access.c: fix missing include of <linux/rio_drv.h> Subsystem: uaccess Daniel Vetter <daniel.vetter@ffwll.ch>: drm: limit to INT_MAX in create_blob ioctl Kees Cook <keescook@chromium.org>: uaccess: disallow > INT_MAX copy sizes Subsystem: kcov Andrey Konovalov <andreyknvl@google.com>: Patch series " kcov: collect coverage from usb and vhost", v3: kcov: remote coverage support usb, kcov: collect coverage from hub_event vhost, kcov: collect coverage from vhost_worker Subsystem: ubsan Julien Grall <julien.grall@arm.com>: lib/ubsan: don't serialize UBSAN report Subsystem: ipc Masahiro Yamada <yamada.masahiro@socionext.com>: arch: ipcbuf.h: make uapi asm/ipcbuf.h self-contained arch: msgbuf.h: make uapi asm/msgbuf.h self-contained arch: sembuf.h: make uapi asm/sembuf.h self-contained Subsystem: bitmap Andy Shevchenko <andriy.shevchenko@linux.intel.com>: Patch series "gpio: pca953x: Convert to bitmap (extended) API", v2: lib/test_bitmap: force argument of bitmap_parselist_user() to proper address space lib/test_bitmap: undefine macros after use lib/test_bitmap: name EXP_BYTES properly lib/test_bitmap: rename exp to exp1 to avoid ambiguous name lib/test_bitmap: move exp1 and exp2 upper for others to use lib/test_bitmap: fix comment about this file lib/bitmap: introduce bitmap_replace() helper gpio: pca953x: remove redundant variable and check in IRQ handler gpio: pca953x: use input from regs structure in pca953x_irq_pending() gpio: pca953x: convert to use bitmap API gpio: pca953x: tighten up indentation Subsystem: mm/pagemap Mike Rapoport <rppt@linux.ibm.com>: Patch series "mm: remove __ARCH_HAS_4LEVEL_HACK", v13: alpha: use pgtable-nopud instead of 4level-fixup arm: nommu: use pgtable-nopud instead of 4level-fixup c6x: use pgtable-nopud instead of 4level-fixup m68k: nommu: use pgtable-nopud instead of 4level-fixup m68k: mm: use pgtable-nopXd instead of 4level-fixup microblaze: use pgtable-nopmd instead of 4level-fixup nds32: use pgtable-nopmd instead of 4level-fixup parisc: use pgtable-nopXd instead of 4level-fixup Helge Deller <deller@gmx.de>: parisc/hugetlb: use pgtable-nopXd instead of 4level-fixup Mike Rapoport <rppt@linux.ibm.com>: sparc32: use pgtable-nopud instead of 4level-fixup um: remove unused pxx_offset_proc() and addr_pte() functions um: add support for folded p4d page tables mm: remove __ARCH_HAS_4LEVEL_HACK and include/asm-generic/4level-fixup.h .gitattributes | 2 Documentation/core-api/genalloc.rst | 2 Documentation/dev-tools/kcov.rst | 129 arch/Kconfig | 22 arch/alpha/include/asm/mmzone.h | 1 arch/alpha/include/asm/pgalloc.h | 4 arch/alpha/include/asm/pgtable.h | 24 arch/alpha/mm/init.c | 12 arch/arm/include/asm/pgtable.h | 2 arch/arm/mm/dma-mapping.c | 2 arch/c6x/include/asm/pgtable.h | 2 arch/m68k/include/asm/mcf_pgalloc.h | 7 arch/m68k/include/asm/mcf_pgtable.h | 28 arch/m68k/include/asm/mmu_context.h | 12 arch/m68k/include/asm/motorola_pgalloc.h | 4 arch/m68k/include/asm/motorola_pgtable.h | 32 arch/m68k/include/asm/page.h | 9 arch/m68k/include/asm/pgtable_mm.h | 11 arch/m68k/include/asm/pgtable_no.h | 2 arch/m68k/include/asm/sun3_pgalloc.h | 5 arch/m68k/include/asm/sun3_pgtable.h | 18 arch/m68k/kernel/sys_m68k.c | 10 arch/m68k/mm/init.c | 6 arch/m68k/mm/kmap.c | 39 arch/m68k/mm/mcfmmu.c | 16 arch/m68k/mm/motorola.c | 17 arch/m68k/sun3x/dvma.c | 7 arch/microblaze/include/asm/page.h | 3 arch/microblaze/include/asm/pgalloc.h | 16 arch/microblaze/include/asm/pgtable.h | 32 arch/microblaze/kernel/signal.c | 10 arch/microblaze/mm/init.c | 7 arch/microblaze/mm/pgtable.c | 13 arch/mips/include/uapi/asm/msgbuf.h | 1 arch/mips/include/uapi/asm/sembuf.h | 2 arch/nds32/include/asm/page.h | 3 arch/nds32/include/asm/pgalloc.h | 3 arch/nds32/include/asm/pgtable.h | 12 arch/nds32/include/asm/tlb.h | 1 arch/nds32/kernel/pm.c | 4 arch/nds32/mm/fault.c | 16 arch/nds32/mm/init.c | 11 arch/nds32/mm/mm-nds32.c | 6 arch/nds32/mm/proc.c | 26 arch/parisc/include/asm/page.h | 30 arch/parisc/include/asm/pgalloc.h | 41 arch/parisc/include/asm/pgtable.h | 52 arch/parisc/include/asm/tlb.h | 2 arch/parisc/include/uapi/asm/msgbuf.h | 1 arch/parisc/include/uapi/asm/sembuf.h | 1 arch/parisc/kernel/cache.c | 13 arch/parisc/kernel/pci-dma.c | 9 arch/parisc/mm/fixmap.c | 10 arch/parisc/mm/hugetlbpage.c | 18 arch/powerpc/include/uapi/asm/msgbuf.h | 2 arch/powerpc/include/uapi/asm/sembuf.h | 2 arch/s390/include/uapi/asm/ipcbuf.h | 2 arch/sparc/include/asm/pgalloc_32.h | 6 arch/sparc/include/asm/pgtable_32.h | 28 arch/sparc/include/uapi/asm/ipcbuf.h | 2 arch/sparc/include/uapi/asm/msgbuf.h | 2 arch/sparc/include/uapi/asm/sembuf.h | 2 arch/sparc/mm/fault_32.c | 11 arch/sparc/mm/highmem.c | 6 arch/sparc/mm/io-unit.c | 6 arch/sparc/mm/iommu.c | 6 arch/sparc/mm/srmmu.c | 51 arch/um/include/asm/pgtable-2level.h | 1 arch/um/include/asm/pgtable-3level.h | 1 arch/um/include/asm/pgtable.h | 3 arch/um/kernel/mem.c | 8 arch/um/kernel/skas/mmu.c | 12 arch/um/kernel/skas/uaccess.c | 7 arch/um/kernel/tlb.c | 85 arch/um/kernel/trap.c | 4 arch/x86/include/uapi/asm/msgbuf.h | 3 arch/x86/include/uapi/asm/sembuf.h | 2 arch/xtensa/include/uapi/asm/ipcbuf.h | 2 arch/xtensa/include/uapi/asm/msgbuf.h | 2 arch/xtensa/include/uapi/asm/sembuf.h | 1 drivers/auxdisplay/charlcd.c | 34 drivers/base/node.c | 9 drivers/gpio/gpio-104-dio-48e.c | 75 drivers/gpio/gpio-104-idi-48.c | 36 drivers/gpio/gpio-74x164.c | 19 drivers/gpio/gpio-gpio-mm.c | 75 drivers/gpio/gpio-max3191x.c | 19 drivers/gpio/gpio-pca953x.c | 209 drivers/gpio/gpio-pci-idio-16.c | 75 drivers/gpio/gpio-pcie-idio-24.c | 111 drivers/gpio/gpio-pisosr.c | 12 drivers/gpio/gpio-uniphier.c | 13 drivers/gpio/gpio-ws16c48.c | 73 drivers/gpu/drm/drm_property.c | 2 drivers/misc/sram-exec.c | 2 drivers/rapidio/rio-access.c | 2 drivers/rapidio/rio-driver.c | 1 drivers/thermal/intel/intel_soc_dts_iosf.c | 31 drivers/thermal/intel/intel_soc_dts_iosf.h | 2 drivers/usb/core/hub.c | 5 drivers/vhost/vhost.c | 6 drivers/vhost/vhost.h | 1 fs/binfmt_elf.c | 56 fs/eventpoll.c | 52 fs/proc/Kconfig | 8 fs/proc/generic.c | 37 fs/proc/internal.h | 2 include/asm-generic/4level-fixup.h | 39 include/asm-generic/bitops/find.h | 17 include/linux/bitmap.h | 51 include/linux/bitops.h | 12 include/linux/build_bug.h | 4 include/linux/genalloc.h | 2 include/linux/kcov.h | 23 include/linux/kernel.h | 19 include/linux/mm.h | 10 include/linux/notifier.h | 4 include/linux/proc_fs.h | 4 include/linux/rbtree_augmented.h | 6 include/linux/sched.h | 8 include/linux/sysctl.h | 6 include/linux/thread_info.h | 2 include/linux/vmstat.h | 54 include/uapi/asm-generic/ipcbuf.h | 2 include/uapi/asm-generic/msgbuf.h | 2 include/uapi/asm-generic/sembuf.h | 1 include/uapi/linux/kcov.h | 28 include/uapi/linux/scc.h | 1 init/Kconfig | 78 kernel/dma/remap.c | 2 kernel/kcov.c | 547 + kernel/notifier.c | 45 kernel/profile.c | 6 kernel/sys.c | 4 lib/bitmap.c | 12 lib/find_bit.c | 14 lib/genalloc.c | 7 lib/math/rational.c | 63 lib/test_bitmap.c | 206 lib/test_meminit.c | 20 lib/ubsan.c | 64 mm/kasan/common.c | 1 mm/memcontrol.c | 52 mm/memory.c | 10 mm/slab_common.c | 12 mm/vmstat.c | 60 net/sunrpc/rpc_pipe.c | 2 scripts/checkpatch.pl | 13 scripts/get_maintainer.pl | 38 tools/testing/selftests/Makefile | 1 tools/testing/selftests/filesystems/epoll/.gitignore | 1 tools/testing/selftests/filesystems/epoll/Makefile | 7 tools/testing/selftests/filesystems/epoll/epoll_wakeup_test.c | 3074 ++++++++++ usr/include/Makefile | 4 154 files changed, 5270 insertions(+), 1360 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2019-12-01 1:47 Andrew Morton 2019-12-01 5:17 ` incoming James Bottomley 2019-12-01 21:07 ` incoming Linus Torvalds 0 siblings, 2 replies; 370+ messages in thread From: Andrew Morton @ 2019-12-01 1:47 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm - a small number of updates to scripts/, ocfs2 and fs/buffer.c - most of MM. I still have quite a lot of material (mostly not MM) staged after linux-next due to -next dependencies. I'll send thos across next week as the preprequisites get merged up. 158 patches, based on 32ef9553635ab1236c33951a8bd9b5af1c3b1646. Subsystems affected by this patch series: scripts ocfs2 vfs mm/slab mm/slub mm/pagecache mm/gup mm/swap mm/memcg mm/pagemap mm/memfd mm/memory-failure mm/memory-hotplug mm/sparsemem mm/vmalloc mm/kasan mm/pagealloc mm/vmscan mm/proc mm/z3fold mm/mempolicy mm/memblock mm/hugetlbfs mm/hugetlb mm/migration mm/thp mm/cma mm/autonuma mm/page-poison mm/mmap mm/madvise mm/userfaultfd mm/shmem mm/cleanups mm/support Subsystem: scripts Colin Ian King <colin.king@canonical.com>: scripts/spelling.txt: add more spellings to spelling.txt Subsystem: ocfs2 Ding Xiang <dingxiang@cmss.chinamobile.com>: ocfs2: fix passing zero to 'PTR_ERR' warning Subsystem: vfs Saurav Girepunje <saurav.girepunje@gmail.com>: fs/buffer.c: fix use true/false for bool type Ben Dooks <ben.dooks@codethink.co.uk>: fs/buffer.c: include internal.h for missing declarations Subsystem: mm/slab Pengfei Li <lpf.vector@gmail.com>: Patch series "mm, slab: Make kmalloc_info[] contain all types of names", v6: mm, slab: make kmalloc_info[] contain all types of names mm, slab: remove unused kmalloc_size() mm, slab_common: use enum kmalloc_cache_type to iterate over kmalloc caches Subsystem: mm/slub Miles Chen <miles.chen@mediatek.com>: mm: slub: print the offset of fault addresses Yu Zhao <yuzhao@google.com>: mm/slub.c: update comments mm/slub.c: clean up validate_slab() Subsystem: mm/pagecache Konstantin Khlebnikov <khlebnikov@yandex-team.ru>: mm/filemap.c: remove redundant cache invalidation after async direct-io write fs/direct-io.c: keep dio_warn_stale_pagecache() when CONFIG_BLOCK=n mm/filemap.c: warn if stale pagecache is left after direct write Subsystem: mm/gup zhong jiang <zhongjiang@huawei.com>: mm/gup.c: allow CMA migration to propagate errors back to caller Liu Xiang <liuxiang_1999@126.com>: mm/gup.c: fix comments of __get_user_pages() and get_user_pages_remote() Subsystem: mm/swap Naohiro Aota <naohiro.aota@wdc.com>: mm, swap: disallow swapon() on zoned block devices Fengguang Wu <fengguang.wu@intel.com>: mm/swap.c: trivial mark_page_accessed() cleanup Subsystem: mm/memcg Yafang Shao <laoar.shao@gmail.com>: mm, memcg: clean up reclaim iter array Johannes Weiner <hannes@cmpxchg.org>: mm: memcontrol: remove dead code from memory_max_write() mm: memcontrol: try harder to set a new memory.high Hao Lee <haolee.swjtu@gmail.com>: include/linux/memcontrol.h: fix comments based on per-node memcg Shakeel Butt <shakeelb@google.com>: mm: vmscan: memcontrol: remove mem_cgroup_select_victim_node() Chris Down <chris@chrisdown.name>: Documentation/admin-guide/cgroup-v2.rst: document why inactive_X + active_X may not equal X Subsystem: mm/pagemap Johannes Weiner <hannes@cmpxchg.org>: mm: drop mmap_sem before calling balance_dirty_pages() in write fault "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>: shmem: pin the file in shmem_fault() if mmap_sem is dropped "Joel Fernandes (Google)" <joel@joelfernandes.org>: mm: emit tracepoint when RSS changes rss_stat: add support to detect RSS updates of external mm Wei Yang <richardw.yang@linux.intel.com>: mm/mmap.c: remove a never-triggered warning in __vma_adjust() Konstantin Khlebnikov <khlebnikov@yandex-team.ru>: mm/swap.c: piggyback lru_add_drain_all() calls Wei Yang <richardw.yang@linux.intel.com>: mm/mmap.c: prev could be retrieved from vma->vm_prev mm/mmap.c: __vma_unlink_prev() is not necessary now mm/mmap.c: extract __vma_unlink_list() as counterpart for __vma_link_list() mm/mmap.c: rb_parent is not necessary in __vma_link_list() mm/rmap.c: don't reuse anon_vma if we just want a copy mm/rmap.c: reuse mergeable anon_vma as parent when fork Gaowei Pu <pugaowei@gmail.com>: mm/mmap.c: use IS_ERR_VALUE to check return value of get_unmapped_area Vineet Gupta <Vineet.Gupta1@synopsys.com>: Patch series "elide extraneous generated code for folded p4d/pud/pmd", v3: ARC: mm: remove __ARCH_USE_5LEVEL_HACK asm-generic/tlb: stub out pud_free_tlb() if nopud ... asm-generic/tlb: stub out p4d_free_tlb() if nop4d ... asm-generic/tlb: stub out pmd_free_tlb() if nopmd asm-generic/mm: stub out p{4,u}d_clear_bad() if __PAGETABLE_P{4,U}D_FOLDED Miles Chen <miles.chen@mediatek.com>: mm/rmap.c: fix outdated comment in page_get_anon_vma() Yang Shi <yang.shi@linux.alibaba.com>: mm/rmap.c: use VM_BUG_ON_PAGE() in __page_check_anon_rmap() Thomas Hellstrom <thellstrom@vmware.com>: mm: move the backup x_devmap() functions to asm-generic/pgtable.h mm/memory.c: fix a huge pud insertion race during faulting Steven Price <steven.price@arm.com>: Patch series "Generic page walk and ptdump", v15: mm: add generic p?d_leaf() macros arc: mm: add p?d_leaf() definitions arm: mm: add p?d_leaf() definitions arm64: mm: add p?d_leaf() definitions mips: mm: add p?d_leaf() definitions powerpc: mm: add p?d_leaf() definitions riscv: mm: add p?d_leaf() definitions s390: mm: add p?d_leaf() definitions sparc: mm: add p?d_leaf() definitions x86: mm: add p?d_leaf() definitions mm: pagewalk: add p4d_entry() and pgd_entry() mm: pagewalk: allow walking without vma mm: pagewalk: add test_p?d callbacks mm: pagewalk: add 'depth' parameter to pte_hole x86: mm: point to struct seq_file from struct pg_state x86: mm+efi: convert ptdump_walk_pgd_level() to take a mm_struct x86: mm: convert ptdump_walk_pgd_level_debugfs() to take an mm_struct x86: mm: convert ptdump_walk_pgd_level_core() to take an mm_struct mm: add generic ptdump x86: mm: convert dump_pagetables to use walk_page_range arm64: mm: convert mm/dump.c to use walk_page_range() arm64: mm: display non-present entries in ptdump mm: ptdump: reduce level numbers by 1 in note_page() Subsystem: mm/memfd Nicolas Geoffray <ngeoffray@google.com>: mm, memfd: fix COW issue on MAP_PRIVATE and F_SEAL_FUTURE_WRITE mappings "Joel Fernandes (Google)" <joel@joelfernandes.org>: memfd: add test for COW on MAP_PRIVATE and F_SEAL_FUTURE_WRITE mappings Subsystem: mm/memory-failure Jane Chu <jane.chu@oracle.com>: mm/memory-failure.c clean up around tk pre-allocation Naoya Horiguchi <nao.horiguchi@gmail.com>: mm, soft-offline: convert parameter to pfn Yunfeng Ye <yeyunfeng@huawei.com>: mm/memory-failure.c: use page_shift() in add_to_kill() Subsystem: mm/memory-hotplug Anshuman Khandual <anshuman.khandual@arm.com>: mm/hotplug: reorder memblock_[free|remove]() calls in try_remove_memory() Alastair D'Silva <alastair@d-silva.org>: mm/memory_hotplug.c: add a bounds check to __add_pages() David Hildenbrand <david@redhat.com>: Patch series "mm/memory_hotplug: Export generic_online_page()": mm/memory_hotplug: export generic_online_page() hv_balloon: use generic_online_page() mm/memory_hotplug: remove __online_page_free() and __online_page_increment_counters() Patch series "mm: Memory offlining + page isolation cleanups", v2: mm/page_alloc.c: don't set pages PageReserved() when offlining mm/page_isolation.c: convert SKIP_HWPOISON to MEMORY_OFFLINE "Ben Dooks (Codethink)" <ben.dooks@codethink.co.uk>: include/linux/memory_hotplug.h: move definitions of {set,clear}_zone_contiguous David Hildenbrand <david@redhat.com>: drivers/base/memory.c: drop the mem_sysfs_mutex mm/memory_hotplug.c: don't allow to online/offline memory blocks with holes Subsystem: mm/sparsemem Vincent Whitchurch <vincent.whitchurch@axis.com>: mm/sparse: consistently do not zero memmap Ilya Leoshkevich <iii@linux.ibm.com>: mm/sparse.c: mark populate_section_memmap as __meminit Michal Hocko <mhocko@suse.com>: mm/sparse.c: do not waste pre allocated memmap space Subsystem: mm/vmalloc Liu Xiang <liuxiang_1999@126.com>: mm/vmalloc.c: remove unnecessary highmem_mask from parameter of gfpflags_allow_blocking() "Uladzislau Rezki (Sony)" <urezki@gmail.com>: mm/vmalloc: remove preempt_disable/enable when doing preloading mm/vmalloc: respect passed gfp_mask when doing preloading mm/vmalloc: add more comments to the adjust_va_to_fit_type() Anders Roxell <anders.roxell@linaro.org>: selftests: vm: add fragment CONFIG_TEST_VMALLOC "Uladzislau Rezki (Sony)" <urezki@gmail.com>: mm/vmalloc: rework vmap_area_lock Subsystem: mm/kasan Daniel Axtens <dja@axtens.net>: Patch series "kasan: support backing vmalloc space with real shadow: kasan: support backing vmalloc space with real shadow memory kasan: add test for vmalloc fork: support VMAP_STACK with KASAN_VMALLOC x86/kasan: support KASAN_VMALLOC Subsystem: mm/pagealloc Anshuman Khandual <anshuman.khandual@arm.com>: mm/page_alloc: add alloc_contig_pages() Mel Gorman <mgorman@techsingularity.net>: mm, pcp: share common code between memory hotplug and percpu sysctl handler mm, pcpu: make zone pcp updates and reset internal to the mm Hao Lee <haolee.swjtu@gmail.com>: include/linux/mmzone.h: fix comment for ISOLATE_UNMAPPED macro lijiazi <jqqlijiazi@gmail.com>: mm/page_alloc.c: print reserved_highatomic info Subsystem: mm/vmscan Andrey Ryabinin <aryabinin@virtuozzo.com>: mm/vmscan: remove unused lru_pages argument Yang Shi <yang.shi@linux.alibaba.com>: mm/vmscan.c: remove unused scan_control parameter from pageout() Johannes Weiner <hannes@cmpxchg.org>: Patch series "mm: vmscan: cgroup-related cleanups": mm: vmscan: simplify lruvec_lru_size() mm: clean up and clarify lruvec lookup procedure mm: vmscan: move inactive_list_is_low() swap check to the caller mm: vmscan: naming fixes: global_reclaim() and sane_reclaim() mm: vmscan: replace shrink_node() loop with a retry jump mm: vmscan: turn shrink_node_memcg() into shrink_lruvec() mm: vmscan: split shrink_node() into node part and memcgs part mm: vmscan: harmonize writeback congestion tracking for nodes & memcgs Patch series "mm: fix page aging across multiple cgroups": mm: vmscan: move file exhaustion detection to the node level mm: vmscan: detect file thrashing at the reclaim root mm: vmscan: enforce inactive:active ratio at the reclaim root Xianting Tian <xianting_tian@126.com>: mm/vmscan.c: fix typo in comment Subsystem: mm/proc Johannes Weiner <hannes@cmpxchg.org>: kernel: sysctl: make drop_caches write-only Subsystem: mm/z3fold Vitaly Wool <vitaly.wool@konsulko.com>: mm/z3fold.c: add inter-page compaction Subsystem: mm/mempolicy Li Xinhai <lixinhai.lxh@gmail.com>: Patch series "mm: Fix checking unmapped holes for mbind", v4: mm/mempolicy.c: check range first in queue_pages_test_walk mm/mempolicy.c: fix checking unmapped holes for mbind Subsystem: mm/memblock Cao jin <caoj.fnst@cn.fujitsu.com>: mm/memblock.c: cleanup doc mm/memblock: correct doc for function Yunfeng Ye <yeyunfeng@huawei.com>: mm: support memblock alloc on the exact node for sparse_buffer_init() Subsystem: mm/hugetlbfs Mike Kravetz <mike.kravetz@oracle.com>: hugetlbfs: hugetlb_fault_mutex_hash() cleanup mm/hugetlbfs: fix error handling when setting up mounts Patch series "hugetlbfs: convert macros to static inline, fix sparse warning": powerpc/mm: remove pmd_huge/pud_huge stubs and include hugetlb.h hugetlbfs: convert macros to static inline, fix sparse warning Piotr Sarna <p.sarna@tlen.pl>: hugetlbfs: add O_TMPFILE support Waiman Long <longman@redhat.com>: hugetlbfs: take read_lock on i_mmap for PMD sharing Subsystem: mm/hugetlb Mina Almasry <almasrymina@google.com>: hugetlb: region_chg provides only cache entry hugetlb: remove duplicated code Wei Yang <richardw.yang@linux.intel.com>: hugetlb: remove unused hstate in hugetlb_fault_mutex_hash() Zhigang Lu <tonnylu@tencent.com>: mm/hugetlb: avoid looping to the same hugepage if !pages and !vmas zhong jiang <zhongjiang@huawei.com>: mm/huge_memory.c: split_huge_pages_fops should be defined with DEFINE_DEBUGFS_ATTRIBUTE Subsystem: mm/migration Yang Shi <yang.shi@linux.alibaba.com>: mm/migrate.c: handle freed page at the first place Subsystem: mm/thp "Kirill A. Shutemov" <kirill@shutemov.name>: mm, thp: do not queue fully unmapped pages for deferred split Song Liu <songliubraving@fb.com>: mm/thp: flush file for !is_shmem PageDirty() case in collapse_file() Subsystem: mm/cma Yunfeng Ye <yeyunfeng@huawei.com>: mm/cma.c: switch to bitmap_zalloc() for cma bitmap allocation zhong jiang <zhongjiang@huawei.com>: mm/cma_debug.c: use DEFINE_DEBUGFS_ATTRIBUTE to define debugfs fops Subsystem: mm/autonuma Huang Ying <ying.huang@intel.com>: autonuma: fix watermark checking in migrate_balanced_pgdat() autonuma: reduce cache footprint when scanning page tables Subsystem: mm/page-poison zhong jiang <zhongjiang@huawei.com>: mm/hwpoison-inject: use DEFINE_DEBUGFS_ATTRIBUTE to define debugfs fops Subsystem: mm/mmap Wei Yang <richardw.yang@linux.intel.com>: mm/mmap.c: make vma_merge() comment more easy to understand Subsystem: mm/madvise Yunfeng Ye <yeyunfeng@huawei.com>: mm/madvise.c: replace with page_size() in madvise_inject_error() Wei Yang <richardw.yang@linux.intel.com>: mm/madvise.c: use PAGE_ALIGN[ED] for range checking Subsystem: mm/userfaultfd Wei Yang <richardw.yang@linux.intel.com>: userfaultfd: use vma_pagesize for all huge page size calculation userfaultfd: remove unnecessary WARN_ON() in __mcopy_atomic_hugetlb() userfaultfd: wrap the common dst_vma check into an inlined function Andrea Arcangeli <aarcange@redhat.com>: fs/userfaultfd.c: wp: clear VM_UFFD_MISSING or VM_UFFD_WP during userfaultfd_register() Mike Rapoport <rppt@linux.ibm.com>: userfaultfd: require CAP_SYS_PTRACE for UFFD_FEATURE_EVENT_FORK Subsystem: mm/shmem Colin Ian King <colin.king@canonical.com>: mm/shmem.c: make array 'values' static const, makes object smaller Yang Shi <yang.shi@linux.alibaba.com>: mm: shmem: use proper gfp flags for shmem_writepage() Chen Jun <chenjun102@huawei.com>: mm/shmem.c: cast the type of unmap_start to u64 Subsystem: mm/cleanups Hao Lee <haolee.swjtu@gmail.com>: mm: fix struct member name in function comments Wei Yang <richardw.yang@linux.intel.com>: mm: fix typos in comments when calling __SetPageUptodate() Souptick Joarder <jrdr.linux@gmail.com>: mm/memory_hotplug.c: remove __online_page_set_limits() Krzysztof Kozlowski <krzk@kernel.org>: mm/Kconfig: fix indentation Randy Dunlap <rdunlap@infradead.org>: mm/Kconfig: fix trivial help text punctuation Subsystem: mm/support Minchan Kim <minchan@google.com>: mm/page_io.c: annotate refault stalls from swap_readpage Documentation/admin-guide/cgroup-v2.rst | 7 Documentation/dev-tools/kasan.rst | 63 + arch/Kconfig | 9 arch/arc/include/asm/pgtable.h | 2 arch/arc/mm/fault.c | 10 arch/arc/mm/highmem.c | 4 arch/arm/include/asm/pgtable-2level.h | 1 arch/arm/include/asm/pgtable-3level.h | 1 arch/arm64/Kconfig | 1 arch/arm64/Kconfig.debug | 19 arch/arm64/include/asm/pgtable.h | 2 arch/arm64/include/asm/ptdump.h | 8 arch/arm64/mm/Makefile | 4 arch/arm64/mm/dump.c | 148 +--- arch/arm64/mm/mmu.c | 4 arch/arm64/mm/ptdump_debugfs.c | 2 arch/mips/include/asm/pgtable.h | 5 arch/powerpc/include/asm/book3s/64/pgtable-4k.h | 3 arch/powerpc/include/asm/book3s/64/pgtable-64k.h | 3 arch/powerpc/include/asm/book3s/64/pgtable.h | 30 arch/powerpc/mm/book3s64/radix_pgtable.c | 1 arch/riscv/include/asm/pgtable-64.h | 7 arch/riscv/include/asm/pgtable.h | 7 arch/s390/include/asm/pgtable.h | 2 arch/sparc/include/asm/pgtable_64.h | 2 arch/x86/Kconfig | 2 arch/x86/Kconfig.debug | 20 arch/x86/include/asm/pgtable.h | 10 arch/x86/mm/Makefile | 4 arch/x86/mm/debug_pagetables.c | 8 arch/x86/mm/dump_pagetables.c | 431 +++--------- arch/x86/mm/kasan_init_64.c | 61 + arch/x86/platform/efi/efi_32.c | 2 arch/x86/platform/efi/efi_64.c | 4 drivers/base/memory.c | 40 - drivers/firmware/efi/arm-runtime.c | 2 drivers/hv/hv_balloon.c | 4 drivers/xen/balloon.c | 1 fs/buffer.c | 6 fs/direct-io.c | 21 fs/hugetlbfs/inode.c | 67 + fs/ocfs2/acl.c | 4 fs/proc/task_mmu.c | 4 fs/userfaultfd.c | 21 include/asm-generic/4level-fixup.h | 1 include/asm-generic/5level-fixup.h | 1 include/asm-generic/pgtable-nop4d.h | 2 include/asm-generic/pgtable-nopmd.h | 2 include/asm-generic/pgtable-nopud.h | 2 include/asm-generic/pgtable.h | 71 ++ include/asm-generic/tlb.h | 4 include/linux/fs.h | 6 include/linux/gfp.h | 2 include/linux/hugetlb.h | 142 +++- include/linux/kasan.h | 31 include/linux/memblock.h | 3 include/linux/memcontrol.h | 51 - include/linux/memory_hotplug.h | 11 include/linux/mm.h | 42 - include/linux/mmzone.h | 34 include/linux/moduleloader.h | 2 include/linux/page-isolation.h | 4 include/linux/pagewalk.h | 42 - include/linux/ptdump.h | 22 include/linux/slab.h | 20 include/linux/string.h | 2 include/linux/swap.h | 2 include/linux/vmalloc.h | 12 include/trace/events/kmem.h | 53 + kernel/events/uprobes.c | 2 kernel/fork.c | 4 kernel/sysctl.c | 2 lib/Kconfig.kasan | 16 lib/test_kasan.c | 26 lib/vsprintf.c | 40 - mm/Kconfig | 40 - mm/Kconfig.debug | 21 mm/Makefile | 1 mm/cma.c | 6 mm/cma_debug.c | 10 mm/filemap.c | 56 - mm/gup.c | 40 - mm/hmm.c | 8 mm/huge_memory.c | 2 mm/hugetlb.c | 298 ++------ mm/hwpoison-inject.c | 4 mm/internal.h | 27 mm/kasan/common.c | 233 ++++++ mm/kasan/generic_report.c | 3 mm/kasan/kasan.h | 1 mm/khugepaged.c | 18 mm/madvise.c | 14 mm/memblock.c | 113 ++- mm/memcontrol.c | 167 ---- mm/memory-failure.c | 61 - mm/memory.c | 56 + mm/memory_hotplug.c | 86 +- mm/mempolicy.c | 59 + mm/migrate.c | 21 mm/mincore.c | 1 mm/mmap.c | 75 -- mm/mprotect.c | 8 mm/mremap.c | 4 mm/nommu.c | 10 mm/page_alloc.c | 137 +++ mm/page_io.c | 15 mm/page_isolation.c | 12 mm/pagewalk.c | 126 ++- mm/pgtable-generic.c | 9 mm/ptdump.c | 167 ++++ mm/rmap.c | 65 + mm/shmem.c | 29 mm/slab.c | 7 mm/slab.h | 6 mm/slab_common.c | 101 +- mm/slub.c | 36 - mm/sparse.c | 22 mm/swap.c | 29 mm/swapfile.c | 7 mm/userfaultfd.c | 77 +- mm/util.c | 22 mm/vmalloc.c | 196 +++-- mm/vmscan.c | 798 +++++++++++------------ mm/workingset.c | 75 +- mm/z3fold.c | 375 ++++++++-- scripts/spelling.txt | 28 tools/testing/selftests/memfd/memfd_test.c | 36 + tools/testing/selftests/vm/config | 1 128 files changed, 3409 insertions(+), 2121 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2019-12-01 1:47 incoming Andrew Morton @ 2019-12-01 5:17 ` James Bottomley 2019-12-01 21:07 ` incoming Linus Torvalds 1 sibling, 0 replies; 370+ messages in thread From: James Bottomley @ 2019-12-01 5:17 UTC (permalink / raw) To: Andrew Morton, Linus Torvalds; +Cc: mm-commits, linux-mm On Sat, 2019-11-30 at 17:47 -0800, Andrew Morton wrote: > - a small number of updates to scripts/, ocfs2 and fs/buffer.c > > - most of MM. I still have quite a lot of material (mostly not MM) > staged after linux-next due to -next dependencies. I'll send thos > across next week as the preprequisites get merged up. > > 158 patches, based on 32ef9553635ab1236c33951a8bd9b5af1c3b1646. Hey, Andrew, would it be at all possible for you to thread these patches under something like this incoming message? The selfish reason I'm asking is so I can mark the thread as read instead of having to do it individually for 158 messages ... my thumb would thank you for this. Regards, James ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2019-12-01 1:47 incoming Andrew Morton 2019-12-01 5:17 ` incoming James Bottomley @ 2019-12-01 21:07 ` Linus Torvalds 2019-12-02 8:21 ` incoming Steven Price 1 sibling, 1 reply; 370+ messages in thread From: Linus Torvalds @ 2019-12-01 21:07 UTC (permalink / raw) To: Andrew Morton, Steven Price; +Cc: mm-commits, Linux-MM On Sat, Nov 30, 2019 at 5:47 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > Steven Price <steven.price@arm.com>: > Patch series "Generic page walk and ptdump", v15: > mm: add generic p?d_leaf() macros > arc: mm: add p?d_leaf() definitions > arm: mm: add p?d_leaf() definitions > arm64: mm: add p?d_leaf() definitions > mips: mm: add p?d_leaf() definitions > powerpc: mm: add p?d_leaf() definitions > riscv: mm: add p?d_leaf() definitions > s390: mm: add p?d_leaf() definitions > sparc: mm: add p?d_leaf() definitions > x86: mm: add p?d_leaf() definitions > mm: pagewalk: add p4d_entry() and pgd_entry() > mm: pagewalk: allow walking without vma > mm: pagewalk: add test_p?d callbacks > mm: pagewalk: add 'depth' parameter to pte_hole > x86: mm: point to struct seq_file from struct pg_state > x86: mm+efi: convert ptdump_walk_pgd_level() to take a mm_struct > x86: mm: convert ptdump_walk_pgd_level_debugfs() to take an mm_struct > x86: mm: convert ptdump_walk_pgd_level_core() to take an mm_struct > mm: add generic ptdump > x86: mm: convert dump_pagetables to use walk_page_range > arm64: mm: convert mm/dump.c to use walk_page_range() > arm64: mm: display non-present entries in ptdump > mm: ptdump: reduce level numbers by 1 in note_page() I've dropped these, and since they clearly weren't ready I don't want to see them re-sent for 5.5. If somebody figures out the bug, trying again for 5.6 sounds fine. Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2019-12-01 21:07 ` incoming Linus Torvalds @ 2019-12-02 8:21 ` Steven Price 0 siblings, 0 replies; 370+ messages in thread From: Steven Price @ 2019-12-02 8:21 UTC (permalink / raw) To: Linus Torvalds; +Cc: Andrew Morton, mm-commits, Linux-MM On Sun, Dec 01, 2019 at 09:07:47PM +0000, Linus Torvalds wrote: > On Sat, Nov 30, 2019 at 5:47 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > > > Steven Price <steven.price@arm.com>: > > Patch series "Generic page walk and ptdump", v15: > > mm: add generic p?d_leaf() macros > > arc: mm: add p?d_leaf() definitions > > arm: mm: add p?d_leaf() definitions > > arm64: mm: add p?d_leaf() definitions > > mips: mm: add p?d_leaf() definitions > > powerpc: mm: add p?d_leaf() definitions > > riscv: mm: add p?d_leaf() definitions > > s390: mm: add p?d_leaf() definitions > > sparc: mm: add p?d_leaf() definitions > > x86: mm: add p?d_leaf() definitions > > mm: pagewalk: add p4d_entry() and pgd_entry() > > mm: pagewalk: allow walking without vma > > mm: pagewalk: add test_p?d callbacks > > mm: pagewalk: add 'depth' parameter to pte_hole > > x86: mm: point to struct seq_file from struct pg_state > > x86: mm+efi: convert ptdump_walk_pgd_level() to take a mm_struct > > x86: mm: convert ptdump_walk_pgd_level_debugfs() to take an mm_struct > > x86: mm: convert ptdump_walk_pgd_level_core() to take an mm_struct > > mm: add generic ptdump > > x86: mm: convert dump_pagetables to use walk_page_range > > arm64: mm: convert mm/dump.c to use walk_page_range() > > arm64: mm: display non-present entries in ptdump > > mm: ptdump: reduce level numbers by 1 in note_page() > > I've dropped these, and since they clearly weren't ready I don't want > to see them re-sent for 5.5. Sorry about this, I'll try to track down the cause of this and hopefully resubmit for 5.6. Thanks, Steve > If somebody figures out the bug, trying again for 5.6 sounds fine. > > Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2019-11-22 1:53 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2019-11-22 1:53 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 4 fixes, based on 81429eb8d9ca40b0c65bb739d29fa856c5d5e958: Vincent Whitchurch <vincent.whitchurch@axis.com>: mm/sparse: consistently do not zero memmap Joseph Qi <joseph.qi@linux.alibaba.com>: Revert "fs: ocfs2: fix possible null-pointer dereferences in ocfs2_xa_prepare_entry()" David Hildenbrand <david@redhat.com>: mm/memory_hotplug: don't access uninitialized memmaps in shrink_zone_span() Andrey Ryabinin <aryabinin@virtuozzo.com>: mm/ksm.c: don't WARN if page is still mapped in remove_stable_node() fs/ocfs2/xattr.c | 56 ++++++++++++++++++++++++++++++---------------------- mm/ksm.c | 14 ++++++------- mm/memory_hotplug.c | 16 ++++++++++++-- mm/sparse.c | 2 - 4 files changed, 54 insertions(+), 34 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2019-11-16 1:34 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2019-11-16 1:34 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 11 fixes, based on 875fef493f21e54d20d71a581687990aaa50268c: Yang Shi <yang.shi@linux.alibaba.com>: mm: mempolicy: fix the wrong return value and potential pages leak of mbind zhong jiang <zhongjiang@huawei.com>: mm: fix trying to reclaim unevictable lru page when calling madvise_pageout Lasse Collin <lasse.collin@tukaani.org>: lib/xz: fix XZ_DYNALLOC to avoid useless memory reallocations Roman Gushchin <guro@fb.com>: mm: memcg: switch to css_tryget() in get_mem_cgroup_from_mm() mm: hugetlb: switch to css_tryget() in hugetlb_cgroup_charge_cgroup() Laura Abbott <labbott@redhat.com>: mm: slub: really fix slab walking for init_on_free Song Liu <songliubraving@fb.com>: mm,thp: recheck each page before collapsing file THP David Hildenbrand <david@redhat.com>: mm/memory_hotplug: fix try_offline_node() Vinayak Menon <vinmenon@codeaurora.org>: mm/page_io.c: do not free shared swap slots Ralph Campbell <rcampbell@nvidia.com>: mm/debug.c: __dump_page() prints an extra line mm/debug.c: PageAnon() is true for PageKsm() pages drivers/base/memory.c | 36 ++++++++++++++++++++++++++++++++++++ include/linux/memory.h | 1 + lib/xz/xz_dec_lzma2.c | 1 + mm/debug.c | 33 ++++++++++++++++++--------------- mm/hugetlb_cgroup.c | 2 +- mm/khugepaged.c | 28 ++++++++++++++++------------ mm/madvise.c | 16 ++++++++++++---- mm/memcontrol.c | 2 +- mm/memory_hotplug.c | 47 +++++++++++++++++++++++++++++------------------ mm/mempolicy.c | 14 +++++++++----- mm/page_io.c | 6 +++--- mm/slub.c | 39 +++++++++------------------------------ 12 files changed, 136 insertions(+), 89 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2019-11-06 5:16 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2019-11-06 5:16 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 17 fixes, based on 26bc672134241a080a83b2ab9aa8abede8d30e1c: Shakeel Butt <shakeelb@google.com>: mm: memcontrol: fix NULL-ptr deref in percpu stats flush John Hubbard <jhubbard@nvidia.com>: mm/gup_benchmark: fix MAP_HUGETLB case Mel Gorman <mgorman@techsingularity.net>: mm, meminit: recalculate pcpu batch and high limits after init completes Yang Shi <yang.shi@linux.alibaba.com>: mm: thp: handle page cache THP correctly in PageTransCompoundMap Shuning Zhang <sunny.s.zhang@oracle.com>: ocfs2: protect extent tree in ocfs2_prepare_inode_for_write() Jason Gunthorpe <jgg@mellanox.com>: mm/mmu_notifiers: use the right return code for WARN_ON Michal Hocko <mhocko@suse.com>: mm, vmstat: hide /proc/pagetypeinfo from normal users mm, vmstat: reduce zone->lock holding time by /proc/pagetypeinfo Ville Syrjälä <ville.syrjala@linux.intel.com>: mm/khugepaged: fix might_sleep() warn with CONFIG_HIGHPTE=y Johannes Weiner <hannes@cmpxchg.org>: mm/page_alloc.c: ratelimit allocation failure warnings more aggressively Vitaly Wool <vitaly.wool@konsulko.com>: zswap: add Vitaly to the maintainers list Kevin Hao <haokexin@gmail.com>: dump_stack: avoid the livelock of the dump_lock Song Liu <songliubraving@fb.com>: MAINTAINERS: update information for "MEMORY MANAGEMENT" Roman Gushchin <guro@fb.com>: mm: slab: make page_cgroup_ino() to recognize non-compound slab pages properly Ilya Leoshkevich <iii@linux.ibm.com>: scripts/gdb: fix debugging modules compiled with hot/cold partitioning David Hildenbrand <david@redhat.com>: mm/memory_hotplug: fix updating the node span Johannes Weiner <hannes@cmpxchg.org>: mm: memcontrol: fix network errors from failing __GFP_ATOMIC charges MAINTAINERS | 5 + fs/ocfs2/file.c | 125 ++++++++++++++++++++++------- include/linux/mm.h | 5 - include/linux/mm_types.h | 5 + include/linux/page-flags.h | 20 ++++ lib/dump_stack.c | 7 + mm/khugepaged.c | 7 - mm/memcontrol.c | 23 +++-- mm/memory_hotplug.c | 8 + mm/mmu_notifier.c | 2 mm/page_alloc.c | 17 ++- mm/slab.h | 4 mm/vmstat.c | 25 ++++- scripts/gdb/linux/symbols.py | 3 tools/testing/selftests/vm/gup_benchmark.c | 2 15 files changed, 197 insertions(+), 61 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2019-10-19 3:19 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2019-10-19 3:19 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm Rather a lot of fixes, almost all affecting mm/. 26 patches, based on b9959c7a347d6adbb558fba7e36e9fef3cba3b07: David Hildenbrand <david@redhat.com>: drivers/base/memory.c: don't access uninitialized memmaps in soft_offline_page_store() fs/proc/page.c: don't access uninitialized memmaps in fs/proc/page.c mm/memory-failure.c: don't access uninitialized memmaps in memory_failure() Joel Colledge <joel.colledge@linbit.com>: scripts/gdb: fix lx-dmesg when CONFIG_PRINTK_CALLER is set Qian Cai <cai@lca.pw>: mm/page_owner: don't access uninitialized memmaps when reading /proc/pagetypeinfo David Hildenbrand <david@redhat.com>: mm/memory_hotplug: don't access uninitialized memmaps in shrink_pgdat_span() "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>: Patch series "mm/memory_hotplug: Shrink zones before removing memory", v6: mm/memunmap: don't access uninitialized memmap in memunmap_pages() Roman Gushchin <guro@fb.com>: mm: memcg/slab: fix panic in __free_slab() caused by premature memcg pointer release Chengguang Xu <cgxu519@mykernel.net>: ocfs2: fix error handling in ocfs2_setattr() John Hubbard <jhubbard@nvidia.com>: mm/gup_benchmark: add a missing "w" to getopt string mm/gup: fix a misnamed "write" argument, and a related bug Honglei Wang <honglei.wang@oracle.com>: mm: memcg: get number of pages on the LRU list in memcgroup base on lru_zone_size Mike Rapoport <rppt@linux.ibm.com>: mm: memblock: do not enforce current limit for memblock_phys* family David Hildenbrand <david@redhat.com>: hugetlbfs: don't access uninitialized memmaps in pfn_range_valid_gigantic() Yi Li <yilikernel@gmail.com>: ocfs2: fix panic due to ocfs2_wq is null Konstantin Khlebnikov <khlebnikov@yandex-team.ru>: mm/memcontrol: update lruvec counters in mem_cgroup_move_account Chenwandun <chenwandun@huawei.com>: zram: fix race between backing_dev_show and backing_dev_store Ben Dooks <ben.dooks@codethink.co.uk>: mm: include <linux/huge_mm.h> for is_vma_temporary_stack mm/filemap.c: include <linux/ramfs.h> for generic_file_vm_ops definition "Ben Dooks (Codethink)" <ben.dooks@codethink.co.uk>: mm/init-mm.c: include <linux/mman.h> for vm_committed_as_batch "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>: Patch series "Fixes for THP in page cache", v2: proc/meminfo: fix output alignment mm/thp: fix node page state in split_huge_page_to_list() William Kucharski <william.kucharski@oracle.com>: mm/vmscan.c: support removing arbitrary sized pages from mapping "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>: mm/thp: allow dropping THP from page cache Song Liu <songliubraving@fb.com>: kernel/events/uprobes.c: only do FOLL_SPLIT_PMD for uprobe register Ilya Leoshkevich <iii@linux.ibm.com>: scripts/gdb: fix debugging modules on s390 drivers/base/memory.c | 3 + drivers/block/zram/zram_drv.c | 5 + fs/ocfs2/file.c | 2 fs/ocfs2/journal.c | 3 - fs/ocfs2/localalloc.c | 3 - fs/proc/meminfo.c | 4 - fs/proc/page.c | 28 ++++++---- kernel/events/uprobes.c | 13 ++++- mm/filemap.c | 1 mm/gup.c | 14 +++-- mm/huge_memory.c | 9 ++- mm/hugetlb.c | 5 - mm/init-mm.c | 1 mm/memblock.c | 6 +- mm/memcontrol.c | 18 ++++--- mm/memory-failure.c | 14 +++-- mm/memory_hotplug.c | 74 ++++++----------------------- mm/memremap.c | 11 ++-- mm/page_owner.c | 5 + mm/rmap.c | 1 mm/slab_common.c | 9 +-- mm/truncate.c | 12 ++++ mm/vmscan.c | 14 ++--- scripts/gdb/linux/dmesg.py | 16 ++++-- scripts/gdb/linux/symbols.py | 8 ++- scripts/gdb/linux/utils.py | 25 +++++---- tools/testing/selftests/vm/gup_benchmark.c | 2 27 files changed, 166 insertions(+), 140 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2019-10-14 21:11 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2019-10-14 21:11 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm The usual shower of hotfixes and some followups to the recently merged page_owner enhancements. 16 patches, based on 2abd839aa7e615f2bbc50c8ba7deb9e40d186768. Subsystems affected by this patch series: Vlastimil Babka <vbabka@suse.cz>: Patch series "followups to debug_pagealloc improvements through page_owner", v3: mm, page_owner: fix off-by-one error in __set_page_owner_handle() mm, page_owner: decouple freeing stack trace from debug_pagealloc mm, page_owner: rename flag indicating that page is allocated Qian Cai <cai@lca.pw>: mm/slub: fix a deadlock in show_slab_objects() Eric Biggers <ebiggers@google.com>: lib/generic-radix-tree.c: add kmemleak annotations Alexander Potapenko <glider@google.com>: mm/slub.c: init_on_free=1 should wipe freelist ptr for bulk allocations lib/test_meminit: add a kmem_cache_alloc_bulk() test David Rientjes <rientjes@google.com>: mm, hugetlb: allow hugepage allocations to reclaim as needed Vlastimil Babka <vbabka@suse.cz>: mm, compaction: fix wrong pfn handling in __reset_isolation_pfn() Randy Dunlap <rdunlap@infradead.org>: fs/direct-io.c: fix kernel-doc warning fs/libfs.c: fix kernel-doc warning fs/fs-writeback.c: fix kernel-doc warning bitmap.h: fix kernel-doc warning and typo xarray.h: fix kernel-doc warning mm/slab.c: fix kernel-doc warning for __ksize() Jane Chu <jane.chu@oracle.com>: mm/memory-failure: poison read receives SIGKILL instead of SIGBUS if mmaped more than once Documentation/dev-tools/kasan.rst | 3 ++ fs/direct-io.c | 3 -- fs/fs-writeback.c | 2 - fs/libfs.c | 3 -- include/linux/bitmap.h | 3 +- include/linux/page_ext.h | 10 ++++++ include/linux/xarray.h | 4 +- lib/generic-radix-tree.c | 32 +++++++++++++++++----- lib/test_meminit.c | 27 ++++++++++++++++++ mm/compaction.c | 7 ++-- mm/memory-failure.c | 22 ++++++++------- mm/page_alloc.c | 6 ++-- mm/page_ext.c | 23 ++++++--------- mm/page_owner.c | 55 +++++++++++++------------------------- mm/slab.c | 3 ++ mm/slub.c | 35 ++++++++++++++++++------ 16 files changed, 152 insertions(+), 86 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2019-10-07 0:57 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2019-10-07 0:57 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm The usual shower of hotfixes. Chris's memcg patches aren't actually fixes - they're mature but a few niggling review issues were late to arrive. The ocfs2 fixes are quite old - those took some time to get reviewer attention. 18 patches, based on 4ea655343ce4180fe9b2c7ec8cb8ef9884a47901. Subsystems affected by this patch series: ocfs2 hotfixes mm/memcg mm/slab-generic Subsystem: ocfs2 Jia Guo <guojia12@huawei.com>: ocfs2: clear zero in unaligned direct IO Jia-Ju Bai <baijiaju1990@gmail.com>: fs: ocfs2: fix possible null-pointer dereferences in ocfs2_xa_prepare_entry() fs: ocfs2: fix a possible null-pointer dereference in ocfs2_write_end_nolock() fs: ocfs2: fix a possible null-pointer dereference in ocfs2_info_scan_inode_alloc() Subsystem: hotfixes Will Deacon <will@kernel.org>: panic: ensure preemption is disabled during panic() Anshuman Khandual <anshuman.khandual@arm.com>: mm/memremap: drop unused SECTION_SIZE and SECTION_MASK Tejun Heo <tj@kernel.org>: writeback: fix use-after-free in finish_writeback_work() Yi Wang <wang.yi59@zte.com.cn>: mm: fix -Wmissing-prototypes warnings Baoquan He <bhe@redhat.com>: memcg: only record foreign writebacks with dirty pages when memcg is not disabled Michal Hocko <mhocko@suse.com>: kernel/sysctl.c: do not override max_threads provided by userspace Vitaly Wool <vitalywool@gmail.com>: mm/z3fold.c: claim page in the beginning of free Qian Cai <cai@lca.pw>: mm/page_alloc.c: fix a crash in free_pages_prepare() Dan Carpenter <dan.carpenter@oracle.com>: mm/vmpressure.c: fix a signedness bug in vmpressure_register_event() Subsystem: mm/memcg Chris Down <chris@chrisdown.name>: mm, memcg: proportional memory.{low,min} reclaim mm, memcg: make memory.emin the baseline for utilisation determination mm, memcg: make scan aggression always exclude protection Subsystem: mm/slab-generic Vlastimil Babka <vbabka@suse.cz>: Patch series "guarantee natural alignment for kmalloc()", v2: mm, sl[ou]b: improve memory accounting mm, sl[aou]b: guarantee natural alignment for kmalloc(power-of-two) Documentation/admin-guide/cgroup-v2.rst | 20 +- Documentation/core-api/memory-allocation.rst | 4 fs/fs-writeback.c | 9 - fs/ocfs2/aops.c | 25 +++ fs/ocfs2/ioctl.c | 2 fs/ocfs2/xattr.c | 56 +++---- include/linux/memcontrol.h | 67 ++++++--- include/linux/slab.h | 4 kernel/fork.c | 4 kernel/panic.c | 1 mm/memcontrol.c | 5 mm/memremap.c | 2 mm/page_alloc.c | 8 - mm/shuffle.c | 2 mm/slab_common.c | 19 ++ mm/slob.c | 62 ++++++-- mm/slub.c | 14 + mm/sparse.c | 2 mm/vmpressure.c | 20 +- mm/vmscan.c | 198 +++++++++++++++++---------- mm/z3fold.c | 10 + 21 files changed, 363 insertions(+), 171 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2019-09-25 23:45 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2019-09-25 23:45 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm - almost all of the rest of -mm - various other subsystems 76 patches, based on 351c8a09b00b5c51c8f58b016fffe51f87e2d820: Subsystems affected by this patch series: memcg misc core-kernel lib checkpatch reiserfs fat fork cpumask kexec uaccess kconfig kgdb bug ipc lzo kasan madvise cleanups pagemap Subsystem: memcg Michal Hocko <mhocko@suse.com>: memcg, kmem: do not fail __GFP_NOFAIL charges Subsystem: misc Masahiro Yamada <yamada.masahiro@socionext.com>: linux/coff.h: add include guard Subsystem: core-kernel Valdis Kletnieks <valdis.kletnieks@vt.edu>: kernel/elfcore.c: include proper prototypes Subsystem: lib Michel Lespinasse <walken@google.com>: rbtree: avoid generating code twice for the cached versions (tools copy) Patch series "make RB_DECLARE_CALLBACKS more generic", v3: augmented rbtree: add comments for RB_DECLARE_CALLBACKS macro augmented rbtree: add new RB_DECLARE_CALLBACKS_MAX macro augmented rbtree: rework the RB_DECLARE_CALLBACKS macro definition Joe Perches <joe@perches.com>: kernel-doc: core-api: include string.h into core-api Qian Cai <cai@lca.pw>: include/trace/events/writeback.h: fix -Wstringop-truncation warnings Kees Cook <keescook@chromium.org>: strscpy: reject buffer sizes larger than INT_MAX Valdis Kletnieks <valdis.kletnieks@vt.edu>: lib/generic-radix-tree.c: make 2 functions static inline lib/extable.c: add missing prototypes Stephen Boyd <swboyd@chromium.org>: lib/hexdump: make print_hex_dump_bytes() a nop on !DEBUG builds Subsystem: checkpatch Joe Perches <joe@perches.com>: checkpatch: don't interpret stack dumps as commit IDs checkpatch: improve SPDX license checking Matteo Croce <mcroce@redhat.com>: checkpatch.pl: warn on invalid commit id Brendan Jackman <brendan.jackman@bluwireless.co.uk>: checkpatch: exclude sizeof sub-expressions from MACRO_ARG_REUSE Joe Perches <joe@perches.com>: checkpatch: prefer __section over __attribute__((section(...))) checkpatch: allow consecutive close braces Sean Christopherson <sean.j.christopherson@intel.com>: checkpatch: remove obsolete period from "ambiguous SHA1" query Joe Perches <joe@perches.com>: checkpatch: make git output use LANGUAGE=en_US.utf8 Subsystem: reiserfs Jia-Ju Bai <baijiaju1990@gmail.com>: fs: reiserfs: remove unnecessary check of bh in remove_from_transaction() zhengbin <zhengbin13@huawei.com>: fs/reiserfs/journal.c: remove set but not used variables fs/reiserfs/stree.c: remove set but not used variables fs/reiserfs/lbalance.c: remove set but not used variables fs/reiserfs/objectid.c: remove set but not used variables fs/reiserfs/prints.c: remove set but not used variables fs/reiserfs/fix_node.c: remove set but not used variables fs/reiserfs/do_balan.c: remove set but not used variables Jason Yan <yanaijie@huawei.com>: fs/reiserfs/journal.c: remove set but not used variable fs/reiserfs/do_balan.c: remove set but not used variable Subsystem: fat Markus Elfring <elfring@users.sourceforge.net>: fat: delete an unnecessary check before brelse() Subsystem: fork Sai Praneeth Prakhya <sai.praneeth.prakhya@intel.com>: fork: improve error message for corrupted page tables Subsystem: cpumask Alexey Dobriyan <adobriyan@gmail.com>: cpumask: nicer for_each_cpumask_and() signature Subsystem: kexec Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>: kexec: bail out upon SIGKILL when allocating memory. Vasily Gorbik <gor@linux.ibm.com>: kexec: restore arch_kexec_kernel_image_probe declaration Subsystem: uaccess Kees Cook <keescook@chromium.org>: uaccess: add missing __must_check attributes Subsystem: kconfig Masahiro Yamada <yamada.masahiro@socionext.com>: compiler: enable CONFIG_OPTIMIZE_INLINING forcibly Subsystem: kgdb Douglas Anderson <dianders@chromium.org>: kgdb: don't use a notifier to enter kgdb at panic; call directly scripts/gdb: handle split debug Subsystem: bug Kees Cook <keescook@chromium.org>: Patch series "Clean up WARN() "cut here" handling", v2: bug: refactor away warn_slowpath_fmt_taint() bug: rename __WARN_printf_taint() to __WARN_printf() bug: consolidate warn_slowpath_fmt() usage bug: lift "cut here" out of __warn() bug: clean up helper macros to remove __WARN_TAINT() bug: consolidate __WARN_FLAGS usage bug: move WARN_ON() "cut here" into exception handler Subsystem: ipc Markus Elfring <elfring@users.sourceforge.net>: ipc/mqueue.c: delete an unnecessary check before the macro call dev_kfree_skb() ipc/mqueue: improve exception handling in do_mq_notify() "Joel Fernandes (Google)" <joel@joelfernandes.org>: ipc/sem.c: convert to use built-in RCU list checking Subsystem: lzo Dave Rodgman <dave.rodgman@arm.com>: lib/lzo/lzo1x_compress.c: fix alignment bug in lzo-rle Subsystem: kasan Andrey Konovalov <andreyknvl@google.com>: Patch series "arm64: untag user pointers passed to the kernel", v19: lib: untag user pointers in strn*_user mm: untag user pointers passed to memory syscalls mm: untag user pointers in mm/gup.c mm: untag user pointers in get_vaddr_frames fs/namespace: untag user pointers in copy_mount_options userfaultfd: untag user pointers drm/amdgpu: untag user pointers drm/radeon: untag user pointers in radeon_gem_userptr_ioctl media/v4l2-core: untag user pointers in videobuf_dma_contig_user_get tee/shm: untag user pointers in tee_shm_register vfio/type1: untag user pointers in vaddr_get_pfn Catalin Marinas <catalin.marinas@arm.com>: mm: untag user pointers in mmap/munmap/mremap/brk Subsystem: madvise Minchan Kim <minchan@kernel.org>: Patch series "Introduce MADV_COLD and MADV_PAGEOUT", v7: mm: introduce MADV_COLD mm: change PAGEREF_RECLAIM_CLEAN with PAGE_REFRECLAIM mm: introduce MADV_PAGEOUT mm: factor out common parts between MADV_COLD and MADV_PAGEOUT Subsystem: cleanups Mike Rapoport <rppt@linux.ibm.com>: hexagon: drop empty and unused free_initrd_mem Denis Efremov <efremov@linux.com>: checkpatch: check for nested (un)?likely() calls xen/events: remove unlikely() from WARN() condition fs: remove unlikely() from WARN_ON() condition wimax/i2400m: remove unlikely() from WARN*() condition xfs: remove unlikely() from WARN_ON() condition IB/hfi1: remove unlikely() from IS_ERR*() condition ntfs: remove (un)?likely() from IS_ERR() conditions Subsystem: pagemap Mark Rutland <mark.rutland@arm.com>: mm: treewide: clarify pgtable_page_{ctor,dtor}() naming Documentation/core-api/kernel-api.rst | 3 Documentation/vm/split_page_table_lock.rst | 10 arch/alpha/include/uapi/asm/mman.h | 3 arch/arc/include/asm/pgalloc.h | 4 arch/arm/include/asm/tlb.h | 2 arch/arm/mm/mmu.c | 2 arch/arm64/include/asm/tlb.h | 2 arch/arm64/mm/mmu.c | 2 arch/csky/include/asm/pgalloc.h | 2 arch/hexagon/include/asm/pgalloc.h | 2 arch/hexagon/mm/init.c | 13 arch/m68k/include/asm/mcf_pgalloc.h | 6 arch/m68k/include/asm/motorola_pgalloc.h | 6 arch/m68k/include/asm/sun3_pgalloc.h | 2 arch/mips/include/asm/pgalloc.h | 2 arch/mips/include/uapi/asm/mman.h | 3 arch/nios2/include/asm/pgalloc.h | 2 arch/openrisc/include/asm/pgalloc.h | 6 arch/parisc/include/uapi/asm/mman.h | 3 arch/powerpc/mm/pgtable-frag.c | 6 arch/riscv/include/asm/pgalloc.h | 2 arch/s390/mm/pgalloc.c | 6 arch/sh/include/asm/pgalloc.h | 2 arch/sparc/include/asm/pgtable_64.h | 5 arch/sparc/mm/init_64.c | 4 arch/sparc/mm/srmmu.c | 4 arch/um/include/asm/pgalloc.h | 2 arch/unicore32/include/asm/tlb.h | 2 arch/x86/mm/pat_rbtree.c | 19 arch/x86/mm/pgtable.c | 2 arch/xtensa/include/asm/pgalloc.h | 4 arch/xtensa/include/uapi/asm/mman.h | 3 drivers/block/drbd/drbd_interval.c | 29 - drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 2 drivers/gpu/drm/radeon/radeon_gem.c | 2 drivers/infiniband/hw/hfi1/verbs.c | 2 drivers/media/v4l2-core/videobuf-dma-contig.c | 9 drivers/net/wimax/i2400m/tx.c | 3 drivers/tee/tee_shm.c | 1 drivers/vfio/vfio_iommu_type1.c | 2 drivers/xen/events/events_base.c | 2 fs/fat/dir.c | 4 fs/namespace.c | 2 fs/ntfs/mft.c | 12 fs/ntfs/namei.c | 2 fs/ntfs/runlist.c | 2 fs/ntfs/super.c | 2 fs/open.c | 2 fs/reiserfs/do_balan.c | 15 fs/reiserfs/fix_node.c | 6 fs/reiserfs/journal.c | 22 fs/reiserfs/lbalance.c | 3 fs/reiserfs/objectid.c | 3 fs/reiserfs/prints.c | 3 fs/reiserfs/stree.c | 4 fs/userfaultfd.c | 22 fs/xfs/xfs_buf.c | 4 include/asm-generic/bug.h | 71 +- include/asm-generic/pgalloc.h | 8 include/linux/cpumask.h | 14 include/linux/interval_tree_generic.h | 22 include/linux/kexec.h | 2 include/linux/kgdb.h | 2 include/linux/mm.h | 4 include/linux/mm_types_task.h | 4 include/linux/printk.h | 22 include/linux/rbtree_augmented.h | 114 +++- include/linux/string.h | 5 include/linux/swap.h | 2 include/linux/thread_info.h | 2 include/linux/uaccess.h | 21 include/trace/events/writeback.h | 38 - include/uapi/asm-generic/mman-common.h | 3 include/uapi/linux/coff.h | 5 ipc/mqueue.c | 22 ipc/sem.c | 3 kernel/debug/debug_core.c | 31 - kernel/elfcore.c | 1 kernel/fork.c | 16 kernel/kexec_core.c | 2 kernel/panic.c | 48 - lib/Kconfig.debug | 4 lib/bug.c | 11 lib/extable.c | 1 lib/generic-radix-tree.c | 4 lib/hexdump.c | 21 lib/lzo/lzo1x_compress.c | 14 lib/rbtree_test.c | 37 - lib/string.c | 12 lib/strncpy_from_user.c | 3 lib/strnlen_user.c | 3 mm/frame_vector.c | 2 mm/gup.c | 4 mm/internal.h | 2 mm/madvise.c | 562 ++++++++++++++++------- mm/memcontrol.c | 10 mm/mempolicy.c | 3 mm/migrate.c | 2 mm/mincore.c | 2 mm/mlock.c | 4 mm/mmap.c | 34 - mm/mprotect.c | 2 mm/mremap.c | 13 mm/msync.c | 2 mm/oom_kill.c | 2 mm/swap.c | 42 + mm/vmalloc.c | 5 mm/vmscan.c | 62 ++ scripts/checkpatch.pl | 69 ++ scripts/gdb/linux/symbols.py | 4 tools/include/linux/rbtree.h | 71 +- tools/include/linux/rbtree_augmented.h | 145 +++-- tools/lib/rbtree.c | 37 - 114 files changed, 1195 insertions(+), 754 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2019-09-23 22:31 Andrew Morton 2019-09-24 0:55 ` incoming Linus Torvalds 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2019-09-23 22:31 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm - a few hot fixes - ocfs2 updates - almost all of -mm, as below. 134 patches, based on 619e17cf75dd58905aa67ccd494a6ba5f19d6cc6: Subsystems affected by this patch series: hotfixes ocfs2 slab-generic slab slub kmemleak kasan cleanups debug pagecache memcg gup pagemap memory-hotplug sparsemem vmalloc initialization z3fold compaction mempolicy oom-kill hugetlb migration thp mmap madvise shmem zswap zsmalloc Subsystem: hotfixes OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>: fat: work around race with userspace's read via blockdev while mounting Vitaly Wool <vitalywool@gmail.com>: Revert "mm/z3fold.c: fix race between migration and destruction" Arnd Bergmann <arnd@arndb.de>: mm: add dummy can_do_mlock() helper Vitaly Wool <vitalywool@gmail.com>: z3fold: fix retry mechanism in page reclaim Greg Thelen <gthelen@google.com>: kbuild: clean compressed initramfs image Subsystem: ocfs2 Joseph Qi <joseph.qi@linux.alibaba.com>: ocfs2: use jbd2_inode dirty range scoping jbd2: remove jbd2_journal_inode_add_[write|wait] Greg Kroah-Hartman <gregkh@linuxfoundation.org>: ocfs2: further debugfs cleanups Guozhonghua <guozhonghua@h3c.com>: ocfs2: remove unused ocfs2_calc_tree_trunc_credits() ocfs2: remove unused ocfs2_orphan_scan_exit() declaration zhengbin <zhengbin13@huawei.com>: fs/ocfs2/namei.c: remove set but not used variables fs/ocfs2/file.c: remove set but not used variables fs/ocfs2/dir.c: remove set but not used variables Markus Elfring <elfring@users.sourceforge.net>: ocfs2: delete unnecessary checks before brelse() Changwei Ge <gechangwei@live.cn>: ocfs2: wait for recovering done after direct unlock request ocfs2: checkpoint appending truncate log transaction before flushing Colin Ian King <colin.king@canonical.com>: ocfs2: fix spelling mistake "ambigous" -> "ambiguous" Subsystem: slab-generic Waiman Long <longman@redhat.com>: mm, slab: extend slab/shrink to shrink all memcg caches Subsystem: slab Waiman Long <longman@redhat.com>: mm, slab: move memcg_cache_params structure to mm/slab.h Subsystem: slub Qian Cai <cai@lca.pw>: mm/slub.c: fix -Wunused-function compiler warnings Subsystem: kmemleak Nicolas Boichat <drinkcat@chromium.org>: kmemleak: increase DEBUG_KMEMLEAK_EARLY_LOG_SIZE default to 16K Catalin Marinas <catalin.marinas@arm.com>: Patch series "mm: kmemleak: Use a memory pool for kmemleak object: mm: kmemleak: make the tool tolerant to struct scan_area allocation failures mm: kmemleak: simple memory allocation pool for kmemleak objects mm: kmemleak: use the memory pool for early allocations Qian Cai <cai@lca.pw>: mm/kmemleak.c: record the current memory pool size mm/kmemleak: increase the max mem pool to 1M Subsystem: kasan Walter Wu <walter-zh.wu@mediatek.com>: kasan: add memory corruption identification for software tag-based mode Mark Rutland <mark.rutland@arm.com>: lib/test_kasan.c: add roundtrip tests Subsystem: cleanups Christophe JAILLET <christophe.jaillet@wanadoo.fr>: mm/page_poison.c: fix a typo in a comment YueHaibing <yuehaibing@huawei.com>: mm/rmap.c: remove set but not used variable 'cstart' Matthew Wilcox (Oracle) <willy@infradead.org>: Patch series "Make working with compound pages easier", v2: mm: introduce page_size() "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm: introduce page_shift() Matthew Wilcox (Oracle) <willy@infradead.org>: mm: introduce compound_nr() Yu Zhao <yuzhao@google.com>: mm: replace list_move_tail() with add_page_to_lru_list_tail() Subsystem: debug Vlastimil Babka <vbabka@suse.cz>: Patch series "debug_pagealloc improvements through page_owner", v2: mm, page_owner: record page owner for each subpage mm, page_owner: keep owner info when freeing the page mm, page_owner, debug_pagealloc: save and dump freeing stack trace Subsystem: pagecache Konstantin Khlebnikov <khlebnikov@yandex-team.ru>: mm/filemap.c: don't initiate writeback if mapping has no dirty pages mm/filemap.c: rewrite mapping_needs_writeback in less fancy manner "Matthew Wilcox (Oracle)" <willy@infradead.org>: mm: page cache: store only head pages in i_pages Subsystem: memcg Chris Down <chris@chrisdown.name>: mm, memcg: throttle allocators when failing reclaim over memory.high Roman Gushchin <guro@fb.com>: mm: memcontrol: switch to rcu protection in drain_all_stock() Johannes Weiner <hannes@cmpxchg.org>: mm: vmscan: do not share cgroup iteration between reclaimers Subsystem: gup [11~From: John Hubbard <jhubbard@nvidia.com>: Patch series "mm/gup: add make_dirty arg to put_user_pages_dirty_lock()",: mm/gup: add make_dirty arg to put_user_pages_dirty_lock() John Hubbard <jhubbard@nvidia.com>: drivers/gpu/drm/via: convert put_page() to put_user_page*() net/xdp: convert put_page() to put_user_page*() Subsystem: pagemap Wei Yang <richardw.yang@linux.intel.com>: mm: remove redundant assignment of entry Minchan Kim <minchan@kernel.org>: mm: release the spinlock on zap_pte_range Nicholas Piggin <npiggin@gmail.com>: Patch series "mm: remove quicklist page table caches": mm: remove quicklist page table caches Mike Rapoport <rppt@linux.ibm.com>: ia64: switch to generic version of pte allocation sh: switch to generic version of pte allocation microblaze: switch to generic version of pte allocation mm: consolidate pgtable_cache_init() and pgd_cache_init() Kefeng Wang <wangkefeng.wang@huawei.com>: mm: do not hash address in print_bad_pte() Subsystem: memory-hotplug David Hildenbrand <david@redhat.com>: mm/memory_hotplug: remove move_pfn_range() drivers/base/node.c: simplify unregister_memory_block_under_nodes() drivers/base/memory.c: fixup documentation of removable/phys_index/block_size_bytes driver/base/memory.c: validate memory block size early drivers/base/memory.c: don't store end_section_nr in memory blocks Wei Yang <richardw.yang@linux.intel.com>: mm/memory_hotplug.c: prevent memory leak when reusing pgdat David Hildenbrand <david@redhat.com>: Patch series "mm/memory_hotplug: online_pages() cleanups", v2: mm/memory_hotplug.c: use PFN_UP / PFN_DOWN in walk_system_ram_range() mm/memory_hotplug: drop PageReserved() check in online_pages_range() mm/memory_hotplug: simplify online_pages_range() mm/memory_hotplug: make sure the pfn is aligned to the order when onlining mm/memory_hotplug: online_pages cannot be 0 in online_pages() Alastair D'Silva <alastair@d-silva.org>: Patch series "Add bounds check for Hotplugged memory", v3: mm/memory_hotplug.c: add a bounds check to check_hotplug_memory_range() mm/memremap.c: add a bounds check in devm_memremap_pages() Souptick Joarder <jrdr.linux@gmail.com>: mm/memory_hotplug.c: s/is/if Subsystem: sparsemem Lecopzer Chen <lecopzer.chen@mediatek.com>: mm/sparse.c: fix memory leak of sparsemap_buf in aligned memory mm/sparse.c: fix ALIGN() without power of 2 in sparse_buffer_alloc() Wei Yang <richardw.yang@linux.intel.com>: mm/sparse.c: use __nr_to_section(section_nr) to get mem_section Alastair D'Silva <alastair@d-silva.org>: mm/sparse.c: don't manually decrement num_poisoned_pages "Alastair D'Silva" <alastair@d-silva.org>: mm/sparse.c: remove NULL check in clear_hwpoisoned_pages() Subsystem: vmalloc "Uladzislau Rezki (Sony)" <urezki@gmail.com>: mm/vmalloc: do not keep unpurged areas in the busy tree Pengfei Li <lpf.vector@gmail.com>: mm/vmalloc: modify struct vmap_area to reduce its size Austin Kim <austindh.kim@gmail.com>: mm/vmalloc.c: move 'area->pages' after if statement Subsystem: initialization Mike Rapoport <rppt@linux.ibm.com>: mm: use CPU_BITS_NONE to initialize init_mm.cpu_bitmask Qian Cai <cai@lca.pw>: mm: silence -Woverride-init/initializer-overrides Subsystem: z3fold Vitaly Wool <vitalywool@gmail.com>: z3fold: fix memory leak in kmem cache Subsystem: compaction Yafang Shao <laoar.shao@gmail.com>: mm/compaction.c: clear total_{migrate,free}_scanned before scanning a new zone Pengfei Li <lpf.vector@gmail.com>: mm/compaction.c: remove unnecessary zone parameter in isolate_migratepages() Subsystem: mempolicy Kefeng Wang <wangkefeng.wang@huawei.com>: mm/mempolicy.c: remove unnecessary nodemask check in kernel_migrate_pages() Subsystem: oom-kill Joel Savitz <jsavitz@redhat.com>: mm/oom_kill.c: add task UID to info message on an oom kill Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>: memcg, oom: don't require __GFP_FS when invoking memcg OOM killer Edward Chron <echron@arista.com>: mm/oom: add oom_score_adj and pgtables to Killed process message Yi Wang <wang.yi59@zte.com.cn>: mm/oom_kill.c: fix oom_cpuset_eligible() comment Michal Hocko <mhocko@suse.com>: mm, oom: consider present pages for the node size Qian Cai <cai@lca.pw>: mm/memcontrol.c: fix a -Wunused-function warning Michal Hocko <mhocko@suse.com>: memcg, kmem: deprecate kmem.limit_in_bytes Subsystem: hugetlb Hillf Danton <hdanton@sina.com>: Patch series "address hugetlb page allocation stalls", v2: mm, reclaim: make should_continue_reclaim perform dryrun detection Vlastimil Babka <vbabka@suse.cz>: mm, reclaim: cleanup should_continue_reclaim() mm, compaction: raise compaction priority after it withdrawns Mike Kravetz <mike.kravetz@oracle.com>: hugetlbfs: don't retry when pool page allocations start to fail Subsystem: migration Pingfan Liu <kernelfans@gmail.com>: mm/migrate.c: clean up useless code in migrate_vma_collect_pmd() Subsystem: thp Kefeng Wang <wangkefeng.wang@huawei.com>: thp: update split_huge_page_pmd() comment Song Liu <songliubraving@fb.com>: Patch series "Enable THP for text section of non-shmem files", v10;: filemap: check compound_head(page)->mapping in filemap_fault() filemap: check compound_head(page)->mapping in pagecache_get_page() filemap: update offset check in filemap_fault() mm,thp: stats for file backed THP khugepaged: rename collapse_shmem() and khugepaged_scan_shmem() mm,thp: add read-only THP support for (non-shmem) FS mm,thp: avoid writes to file with THP in pagecache Yang Shi <yang.shi@linux.alibaba.com>: Patch series "Make deferred split shrinker memcg aware", v6: mm: thp: extract split_queue_* into a struct mm: move mem_cgroup_uncharge out of __page_cache_release() mm: shrinker: make shrinker not depend on memcg kmem mm: thp: make deferred split shrinker memcg aware Song Liu <songliubraving@fb.com>: Patch series "THP aware uprobe", v13: mm: move memcmp_pages() and pages_identical() uprobe: use original page when all uprobes are removed mm, thp: introduce FOLL_SPLIT_PMD uprobe: use FOLL_SPLIT_PMD instead of FOLL_SPLIT khugepaged: enable collapse pmd for pte-mapped THP uprobe: collapse THP pmd after removing all uprobes Subsystem: mmap Alexandre Ghiti <alex@ghiti.fr>: Patch series "Provide generic top-down mmap layout functions", v6: mm, fs: move randomize_stack_top from fs to mm arm64: make use of is_compat_task instead of hardcoding this test arm64: consider stack randomization for mmap base only when necessary arm64, mm: move generic mmap layout functions to mm arm64, mm: make randomization selected by generic topdown mmap layout arm: properly account for stack randomization and stack guard gap arm: use STACK_TOP when computing mmap base address arm: use generic mmap top-down layout and brk randomization mips: properly account for stack randomization and stack guard gap mips: use STACK_TOP when computing mmap base address mips: adjust brk randomization offset to fit generic version mips: replace arch specific way to determine 32bit task with generic version mips: use generic mmap top-down layout and brk randomization riscv: make mmap allocation top-down by default Wei Yang <richardw.yang@linux.intel.com>: mm/mmap.c: refine find_vma_prev() with rb_last() Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>: mm: mmap: increase sockets maximum memory size pgoff for 32bits Subsystem: madvise Mike Rapoport <rppt@linux.ibm.com>: mm/madvise: reduce code duplication in error handling paths Subsystem: shmem Miles Chen <miles.chen@mediatek.com>: shmem: fix obsolete comment in shmem_getpage_gfp() Subsystem: zswap Hui Zhu <teawaterz@linux.alibaba.com>: zpool: add malloc_support_movable to zpool_driver zswap: use movable memory if zpool support allocate movable memory Vitaly Wool <vitalywool@gmail.com>: zswap: do not map same object twice Subsystem: zsmalloc Qian Cai <cai@lca.pw>: mm/zsmalloc.c: fix a -Wunused-function warning Documentation/ABI/testing/sysfs-kernel-slab | 13 Documentation/admin-guide/cgroup-v1/memory.rst | 4 Documentation/admin-guide/kernel-parameters.txt | 2 arch/Kconfig | 11 arch/alpha/include/asm/pgalloc.h | 2 arch/alpha/include/asm/pgtable.h | 5 arch/arc/include/asm/pgalloc.h | 1 arch/arc/include/asm/pgtable.h | 5 arch/arm/Kconfig | 1 arch/arm/include/asm/pgalloc.h | 2 arch/arm/include/asm/pgtable-nommu.h | 5 arch/arm/include/asm/pgtable.h | 2 arch/arm/include/asm/processor.h | 2 arch/arm/kernel/process.c | 5 arch/arm/mm/flush.c | 7 arch/arm/mm/mmap.c | 80 ----- arch/arm64/Kconfig | 2 arch/arm64/include/asm/pgalloc.h | 2 arch/arm64/include/asm/pgtable.h | 2 arch/arm64/include/asm/processor.h | 2 arch/arm64/kernel/process.c | 8 arch/arm64/mm/flush.c | 3 arch/arm64/mm/mmap.c | 84 ----- arch/arm64/mm/pgd.c | 2 arch/c6x/include/asm/pgtable.h | 5 arch/csky/include/asm/pgalloc.h | 2 arch/csky/include/asm/pgtable.h | 5 arch/h8300/include/asm/pgtable.h | 6 arch/hexagon/include/asm/pgalloc.h | 2 arch/hexagon/include/asm/pgtable.h | 3 arch/hexagon/mm/Makefile | 2 arch/hexagon/mm/pgalloc.c | 10 arch/ia64/Kconfig | 4 arch/ia64/include/asm/pgalloc.h | 64 ---- arch/ia64/include/asm/pgtable.h | 5 arch/ia64/mm/init.c | 2 arch/m68k/include/asm/pgtable_mm.h | 7 arch/m68k/include/asm/pgtable_no.h | 7 arch/microblaze/include/asm/pgalloc.h | 128 -------- arch/microblaze/include/asm/pgtable.h | 7 arch/microblaze/mm/pgtable.c | 4 arch/mips/Kconfig | 2 arch/mips/include/asm/pgalloc.h | 2 arch/mips/include/asm/pgtable.h | 5 arch/mips/include/asm/processor.h | 5 arch/mips/mm/mmap.c | 124 +------- arch/nds32/include/asm/pgalloc.h | 2 arch/nds32/include/asm/pgtable.h | 2 arch/nios2/include/asm/pgalloc.h | 2 arch/nios2/include/asm/pgtable.h | 2 arch/openrisc/include/asm/pgalloc.h | 2 arch/openrisc/include/asm/pgtable.h | 5 arch/parisc/include/asm/pgalloc.h | 2 arch/parisc/include/asm/pgtable.h | 2 arch/powerpc/include/asm/pgalloc.h | 2 arch/powerpc/include/asm/pgtable.h | 1 arch/powerpc/mm/book3s64/hash_utils.c | 2 arch/powerpc/mm/book3s64/iommu_api.c | 7 arch/powerpc/mm/hugetlbpage.c | 2 arch/riscv/Kconfig | 12 arch/riscv/include/asm/pgalloc.h | 4 arch/riscv/include/asm/pgtable.h | 5 arch/s390/include/asm/pgtable.h | 6 arch/sh/include/asm/pgalloc.h | 56 --- arch/sh/include/asm/pgtable.h | 5 arch/sh/mm/Kconfig | 3 arch/sh/mm/nommu.c | 4 arch/sparc/include/asm/pgalloc_32.h | 2 arch/sparc/include/asm/pgalloc_64.h | 2 arch/sparc/include/asm/pgtable_32.h | 5 arch/sparc/include/asm/pgtable_64.h | 1 arch/sparc/mm/init_32.c | 1 arch/um/include/asm/pgalloc.h | 2 arch/um/include/asm/pgtable.h | 2 arch/unicore32/include/asm/pgalloc.h | 2 arch/unicore32/include/asm/pgtable.h | 2 arch/x86/include/asm/pgtable_32.h | 2 arch/x86/include/asm/pgtable_64.h | 3 arch/x86/mm/pgtable.c | 6 arch/xtensa/include/asm/pgtable.h | 1 arch/xtensa/include/asm/tlbflush.h | 3 drivers/base/memory.c | 44 +- drivers/base/node.c | 55 +-- drivers/crypto/chelsio/chtls/chtls_io.c | 5 drivers/gpu/drm/via/via_dmablit.c | 10 drivers/infiniband/core/umem.c | 5 drivers/infiniband/hw/hfi1/user_pages.c | 5 drivers/infiniband/hw/qib/qib_user_pages.c | 5 drivers/infiniband/hw/usnic/usnic_uiom.c | 5 drivers/infiniband/sw/siw/siw_mem.c | 10 drivers/staging/android/ion/ion_system_heap.c | 4 drivers/target/tcm_fc/tfc_io.c | 3 drivers/vfio/vfio_iommu_spapr_tce.c | 8 fs/binfmt_elf.c | 20 - fs/fat/dir.c | 13 fs/fat/fatent.c | 3 fs/inode.c | 3 fs/io_uring.c | 2 fs/jbd2/journal.c | 2 fs/jbd2/transaction.c | 12 fs/ocfs2/alloc.c | 20 + fs/ocfs2/aops.c | 13 fs/ocfs2/blockcheck.c | 26 - fs/ocfs2/cluster/heartbeat.c | 109 +------ fs/ocfs2/dir.c | 3 fs/ocfs2/dlm/dlmcommon.h | 1 fs/ocfs2/dlm/dlmdebug.c | 55 --- fs/ocfs2/dlm/dlmdebug.h | 16 - fs/ocfs2/dlm/dlmdomain.c | 7 fs/ocfs2/dlm/dlmunlock.c | 23 + fs/ocfs2/dlmglue.c | 29 - fs/ocfs2/extent_map.c | 3 fs/ocfs2/file.c | 13 fs/ocfs2/inode.c | 2 fs/ocfs2/journal.h | 42 -- fs/ocfs2/namei.c | 2 fs/ocfs2/ocfs2.h | 3 fs/ocfs2/super.c | 10 fs/open.c | 8 fs/proc/meminfo.c | 8 fs/proc/task_mmu.c | 6 include/asm-generic/pgalloc.h | 5 include/asm-generic/pgtable.h | 7 include/linux/compaction.h | 22 + include/linux/fs.h | 32 ++ include/linux/huge_mm.h | 9 include/linux/hugetlb.h | 2 include/linux/jbd2.h | 2 include/linux/khugepaged.h | 12 include/linux/memcontrol.h | 23 - include/linux/memory.h | 7 include/linux/memory_hotplug.h | 1 include/linux/mm.h | 37 ++ include/linux/mm_types.h | 1 include/linux/mmzone.h | 14 include/linux/page_ext.h | 1 include/linux/pagemap.h | 10 include/linux/quicklist.h | 94 ------ include/linux/shrinker.h | 7 include/linux/slab.h | 62 ---- include/linux/vmalloc.h | 20 - include/linux/zpool.h | 3 init/main.c | 6 kernel/events/uprobes.c | 81 ++++- kernel/resource.c | 4 kernel/sched/idle.c | 1 kernel/sysctl.c | 6 lib/Kconfig.debug | 15 lib/Kconfig.kasan | 8 lib/iov_iter.c | 2 lib/show_mem.c | 5 lib/test_kasan.c | 41 ++ mm/Kconfig | 16 - mm/Kconfig.debug | 4 mm/Makefile | 4 mm/compaction.c | 50 +-- mm/filemap.c | 168 ++++------ mm/gup.c | 125 +++----- mm/huge_memory.c | 129 ++++++-- mm/hugetlb.c | 89 +++++ mm/hugetlb_cgroup.c | 2 mm/init-mm.c | 2 mm/kasan/common.c | 32 +- mm/kasan/kasan.h | 14 mm/kasan/report.c | 44 ++ mm/kasan/tags_report.c | 24 + mm/khugepaged.c | 372 ++++++++++++++++++++---- mm/kmemleak.c | 338 +++++---------------- mm/ksm.c | 18 - mm/madvise.c | 52 +-- mm/memcontrol.c | 188 ++++++++++-- mm/memfd.c | 2 mm/memory.c | 21 + mm/memory_hotplug.c | 120 ++++--- mm/mempolicy.c | 4 mm/memremap.c | 5 mm/migrate.c | 13 mm/mmap.c | 12 mm/mmu_gather.c | 2 mm/nommu.c | 2 mm/oom_kill.c | 30 + mm/page_alloc.c | 27 + mm/page_owner.c | 127 +++++--- mm/page_poison.c | 2 mm/page_vma_mapped.c | 3 mm/quicklist.c | 103 ------ mm/rmap.c | 25 - mm/shmem.c | 12 mm/slab.h | 64 ++++ mm/slab_common.c | 37 ++ mm/slob.c | 2 mm/slub.c | 22 - mm/sparse.c | 25 + mm/swap.c | 16 - mm/swap_state.c | 6 mm/util.c | 126 +++++++- mm/vmalloc.c | 84 +++-- mm/vmscan.c | 163 ++++------ mm/vmstat.c | 2 mm/z3fold.c | 154 ++------- mm/zpool.c | 16 + mm/zsmalloc.c | 23 - mm/zswap.c | 15 net/xdp/xdp_umem.c | 9 net/xdp/xsk.c | 2 usr/Makefile | 3 206 files changed, 2385 insertions(+), 2533 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2019-09-23 22:31 incoming Andrew Morton @ 2019-09-24 0:55 ` Linus Torvalds 2019-09-24 4:31 ` incoming Andrew Morton 0 siblings, 1 reply; 370+ messages in thread From: Linus Torvalds @ 2019-09-24 0:55 UTC (permalink / raw) To: Andrew Morton, David Rientjes, Vlastimil Babka, Michal Hocko, Andrea Arcangeli Cc: mm-commits, Linux-MM On Mon, Sep 23, 2019 at 3:31 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > - almost all of -mm, as below. I was hoping that we could at least test the THP locality thing? Is it in your queue at all, or am I supposed to just do it myself? Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2019-09-24 0:55 ` incoming Linus Torvalds @ 2019-09-24 4:31 ` Andrew Morton 2019-09-24 7:48 ` incoming Michal Hocko 0 siblings, 1 reply; 370+ messages in thread From: Andrew Morton @ 2019-09-24 4:31 UTC (permalink / raw) To: Linus Torvalds Cc: David Rientjes, Vlastimil Babka, Michal Hocko, Andrea Arcangeli, mm-commits, Linux-MM On Mon, 23 Sep 2019 17:55:24 -0700 Linus Torvalds <torvalds@linux-foundation.org> wrote: > On Mon, Sep 23, 2019 at 3:31 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > > > - almost all of -mm, as below. > > I was hoping that we could at least test the THP locality thing? Is it > in your queue at all, or am I supposed to just do it myself? > Confused. I saw a privately emailed patch from David which nobody seems to have tested yet. I parked that for consideration after -rc1. Or are you referring to something else? This thing keeps stalling. It would be nice to push this along and get something nailed down which we can at least get into 5.4-rc, perhaps with a backport-this tag? ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2019-09-24 4:31 ` incoming Andrew Morton @ 2019-09-24 7:48 ` Michal Hocko 2019-09-24 15:34 ` incoming Linus Torvalds 2019-09-24 19:55 ` incoming Vlastimil Babka 0 siblings, 2 replies; 370+ messages in thread From: Michal Hocko @ 2019-09-24 7:48 UTC (permalink / raw) To: Andrew Morton Cc: Linus Torvalds, David Rientjes, Vlastimil Babka, Andrea Arcangeli, mm-commits, Linux-MM On Mon 23-09-19 21:31:53, Andrew Morton wrote: > On Mon, 23 Sep 2019 17:55:24 -0700 Linus Torvalds <torvalds@linux-foundation.org> wrote: > > > On Mon, Sep 23, 2019 at 3:31 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > > > > > - almost all of -mm, as below. > > > > I was hoping that we could at least test the THP locality thing? Is it > > in your queue at all, or am I supposed to just do it myself? > > > > Confused. I saw a privately emailed patch from David which nobody > seems to have tested yet. I parked that for consideration after -rc1. > Or are you referring to something else? > > This thing keeps stalling. It would be nice to push this along and get > something nailed down which we can at least get into 5.4-rc, perhaps > with a backport-this tag? The patch proposed by David is really non trivial wrt. potential side effects. I have provided my review feedback [1] and it didn't get any reaction. I really believe that we need to debug this properly. A reproducer would be useful for others to work on that. There is a more fundamental problem here and we need to address it rather than to duck tape it and whack a mole afterwards. [1] http://lkml.kernel.org/r/20190909193020.GD2063@dhcp22.suse.cz -- Michal Hocko SUSE Labs ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2019-09-24 7:48 ` incoming Michal Hocko @ 2019-09-24 15:34 ` Linus Torvalds 2019-09-25 6:36 ` incoming Michal Hocko 2019-09-24 19:55 ` incoming Vlastimil Babka 1 sibling, 1 reply; 370+ messages in thread From: Linus Torvalds @ 2019-09-24 15:34 UTC (permalink / raw) To: Michal Hocko Cc: Andrew Morton, David Rientjes, Vlastimil Babka, Andrea Arcangeli, mm-commits, Linux-MM On Tue, Sep 24, 2019 at 12:48 AM Michal Hocko <mhocko@kernel.org> wrote: > > The patch proposed by David is really non trivial wrt. potential side > effects. The thing is, that's not an argument when we know that the current state is garbage and has a lot of these non-trivial side effects that are bad. So the patch by David _fixes_ a non-trivial bad side effect. You can't then say "there may be other non-trivial side effects that I don't even know about" as an argument for saying it's bad. David at least has numbers and an argument for his patch. Linus ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2019-09-24 15:34 ` incoming Linus Torvalds @ 2019-09-25 6:36 ` Michal Hocko 0 siblings, 0 replies; 370+ messages in thread From: Michal Hocko @ 2019-09-25 6:36 UTC (permalink / raw) To: Linus Torvalds Cc: Andrew Morton, David Rientjes, Vlastimil Babka, Andrea Arcangeli, mm-commits, Linux-MM On Tue 24-09-19 08:34:20, Linus Torvalds wrote: > On Tue, Sep 24, 2019 at 12:48 AM Michal Hocko <mhocko@kernel.org> wrote: > > > > The patch proposed by David is really non trivial wrt. potential side > > effects. > > The thing is, that's not an argument when we know that the current > state is garbage and has a lot of these non-trivial side effects that > are bad. > > So the patch by David _fixes_ a non-trivial bad side effect. > > You can't then say "there may be other non-trivial side effects that I > don't even know about" as an argument for saying it's bad. David at > least has numbers and an argument for his patch. All I am saying is that I am not able to wrap my head around this patch to provide a competent Ack. I also believe that the fix is targetting a wrong layer of the problem as explained in my review feedback. Appart from reclaim/compaction interaction mentioned by Vlastimil, it seems that it is an overly eager fallback to a remote node in the fast path that is causing a large part of the problem as well. Kcompactd is not eager enough to keep high order allocations ready for the fast path. This is not specific to THP we have many other high order allocations which are going to follow the same pattern, likely not visible in any counters but still having performance implications. Let's discuss technical details in the respective email thread -- Michal Hocko SUSE Labs ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2019-09-24 7:48 ` incoming Michal Hocko 2019-09-24 15:34 ` incoming Linus Torvalds @ 2019-09-24 19:55 ` Vlastimil Babka 1 sibling, 0 replies; 370+ messages in thread From: Vlastimil Babka @ 2019-09-24 19:55 UTC (permalink / raw) To: Michal Hocko, Andrew Morton Cc: Linus Torvalds, David Rientjes, Andrea Arcangeli, mm-commits, Linux-MM On 9/24/19 9:48 AM, Michal Hocko wrote: > On Mon 23-09-19 21:31:53, Andrew Morton wrote: >> On Mon, 23 Sep 2019 17:55:24 -0700 Linus Torvalds >> <torvalds@linux-foundation.org> wrote: >> >>> On Mon, Sep 23, 2019 at 3:31 PM Andrew Morton >>> <akpm@linux-foundation.org> wrote: >>>> >>>> - almost all of -mm, as below. >>> >>> I was hoping that we could at least test the THP locality thing? >>> Is it in your queue at all, or am I supposed to just do it >>> myself? >>> >> >> Confused. I saw a privately emailed patch from David which nobody >> seems to have tested yet. I parked that for consideration after >> -rc1. Or are you referring to something else? >> >> This thing keeps stalling. It would be nice to push this along and >> get something nailed down which we can at least get into 5.4-rc, >> perhaps with a backport-this tag? > > The patch proposed by David is really non trivial wrt. potential > side effects. I have provided my review feedback [1] and it didn't > get any reaction. I really believe that we need to debug this > properly. A reproducer would be useful for others to work on that. > > There is a more fundamental problem here and we need to address it > rather than to duck tape it and whack a mole afterwards. I believe we found a problem when investigating over-reclaim in this thread [1] where it seems madvised THP allocation attempt can result in 4MB reclaimed, if there is a small zone such as ZONE_DMA on the node. As it happens, the patch "[patch 090/134] mm, reclaim: make should_continue_reclaim perform dryrun detection" in Andrew's pile should change this 4MB to 32 pages reclaimed (as a side-effect), but that has to be tested. I'm also working on a patch to not reclaim even those few pages. Of course there might be more fundamental issues with reclaim/compaction interaction, but this one seems to become hopefully clear now. [1] https://lore.kernel.org/linux-mm/4b4ba042-3741-7b16-2292-198c569da2aa@profihost.ag/ > [1] http://lkml.kernel.org/r/20190909193020.GD2063@dhcp22.suse.cz > ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2019-08-30 23:04 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2019-08-30 23:04 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 7 fixes, based on 846d2db3e00048da3f650e0cfb0b8d67669cec3e: Roman Gushchin <guro@fb.com>: mm: memcontrol: flush percpu slab vmstats on kmem offlining Andrew Morton <akpm@linux-foundation.org>: mm/zsmalloc.c: fix build when CONFIG_COMPACTION=n Roman Gushchin <guro@fb.com>: mm, memcg: partially revert "mm/memcontrol.c: keep local VM counters in sync with the hierarchical ones" "Gustavo A. R. Silva" <gustavo@embeddedor.com>: mm/z3fold.c: fix lock/unlock imbalance in z3fold_page_isolate Dmitry Safonov <dima@arista.com>: mailmap: add aliases for Dmitry Safonov Michal Hocko <mhocko@suse.com>: mm, memcg: do not set reclaim_state on soft limit reclaim Shakeel Butt <shakeelb@google.com>: mm: memcontrol: fix percpu vmstats and vmevents flush .mailmap | 3 ++ include/linux/mmzone.h | 5 ++-- mm/memcontrol.c | 53 ++++++++++++++++++++++++++++++++----------------- mm/vmscan.c | 5 ++-- mm/z3fold.c | 1 mm/zsmalloc.c | 2 + 6 files changed, 47 insertions(+), 22 deletions(-) ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2019-08-25 0:54 Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2019-08-25 0:54 UTC (permalink / raw) To: Linus Torvalds; +Cc: mm-commits, linux-mm 11 fixes, based on 361469211f876e67d7ca3d3d29e6d1c3e313d0f1: Henry Burns <henryburns@google.com>: mm/z3fold.c: fix race between migration and destruction David Rientjes <rientjes@google.com>: mm, page_alloc: move_freepages should not examine struct page of reserved memory Qian Cai <cai@lca.pw>: parisc: fix compilation errrors Roman Gushchin <guro@fb.com>: mm: memcontrol: flush percpu vmstats before releasing memcg mm: memcontrol: flush percpu vmevents before releasing memcg Jason Xing <kerneljasonxing@linux.alibaba.com>: psi: get poll_work to run when calling poll syscall next time Oleg Nesterov <oleg@redhat.com>: userfaultfd_release: always remove uffd flags and clear vm_userfaultfd_ctx Vlastimil Babka <vbabka@suse.cz>: mm, page_owner: handle THP splits correctly Henry Burns <henryburns@google.com>: mm/zsmalloc.c: migration can leave pages in ZS_EMPTY indefinitely mm/zsmalloc.c: fix race condition in zs_destroy_pool Andrey Ryabinin <aryabinin@virtuozzo.com>: mm/kasan: fix false positive invalid-free reports with CONFIG_KASAN_SW_TAGS=y ^ permalink raw reply [flat|nested] 370+ messages in thread
[parent not found: <20190716162536.bb52b8f34a8ecf5331a86a42@linux-foundation.org>]
* Re: incoming [not found] <20190716162536.bb52b8f34a8ecf5331a86a42@linux-foundation.org> @ 2019-07-17 8:47 ` Vlastimil Babka 2019-07-17 8:57 ` incoming Bhaskar Chowdhury 2019-07-17 16:13 ` incoming Linus Torvalds 0 siblings, 2 replies; 370+ messages in thread From: Vlastimil Babka @ 2019-07-17 8:47 UTC (permalink / raw) To: linux-kernel, Linus Torvalds Cc: linux-mm, Jonathan Corbet, Thorsten Leemhuis, LKML On 7/17/19 1:25 AM, Andrew Morton wrote: > > Most of the rest of MM and just about all of the rest of everything > else. Hi, as I've mentioned at LSF/MM [1], I think it would be nice if mm pull requests had summaries similar to other subsystems. I see they are now more structured (thanks!), but they are now probably hitting the limit of what scripting can do to produce a high-level summary for human readers (unless patch authors themselves provide a blurb that can be extracted later?). So I've tried now to provide an example what I had in mind, below. Maybe it's too concise - if there were "larger" features in this pull request, they would probably benefit from more details. I'm CCing the known (to me) consumers of these mails to judge :) Note I've only covered mm, and core stuff that I think will be interesting to wide audience (change in LIST_POISON2 value? I'm sure as hell glad to know about that one :) Feel free to include this in the merge commit, if you find it useful. Thanks, Vlastimil [1] https://lwn.net/Articles/787705/ ----- - z3fold fixes and enhancements by Henry Burns and Vitaly Wool - more accurate reclaimed slab caches calculations by Yafang Shao - fix MAP_UNINITIALIZED UAPI symbol to not depend on config, by Christoph Hellwig - !CONFIG_MMU fixes by Christoph Hellwig - new novmcoredd parameter to omit device dumps from vmcore, by Kairui Song - new test_meminit module for testing heap and pagealloc initialization, by Alexander Potapenko - ioremap improvements for huge mappings, by Anshuman Khandual - generalize kprobe page fault handling, by Anshuman Khandual - device-dax hotplug fixes and improvements, by Pavel Tatashin - enable synchronous DAX fault on powerpc, by Aneesh Kumar K.V - add pte_devmap() support for arm64, by Robin Murphy - unify locked_vm accounting with a helper, by Daniel Jordan - several misc fixes core/lib - new typeof_member() macro including some users, by Alexey Dobriyan - make BIT() and GENMASK() available in asm, by Masahiro Yamada - changed LIST_POISON2 on x86_64 to 0xdead000000000122 for better code generation, by Alexey Dobriyan - rbtree code size optimizations, by Michel Lespinasse - convert struct pid count to refcount_t, by Joel Fernandes get_maintainer.pl - add --no-moderated switch to skip moderated ML's, by Joe Perches ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2019-07-17 8:47 ` incoming Vlastimil Babka @ 2019-07-17 8:57 ` Bhaskar Chowdhury 2019-07-17 16:13 ` incoming Linus Torvalds 1 sibling, 0 replies; 370+ messages in thread From: Bhaskar Chowdhury @ 2019-07-17 8:57 UTC (permalink / raw) To: Vlastimil Babka Cc: linux-kernel, Linus Torvalds, linux-mm, Jonathan Corbet, Thorsten Leemhuis [-- Attachment #1: Type: text/plain, Size: 2496 bytes --] Cool !! On 10:47 Wed 17 Jul , Vlastimil Babka wrote: >On 7/17/19 1:25 AM, Andrew Morton wrote: >> >> Most of the rest of MM and just about all of the rest of everything >> else. > >Hi, > >as I've mentioned at LSF/MM [1], I think it would be nice if mm pull >requests had summaries similar to other subsystems. I see they are now >more structured (thanks!), but they are now probably hitting the limit >of what scripting can do to produce a high-level summary for human >readers (unless patch authors themselves provide a blurb that can be >extracted later?). > >So I've tried now to provide an example what I had in mind, below. Maybe >it's too concise - if there were "larger" features in this pull request, >they would probably benefit from more details. I'm CCing the known (to >me) consumers of these mails to judge :) Note I've only covered mm, and >core stuff that I think will be interesting to wide audience (change in >LIST_POISON2 value? I'm sure as hell glad to know about that one :) > >Feel free to include this in the merge commit, if you find it useful. > >Thanks, >Vlastimil > >[1] https://lwn.net/Articles/787705/ > >----- > >- z3fold fixes and enhancements by Henry Burns and Vitaly Wool >- more accurate reclaimed slab caches calculations by Yafang Shao >- fix MAP_UNINITIALIZED UAPI symbol to not depend on config, by >Christoph Hellwig >- !CONFIG_MMU fixes by Christoph Hellwig >- new novmcoredd parameter to omit device dumps from vmcore, by Kairui Song >- new test_meminit module for testing heap and pagealloc initialization, >by Alexander Potapenko >- ioremap improvements for huge mappings, by Anshuman Khandual >- generalize kprobe page fault handling, by Anshuman Khandual >- device-dax hotplug fixes and improvements, by Pavel Tatashin >- enable synchronous DAX fault on powerpc, by Aneesh Kumar K.V >- add pte_devmap() support for arm64, by Robin Murphy >- unify locked_vm accounting with a helper, by Daniel Jordan >- several misc fixes > >core/lib >- new typeof_member() macro including some users, by Alexey Dobriyan >- make BIT() and GENMASK() available in asm, by Masahiro Yamada >- changed LIST_POISON2 on x86_64 to 0xdead000000000122 for better code >generation, by Alexey Dobriyan >- rbtree code size optimizations, by Michel Lespinasse >- convert struct pid count to refcount_t, by Joel Fernandes > >get_maintainer.pl >- add --no-moderated switch to skip moderated ML's, by Joe Perches > > [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2019-07-17 8:47 ` incoming Vlastimil Babka 2019-07-17 8:57 ` incoming Bhaskar Chowdhury @ 2019-07-17 16:13 ` Linus Torvalds 2019-07-17 17:09 ` incoming Christian Brauner 2019-07-17 18:13 ` incoming Vlastimil Babka 1 sibling, 2 replies; 370+ messages in thread From: Linus Torvalds @ 2019-07-17 16:13 UTC (permalink / raw) To: Vlastimil Babka Cc: Linux List Kernel Mailing, linux-mm, Jonathan Corbet, Thorsten Leemhuis On Wed, Jul 17, 2019 at 1:47 AM Vlastimil Babka <vbabka@suse.cz> wrote: > > So I've tried now to provide an example what I had in mind, below. I'll take it as a trial. I added one-line notes about coda and the PTRACE_GET_SYSCALL_INFO interface too. I do hope that eventually I'll just get pull requests, and they'll have more of a "theme" than this all (*) Linus (*) Although in many ways, the theme for Andrew is "falls through the cracks otherwise" so I'm not really complaining. This has been working for years and years. ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2019-07-17 16:13 ` incoming Linus Torvalds @ 2019-07-17 17:09 ` Christian Brauner 2019-07-17 18:13 ` incoming Vlastimil Babka 1 sibling, 0 replies; 370+ messages in thread From: Christian Brauner @ 2019-07-17 17:09 UTC (permalink / raw) To: Linus Torvalds Cc: Vlastimil Babka, Linux List Kernel Mailing, linux-mm, Jonathan Corbet, Thorsten Leemhuis On Wed, Jul 17, 2019 at 09:13:26AM -0700, Linus Torvalds wrote: > On Wed, Jul 17, 2019 at 1:47 AM Vlastimil Babka <vbabka@suse.cz> wrote: > > > > So I've tried now to provide an example what I had in mind, below. > > I'll take it as a trial. I added one-line notes about coda and the > PTRACE_GET_SYSCALL_INFO interface too. > > I do hope that eventually I'll just get pull requests, and they'll > have more of a "theme" than this all (*) > > Linus > > (*) Although in many ways, the theme for Andrew is "falls through the > cracks otherwise" so I'm not really complaining. This has been working I put all pid{fd}/clone{3} which is mostly related to pid.c, exit.c, fork.c into my tree and try to give it a consistent theme for the prs I sent. And that at least from my perspective that worked and was pretty easy to coordinate with Andrew. That should hopefully make it a little easier to theme the -mm tree overall going forward. ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2019-07-17 16:13 ` incoming Linus Torvalds 2019-07-17 17:09 ` incoming Christian Brauner @ 2019-07-17 18:13 ` Vlastimil Babka 1 sibling, 0 replies; 370+ messages in thread From: Vlastimil Babka @ 2019-07-17 18:13 UTC (permalink / raw) To: Linus Torvalds Cc: Linux List Kernel Mailing, linux-mm, Jonathan Corbet, Thorsten Leemhuis On 7/17/19 6:13 PM, Linus Torvalds wrote: > On Wed, Jul 17, 2019 at 1:47 AM Vlastimil Babka <vbabka@suse.cz> wrote: >> >> So I've tried now to provide an example what I had in mind, below. > > I'll take it as a trial. I added one-line notes about coda and the > PTRACE_GET_SYSCALL_INFO interface too. Thanks. > I do hope that eventually I'll just get pull requests, Very much agree, that was also discussed at length in the LSF/MM mm process session I've linked. > and they'll > have more of a "theme" than this all (*) I'll check if the first patch bomb would be more amenable to that, as I plan to fill in the mm part for 5.3 on LinuxChanges wiki, but for a merge commit it's too late. > Linus > > (*) Although in many ways, the theme for Andrew is "falls through the > cracks otherwise" so I'm not really complaining. This has been working > for years and years. Nevermind the misc stuff that much, but I think mm itself is more important and deserves what other subsystems have. ^ permalink raw reply [flat|nested] 370+ messages in thread
* incoming @ 2007-05-02 22:02 Andrew Morton 2007-05-02 22:31 ` incoming Benjamin Herrenschmidt ` (2 more replies) 0 siblings, 3 replies; 370+ messages in thread From: Andrew Morton @ 2007-05-02 22:02 UTC (permalink / raw) To: Linus Torvalds Cc: Hugh Dickins, Christoph Lameter, David S. Miller, Andi Kleen, Luck, Tony, Rik van Riel, Benjamin Herrenschmidt, linux-kernel, linux-mm So this is what I have lined up for the first mm->2.6.22 batch. I won't be sending it off for another 12-24 hours yet. To give people time for final comment and to give me time to see if it actually works. - A few serial bits. - A few pcmcia bits. - Some of the MM queue. Includes: - An enhancement to /proc/pid/smaps to permit monitoring of a running program's working set. There's another patchset which builds on this quite a lot from Matt Mackall, but it's not quite ready yet. - The SLUB allocator. It's pretty green but I do want to push ahead with this pretty aggressively with a view to replacing slab altogether. If it ends up not working out then we should remove slub altogether again, but I doubt if that will occur. If SLUB isn't in good shape by 2.6.22 we should hide it in Kconfig to prevent people from hitting known problems. It'll remain EXPERIMENTAL. - generic pagetable quicklist management. We have x86_64 and ia64 and sparc64 implementations, but I'll only include David's sparc64 implementation here. I'll send the x86_64 and ia64 implementations through maintainers. - Various random MM bits - Benh's teach-get_unmapped_area-about-MAP_FIXED changes - madvise(MADV_FREE) This means I'm holding back Mel's page allocator work, and Andy's lumpy-reclaim. A shame in a way - I have high hopes for lumpy reclaim against the moveable zone, but these things are not to be done lightly. A few MM things have been held back awaiting subsystem tree merges (probably x86 - I didn't check). - One little security patch - the blackfin architecture - small h8300 update - small alpha update - swsusp updates - m68k bits - cris udpates - Lots of UML updates - v850, xtensa slab-introduce-krealloc.patch at91_cf-minor-fix.patch add-new_id-to-pcmcia-drivers.patch ide-cs-recognize-2gb-compactflash-from-transcend.patch serial-driver-pmc-msp71xx.patch rm9000-serial-driver.patch serial-define-fixed_port-flag-for-serial_core.patch serial-use-resource_size_t-for-serial-port-io-addresses.patch mpsc-serial-driver-tx-locking.patch 8250_pci-fix-pci-must_checks.patch serial-serial_core-use-pr_debug.patch add-apply_to_page_range-which-applies-a-function-to-a-pte-range.patch safer-nr_node_ids-and-nr_node_ids-determination-and-initial.patch use-zvc-counters-to-establish-exact-size-of-dirtyable-pages.patch proper-prototype-for-hugetlb_get_unmapped_area.patch mm-remove-gcc-workaround.patch slab-ensure-cache_alloc_refill-terminates.patch mm-make-read_cache_page-synchronous.patch fs-buffer-dont-pageuptodate-without-page-locked.patch allow-oom_adj-of-saintly-processes.patch introduce-config_has_dma.patch mm-slabc-proper-prototypes.patch add-pfn_valid_within-helper-for-sub-max_order-hole-detection.patch mm-simplify-filemap_nopage.patch add-unitialized_var-macro-for-suppressing-gcc-warnings.patch i386-add-ptep_test_and_clear_dirtyyoung.patch i386-use-pte_update_defer-in-ptep_test_and_clear_dirtyyoung.patch smaps-extract-pmd-walker-from-smaps-code.patch smaps-add-pages-referenced-count-to-smaps.patch smaps-add-clear_refs-file-to-clear-reference.patch readahead-improve-heuristic-detecting-sequential-reads.patch readahead-code-cleanup.patch slab-use-num_possible_cpus-in-enable_cpucache.patch slab-dont-allocate-empty-shared-caches.patch slab-numa-kmem_cache-diet.patch do-not-disable-interrupts-when-reading-min_free_kbytes.patch slab-mark-set_up_list3s-__init.patch cpusets-allow-tif_memdie-threads-to-allocate-anywhere.patch i386-use-page-allocator-to-allocate-thread_info-structure.patch slub-core.patch make-page-private-usable-in-compound-pages-v1.patch optimize-compound_head-by-avoiding-a-shared-page.patch add-virt_to_head_page-and-consolidate-code-in-slab-and-slub.patch slub-fix-object-tracking.patch slub-enable-tracking-of-full-slabs.patch slub-validation-of-slabs-metadata-and-guard-zones.patch slub-add-min_partial.patch slub-add-ability-to-list-alloc--free-callers-per-slab.patch slub-free-slabs-and-sort-partial-slab-lists-in-kmem_cache_shrink.patch slub-remove-object-activities-out-of-checking-functions.patch slub-user-documentation.patch slub-add-slabinfo-tool.patch quicklists-for-page-table-pages.patch quicklist-support-for-sparc64.patch slob-handle-slab_panic-flag.patch include-kern_-constant-in-printk-calls-in-mm-slabc.patch mm-madvise-avoid-exclusive-mmap_sem.patch mm-remove-destroy_dirty_buffers-from-invalidate_bdev.patch mm-optimize-kill_bdev.patch mm-optimize-acorn-partition-truncate.patch slab-allocators-remove-obsolete-slab_must_hwcache_align.patch kmem_cache-simplify-slab-cache-creation.patch slab-allocators-remove-multiple-alignment-specifications.patch fault-injection-fix-failslab-with-config_numa.patch mm-fix-handling-of-panic_on_oom-when-cpusets-are-in-use.patch oom-fix-constraint-deadlock.patch get_unmapped_area-handles-map_fixed-on-powerpc.patch get_unmapped_area-handles-map_fixed-on-alpha.patch get_unmapped_area-handles-map_fixed-on-arm.patch get_unmapped_area-handles-map_fixed-on-frv.patch get_unmapped_area-handles-map_fixed-on-i386.patch get_unmapped_area-handles-map_fixed-on-ia64.patch get_unmapped_area-handles-map_fixed-on-parisc.patch get_unmapped_area-handles-map_fixed-on-sparc64.patch get_unmapped_area-handles-map_fixed-on-x86_64.patch get_unmapped_area-handles-map_fixed-in-hugetlbfs.patch get_unmapped_area-handles-map_fixed-in-generic-code.patch get_unmapped_area-doesnt-need-hugetlbfs-hacks-anymore.patch slab-allocators-remove-slab_debug_initial-flag.patch slab-allocators-remove-slab_ctor_atomic.patch slab-allocators-remove-useless-__gfp_no_grow-flag.patch lazy-freeing-of-memory-through-madv_free.patch restore-madv_dontneed-to-its-original-linux-behaviour.patch hugetlbfs-add-null-check-in-hugetlb_zero_setup.patch slob-fix-page-order-calculation-on-not-4kb-page.patch page-migration-only-migrate-pages-if-allocation-in-the-highest-zone-is-possible.patch return-eperm-not-echild-on-security_task_wait-failure.patch blackfin-arch.patch driver_bfin_serial_core.patch blackfin-on-chip-ethernet-mac-controller-driver.patch blackfin-patch-add-blackfin-support-in-smc91x.patch blackfin-on-chip-rtc-controller-driver.patch blackfin-blackfin-on-chip-spi-controller-driver.patch convert-h8-300-to-generic-timekeeping.patch h8300-generic-irq.patch h8300-add-zimage-support.patch round_up-macro-cleanup-in-arch-alpha-kernel-osf_sysc.patch alpha-fix-bootp-image-creation.patch alpha-prctl-macros.patch srmcons-fix-kmallocgfp_kernel-inside-spinlock.patch arm26-remove-useless-config-option-generic_bust_spinlock.patch fix-refrigerator-vs-thaw_process-race.patch swsusp-use-inline-functions-for-changing-page-flags.patch swsusp-do-not-use-page-flags.patch mm-remove-unused-page-flags.patch swsusp-fix-error-paths-in-snapshot_open.patch swsusp-use-gfp_kernel-for-creating-basic-data-structures.patch freezer-remove-pf_nofreeze-from-handle_initrd.patch swsusp-use-rbtree-for-tracking-allocated-swap.patch freezer-fix-racy-usage-of-try_to_freeze-in-kswapd.patch remove-software_suspend.patch power-management-change-sys-power-disk-display.patch kconfig-mentioneds-hibernation-not-just-swsusp.patch swsusp-fix-snapshot_release.patch swsusp-free-more-memory.patch remove-unused-header-file-arch-m68k-atari-atasoundh.patch spin_lock_unlocked-cleanup-in-arch-m68k.patch remove-unused-header-file-drivers-serial-crisv10h.patch cris-check-for-memory-allocation.patch cris-remove-code-related-to-pre-22-kernel.patch uml-delete-unused-code.patch uml-formatting-fixes.patch uml-host_info-tidying.patch uml-mark-tt-mode-code-for-future-removal.patch uml-print-coredump-limits.patch uml-handle-block-device-hotplug-errors.patch uml-driver-formatting-fixes.patch uml-driver-formatting-fixes-fix.patch uml-network-interface-hotplug-error-handling.patch array_size-check-for-type.patch uml-move-sigio-testing-to-sigioc.patch uml-create-archh.patch uml-create-as-layouth.patch uml-move-remaining-useful-contents-of-user_utilh.patch uml-remove-user_utilh.patch uml-add-missing-__init-declarations.patch remove-unused-header-file-arch-um-kernel-tt-include-mode_kern-tth.patch uml-improve-checking-and-diagnostics-of-ethernet-macs.patch uml-eliminate-temporary-buffer-in-eth_configure.patch uml-replace-one-element-array-with-zero-element-array.patch uml-fix-umid-in-xterm-titles.patch uml-speed-up-exec.patch uml-no-locking-needed-in-tlsc.patch uml-tidy-processc.patch uml-remove-page_size.patch uml-kernel_thread-shouldnt-panic.patch uml-tidy-fault-code.patch uml-kernel-segfaults-should-dump-proper-registers.patch uml-comment-early-boot-locking.patch uml-irq-locking-commentary.patch uml-delete-host_frame_size.patch uml-drivers-get-release-methods.patch uml-dump-registers-on-ptrace-or-wait-failure.patch uml-speed-up-page-table-walking.patch uml-remove-unused-x86_64-code.patch uml-start-fixing-os_read_file-and-os_write_file.patch uml-tidy-libc-code.patch uml-convert-libc-layer-to-call-read-and-write.patch uml-batch-i-o-requests.patch uml-send-pointers-instead-of-structures-to-i-o-thread.patch uml-send-pointers-instead-of-structures-to-i-o-thread-fix.patch uml-dump-core-on-panic.patch uml-dont-try-to-handle-signals-on-initial-process-stack.patch uml-change-remaining-callers-of-os_read_write_file.patch uml-formatting-fixes-around-os_read_write_file-callers.patch uml-remove-debugging-remnants.patch uml-rename-os_read_write_file_k-back-to-os_read_write_file.patch uml-aio-deadlock-avoidance.patch uml-speed-page-fault-path.patch uml-eliminate-a-piece-of-debugging-code.patch uml-more-page-fault-path-trimming.patch uml-only-flush-areas-covered-by-vma.patch uml-out-of-tmpfs-space-error-clarification.patch uml-virtualized-time-fix.patch uml-fix-prototypes.patch v850-generic-timekeeping-conversion.patch xtensa-strlcpy-is-smart-enough.patch -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2007-05-02 22:02 incoming Andrew Morton @ 2007-05-02 22:31 ` Benjamin Herrenschmidt 2007-05-03 7:55 ` incoming Russell King 2007-05-04 13:37 ` incoming Greg KH 2 siblings, 0 replies; 370+ messages in thread From: Benjamin Herrenschmidt @ 2007-05-02 22:31 UTC (permalink / raw) To: Andrew Morton Cc: Linus Torvalds, Hugh Dickins, Christoph Lameter, David S. Miller, Andi Kleen, Luck, Tony, Rik van Riel, linux-kernel, linux-mm On Wed, 2007-05-02 at 15:02 -0700, Andrew Morton wrote: > So this is what I have lined up for the first mm->2.6.22 batch. I won't be > sending it off for another 12-24 hours yet. To give people time for final > comment and to give me time to see if it actually works. Thanks. I have some powerpc bits that depend on that stuff that will go through Paulus after these show up in git and I've rebased. Cheers, Ben. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2007-05-02 22:02 incoming Andrew Morton 2007-05-02 22:31 ` incoming Benjamin Herrenschmidt @ 2007-05-03 7:55 ` Russell King 2007-05-03 8:05 ` incoming Andrew Morton 2007-05-04 13:37 ` incoming Greg KH 2 siblings, 1 reply; 370+ messages in thread From: Russell King @ 2007-05-03 7:55 UTC (permalink / raw) To: Andrew Morton Cc: Linus Torvalds, Hugh Dickins, Christoph Lameter, David S. Miller, Andi Kleen, Luck, Tony, Rik van Riel, Benjamin Herrenschmidt, linux-kernel, linux-mm On Wed, May 02, 2007 at 03:02:52PM -0700, Andrew Morton wrote: > So this is what I have lined up for the first mm->2.6.22 batch. I won't be > sending it off for another 12-24 hours yet. To give people time for final > comment and to give me time to see if it actually works. I assume you're going to update this list with my comments I sent yesterday? -- Russell King Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/ maintainer of: -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2007-05-03 7:55 ` incoming Russell King @ 2007-05-03 8:05 ` Andrew Morton 0 siblings, 0 replies; 370+ messages in thread From: Andrew Morton @ 2007-05-03 8:05 UTC (permalink / raw) To: Russell King Cc: Linus Torvalds, Hugh Dickins, Christoph Lameter, David S. Miller, Andi Kleen, Luck, Tony, Rik van Riel, Benjamin Herrenschmidt, linux-kernel, linux-mm On Thu, 3 May 2007 08:55:43 +0100 Russell King <rmk+lkml@arm.linux.org.uk> wrote: > On Wed, May 02, 2007 at 03:02:52PM -0700, Andrew Morton wrote: > > So this is what I have lined up for the first mm->2.6.22 batch. I won't be > > sending it off for another 12-24 hours yet. To give people time for final > > comment and to give me time to see if it actually works. > > I assume you're going to update this list with my comments I sent > yesterday? > Serial drivers? Well you saw me drop a bunch of them. I now have: serial-driver-pmc-msp71xx.patch rm9000-serial-driver.patch serial-define-fixed_port-flag-for-serial_core.patch mpsc-serial-driver-tx-locking.patch serial-serial_core-use-pr_debug.patch I'll also be holding off on MADV_FREE - Nick has some performance things to share and I'm assuming they're not as good as he'd like. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2007-05-02 22:02 incoming Andrew Morton 2007-05-02 22:31 ` incoming Benjamin Herrenschmidt 2007-05-03 7:55 ` incoming Russell King @ 2007-05-04 13:37 ` Greg KH 2007-05-04 16:14 ` incoming Andrew Morton 2 siblings, 1 reply; 370+ messages in thread From: Greg KH @ 2007-05-04 13:37 UTC (permalink / raw) To: Andrew Morton Cc: Linus Torvalds, Hugh Dickins, Christoph Lameter, David S. Miller, Andi Kleen, Luck, Tony, Rik van Riel, Benjamin Herrenschmidt, linux-kernel, linux-mm On Wed, May 02, 2007 at 03:02:52PM -0700, Andrew Morton wrote: > - One little security patch Care to cc: linux-stable with it so we can do a new 2.6.21 release with it if needed? thanks, greg k-h -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2007-05-04 13:37 ` incoming Greg KH @ 2007-05-04 16:14 ` Andrew Morton 2007-05-04 17:02 ` incoming Greg KH 2007-05-04 18:57 ` incoming Roland McGrath 0 siblings, 2 replies; 370+ messages in thread From: Andrew Morton @ 2007-05-04 16:14 UTC (permalink / raw) To: Greg KH Cc: Linus Torvalds, Hugh Dickins, Christoph Lameter, David S. Miller, Andi Kleen, Luck, Tony, Rik van Riel, Benjamin Herrenschmidt, linux-kernel, linux-mm, Roland McGrath, Stephen Smalley On Fri, 4 May 2007 06:37:28 -0700 Greg KH <greg@kroah.com> wrote: > On Wed, May 02, 2007 at 03:02:52PM -0700, Andrew Morton wrote: > > - One little security patch > > Care to cc: linux-stable with it so we can do a new 2.6.21 release with > it if needed? > Ah. The patch affects security code, but it doesn't actually address any insecurity. I didn't think it was needed for -stable? From: Roland McGrath <roland@redhat.com> wait* syscalls return -ECHILD even when an individual PID of a live child was requested explicitly, when security_task_wait denies the operation. This means that something like a broken SELinux policy can produce an unexpected failure that looks just like a bug with wait or ptrace or something. This patch makes do_wait return -EACCES (or other appropriate error returned from security_task_wait() instead of -ECHILD if some children were ruled out solely because security_task_wait failed. [jmorris@namei.org: switch error code to EACCES] Signed-off-by: Roland McGrath <roland@redhat.com> Cc: Stephen Smalley <sds@tycho.nsa.gov> Cc: Chris Wright <chrisw@sous-sol.org> Cc: James Morris <jmorris@namei.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- kernel/exit.c | 17 +++++++++++++++-- 1 files changed, 15 insertions(+), 2 deletions(-) diff -puN kernel/exit.c~return-eperm-not-echild-on-security_task_wait-failure kernel/exit.c --- a/kernel/exit.c~return-eperm-not-echild-on-security_task_wait-failure +++ a/kernel/exit.c @@ -1033,6 +1033,8 @@ asmlinkage void sys_exit_group(int error static int eligible_child(pid_t pid, int options, struct task_struct *p) { + int err; + if (pid > 0) { if (p->pid != pid) return 0; @@ -1066,8 +1068,9 @@ static int eligible_child(pid_t pid, int if (delay_group_leader(p)) return 2; - if (security_task_wait(p)) - return 0; + err = security_task_wait(p); + if (err) + return err; return 1; } @@ -1449,6 +1452,7 @@ static long do_wait(pid_t pid, int optio DECLARE_WAITQUEUE(wait, current); struct task_struct *tsk; int flag, retval; + int allowed, denied; add_wait_queue(¤t->signal->wait_chldexit,&wait); repeat: @@ -1457,6 +1461,7 @@ repeat: * match our criteria, even if we are not able to reap it yet. */ flag = 0; + allowed = denied = 0; current->state = TASK_INTERRUPTIBLE; read_lock(&tasklist_lock); tsk = current; @@ -1472,6 +1477,12 @@ repeat: if (!ret) continue; + if (unlikely(ret < 0)) { + denied = ret; + continue; + } + allowed = 1; + switch (p->state) { case TASK_TRACED: /* @@ -1570,6 +1581,8 @@ check_continued: goto repeat; } retval = -ECHILD; + if (unlikely(denied) && !allowed) + retval = denied; end: current->state = TASK_RUNNING; remove_wait_queue(¤t->signal->wait_chldexit,&wait); _ -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2007-05-04 16:14 ` incoming Andrew Morton @ 2007-05-04 17:02 ` Greg KH 2007-05-04 18:57 ` incoming Roland McGrath 1 sibling, 0 replies; 370+ messages in thread From: Greg KH @ 2007-05-04 17:02 UTC (permalink / raw) To: Andrew Morton Cc: Linus Torvalds, Hugh Dickins, Christoph Lameter, David S. Miller, Andi Kleen, Luck, Tony, Rik van Riel, Benjamin Herrenschmidt, linux-kernel, linux-mm, Roland McGrath, Stephen Smalley On Fri, May 04, 2007 at 09:14:34AM -0700, Andrew Morton wrote: > On Fri, 4 May 2007 06:37:28 -0700 Greg KH <greg@kroah.com> wrote: > > > On Wed, May 02, 2007 at 03:02:52PM -0700, Andrew Morton wrote: > > > - One little security patch > > > > Care to cc: linux-stable with it so we can do a new 2.6.21 release with > > it if needed? > > > > Ah. The patch affects security code, but it doesn't actually address any > insecurity. I didn't think it was needed for -stable? Ah, ok, I read "security" as fixing a insecure problem, my mistake :) thanks, greg k-h -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2007-05-04 16:14 ` incoming Andrew Morton 2007-05-04 17:02 ` incoming Greg KH @ 2007-05-04 18:57 ` Roland McGrath 2007-05-04 19:24 ` incoming Greg KH 1 sibling, 1 reply; 370+ messages in thread From: Roland McGrath @ 2007-05-04 18:57 UTC (permalink / raw) To: Andrew Morton Cc: Greg KH, Linus Torvalds, Hugh Dickins, Christoph Lameter, David S. Miller, Andi Kleen, Luck, Tony, Rik van Riel, Benjamin Herrenschmidt, linux-kernel, linux-mm, Stephen Smalley > Ah. The patch affects security code, but it doesn't actually address any > insecurity. I didn't think it was needed for -stable? I would not recommend it for -stable. It is an ABI change for the case of a security refusal. Thanks, Roland -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2007-05-04 18:57 ` incoming Roland McGrath @ 2007-05-04 19:24 ` Greg KH 2007-05-04 19:29 ` incoming Roland McGrath 0 siblings, 1 reply; 370+ messages in thread From: Greg KH @ 2007-05-04 19:24 UTC (permalink / raw) To: Roland McGrath Cc: Andrew Morton, Linus Torvalds, Hugh Dickins, Christoph Lameter, David S. Miller, Andi Kleen, Luck, Tony, Rik van Riel, Benjamin Herrenschmidt, linux-kernel, linux-mm, Stephen Smalley On Fri, May 04, 2007 at 11:57:21AM -0700, Roland McGrath wrote: > > Ah. The patch affects security code, but it doesn't actually address any > > insecurity. I didn't think it was needed for -stable? > > I would not recommend it for -stable. > It is an ABI change for the case of a security refusal. ABI changes are not a problem for -stable, so don't let that stop anyone :) thanks, greg k-h -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 370+ messages in thread
* Re: incoming 2007-05-04 19:24 ` incoming Greg KH @ 2007-05-04 19:29 ` Roland McGrath 0 siblings, 0 replies; 370+ messages in thread From: Roland McGrath @ 2007-05-04 19:29 UTC (permalink / raw) To: Greg KH Cc: Andrew Morton, Linus Torvalds, Hugh Dickins, Christoph Lameter, David S. Miller, Andi Kleen, Luck, Tony, Rik van Riel, Benjamin Herrenschmidt, linux-kernel, linux-mm, Stephen Smalley > ABI changes are not a problem for -stable, so don't let that stop anyone > :) In fact this is the harmless sort (changes only the error code of a failure case) that might actually go in if there were any important reason. But the smiley stands. Thanks, Roland -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 370+ messages in thread
end of thread, other threads:[~2022-04-27 19:41 UTC | newest] Thread overview: 370+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-04-02 4:01 incoming Andrew Morton 2020-04-02 4:02 ` [patch 001/155] tools/accounting/getdelays.c: fix netlink attribute length Andrew Morton 2020-04-02 4:02 ` [patch 002/155] kthread: mark timer used by delayed kthread works as IRQ safe Andrew Morton 2020-04-02 4:03 ` [patch 003/155] asm-generic: make more kernel-space headers mandatory Andrew Morton 2020-04-02 4:03 ` [patch 004/155] scripts/spelling.txt: add syfs/sysfs pattern Andrew Morton 2020-04-02 4:03 ` [patch 005/155] scripts/spelling.txt: add more spellings to spelling.txt Andrew Morton 2020-04-02 4:03 ` [patch 006/155] ocfs2: remove FS_OCFS2_NM Andrew Morton 2020-04-02 4:03 ` [patch 007/155] ocfs2: remove unused macros Andrew Morton 2020-04-02 4:03 ` [patch 008/155] ocfs2: use OCFS2_SEC_BITS in macro Andrew Morton 2020-04-02 4:03 ` [patch 009/155] ocfs2: remove dlm_lock_is_remote Andrew Morton 2020-04-02 4:03 ` [patch 010/155] ocfs2: there is no need to log twice in several functions Andrew Morton 2020-04-02 4:03 ` [patch 011/155] ocfs2: correct annotation from "l_next_rec" to "l_next_free_rec" Andrew Morton 2020-04-02 4:03 ` [patch 012/155] ocfs2: remove useless err Andrew Morton 2020-04-02 4:03 ` [patch 013/155] ocfs2: add missing annotations for ocfs2_refcount_cache_lock() and ocfs2_refcount_cache_unlock() Andrew Morton 2020-04-02 4:03 ` [patch 014/155] ocfs2: replace zero-length array with flexible-array member Andrew Morton 2020-04-02 4:03 ` [patch 015/155] ocfs2: cluster: " Andrew Morton 2020-04-02 4:03 ` [patch 016/155] ocfs2: dlm: " Andrew Morton 2020-04-02 4:03 ` [patch 017/155] ocfs2: ocfs2_fs.h: " Andrew Morton 2020-04-02 4:04 ` [patch 018/155] ocfs2: roll back the reference count modification of the parent directory if an error occurs Andrew Morton 2020-04-02 4:04 ` [patch 019/155] ocfs2: use scnprintf() for avoiding potential buffer overflow Andrew Morton 2020-04-02 4:04 ` [patch 020/155] ocfs2: use memalloc_nofs_save instead of memalloc_noio_save Andrew Morton 2020-04-02 4:04 ` [patch 021/155] fs_parse: remove pr_notice() about each validation Andrew Morton 2020-04-02 4:04 ` [patch 022/155] mm/slub.c: replace cpu_slab->partial with wrapped APIs Andrew Morton 2020-04-02 4:04 ` [patch 023/155] mm/slub.c: replace kmem_cache->cpu_partial " Andrew Morton 2020-04-02 4:04 ` [patch 024/155] slub: improve bit diffusion for freelist ptr obfuscation Andrew Morton 2020-04-02 4:04 ` [patch 025/155] slub: relocate freelist pointer to middle of object Andrew Morton 2020-04-15 16:47 ` Marco Elver 2020-04-15 17:07 ` Kees Cook 2020-04-15 18:00 ` Kees Cook 2020-04-02 4:04 ` [patch 026/155] revert "topology: add support for node_to_mem_node() to determine the fallback node" Andrew Morton 2020-04-02 4:04 ` [patch 027/155] mm/kmemleak.c: use address-of operator on section symbols Andrew Morton 2020-04-02 4:04 ` [patch 028/155] mm/Makefile: disable KCSAN for kmemleak Andrew Morton 2020-04-02 4:04 ` [patch 029/155] mm/filemap.c: don't bother dropping mmap_sem for zero size readahead Andrew Morton 2020-04-02 4:04 ` [patch 030/155] mm/page-writeback.c: write_cache_pages(): deduplicate identical checks Andrew Morton 2020-04-02 4:04 ` [patch 031/155] mm/filemap.c: clear page error before actual read Andrew Morton 2020-04-02 4:04 ` [patch 032/155] mm/filemap.c: remove unused argument from shrink_readahead_size_eio() Andrew Morton 2020-04-02 4:04 ` [patch 033/155] mm/filemap.c: use vm_fault error code directly Andrew Morton 2020-04-02 4:04 ` [patch 034/155] include/linux/pagemap.h: rename arguments to find_subpage Andrew Morton 2020-04-02 4:05 ` [patch 035/155] mm/page-writeback.c: use VM_BUG_ON_PAGE in clear_page_dirty_for_io Andrew Morton 2020-04-02 4:05 ` [patch 036/155] mm/filemap.c: unexport find_get_entry Andrew Morton 2020-04-02 4:05 ` [patch 037/155] mm/filemap.c: rewrite pagecache_get_page documentation Andrew Morton 2020-04-02 4:05 ` [patch 038/155] mm/gup: split get_user_pages_remote() into two routines Andrew Morton 2020-04-02 4:05 ` [patch 039/155] mm/gup: pass a flags arg to __gup_device_* functions Andrew Morton 2020-04-02 4:05 ` [patch 040/155] mm: introduce page_ref_sub_return() Andrew Morton 2020-04-02 4:05 ` [patch 041/155] mm/gup: pass gup flags to two more routines Andrew Morton 2020-04-02 4:05 ` [patch 042/155] mm/gup: require FOLL_GET for get_user_pages_fast() Andrew Morton 2020-04-02 4:05 ` [patch 043/155] mm/gup: track FOLL_PIN pages Andrew Morton 2020-04-09 6:08 ` Tetsuo Handa 2020-04-09 6:38 ` John Hubbard 2020-04-09 7:20 ` Tetsuo Handa 2020-04-09 7:46 ` John Hubbard 2020-04-02 4:05 ` [patch 044/155] mm/gup: page->hpage_pinned_refcount: exact pin counts for huge pages Andrew Morton 2020-04-02 4:05 ` [patch 045/155] mm/gup: /proc/vmstat: pin_user_pages (FOLL_PIN) reporting Andrew Morton 2020-04-02 4:05 ` [patch 046/155] mm/gup_benchmark: support pin_user_pages() and related calls Andrew Morton 2020-04-02 4:05 ` [patch 047/155] selftests/vm: run_vmtests: invoke gup_benchmark with basic FOLL_PIN coverage Andrew Morton 2020-04-02 4:05 ` [patch 048/155] mm: improve dump_page() for compound pages Andrew Morton 2020-04-02 4:05 ` [patch 049/155] mm: dump_page(): additional diagnostics for huge pinned pages Andrew Morton 2020-04-02 4:05 ` [patch 050/155] mm/gup/writeback: add callbacks for inaccessible pages Andrew Morton 2020-04-02 4:06 ` [patch 051/155] mm/gup: rename nr as nr_pinned in get_user_pages_fast() Andrew Morton 2020-04-02 4:06 ` [patch 052/155] mm/gup: fix omission of check on FOLL_LONGTERM in gup fast path Andrew Morton 2020-04-02 4:06 ` [patch 053/155] mm/swapfile.c: fix comments for swapcache_prepare Andrew Morton 2020-04-02 4:06 ` [patch 054/155] mm/swap.c: not necessary to export __pagevec_lru_add() Andrew Morton 2020-04-02 4:06 ` [patch 055/155] mm/swapfile: fix data races in try_to_unuse() Andrew Morton 2020-04-02 4:06 ` [patch 056/155] mm/swap_slots.c: assign|reset cache slot by value directly Andrew Morton 2020-04-02 4:06 ` [patch 057/155] mm: swap: make page_evictable() inline Andrew Morton 2020-04-02 4:06 ` [patch 058/155] mm: swap: use smp_mb__after_atomic() to order LRU bit set Andrew Morton 2020-04-02 4:06 ` [patch 059/155] mm/swap_state.c: use the same way to count page in [add_to|delete_from]_swap_cache Andrew Morton 2020-04-02 4:06 ` [patch 060/155] mm, memcg: fix build error around the usage of kmem_caches Andrew Morton 2020-04-02 4:06 ` [patch 061/155] mm/memcontrol.c: allocate shrinker_map on appropriate NUMA node Andrew Morton 2020-04-02 4:06 ` [patch 062/155] mm: memcg/slab: use mem_cgroup_from_obj() Andrew Morton 2020-04-02 4:06 ` [patch 063/155] mm: kmem: cleanup (__)memcg_kmem_charge_memcg() arguments Andrew Morton 2020-04-02 4:06 ` [patch 064/155] mm: kmem: cleanup memcg_kmem_uncharge_memcg() arguments Andrew Morton 2020-04-02 4:06 ` [patch 065/155] mm: kmem: rename memcg_kmem_(un)charge() into memcg_kmem_(un)charge_page() Andrew Morton 2020-04-02 4:06 ` [patch 066/155] mm: kmem: switch to nr_pages in (__)memcg_kmem_charge_memcg() Andrew Morton 2020-04-02 4:06 ` [patch 067/155] mm: memcg/slab: cache page number in memcg_(un)charge_slab() Andrew Morton 2020-04-02 4:06 ` [patch 068/155] mm: kmem: rename (__)memcg_kmem_(un)charge_memcg() to __memcg_kmem_(un)charge() Andrew Morton 2020-04-02 4:07 ` [patch 069/155] mm: memcontrol: fix memory.low proportional distribution Andrew Morton 2020-04-02 4:07 ` [patch 070/155] mm: memcontrol: clean up and document effective low/min calculations Andrew Morton 2020-04-02 4:07 ` [patch 071/155] mm: memcontrol: recursive memory.low protection Andrew Morton 2020-04-02 4:07 ` [patch 072/155] memcg: css_tryget_online cleanups Andrew Morton 2020-04-02 4:07 ` [patch 073/155] mm/memcontrol.c: make mem_cgroup_id_get_many() __maybe_unused Andrew Morton 2020-04-02 4:07 ` [patch 074/155] mm, memcg: prevent memory.high load/store tearing Andrew Morton 2020-04-02 4:07 ` [patch 075/155] mm, memcg: prevent memory.max load tearing Andrew Morton 2020-04-02 4:07 ` [patch 076/155] mm, memcg: prevent memory.low load/store tearing Andrew Morton 2020-04-02 4:07 ` [patch 077/155] mm, memcg: prevent memory.min " Andrew Morton 2020-04-02 4:07 ` [patch 078/155] mm, memcg: prevent memory.swap.max load tearing Andrew Morton 2020-04-02 4:07 ` [patch 079/155] mm, memcg: prevent mem_cgroup_protected store tearing Andrew Morton 2020-04-02 4:07 ` [patch 080/155] mm: memcg: make memory.oom.group tolerable to task migration Andrew Morton 2020-04-02 4:07 ` [patch 081/155] mm/mapping_dirty_helpers: update huge page-table entry callbacks Andrew Morton 2020-04-02 4:07 ` [patch 082/155] mm/vma: move VM_NO_KHUGEPAGED into generic header Andrew Morton 2020-04-02 4:07 ` [patch 083/155] mm/vma: make vma_is_foreign() available for general use Andrew Morton 2020-04-02 4:07 ` [patch 084/155] mm/vma: make is_vma_temporary_stack() " Andrew Morton 2020-04-02 4:07 ` [patch 085/155] mm: add pagemap.h to the fine documentation Andrew Morton 2020-04-02 4:07 ` [patch 086/155] mm/gup: rename "nonblocking" to "locked" where proper Andrew Morton 2020-04-02 4:08 ` [patch 087/155] mm/gup: fix __get_user_pages() on fault retry of hugetlb Andrew Morton 2020-04-02 4:08 ` [patch 088/155] mm: introduce fault_signal_pending() Andrew Morton 2020-04-02 4:08 ` [patch 089/155] x86/mm: use helper fault_signal_pending() Andrew Morton 2020-04-02 4:08 ` [patch 090/155] arc/mm: " Andrew Morton 2020-04-02 4:08 ` [patch 091/155] arm64/mm: " Andrew Morton 2020-04-02 4:08 ` [patch 092/155] powerpc/mm: " Andrew Morton 2020-04-02 4:08 ` [patch 093/155] sh/mm: " Andrew Morton 2020-04-02 4:08 ` [patch 094/155] mm: return faster for non-fatal signals in user mode faults Andrew Morton 2020-04-02 4:08 ` [patch 095/155] userfaultfd: don't retake mmap_sem to emulate NOPAGE Andrew Morton 2020-04-02 4:08 ` [patch 096/155] mm: introduce FAULT_FLAG_DEFAULT Andrew Morton 2020-04-02 4:08 ` [patch 097/155] mm: introduce FAULT_FLAG_INTERRUPTIBLE Andrew Morton 2020-04-02 4:08 ` [patch 098/155] mm: allow VM_FAULT_RETRY for multiple times Andrew Morton 2020-04-02 4:08 ` [patch 099/155] mm/gup: " Andrew Morton 2020-04-02 4:08 ` [patch 100/155] mm/gup: allow to react to fatal signals Andrew Morton 2020-04-02 4:09 ` [patch 101/155] mm/userfaultfd: honor FAULT_FLAG_KILLABLE in fault path Andrew Morton 2020-04-02 4:09 ` [patch 102/155] mm: clarify a confusing comment for remap_pfn_range() Andrew Morton 2020-04-02 4:09 ` [patch 103/155] mm/memory.c: clarify a confusing comment for vm_iomap_memory Andrew Morton 2020-04-02 4:09 ` [patch 104/155] mmap: remove inline of vm_unmapped_area Andrew Morton 2020-04-02 4:09 ` [patch 105/155] mm: mmap: add trace point " Andrew Morton 2020-04-02 4:09 ` [patch 106/155] mm/mremap: add MREMAP_DONTUNMAP to mremap() Andrew Morton 2020-04-02 4:09 ` [patch 107/155] selftests: add MREMAP_DONTUNMAP selftest Andrew Morton 2020-04-02 4:09 ` [patch 108/155] mm/sparsemem: get address to page struct instead of address to pfn Andrew Morton 2020-04-02 4:09 ` [patch 109/155] mm/sparse: rename pfn_present() to pfn_in_present_section() Andrew Morton 2020-04-02 4:09 ` [patch 110/155] mm/sparse.c: use kvmalloc/kvfree to alloc/free memmap for the classic sparse Andrew Morton 2020-04-02 4:09 ` [patch 111/155] mm/sparse.c: allocate memmap preferring the given node Andrew Morton 2020-04-02 4:09 ` [patch 112/155] kasan: detect negative size in memory operation function Andrew Morton 2020-04-02 4:09 ` [patch 113/155] kasan: add test for invalid size in memmove Andrew Morton 2020-04-02 4:09 ` [patch 114/155] mm/page_alloc: increase default min_free_kbytes bound Andrew Morton 2020-04-02 4:09 ` [patch 115/155] mm, pagealloc: micro-optimisation: save two branches on hot page allocation path Andrew Morton 2020-04-02 4:09 ` [patch 116/155] mm/page_alloc.c: use free_area_empty() instead of open-coding Andrew Morton 2020-04-02 4:09 ` [patch 117/155] mm/page_alloc.c: micro-optimisation Remove unnecessary branch Andrew Morton 2020-04-02 4:09 ` [patch 118/155] mm/page_alloc: simplify page_is_buddy() for better code readability Andrew Morton 2020-04-02 4:09 ` [patch 119/155] mm: vmpressure: don't need call kfree if kstrndup fails Andrew Morton 2020-04-02 4:10 ` [patch 120/155] mm: vmpressure: use mem_cgroup_is_root API Andrew Morton 2020-04-02 4:10 ` [patch 121/155] mm: vmscan: replace open codings to NUMA_NO_NODE Andrew Morton 2020-04-02 4:10 ` [patch 122/155] mm/vmscan.c: remove cpu online notification for now Andrew Morton 2020-04-02 4:10 ` [patch 123/155] mm/vmscan.c: fix data races using kswapd_classzone_idx Andrew Morton 2020-04-02 4:10 ` [patch 124/155] mm/vmscan.c: clean code by removing unnecessary assignment Andrew Morton 2020-04-02 4:10 ` [patch 125/155] mm/vmscan.c: make may_enter_fs bool in shrink_page_list() Andrew Morton 2020-04-02 4:10 ` [patch 126/155] mm/vmscan.c: do_try_to_free_pages(): clean code by removing unnecessary assignment Andrew Morton 2020-04-02 4:10 ` [patch 127/155] selftests: vm: drop dependencies on page flags from mlock2 tests Andrew Morton 2020-04-02 4:10 ` [patch 128/155] mm,compaction,cma: add alloc_contig flag to compact_control Andrew Morton 2020-04-02 4:10 ` [patch 129/155] mm,thp,compaction,cma: allow THP migration for CMA allocations Andrew Morton 2020-04-02 4:10 ` [patch 130/155] mm, compaction: fully assume capture is not NULL in compact_zone_order() Andrew Morton 2020-04-02 4:10 ` [patch 131/155] mm/compaction: really limit compact_unevictable_allowed to 0 and 1 Andrew Morton 2020-04-02 4:10 ` [patch 132/155] mm/compaction: Disable compact_unevictable_allowed on RT Andrew Morton 2020-04-02 4:10 ` [patch 133/155] mm/compaction.c: clean code by removing unnecessary assignment Andrew Morton 2020-04-02 4:10 ` [patch 134/155] mm/mempolicy: support MPOL_MF_STRICT for huge page mapping Andrew Morton 2020-04-02 4:10 ` [patch 135/155] mm/mempolicy: check hugepage migration is supported by arch in vma_migratable() Andrew Morton 2020-04-02 4:10 ` [patch 136/155] mm: mempolicy: use VM_BUG_ON_VMA in queue_pages_test_walk() Andrew Morton 2020-04-02 4:10 ` [patch 137/155] mm: mempolicy: require at least one nodeid for MPOL_PREFERRED Andrew Morton 2020-04-02 4:11 ` [patch 138/155] mm/memblock.c: remove redundant assignment to variable max_addr Andrew Morton 2020-04-02 4:11 ` [patch 139/155] hugetlbfs: use i_mmap_rwsem for more pmd sharing synchronization Andrew Morton 2020-04-02 4:11 ` [patch 140/155] hugetlbfs: Use i_mmap_rwsem to address page fault/truncate race Andrew Morton 2020-04-02 4:11 ` [patch 141/155] hugetlb_cgroup: add hugetlb_cgroup reservation counter Andrew Morton 2020-04-02 4:11 ` [patch 142/155] hugetlb_cgroup: add interface for charge/uncharge hugetlb reservations Andrew Morton 2020-04-02 4:11 ` [patch 143/155] mm/hugetlb_cgroup: fix hugetlb_cgroup migration Andrew Morton 2020-04-02 4:11 ` [patch 144/155] hugetlb_cgroup: add reservation accounting for private mappings Andrew Morton 2020-04-02 4:11 ` [patch 145/155] hugetlb: disable region_add file_region coalescing Andrew Morton 2020-04-02 4:11 ` [patch 146/155] hugetlb_cgroup: add accounting for shared mappings Andrew Morton 2020-04-02 4:11 ` [patch 147/155] hugetlb_cgroup: support noreserve mappings Andrew Morton 2020-04-02 4:11 ` [patch 148/155] hugetlb: support file_region coalescing again Andrew Morton 2020-04-02 4:11 ` [patch 149/155] hugetlb_cgroup: add hugetlb_cgroup reservation tests Andrew Morton 2020-04-02 4:11 ` [patch 150/155] hugetlb_cgroup: add hugetlb_cgroup reservation docs Andrew Morton 2020-04-02 4:11 ` [patch 151/155] mm/hugetlb.c: clean code by removing unnecessary initialization Andrew Morton 2020-04-02 4:11 ` [patch 152/155] mm/hugetlb: remove unnecessary memory fetch in PageHeadHuge() Andrew Morton 2020-04-02 4:11 ` [patch 153/155] selftests/vm: fix map_hugetlb length used for testing read and write Andrew Morton 2020-04-02 4:11 ` [patch 154/155] mm/hugetlb: fix build failure with HUGETLB_PAGE but not HUGEBTLBFS Andrew Morton 2020-04-02 4:11 ` [patch 155/155] include/linux/huge_mm.h: check PageTail in hpage_nr_pages even when !THP Andrew Morton -- strict thread matches above, loose matches on Subject: below -- 2022-04-27 19:41 incoming Andrew Morton 2022-04-21 23:35 incoming Andrew Morton 2022-04-15 2:12 incoming Andrew Morton 2022-04-08 20:08 incoming Andrew Morton 2022-04-01 18:27 incoming Andrew Morton 2022-04-01 18:20 incoming Andrew Morton 2022-04-01 18:27 ` incoming Andrew Morton 2022-03-25 1:07 incoming Andrew Morton 2022-03-23 23:04 incoming Andrew Morton 2022-03-22 21:38 incoming Andrew Morton 2022-03-16 23:14 incoming Andrew Morton 2022-03-05 4:28 incoming Andrew Morton 2022-02-26 3:10 incoming Andrew Morton 2022-02-12 0:27 incoming Andrew Morton 2022-02-12 2:02 ` incoming Linus Torvalds 2022-02-12 5:24 ` incoming Andrew Morton 2022-02-04 4:48 incoming Andrew Morton 2022-01-29 21:40 incoming Andrew Morton 2022-01-29 2:13 incoming Andrew Morton 2022-01-29 4:25 ` incoming Matthew Wilcox 2022-01-29 6:23 ` incoming Andrew Morton 2022-01-22 6:10 incoming Andrew Morton 2022-01-20 2:07 incoming Andrew Morton 2022-01-14 22:02 incoming Andrew Morton 2021-12-31 4:12 incoming Andrew Morton 2021-12-25 5:11 incoming Andrew Morton 2021-12-10 22:45 incoming Andrew Morton 2021-11-20 0:42 incoming Andrew Morton 2021-11-11 4:32 incoming Andrew Morton 2021-11-09 2:30 incoming Andrew Morton 2021-11-05 20:34 incoming Andrew Morton 2021-10-28 21:35 incoming Andrew Morton 2021-10-18 22:14 incoming Andrew Morton 2021-09-24 22:42 incoming Andrew Morton 2021-09-10 3:09 incoming Andrew Morton 2021-09-10 17:11 ` incoming Kees Cook 2021-09-10 20:13 ` incoming Kees Cook 2021-09-09 1:08 incoming Andrew Morton 2021-09-08 22:17 incoming Andrew Morton 2021-09-08 2:52 incoming Andrew Morton 2021-09-08 8:57 ` incoming Vlastimil Babka 2021-09-02 21:48 incoming Andrew Morton 2021-09-02 21:49 ` incoming Andrew Morton 2021-08-25 19:17 incoming Andrew Morton 2021-08-20 2:03 incoming Andrew Morton 2021-08-13 23:53 incoming Andrew Morton 2021-07-29 21:52 incoming Andrew Morton 2021-07-23 22:49 incoming Andrew Morton 2021-07-15 4:26 incoming Andrew Morton 2021-07-08 0:59 incoming Andrew Morton 2021-07-01 1:46 incoming Andrew Morton 2021-07-03 0:28 ` incoming Linus Torvalds 2021-07-03 1:06 ` incoming Linus Torvalds 2021-06-29 2:32 incoming Andrew Morton 2021-06-25 1:38 incoming Andrew Morton 2021-06-16 1:22 incoming Andrew Morton 2021-06-05 3:00 incoming Andrew Morton 2021-05-23 0:41 incoming Andrew Morton 2021-05-15 0:26 incoming Andrew Morton 2021-05-07 1:01 incoming Andrew Morton 2021-05-07 7:12 ` incoming Linus Torvalds 2021-05-05 1:32 incoming Andrew Morton 2021-05-05 1:47 ` incoming Linus Torvalds 2021-05-05 3:16 ` incoming Andrew Morton 2021-05-05 17:10 ` incoming Linus Torvalds 2021-05-05 17:44 ` incoming Andrew Morton 2021-05-06 3:19 ` incoming Anshuman Khandual 2021-04-30 5:52 incoming Andrew Morton 2021-04-23 21:28 incoming Andrew Morton 2021-04-16 22:45 incoming Andrew Morton 2021-04-09 20:26 incoming Andrew Morton 2021-03-25 4:36 incoming Andrew Morton 2021-03-13 5:06 incoming Andrew Morton 2021-02-26 1:14 incoming Andrew Morton 2021-02-26 17:55 ` incoming Linus Torvalds 2021-02-26 19:16 ` incoming Andrew Morton 2021-02-24 19:58 incoming Andrew Morton 2021-02-24 21:30 ` incoming Linus Torvalds 2021-02-24 21:37 ` incoming Linus Torvalds 2021-02-25 8:53 ` incoming Arnd Bergmann 2021-02-25 9:12 ` incoming Andrey Ryabinin 2021-02-25 11:07 ` incoming Walter Wu 2021-02-13 4:52 incoming Andrew Morton 2021-02-09 21:41 incoming Andrew Morton 2021-02-10 19:30 ` incoming Linus Torvalds 2021-02-05 2:31 incoming Andrew Morton 2021-01-24 5:00 incoming Andrew Morton 2021-01-12 23:48 incoming Andrew Morton 2021-01-15 23:32 ` incoming Linus Torvalds 2020-12-29 23:13 incoming Andrew Morton 2020-12-22 19:58 incoming Andrew Morton 2020-12-22 21:43 ` incoming Linus Torvalds 2020-12-18 22:00 incoming Andrew Morton 2020-12-16 4:41 incoming Andrew Morton 2020-12-15 20:32 incoming Andrew Morton 2020-12-15 21:00 ` incoming Linus Torvalds 2020-12-15 22:48 ` incoming Linus Torvalds 2020-12-15 22:49 ` incoming Linus Torvalds 2020-12-15 22:55 ` incoming Andrew Morton 2020-12-15 3:02 incoming Andrew Morton 2020-12-15 3:25 ` incoming Linus Torvalds 2020-12-15 3:30 ` incoming Linus Torvalds 2020-12-15 14:04 ` incoming Konstantin Ryabitsev 2020-12-11 21:35 incoming Andrew Morton 2020-12-06 6:14 incoming Andrew Morton 2020-11-22 6:16 incoming Andrew Morton 2020-11-14 6:51 incoming Andrew Morton 2020-11-02 1:06 incoming Andrew Morton 2020-10-17 23:13 incoming Andrew Morton 2020-10-16 2:40 incoming Andrew Morton 2020-10-16 3:03 ` incoming Andrew Morton 2020-10-13 23:46 incoming Andrew Morton 2020-10-11 6:15 incoming Andrew Morton 2020-10-03 5:20 incoming Andrew Morton 2020-09-26 4:17 incoming Andrew Morton 2020-09-19 4:19 incoming Andrew Morton 2020-09-04 23:34 incoming Andrew Morton 2020-08-21 0:41 incoming Andrew Morton 2020-08-15 0:29 incoming Andrew Morton 2020-08-12 1:29 incoming Andrew Morton 2020-08-07 6:16 incoming Andrew Morton 2020-07-24 4:14 incoming Andrew Morton 2020-07-03 22:14 incoming Andrew Morton 2020-06-26 3:28 incoming Andrew Morton 2020-06-26 6:51 ` incoming Linus Torvalds 2020-06-26 7:31 ` incoming Linus Torvalds 2020-06-26 17:39 ` incoming Konstantin Ryabitsev 2020-06-26 17:40 ` incoming Konstantin Ryabitsev 2020-06-12 0:30 incoming Andrew Morton 2020-06-11 1:40 incoming Andrew Morton 2020-06-09 4:29 incoming Andrew Morton 2020-06-09 16:58 ` incoming Linus Torvalds 2020-06-08 4:35 incoming Andrew Morton 2020-06-04 23:45 incoming Andrew Morton 2020-06-03 22:55 incoming Andrew Morton 2020-06-02 20:09 incoming Andrew Morton 2020-06-02 4:44 incoming Andrew Morton 2020-06-02 20:08 ` incoming Andrew Morton 2020-06-02 20:45 ` incoming Linus Torvalds 2020-06-02 21:38 ` incoming Andrew Morton 2020-06-02 22:18 ` incoming Linus Torvalds 2020-05-28 5:20 incoming Andrew Morton 2020-05-28 20:10 ` incoming Linus Torvalds 2020-05-29 20:31 ` incoming Andrew Morton 2020-05-29 20:38 ` incoming Linus Torvalds 2020-05-29 21:12 ` incoming Andrew Morton 2020-05-29 21:20 ` incoming Linus Torvalds 2020-05-23 5:22 incoming Andrew Morton 2020-05-14 0:50 incoming Andrew Morton 2020-05-08 1:35 incoming Andrew Morton 2020-04-21 1:13 incoming Andrew Morton 2020-04-12 7:41 incoming Andrew Morton 2020-04-10 21:30 incoming Andrew Morton 2020-04-07 3:02 incoming Andrew Morton 2020-03-29 2:14 incoming Andrew Morton 2020-03-22 1:19 incoming Andrew Morton 2020-03-06 6:27 incoming Andrew Morton 2020-02-21 4:00 incoming Andrew Morton 2020-02-21 4:03 ` incoming Andrew Morton 2020-02-21 18:21 ` incoming Linus Torvalds 2020-02-21 18:32 ` incoming Konstantin Ryabitsev 2020-02-27 9:59 ` incoming Vlastimil Babka 2020-02-21 19:33 ` incoming Linus Torvalds 2020-02-04 1:33 incoming Andrew Morton 2020-02-04 2:27 ` incoming Linus Torvalds 2020-02-04 2:46 ` incoming Andrew Morton 2020-02-04 3:11 ` incoming Linus Torvalds 2020-01-31 6:10 incoming Andrew Morton 2020-01-14 0:28 incoming Andrew Morton 2020-01-04 20:55 incoming Andrew Morton 2019-12-18 4:50 incoming Andrew Morton 2019-12-05 0:48 incoming Andrew Morton 2019-12-01 1:47 incoming Andrew Morton 2019-12-01 5:17 ` incoming James Bottomley 2019-12-01 21:07 ` incoming Linus Torvalds 2019-12-02 8:21 ` incoming Steven Price 2019-11-22 1:53 incoming Andrew Morton 2019-11-16 1:34 incoming Andrew Morton 2019-11-06 5:16 incoming Andrew Morton 2019-10-19 3:19 incoming Andrew Morton 2019-10-14 21:11 incoming Andrew Morton 2019-10-07 0:57 incoming Andrew Morton 2019-09-25 23:45 incoming Andrew Morton 2019-09-23 22:31 incoming Andrew Morton 2019-09-24 0:55 ` incoming Linus Torvalds 2019-09-24 4:31 ` incoming Andrew Morton 2019-09-24 7:48 ` incoming Michal Hocko 2019-09-24 15:34 ` incoming Linus Torvalds 2019-09-25 6:36 ` incoming Michal Hocko 2019-09-24 19:55 ` incoming Vlastimil Babka 2019-08-30 23:04 incoming Andrew Morton 2019-08-25 0:54 incoming Andrew Morton [not found] <20190716162536.bb52b8f34a8ecf5331a86a42@linux-foundation.org> 2019-07-17 8:47 ` incoming Vlastimil Babka 2019-07-17 8:57 ` incoming Bhaskar Chowdhury 2019-07-17 16:13 ` incoming Linus Torvalds 2019-07-17 17:09 ` incoming Christian Brauner 2019-07-17 18:13 ` incoming Vlastimil Babka 2007-05-02 22:02 incoming Andrew Morton 2007-05-02 22:31 ` incoming Benjamin Herrenschmidt 2007-05-03 7:55 ` incoming Russell King 2007-05-03 8:05 ` incoming Andrew Morton 2007-05-04 13:37 ` incoming Greg KH 2007-05-04 16:14 ` incoming Andrew Morton 2007-05-04 17:02 ` incoming Greg KH 2007-05-04 18:57 ` incoming Roland McGrath 2007-05-04 19:24 ` incoming Greg KH 2007-05-04 19:29 ` incoming Roland McGrath
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).