Memory hotplug is leading to hash page table calls, even on radix: ... arch_add_memory create_section_mapping htab_bolt_mapping BUG_ON(!ppc_md.hpte_insert);
To fix, refactor {create,remove}_section_mapping() into hash__ and radix__ variants. Implement the radix versions by borrowing from existing vmemmap and x86 code. This passes basic verification of plugging and removing memory, but this stuff is tricky and I'd appreciate extra scrutiny of the series for correctness--in particular, the adaptation of remove_pagetable() from x86. /* changelog */ v3: * Port remove_pagetable() et al. from x86 for unmapping. * [RFC] -> [PATCH] v2: * https://lkml.kernel.org/r/1471449083-15931-1-git-send-email-ar...@linux.vnet.ibm.com * Do not simply fall through to vmemmap_{create,remove}_mapping(). As Aneesh and Michael pointed out, they are tied to CONFIG_SPARSEMEM_VMEMMAP and only did what I needed by luck anyway. v1: * https://lkml.kernel.org/r/1466699962-22412-1-git-send-email-ar...@linux.vnet.ibm.com Reza Arbab (5): powerpc/mm: set the radix linear page mapping size powerpc/mm: refactor {create,remove}_section_mapping() powerpc/mm: add radix__create_section_mapping() powerpc/mm: add radix__remove_section_mapping() powerpc/mm: unstub radix__vmemmap_remove_mapping() arch/powerpc/include/asm/book3s/64/hash.h | 5 + arch/powerpc/include/asm/book3s/64/radix.h | 5 + arch/powerpc/mm/hash_utils_64.c | 4 +- arch/powerpc/mm/pgtable-book3s64.c | 18 +++ arch/powerpc/mm/pgtable-radix.c | 207 ++++++++++++++++++++++++++++- 5 files changed, 236 insertions(+), 3 deletions(-) -- 1.8.3.1