On Wed, 24 Jun 2020 18:52:30 +0100 Catalin Marinas <catalin.marinas@xxxxxxx> wrote: > From: Kevin Brodsky <Kevin.Brodsky@xxxxxxx> > > Similarly to arch_calc_vm_prot_bits(), introduce a dummy > arch_calc_vm_flag_bits() invoked from calc_vm_flag_bits(). This macro > can be overridden by architectures to insert specific VM_* flags derived > from the mmap() MAP_* flags. > > ... > > --- a/include/linux/mman.h > +++ b/include/linux/mman.h > @@ -74,13 +74,17 @@ static inline void vm_unacct_memory(long pages) > } > > /* > - * Allow architectures to handle additional protection bits > + * Allow architectures to handle additional protection and flag bits > */ > > #ifndef arch_calc_vm_prot_bits > #define arch_calc_vm_prot_bits(prot, pkey) 0 > #endif > > +#ifndef arch_calc_vm_flag_bits > +#define arch_calc_vm_flag_bits(flags) 0 > +#endif It would be helpful to add a comment specifying which arch header file is responsible for defining arch_calc_vm_flag_bits. Because in the past we've messed this sort of thing up and had different architectures define things in different header files, resulting in build issues as code evolves. > #ifndef arch_vm_get_page_prot > #define arch_vm_get_page_prot(vm_flags) __pgprot(0) > #endif > @@ -131,7 +135,8 @@ calc_vm_flag_bits(unsigned long flags) > return _calc_vm_trans(flags, MAP_GROWSDOWN, VM_GROWSDOWN ) | > _calc_vm_trans(flags, MAP_DENYWRITE, VM_DENYWRITE ) | > _calc_vm_trans(flags, MAP_LOCKED, VM_LOCKED ) | > - _calc_vm_trans(flags, MAP_SYNC, VM_SYNC ); > + _calc_vm_trans(flags, MAP_SYNC, VM_SYNC ) | > + arch_calc_vm_flag_bits(flags); > } > > unsigned long vm_commit_limit(void);