[PATCH v14 04/10] set_memory: allow querying whether set_direct_map_*() is actually enabled

Mike Rapoport rppt at linux.ibm.com
Sun Dec 6 06:28:26 EST 2020


On Thu, Dec 03, 2020 at 03:36:10PM -0800, Andrew Morton wrote:
> On Thu,  3 Dec 2020 08:29:43 +0200 Mike Rapoport <rppt at kernel.org> wrote:
> 
> > From: Mike Rapoport <rppt at linux.ibm.com>
> > 
> > On arm64, set_direct_map_*() functions may return 0 without actually
> > changing the linear map. This behaviour can be controlled using kernel
> > parameters, so we need a way to determine at runtime whether calls to
> > set_direct_map_invalid_noflush() and set_direct_map_default_noflush() have
> > any effect.
> > 
> > Extend set_memory API with can_set_direct_map() function that allows
> > checking if calling set_direct_map_*() will actually change the page table,
> > replace several occurrences of open coded checks in arm64 with the new
> > function and provide a generic stub for architectures that always modify
> > page tables upon calls to set_direct_map APIs.
> > 
> > ...
> >
> > --- a/arch/arm64/mm/mmu.c
> > +++ b/arch/arm64/mm/mmu.c
> > @@ -22,6 +22,7 @@
> >  #include <linux/io.h>
> >  #include <linux/mm.h>
> >  #include <linux/vmalloc.h>
> > +#include <linux/set_memory.h>
> >  
> >  #include <asm/barrier.h>
> >  #include <asm/cputype.h>
> > @@ -477,7 +478,7 @@ static void __init map_mem(pgd_t *pgdp)
> >  	int flags = 0;
> >  	u64 i;
> >  
> > -	if (rodata_full || debug_pagealloc_enabled())
> > +	if (can_set_direct_map())
> >  		flags = NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS;
> 
> Changes in -next turned this into
> 
> 	if (can_set_direct_map() || crash_mem_map)

Thanks for updating!

-- 
Sincerely yours,
Mike.



More information about the linux-arm-kernel mailing list