Jordan Niethe <jniet...@gmail.com> writes: > There is support for DEBUG_PAGEALLOC on hash but not on radix. > Add support on radix.
Somewhat off-topic but I wonder at what point we can drop the weird !PPC condition in mm/Kconfig.debug: config DEBUG_PAGEALLOC bool "Debug page memory allocations" depends on DEBUG_KERNEL depends on !HIBERNATION || ARCH_SUPPORTS_DEBUG_PAGEALLOC && !PPC && !SPARC I can't figure out from git history why it exists or if it still serves any function. Given that HIBERNATION isn't much use on Book3S systems it probably never matters, it just bugs me a bit. Again, nothing that has to block this series, just maybe something to follow up at some vague and undefined point in the future! > diff --git a/arch/powerpc/include/asm/book3s/64/pgtable.h > b/arch/powerpc/include/asm/book3s/64/pgtable.h > index a666d561b44d..b89482aed82a 100644 > --- a/arch/powerpc/include/asm/book3s/64/pgtable.h > +++ b/arch/powerpc/include/asm/book3s/64/pgtable.h > @@ -812,6 +822,15 @@ static inline bool check_pte_access(unsigned long > access, unsigned long ptev) > * Generic functions with hash/radix callbacks > */ > > +#ifdef CONFIG_DEBUG_PAGEALLOC > +static inline void __kernel_map_pages(struct page *page, int numpages, int > enable) > +{ > + if (radix_enabled()) > + radix__kernel_map_pages(page, numpages, enable); > + hash__kernel_map_pages(page, numpages, enable); Does this require an else? On radix we will call both radix__ and hash__kernel_map_pages. I notice we call both hash__ and radix__ in map_kernel_page under radix, so maybe this makes sense? I don't fully understand the mechanism by which memory removal works: it looks like on radix you mark the page as 'absent', which I think is enough? Then you fall through to the hash code here: for (i = 0; i < numpages; i++, page++) { vaddr = (unsigned long)page_address(page); lmi = __pa(vaddr) >> PAGE_SHIFT; if (lmi >= linear_map_hash_count) continue; I think linear_map_hash_count will be zero unless it gets inited to a non-zero value in htab_initialize(). I am fairly sure htab_initialize() doesn't get called for a radix MMU. In that case you'll just `continue;` out of every iteration of the loop, which would explain why nothing weird would happen on radix. Have I missed something here? The rest of the patch looks good to me. Kind regards, Daniel