91eea67c6d
We need to keep track of the backing pages that get allocated by vmemmap_populate() so that when we use kdump, the dump-capture kernel knows where these pages are. We use a simple linked list of structures that contain the physical address of the backing page and corresponding virtual address to track the backing pages. To save space, we just use a pointer to the next struct vmemmap_backing. We can also do this because we never remove nodes. We call the pointer "list" to be compatible with changes made to the crash utility. vmemmap_populate() is called either at boot-time or on a memory hotplug operation. We don't have to worry about the boot-time calls because they will be inherently single-threaded, and for a memory hotplug operation vmemmap_populate() is called through: sparse_add_one_section() | V kmalloc_section_memmap() | V sparse_mem_map_populate() | V vmemmap_populate() and in sparse_add_one_section() we're protected by pgdat_resize_lock(). So, we don't need a spinlock to protect the vmemmap_list. We allocate space for the vmemmap_backing structs by allocating whole pages in vmemmap_list_alloc() and then handing out chunks of this to vmemmap_list_populate(). This means that we waste at most just under one page, but this keeps the code is simple. Signed-off-by: Mark Nelson <markn@au1.ibm.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> |
||
---|---|---|
.. | ||
40x_mmu.c | ||
44x_mmu.c | ||
dma-noncoherent.c | ||
fault.c | ||
fsl_booke_mmu.c | ||
gup.c | ||
hash_low_32.S | ||
hash_low_64.S | ||
hash_native_64.c | ||
hash_utils_64.c | ||
highmem.c | ||
hugetlbpage-hash64.c | ||
hugetlbpage.c | ||
init_32.c | ||
init_64.c | ||
Makefile | ||
mem.c | ||
mmap_64.c | ||
mmu_context_hash32.c | ||
mmu_context_hash64.c | ||
mmu_context_nohash.c | ||
mmu_decl.h | ||
numa.c | ||
pgtable.c | ||
pgtable_32.c | ||
pgtable_64.c | ||
ppc_mmu_32.c | ||
slb.c | ||
slb_low.S | ||
slice.c | ||
stab.c | ||
subpage-prot.c | ||
tlb_hash32.c | ||
tlb_hash64.c | ||
tlb_low_64e.S | ||
tlb_nohash.c | ||
tlb_nohash_low.S |