All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: akpm@linux-foundation.org, linux-mm@kvack.org,
	mm-commits@vger.kernel.org, slyfox@gentoo.org,
	torvalds@linux-foundation.org
Subject: [patch 010/178] ia64: drop marked broken DISCONTIGMEM and VIRTUAL_MEM_MAP
Date: Thu, 29 Apr 2021 22:53:45 -0700	[thread overview]
Message-ID: <20210430055345.L0PJxk-So%akpm@linux-foundation.org> (raw)
In-Reply-To: <20210429225251.02b6386d21b69255b4f6c163@linux-foundation.org>

From: Sergei Trofimovich <slyfox@gentoo.org>
Subject: ia64: drop marked broken DISCONTIGMEM and VIRTUAL_MEM_MAP

DISCONTIGMEM was marked BROKEN in 5.11. Let's remove it.

Booted SPARSEMEM successfully on rx3600.

Link: https://lkml.kernel.org/r/20210404193440.2615358-1-slyfox@gentoo.org
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---

 arch/ia64/Kconfig                  |   23 --
 arch/ia64/configs/bigsur_defconfig |    1 
 arch/ia64/include/asm/meminit.h    |   11 -
 arch/ia64/include/asm/page.h       |   25 ---
 arch/ia64/include/asm/pgtable.h    |    5 
 arch/ia64/kernel/Makefile          |    2 
 arch/ia64/kernel/ia64_ksyms.c      |   12 -
 arch/ia64/kernel/machine_kexec.c   |    2 
 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                |  213 ---------------------------
 13 files changed, 4 insertions(+), 331 deletions(-)

--- a/arch/ia64/configs/bigsur_defconfig~ia64-drop-marked-broken-discontigmem-and-virtual_mem_map
+++ a/arch/ia64/configs/bigsur_defconfig
@@ -9,7 +9,6 @@ CONFIG_SGI_PARTITION=y
 CONFIG_SMP=y
 CONFIG_NR_CPUS=2
 CONFIG_PREEMPT=y
-# CONFIG_VIRTUAL_MEM_MAP is not set
 CONFIG_IA64_PALINFO=y
 CONFIG_EFI_VARS=y
 CONFIG_BINFMT_MISC=m
--- a/arch/ia64/include/asm/meminit.h~ia64-drop-marked-broken-discontigmem-and-virtual_mem_map
+++ a/arch/ia64/include/asm/meminit.h
@@ -58,15 +58,4 @@ extern int reserve_elfcorehdr(u64 *start
 
 extern int register_active_ranges(u64 start, u64 len, int nid);
 
-#ifdef CONFIG_VIRTUAL_MEM_MAP
-  extern unsigned long VMALLOC_END;
-  extern struct page *vmem_map;
-  extern int create_mem_map_page_table(u64 start, u64 end, void *arg);
-  extern int vmemmap_find_next_valid_pfn(int, int);
-#else
-static inline int vmemmap_find_next_valid_pfn(int node, int i)
-{
-	return i + 1;
-}
-#endif
 #endif /* meminit_h */
--- a/arch/ia64/include/asm/page.h~ia64-drop-marked-broken-discontigmem-and-virtual_mem_map
+++ a/arch/ia64/include/asm/page.h
@@ -95,31 +95,10 @@ do {						\
 
 #define virt_addr_valid(kaddr)	pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
 
-#ifdef CONFIG_VIRTUAL_MEM_MAP
-extern int ia64_pfn_valid (unsigned long pfn);
-#else
-# define ia64_pfn_valid(pfn) 1
-#endif
-
-#ifdef CONFIG_VIRTUAL_MEM_MAP
-extern struct page *vmem_map;
-#ifdef CONFIG_DISCONTIGMEM
-# define page_to_pfn(page)	((unsigned long) (page - vmem_map))
-# define pfn_to_page(pfn)	(vmem_map + (pfn))
-# define __pfn_to_phys(pfn)	PFN_PHYS(pfn)
-#else
-# include <asm-generic/memory_model.h>
-#endif
-#else
-# include <asm-generic/memory_model.h>
-#endif
+#include <asm-generic/memory_model.h>
 
 #ifdef CONFIG_FLATMEM
-# define pfn_valid(pfn)		(((pfn) < max_mapnr) && ia64_pfn_valid(pfn))
-#elif defined(CONFIG_DISCONTIGMEM)
-extern unsigned long min_low_pfn;
-extern unsigned long max_low_pfn;
-# define pfn_valid(pfn)		(((pfn) >= min_low_pfn) && ((pfn) < max_low_pfn) && ia64_pfn_valid(pfn))
+# define pfn_valid(pfn)		((pfn) < max_mapnr)
 #endif
 
 #define page_to_phys(page)	(page_to_pfn(page) << PAGE_SHIFT)
--- a/arch/ia64/include/asm/pgtable.h~ia64-drop-marked-broken-discontigmem-and-virtual_mem_map
+++ a/arch/ia64/include/asm/pgtable.h
@@ -223,10 +223,6 @@ ia64_phys_addr_valid (unsigned long addr
 
 
 #define VMALLOC_START		(RGN_BASE(RGN_GATE) + 0x200000000UL)
-#ifdef CONFIG_VIRTUAL_MEM_MAP
-# define VMALLOC_END_INIT	(RGN_BASE(RGN_GATE) + (1UL << (4*PAGE_SHIFT - 9)))
-extern unsigned long VMALLOC_END;
-#else
 #if defined(CONFIG_SPARSEMEM) && defined(CONFIG_SPARSEMEM_VMEMMAP)
 /* SPARSEMEM_VMEMMAP uses half of vmalloc... */
 # define VMALLOC_END		(RGN_BASE(RGN_GATE) + (1UL << (4*PAGE_SHIFT - 10)))
@@ -234,7 +230,6 @@ extern unsigned long VMALLOC_END;
 #else
 # define VMALLOC_END		(RGN_BASE(RGN_GATE) + (1UL << (4*PAGE_SHIFT - 9)))
 #endif
-#endif
 
 /* fs/proc/kcore.c */
 #define	kc_vaddr_to_offset(v) ((v) - RGN_BASE(RGN_GATE))
--- a/arch/ia64/Kconfig~ia64-drop-marked-broken-discontigmem-and-virtual_mem_map
+++ a/arch/ia64/Kconfig
@@ -286,15 +286,6 @@ config FORCE_CPEI_RETARGET
 config ARCH_SELECT_MEMORY_MODEL
 	def_bool y
 
-config ARCH_DISCONTIGMEM_ENABLE
-	def_bool y
-	depends on BROKEN
-	help
-	  Say Y to support efficient handling of discontiguous physical memory,
-	  for architectures which are either NUMA (Non-Uniform Memory Access)
-	  or have huge holes in the physical address space for other reasons.
-	  See <file:Documentation/vm/numa.rst> for more.
-
 config ARCH_FLATMEM_ENABLE
 	def_bool y
 
@@ -325,22 +316,8 @@ config NODES_SHIFT
 	  MAX_NUMNODES will be 2^(This value).
 	  If in doubt, use the default.
 
-# VIRTUAL_MEM_MAP and FLAT_NODE_MEM_MAP are functionally equivalent.
-# VIRTUAL_MEM_MAP has been retained for historical reasons.
-config VIRTUAL_MEM_MAP
-	bool "Virtual mem map"
-	depends on !SPARSEMEM && !FLATMEM
-	default y
-	help
-	  Say Y to compile the kernel with support for a virtual mem map.
-	  This code also only takes effect if a memory hole of greater than
-	  1 Gb is found during boot.  You must turn this option on if you
-	  require the DISCONTIGMEM option for your machine. If you are
-	  unsure, say Y.
-
 config HOLES_IN_ZONE
 	bool
-	default y if VIRTUAL_MEM_MAP
 
 config HAVE_ARCH_NODEDATA_EXTENSION
 	def_bool y
--- a/arch/ia64/kernel/ia64_ksyms.c
+++ /dev/null
@@ -1,12 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Architecture-specific kernel symbols
- */
-
-#if defined(CONFIG_VIRTUAL_MEM_MAP) || defined(CONFIG_DISCONTIGMEM)
-#include <linux/compiler.h>
-#include <linux/export.h>
-#include <linux/memblock.h>
-EXPORT_SYMBOL(min_low_pfn);	/* defined by bootmem.c, but not exported by generic code */
-EXPORT_SYMBOL(max_low_pfn);	/* defined by bootmem.c, but not exported by generic code */
-#endif
--- a/arch/ia64/kernel/machine_kexec.c~ia64-drop-marked-broken-discontigmem-and-virtual_mem_map
+++ a/arch/ia64/kernel/machine_kexec.c
@@ -143,7 +143,7 @@ void machine_kexec(struct kimage *image)
 
 void arch_crash_save_vmcoreinfo(void)
 {
-#if defined(CONFIG_DISCONTIGMEM) || defined(CONFIG_SPARSEMEM)
+#if defined(CONFIG_SPARSEMEM)
 	VMCOREINFO_SYMBOL(pgdat_list);
 	VMCOREINFO_LENGTH(pgdat_list, MAX_NUMNODES);
 #endif
--- a/arch/ia64/kernel/Makefile~ia64-drop-marked-broken-discontigmem-and-virtual_mem_map
+++ a/arch/ia64/kernel/Makefile
@@ -9,7 +9,7 @@ endif
 
 extra-y	:= head.o vmlinux.lds
 
-obj-y := entry.o efi.o efi_stub.o gate-data.o fsys.o ia64_ksyms.o irq.o irq_ia64.o	\
+obj-y := entry.o efi.o efi_stub.o gate-data.o fsys.o irq.o irq_ia64.o	\
 	 irq_lsapic.o ivt.o pal.o patch.o process.o ptrace.o sal.o		\
 	 salinfo.o setup.o signal.o sys_ia64.o time.o traps.o unaligned.o \
 	 unwind.o mca.o mca_asm.o topology.o dma-mapping.o iosapic.o acpi.o \
--- a/arch/ia64/mm/contig.c~ia64-drop-marked-broken-discontigmem-and-virtual_mem_map
+++ a/arch/ia64/mm/contig.c
@@ -153,11 +153,7 @@ find_memory (void)
 	efi_memmap_walk(find_max_min_low_pfn, NULL);
 	max_pfn = max_low_pfn;
 
-#ifdef CONFIG_VIRTUAL_MEM_MAP
-	efi_memmap_walk(filter_memory, register_active_ranges);
-#else
 	memblock_add_node(0, PFN_PHYS(max_low_pfn), 0);
-#endif
 
 	find_initrd();
 
--- a/arch/ia64/mm/discontig.c~ia64-drop-marked-broken-discontigmem-and-virtual_mem_map
+++ a/arch/ia64/mm/discontig.c
@@ -585,25 +585,6 @@ void call_pernode_memory(unsigned long s
 	}
 }
 
-static void __init virtual_map_init(void)
-{
-#ifdef CONFIG_VIRTUAL_MEM_MAP
-	int node;
-
-	VMALLOC_END -= PAGE_ALIGN(ALIGN(max_low_pfn, MAX_ORDER_NR_PAGES) *
-		sizeof(struct page));
-	vmem_map = (struct page *) VMALLOC_END;
-	efi_memmap_walk(create_mem_map_page_table, NULL);
-	printk("Virtual mem_map starts at 0x%p\n", vmem_map);
-
-	for_each_online_node(node) {
-		unsigned long pfn_offset = mem_data[node].min_pfn;
-
-		NODE_DATA(node)->node_mem_map = vmem_map + pfn_offset;
-	}
-#endif
-}
-
 /**
  * paging_init - setup page tables
  *
@@ -619,8 +600,6 @@ void __init paging_init(void)
 
 	sparse_init();
 
-	virtual_map_init();
-
 	memset(max_zone_pfns, 0, sizeof(max_zone_pfns));
 	max_zone_pfns[ZONE_DMA32] = max_dma;
 	max_zone_pfns[ZONE_NORMAL] = max_low_pfn;
--- a/arch/ia64/mm/fault.c~ia64-drop-marked-broken-discontigmem-and-virtual_mem_map
+++ a/arch/ia64/mm/fault.c
@@ -84,18 +84,6 @@ ia64_do_page_fault (unsigned long addres
 	if (faulthandler_disabled() || !mm)
 		goto no_context;
 
-#ifdef CONFIG_VIRTUAL_MEM_MAP
-	/*
-	 * If fault is in region 5 and we are in the kernel, we may already
-	 * have the mmap_lock (pfn_valid macro is called during mmap). There
-	 * is no vma for region 5 addr's anyway, so skip getting the semaphore
-	 * and go directly to the exception handling code.
-	 */
-
-	if ((REGION_NUMBER(address) == 5) && !user_mode(regs))
-		goto bad_area_no_up;
-#endif
-
 	/*
 	 * This is to handle the kprobes on user space access instructions
 	 */
@@ -213,9 +201,6 @@ retry:
 
   bad_area:
 	mmap_read_unlock(mm);
-#ifdef CONFIG_VIRTUAL_MEM_MAP
-  bad_area_no_up:
-#endif
 	if ((isr & IA64_ISR_SP)
 	    || ((isr & IA64_ISR_NA) && (isr & IA64_ISR_CODE_MASK) == IA64_ISR_CODE_LFETCH))
 	{
--- a/arch/ia64/mm/init.c~ia64-drop-marked-broken-discontigmem-and-virtual_mem_map
+++ a/arch/ia64/mm/init.c
@@ -43,13 +43,6 @@ extern void ia64_tlb_init (void);
 
 unsigned long MAX_DMA_ADDRESS = PAGE_OFFSET + 0x100000000UL;
 
-#ifdef CONFIG_VIRTUAL_MEM_MAP
-unsigned long VMALLOC_END = VMALLOC_END_INIT;
-EXPORT_SYMBOL(VMALLOC_END);
-struct page *vmem_map;
-EXPORT_SYMBOL(vmem_map);
-#endif
-
 struct page *zero_page_memmap_ptr;	/* map entry for zero page */
 EXPORT_SYMBOL(zero_page_memmap_ptr);
 
@@ -373,212 +366,6 @@ void ia64_mmu_init(void *my_cpu_data)
 #endif
 }
 
-#ifdef CONFIG_VIRTUAL_MEM_MAP
-int vmemmap_find_next_valid_pfn(int node, int i)
-{
-	unsigned long end_address, hole_next_pfn;
-	unsigned long stop_address;
-	pg_data_t *pgdat = NODE_DATA(node);
-
-	end_address = (unsigned long) &vmem_map[pgdat->node_start_pfn + i];
-	end_address = PAGE_ALIGN(end_address);
-	stop_address = (unsigned long) &vmem_map[pgdat_end_pfn(pgdat)];
-
-	do {
-		pgd_t *pgd;
-		p4d_t *p4d;
-		pud_t *pud;
-		pmd_t *pmd;
-		pte_t *pte;
-
-		pgd = pgd_offset_k(end_address);
-		if (pgd_none(*pgd)) {
-			end_address += PGDIR_SIZE;
-			continue;
-		}
-
-		p4d = p4d_offset(pgd, end_address);
-		if (p4d_none(*p4d)) {
-			end_address += P4D_SIZE;
-			continue;
-		}
-
-		pud = pud_offset(p4d, end_address);
-		if (pud_none(*pud)) {
-			end_address += PUD_SIZE;
-			continue;
-		}
-
-		pmd = pmd_offset(pud, end_address);
-		if (pmd_none(*pmd)) {
-			end_address += PMD_SIZE;
-			continue;
-		}
-
-		pte = pte_offset_kernel(pmd, end_address);
-retry_pte:
-		if (pte_none(*pte)) {
-			end_address += PAGE_SIZE;
-			pte++;
-			if ((end_address < stop_address) &&
-			    (end_address != ALIGN(end_address, 1UL << PMD_SHIFT)))
-				goto retry_pte;
-			continue;
-		}
-		/* Found next valid vmem_map page */
-		break;
-	} while (end_address < stop_address);
-
-	end_address = min(end_address, stop_address);
-	end_address = end_address - (unsigned long) vmem_map + sizeof(struct page) - 1;
-	hole_next_pfn = end_address / sizeof(struct page);
-	return hole_next_pfn - pgdat->node_start_pfn;
-}
-
-int __init create_mem_map_page_table(u64 start, u64 end, void *arg)
-{
-	unsigned long address, start_page, end_page;
-	struct page *map_start, *map_end;
-	int node;
-	pgd_t *pgd;
-	p4d_t *p4d;
-	pud_t *pud;
-	pmd_t *pmd;
-	pte_t *pte;
-
-	map_start = vmem_map + (__pa(start) >> PAGE_SHIFT);
-	map_end   = vmem_map + (__pa(end) >> PAGE_SHIFT);
-
-	start_page = (unsigned long) map_start & PAGE_MASK;
-	end_page = PAGE_ALIGN((unsigned long) map_end);
-	node = paddr_to_nid(__pa(start));
-
-	for (address = start_page; address < end_page; address += PAGE_SIZE) {
-		pgd = pgd_offset_k(address);
-		if (pgd_none(*pgd)) {
-			p4d = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node);
-			if (!p4d)
-				goto err_alloc;
-			pgd_populate(&init_mm, pgd, p4d);
-		}
-		p4d = p4d_offset(pgd, address);
-
-		if (p4d_none(*p4d)) {
-			pud = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node);
-			if (!pud)
-				goto err_alloc;
-			p4d_populate(&init_mm, p4d, pud);
-		}
-		pud = pud_offset(p4d, address);
-
-		if (pud_none(*pud)) {
-			pmd = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node);
-			if (!pmd)
-				goto err_alloc;
-			pud_populate(&init_mm, pud, pmd);
-		}
-		pmd = pmd_offset(pud, address);
-
-		if (pmd_none(*pmd)) {
-			pte = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node);
-			if (!pte)
-				goto err_alloc;
-			pmd_populate_kernel(&init_mm, pmd, pte);
-		}
-		pte = pte_offset_kernel(pmd, address);
-
-		if (pte_none(*pte)) {
-			void *page = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE,
-							 node);
-			if (!page)
-				goto err_alloc;
-			set_pte(pte, pfn_pte(__pa(page) >> PAGE_SHIFT,
-					     PAGE_KERNEL));
-		}
-	}
-	return 0;
-
-err_alloc:
-	panic("%s: Failed to allocate %lu bytes align=0x%lx nid=%d\n",
-	      __func__, PAGE_SIZE, PAGE_SIZE, node);
-	return -ENOMEM;
-}
-
-struct memmap_init_callback_data {
-	struct page *start;
-	struct page *end;
-	int nid;
-	unsigned long zone;
-};
-
-static int __meminit
-virtual_memmap_init(u64 start, u64 end, void *arg)
-{
-	struct memmap_init_callback_data *args;
-	struct page *map_start, *map_end;
-
-	args = (struct memmap_init_callback_data *) arg;
-	map_start = vmem_map + (__pa(start) >> PAGE_SHIFT);
-	map_end   = vmem_map + (__pa(end) >> PAGE_SHIFT);
-
-	if (map_start < args->start)
-		map_start = args->start;
-	if (map_end > args->end)
-		map_end = args->end;
-
-	/*
-	 * We have to initialize "out of bounds" struct page elements that fit completely
-	 * on the same pages that were allocated for the "in bounds" elements because they
-	 * may be referenced later (and found to be "reserved").
-	 */
-	map_start -= ((unsigned long) map_start & (PAGE_SIZE - 1)) / sizeof(struct page);
-	map_end += ((PAGE_ALIGN((unsigned long) map_end) - (unsigned long) map_end)
-		    / sizeof(struct page));
-
-	if (map_start < map_end)
-		memmap_init_range((unsigned long)(map_end - map_start),
-				 args->nid, args->zone, page_to_pfn(map_start), page_to_pfn(map_end),
-				 MEMINIT_EARLY, NULL, MIGRATE_MOVABLE);
-	return 0;
-}
-
-void __meminit memmap_init_zone(struct zone *zone)
-{
-	int nid = zone_to_nid(zone), zone_id = zone_idx(zone);
-	unsigned long start_pfn = zone->zone_start_pfn;
-	unsigned long size = zone->spanned_pages;
-
-	if (!vmem_map) {
-		memmap_init_range(size, nid, zone_id, start_pfn, start_pfn + size,
-				 MEMINIT_EARLY, NULL, MIGRATE_MOVABLE);
-	} else {
-		struct page *start;
-		struct memmap_init_callback_data args;
-
-		start = pfn_to_page(start_pfn);
-		args.start = start;
-		args.end = start + size;
-		args.nid = nid;
-		args.zone = zone_id;
-
-		efi_memmap_walk(virtual_memmap_init, &args);
-	}
-}
-
-int
-ia64_pfn_valid (unsigned long pfn)
-{
-	char byte;
-	struct page *pg = pfn_to_page(pfn);
-
-	return     (__get_user(byte, (char __user *) pg) == 0)
-		&& ((((u64)pg & PAGE_MASK) == (((u64)(pg + 1) - 1) & PAGE_MASK))
-			|| (__get_user(byte, (char __user *) (pg + 1) - 1) == 0));
-}
-EXPORT_SYMBOL(ia64_pfn_valid);
-
-#endif /* CONFIG_VIRTUAL_MEM_MAP */
-
 int __init register_active_ranges(u64 start, u64 len, int nid)
 {
 	u64 end = start + len;
--- a/arch/ia64/mm/Makefile~ia64-drop-marked-broken-discontigmem-and-virtual_mem_map
+++ a/arch/ia64/mm/Makefile
@@ -7,6 +7,5 @@ obj-y := init.o fault.o tlb.o extable.o
 
 obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o
 obj-$(CONFIG_NUMA)	   += numa.o
-obj-$(CONFIG_DISCONTIGMEM) += discontig.o
 obj-$(CONFIG_SPARSEMEM)	   += discontig.o
 obj-$(CONFIG_FLATMEM)	   += contig.o
_

  parent reply	other threads:[~2021-04-30  5:53 UTC|newest]

Thread overview: 197+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-30  5:52 incoming Andrew Morton
2021-04-30  5:53 ` [patch 001/178] arch/ia64/kernel/head.S: remove duplicate include Andrew Morton
2021-04-30  5:53 ` [patch 002/178] arch/ia64/kernel/fsys.S: fix typos Andrew Morton
2021-04-30  5:53 ` [patch 003/178] arch/ia64/include/asm/pgtable.h: minor typo fixes Andrew Morton
2021-04-30  5:53 ` [patch 004/178] ia64: ensure proper NUMA distance and possible map initialization Andrew Morton
2021-04-30  5:53 ` [patch 005/178] ia64: drop unused IA64_FW_EMU ifdef Andrew Morton
2021-04-30  5:53 ` [patch 006/178] ia64: simplify code flow around swiotlb init Andrew Morton
2021-04-30  5:53 ` [patch 007/178] ia64: trivial spelling fixes Andrew Morton
2021-04-30  5:53 ` [patch 008/178] ia64: fix EFI_DEBUG build Andrew Morton
2021-04-30  5:53 ` [patch 009/178] ia64: mca: always make IA64_MCA_DEBUG an expression Andrew Morton
2021-04-30  5:53 ` Andrew Morton [this message]
2021-04-30  5:53 ` [patch 011/178] ia64: module: fix symbolizer crash on fdescr Andrew Morton
2021-04-30  5:53 ` [patch 012/178] include/linux/compiler-gcc.h: sparse can do constant folding of __builtin_bswap*() Andrew Morton
2021-04-30  5:53 ` [patch 013/178] scripts/spelling.txt: add entries for recent discoveries Andrew Morton
2021-04-30  5:53 ` [patch 014/178] scripts: a new script for checking duplicate struct declaration Andrew Morton
2021-04-30  5:53 ` [patch 015/178] arch/sh/include/asm/tlb.h: remove duplicate include Andrew Morton
2021-04-30  5:54 ` [patch 016/178] ocfs2: replace DEFINE_SIMPLE_ATTRIBUTE with DEFINE_DEBUGFS_ATTRIBUTE Andrew Morton
2021-04-30  5:54 ` [patch 017/178] ocfs2: map flags directly in flags_to_o2dlm() Andrew Morton
2021-04-30  5:54 ` [patch 018/178] ocfs2: fix a typo Andrew Morton
2021-04-30  5:54 ` [patch 019/178] ocfs2/dlm: remove unused function Andrew Morton
2021-04-30  5:54 ` [patch 020/178] kfifo: fix ternary sign extension bugs Andrew Morton
2021-04-30  5:54 ` [patch 021/178] vfs: fs_parser: clean up kernel-doc warnings Andrew Morton
2021-04-30  5:54 ` [patch 022/178] watchdog: rename __touch_watchdog() to a better descriptive name Andrew Morton
2021-04-30  5:54 ` [patch 023/178] watchdog: explicitly update timestamp when reporting softlockup Andrew Morton
2021-04-30  5:54 ` [patch 024/178] watchdog/softlockup: report the overall time of softlockups Andrew Morton
2021-04-30  5:54 ` [patch 025/178] watchdog/softlockup: remove logic that tried to prevent repeated reports Andrew Morton
2021-04-30  5:54 ` [patch 026/178] watchdog: fix barriers when printing backtraces from all CPUs Andrew Morton
2021-04-30  5:54 ` [patch 027/178] watchdog: cleanup handling of false positives Andrew Morton
2021-04-30  5:54 ` [patch 028/178] mm/slab_common: provide "slab_merge" option for !IS_ENABLED(CONFIG_SLAB_MERGE_DEFAULT) builds Andrew Morton
2021-04-30  5:54 ` [patch 029/178] mm, slub: enable slub_debug static key when creating cache with explicit debug flags Andrew Morton
2021-04-30  5:54 ` [patch 030/178] kunit: add a KUnit test for SLUB debugging functionality Andrew Morton
2021-04-30  8:50   ` Vlastimil Babka
2021-04-30 16:31     ` Linus Torvalds
2021-04-30 16:31       ` Linus Torvalds
2021-04-30  5:54 ` [patch 031/178] slub: remove resiliency_test() function Andrew Morton
2021-04-30  5:54 ` [patch 032/178] mm/slub.c: trivial typo fixes Andrew Morton
2021-04-30  5:54 ` [patch 033/178] mm/kmemleak.c: fix a typo Andrew Morton
2021-04-30  5:54 ` [patch 034/178] mm/page_owner: record the timestamp of all pages during free Andrew Morton
2021-04-30  5:55 ` [patch 035/178] mm, page_owner: remove unused parameter in __set_page_owner_handle Andrew Morton
2021-04-30  5:55 ` [patch 036/178] mm: page_owner: fetch backtrace only for tracked pages Andrew Morton
2021-04-30  5:55 ` [patch 037/178] mm: page_owner: use kstrtobool() to parse bool option Andrew Morton
2021-04-30  5:55 ` [patch 038/178] mm: page_owner: detect page_owner recursion via task_struct Andrew Morton
2021-04-30  5:55 ` [patch 039/178] mm: page_poison: print page info when corruption is caught Andrew Morton
2021-04-30  5:55 ` [patch 040/178] mm/memtest: add ARCH_USE_MEMTEST Andrew Morton
2021-04-30  5:55 ` [patch 041/178] mm: provide filemap_range_needs_writeback() helper Andrew Morton
2021-04-30 16:50   ` Linus Torvalds
2021-04-30 16:50     ` Linus Torvalds
2021-05-09 19:40     ` Matthew Wilcox
2024-02-19 21:59       ` Matthew Wilcox
2024-02-20  4:30         ` Jens Axboe
2024-02-20 13:38         ` Jan Kara
2021-04-30  5:55 ` [patch 042/178] mm: use filemap_range_needs_writeback() for O_DIRECT reads Andrew Morton
2021-04-30  5:55 ` [patch 043/178] iomap: " Andrew Morton
2021-04-30  5:55 ` [patch 044/178] mm/filemap: use filemap_read_page in filemap_fault Andrew Morton
2021-04-30  5:55 ` [patch 045/178] mm/filemap: drop check for truncated page after I/O Andrew Morton
2021-04-30  5:55 ` [patch 046/178] mm: page-writeback: simplify memcg handling in test_clear_page_writeback() Andrew Morton
2021-04-30  5:55 ` [patch 047/178] mm: move page_mapping_file to pagemap.h Andrew Morton
2021-04-30  5:55 ` [patch 048/178] mm/filemap: update stale comment Andrew Morton
2021-04-30  5:55 ` [patch 049/178] mm/msync: exit early when the flags is an MS_ASYNC and start < vm_start Andrew Morton
2021-04-30  5:55 ` [patch 050/178] mm/gup: add compound page list iterator Andrew Morton
2021-04-30  5:55 ` [patch 051/178] mm/gup: decrement head page once for group of subpages Andrew Morton
2021-04-30  5:55 ` [patch 052/178] mm/gup: add a range variant of unpin_user_pages_dirty_lock() Andrew Morton
2021-04-30  5:55 ` [patch 053/178] RDMA/umem: batch page unpin in __ib_umem_release() Andrew Morton
2021-04-30  5:55 ` [patch 054/178] mm: gup: remove FOLL_SPLIT Andrew Morton
2021-04-30  5:55 ` [patch 055/178] mm/memremap.c: fix improper SPDX comment style Andrew Morton
2021-04-30  5:56 ` [patch 056/178] mm: memcontrol: fix kernel stack account Andrew Morton
2021-04-30  5:56 ` [patch 057/178] memcg: cleanup root memcg checks Andrew Morton
2021-04-30  5:56 ` [patch 058/178] memcg: enable memcg oom-kill for __GFP_NOFAIL Andrew Morton
2021-04-30  5:56 ` [patch 059/178] mm: memcontrol: fix cpuhotplug statistics flushing Andrew Morton
2021-04-30  5:56 ` [patch 060/178] mm: memcontrol: kill mem_cgroup_nodeinfo() Andrew Morton
2021-04-30  5:56 ` [patch 061/178] mm: memcontrol: privatize memcg_page_state query functions Andrew Morton
2021-04-30  5:56 ` [patch 062/178] cgroup: rstat: support cgroup1 Andrew Morton
2021-04-30  5:56 ` [patch 063/178] cgroup: rstat: punt root-level optimization to individual controllers Andrew Morton
2021-04-30  5:56 ` [patch 064/178] mm: memcontrol: switch to rstat Andrew Morton
2021-04-30  5:56 ` [patch 065/178] mm: memcontrol: consolidate lruvec stat flushing Andrew Morton
2021-04-30  5:56 ` [patch 066/178] kselftests: cgroup: update kmem test for new vmstat implementation Andrew Morton
2021-04-30  5:56 ` [patch 067/178] memcg: charge before adding to swapcache on swapin Andrew Morton
2021-04-30  5:56 ` [patch 068/178] mm: memcontrol: slab: fix obtain a reference to a freeing memcg Andrew Morton
2021-04-30  5:56 ` [patch 069/178] mm: memcontrol: introduce obj_cgroup_{un}charge_pages Andrew Morton
2021-04-30  5:56 ` [patch 070/178] mm: memcontrol: directly access page->memcg_data in mm/page_alloc.c Andrew Morton
2021-04-30  5:56 ` [patch 071/178] mm: memcontrol: change ug->dummy_page only if memcg changed Andrew Morton
2021-04-30  5:56 ` [patch 072/178] mm: memcontrol: use obj_cgroup APIs to charge kmem pages Andrew Morton
2021-04-30  5:56 ` [patch 073/178] mm: memcontrol: inline __memcg_kmem_{un}charge() into obj_cgroup_{un}charge_pages() Andrew Morton
2021-04-30  5:56 ` [patch 074/178] mm: memcontrol: move PageMemcgKmem to the scope of CONFIG_MEMCG_KMEM Andrew Morton
2021-04-30  5:57 ` [patch 075/178] linux/memcontrol.h: remove duplicate struct declaration Andrew Morton
2021-04-30  5:57 ` [patch 076/178] mm: page_counter: mitigate consequences of a page_counter underflow Andrew Morton
2021-04-30  5:57 ` [patch 077/178] mm/memory.c: do_numa_page(): delete bool "migrated" Andrew Morton
2021-04-30  5:57 ` [patch 078/178] mm/interval_tree: add comments to improve code readability Andrew Morton
2021-04-30  5:57 ` [patch 079/178] x86/vmemmap: drop handling of 4K unaligned vmemmap range Andrew Morton
2021-04-30  5:57 ` [patch 080/178] x86/vmemmap: drop handling of 1GB vmemmap ranges Andrew Morton
2021-04-30  5:57 ` [patch 081/178] x86/vmemmap: handle unpopulated sub-pmd ranges Andrew Morton
2021-04-30  5:57 ` [patch 082/178] x86/vmemmap: optimize for consecutive sections in partial populated PMDs Andrew Morton
2021-04-30  5:57 ` [patch 083/178] mm, tracing: improve rss_stat tracepoint message Andrew Morton
2021-04-30  5:57 ` [patch 084/178] mm: add remap_pfn_range_notrack Andrew Morton
2021-04-30  5:57 ` [patch 085/178] mm: add a io_mapping_map_user helper Andrew Morton
2021-04-30  5:57 ` [patch 086/178] i915: use io_mapping_map_user Andrew Morton
2021-04-30  5:57 ` [patch 087/178] i915: fix remap_io_sg to verify the pgprot Andrew Morton
2021-04-30  5:57 ` [patch 088/178] NUMA balancing: reduce TLB flush via delaying mapping on hint page fault Andrew Morton
2021-04-30  5:57 ` [patch 089/178] mm: extend MREMAP_DONTUNMAP to non-anonymous mappings Andrew Morton
2021-04-30  5:57 ` [patch 090/178] Revert "mremap: don't allow MREMAP_DONTUNMAP on special_mappings and aio" Andrew Morton
2021-04-30  5:57 ` [patch 091/178] selftests: add a MREMAP_DONTUNMAP selftest for shmem Andrew Morton
2021-04-30  5:57 ` [patch 092/178] mm/dmapool: switch from strlcpy to strscpy Andrew Morton
2021-04-30  5:57 ` [patch 093/178] mm/sparse: add the missing sparse_buffer_fini() in error branch Andrew Morton
2021-04-30  5:58 ` [patch 094/178] samples/vfio-mdev/mdpy: use remap_vmalloc_range Andrew Morton
2021-04-30  5:58 ` [patch 095/178] mm: unexport remap_vmalloc_range_partial Andrew Morton
2021-04-30  5:58 ` [patch 096/178] mm/vmalloc: use rb_tree instead of list for vread() lookups Andrew Morton
2021-04-30  5:58 ` [patch 097/178] ARM: mm: add missing pud_page define to 2-level page tables Andrew Morton
2021-04-30  5:58 ` [patch 098/178] mm/vmalloc: fix HUGE_VMAP regression by enabling huge pages in vmalloc_to_page Andrew Morton
2021-04-30  5:58 ` [patch 099/178] mm: apply_to_pte_range warn and fail if a large pte is encountered Andrew Morton
2021-04-30  5:58 ` [patch 100/178] mm/vmalloc: rename vmap_*_range vmap_pages_*_range Andrew Morton
2021-04-30  5:58 ` [patch 101/178] mm/ioremap: rename ioremap_*_range to vmap_*_range Andrew Morton
2021-04-30  5:58 ` [patch 102/178] mm: HUGE_VMAP arch support cleanup Andrew Morton
2021-04-30  5:58 ` [patch 103/178] powerpc: inline huge vmap supported functions Andrew Morton
2021-04-30  5:58 ` [patch 104/178] arm64: " Andrew Morton
2021-04-30  5:58 ` [patch 105/178] x86: " Andrew Morton
2021-04-30  5:58 ` [patch 106/178] mm/vmalloc: provide fallback arch huge vmap support functions Andrew Morton
2021-04-30  5:58 ` [patch 107/178] mm: move vmap_range from mm/ioremap.c to mm/vmalloc.c Andrew Morton
2021-04-30  5:58 ` [patch 108/178] mm/vmalloc: add vmap_range_noflush variant Andrew Morton
2021-04-30  5:58 ` [patch 109/178] mm/vmalloc: hugepage vmalloc mappings Andrew Morton
2021-04-30  5:58 ` [patch 110/178] mm/vmalloc: remove map_kernel_range Andrew Morton
2021-04-30  5:58 ` [patch 111/178] kernel/dma: remove unnecessary unmap_kernel_range Andrew Morton
2021-04-30  5:58 ` [patch 112/178] powerpc/xive: " Andrew Morton
2021-04-30  5:59 ` [patch 113/178] mm/vmalloc: remove unmap_kernel_range Andrew Morton
2021-04-30  5:59 ` [patch 114/178] mm/vmalloc: improve allocation failure error messages Andrew Morton
2021-04-30  5:59 ` [patch 115/178] mm: vmalloc: prevent use after free in _vm_unmap_aliases Andrew Morton
2021-04-30  5:59 ` [patch 116/178] lib/test_vmalloc.c: remove two kvfree_rcu() tests Andrew Morton
2021-04-30  5:59 ` [patch 117/178] lib/test_vmalloc.c: add a new 'nr_threads' parameter Andrew Morton
2021-04-30  5:59 ` [patch 118/178] vm/test_vmalloc.sh: adapt for updated driver interface Andrew Morton
2021-04-30  5:59 ` [patch 119/178] mm/vmalloc: refactor the preloading loagic Andrew Morton
2021-04-30  5:59 ` [patch 120/178] mm/vmalloc: remove an empty line Andrew Morton
2021-04-30  5:59 ` [patch 121/178] mm/doc: fix fault_flag_allow_retry_first kerneldoc Andrew Morton
2021-04-30  5:59 ` [patch 122/178] mm/doc: fix page_maybe_dma_pinned kerneldoc Andrew Morton
2021-04-30  5:59 ` [patch 123/178] mm/doc: turn fault flags into an enum Andrew Morton
2021-04-30  5:59 ` [patch 124/178] mm/doc: add mm.h and mm_types.h to the mm-api document Andrew Morton
2021-04-30  5:59 ` [patch 125/178] MAINTAINERS: assign pagewalk.h to MEMORY MANAGEMENT Andrew Morton
2021-04-30  5:59 ` [patch 126/178] pagewalk: prefix struct kernel-doc descriptions Andrew Morton
2021-04-30  5:59 ` [patch 127/178] mm/kasan: switch from strlcpy to strscpy Andrew Morton
2021-04-30  5:59 ` [patch 128/178] kasan: fix kasan_byte_accessible() to be consistent with actual checks Andrew Morton
2021-04-30  5:59 ` [patch 129/178] kasan: initialize shadow to TAG_INVALID for SW_TAGS Andrew Morton
2021-04-30  5:59 ` [patch 130/178] mm, kasan: don't poison boot memory with tag-based modes Andrew Morton
2021-04-30  5:59 ` [patch 131/178] arm64: kasan: allow to init memory when setting tags Andrew Morton
2021-04-30  5:59 ` [patch 132/178] kasan: init memory in kasan_(un)poison for HW_TAGS Andrew Morton
2021-04-30  6:00 ` [patch 133/178] kasan, mm: integrate page_alloc init with HW_TAGS Andrew Morton
2021-04-30  6:00 ` [patch 134/178] kasan, mm: integrate slab init_on_alloc " Andrew Morton
2021-04-30  6:00 ` [patch 135/178] kasan, mm: integrate slab init_on_free " Andrew Morton
2021-04-30  6:00 ` [patch 136/178] kasan: docs: clean up sections Andrew Morton
2021-04-30  6:00 ` [patch 137/178] kasan: docs: update overview section Andrew Morton
2021-04-30  6:00 ` [patch 138/178] kasan: docs: update usage section Andrew Morton
2021-04-30  6:00 ` [patch 139/178] kasan: docs: update error reports section Andrew Morton
2021-04-30  6:00 ` [patch 140/178] kasan: docs: update boot parameters section Andrew Morton
2021-04-30  6:00 ` [patch 141/178] kasan: docs: update GENERIC implementation details section Andrew Morton
2021-04-30  6:00 ` [patch 142/178] kasan: docs: update SW_TAGS " Andrew Morton
2021-04-30  6:00 ` [patch 143/178] kasan: docs: update HW_TAGS " Andrew Morton
2021-04-30  6:00 ` [patch 144/178] kasan: docs: update shadow memory section Andrew Morton
2021-04-30  6:00 ` [patch 145/178] kasan: docs: update ignoring accesses section Andrew Morton
2021-04-30  6:00 ` [patch 146/178] kasan: docs: update tests section Andrew Morton
2021-04-30  6:00 ` [patch 147/178] kasan: record task_work_add() call stack Andrew Morton
2021-04-30  6:00 ` [patch 148/178] kasan: detect false-positives in tests Andrew Morton
2021-04-30 18:32   ` Linus Torvalds
2021-04-30 18:32     ` Linus Torvalds
2021-05-02 18:04     ` Andrew Morton
2021-05-02 19:08       ` Linus Torvalds
2021-05-02 19:08         ` Linus Torvalds
2021-05-03 18:44         ` Andrew Morton
2021-04-30  6:00 ` [patch 149/178] irq_work: record irq_work_queue() call stack Andrew Morton
2021-04-30  6:00 ` [patch 150/178] mm: move mem_init_print_info() into mm_init() Andrew Morton
2021-04-30  6:00 ` [patch 151/178] mm/page_alloc: drop pr_info_ratelimited() in alloc_contig_range() Andrew Morton
2021-04-30  6:01 ` [patch 152/178] mm: remove lru_add_drain_all in alloc_contig_range Andrew Morton
2021-04-30  6:01 ` [patch 153/178] include/linux/page-flags-layout.h: correctly determine LAST_CPUPID_WIDTH Andrew Morton
2021-04-30  6:01 ` [patch 154/178] include/linux/page-flags-layout.h: cleanups Andrew Morton
2021-04-30  6:01 ` [patch 155/178] mm/page_alloc: rename alloc_mask to alloc_gfp Andrew Morton
2021-04-30  6:01 ` [patch 156/178] mm/page_alloc: rename gfp_mask to gfp Andrew Morton
2021-04-30  6:01 ` [patch 157/178] mm/page_alloc: combine __alloc_pages and __alloc_pages_nodemask Andrew Morton
2021-04-30  6:01 ` [patch 158/178] mm/mempolicy: rename alloc_pages_current to alloc_pages Andrew Morton
2021-04-30  6:01 ` [patch 159/178] mm/mempolicy: rewrite alloc_pages documentation Andrew Morton
2021-04-30  6:01 ` [patch 160/178] mm/mempolicy: rewrite alloc_pages_vma documentation Andrew Morton
2021-04-30  6:01 ` [patch 161/178] mm/mempolicy: fix mpol_misplaced kernel-doc Andrew Morton
2021-04-30  6:01 ` [patch 162/178] mm: page_alloc: dump migrate-failed pages Andrew Morton
2021-05-02  3:10   ` jim.cromie
2021-05-02  3:10     ` jim.cromie
2021-04-30  6:01 ` [patch 163/178] mm/Kconfig: remove default DISCONTIGMEM_MANUAL Andrew Morton
2021-04-30  6:01 ` [patch 164/178] mm, page_alloc: avoid page_to_pfn() in move_freepages() Andrew Morton
2021-04-30  6:01 ` [patch 165/178] mm/page_alloc: duplicate include linux/vmalloc.h Andrew Morton
2021-04-30  6:01 ` [patch 166/178] mm/page_alloc: rename alloced to allocated Andrew Morton
2021-04-30  6:01 ` [patch 167/178] mm/page_alloc: add a bulk page allocator Andrew Morton
2021-04-30  6:01 ` [patch 168/178] mm/page_alloc: add an array-based interface to the " Andrew Morton
2021-04-30  6:01 ` [patch 169/178] mm/page_alloc: optimize code layout for __alloc_pages_bulk Andrew Morton
2021-04-30  6:01 ` [patch 170/178] mm/page_alloc: inline __rmqueue_pcplist Andrew Morton
2021-04-30  6:01 ` [patch 171/178] SUNRPC: set rq_page_end differently Andrew Morton
2021-04-30  6:02 ` [patch 172/178] SUNRPC: refresh rq_pages using a bulk page allocator Andrew Morton
2021-04-30  6:02 ` [patch 173/178] net: page_pool: refactor dma_map into own function page_pool_dma_map Andrew Morton
2021-04-30  6:02 ` [patch 174/178] net: page_pool: use alloc_pages_bulk in refill code path Andrew Morton
2021-04-30  6:02 ` [patch 175/178] mm: page_alloc: ignore init_on_free=1 for debug_pagealloc=1 Andrew Morton
2021-04-30  6:02 ` [patch 176/178] mm/page_alloc: redundant definition variables of pfn in for loop Andrew Morton
2021-04-30 17:10   ` Linus Torvalds
2021-04-30  6:02 ` [patch 177/178] mm/mmzone.h: fix existing kernel-doc comments and link them to core-api Andrew Morton
2021-04-30  6:02 ` [patch 178/178] mm/memory-failure: unnecessary amount of unmapping Andrew Morton

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210430055345.L0PJxk-So%akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mm-commits@vger.kernel.org \
    --cc=slyfox@gentoo.org \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.