Message ID | 20200624175244.25837-12-catalin.marinas@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | arm64: Memory Tagging Extension user-space support | expand |
On Wed, 24 Jun 2020 18:52:30 +0100 Catalin Marinas <catalin.marinas@arm.com> wrote: > From: Kevin Brodsky <Kevin.Brodsky@arm.com> > > 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);
On Wed, Jun 24, 2020 at 11:36:11AM -0700, Andrew Morton wrote: > On Wed, 24 Jun 2020 18:52:30 +0100 Catalin Marinas <catalin.marinas@arm.com> wrote: > > From: Kevin Brodsky <Kevin.Brodsky@arm.com> > > 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. I'll add a comment that the overriding definitions need to go in the arch asm/mman.h file. Thanks.
diff --git a/include/linux/mman.h b/include/linux/mman.h index 4b08e9c9c538..15c1162b9d65 100644 --- 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 + #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);