diff options
author | Tony Lindgren <tony@atomide.com> | 2021-03-08 11:34:12 +0200 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2021-03-08 11:34:12 +0200 |
commit | 4c9f4865f4604744d4f1a43db22ac6ec9dc8e587 (patch) | |
tree | 46abf93c9b90b880464772ce7d23309ee3616b91 /arch/sparc/include/asm/mman.h | |
parent | effe89e40037038db7711bdab5d3401fe297d72c (diff) | |
parent | 77335a040178a0456d4eabc8bf17a7ca3ee4a327 (diff) | |
download | linux-stable-4c9f4865f4604744d4f1a43db22ac6ec9dc8e587.tar.gz linux-stable-4c9f4865f4604744d4f1a43db22ac6ec9dc8e587.tar.bz2 linux-stable-4c9f4865f4604744d4f1a43db22ac6ec9dc8e587.zip |
Merge branch 'fixes-rc2' into fixes
Diffstat (limited to 'arch/sparc/include/asm/mman.h')
-rw-r--r-- | arch/sparc/include/asm/mman.h | 54 |
1 files changed, 29 insertions, 25 deletions
diff --git a/arch/sparc/include/asm/mman.h b/arch/sparc/include/asm/mman.h index f94532f25db1..274217e7ed70 100644 --- a/arch/sparc/include/asm/mman.h +++ b/arch/sparc/include/asm/mman.h @@ -57,35 +57,39 @@ static inline int sparc_validate_prot(unsigned long prot, unsigned long addr) { if (prot & ~(PROT_READ | PROT_WRITE | PROT_EXEC | PROT_SEM | PROT_ADI)) return 0; - if (prot & PROT_ADI) { - if (!adi_capable()) - return 0; + return 1; +} - if (addr) { - struct vm_area_struct *vma; +#define arch_validate_flags(vm_flags) arch_validate_flags(vm_flags) +/* arch_validate_flags() - Ensure combination of flags is valid for a + * VMA. + */ +static inline bool arch_validate_flags(unsigned long vm_flags) +{ + /* If ADI is being enabled on this VMA, check for ADI + * capability on the platform and ensure VMA is suitable + * for ADI + */ + if (vm_flags & VM_SPARC_ADI) { + if (!adi_capable()) + return false; - vma = find_vma(current->mm, addr); - if (vma) { - /* ADI can not be enabled on PFN - * mapped pages - */ - if (vma->vm_flags & (VM_PFNMAP | VM_MIXEDMAP)) - return 0; + /* ADI can not be enabled on PFN mapped pages */ + if (vm_flags & (VM_PFNMAP | VM_MIXEDMAP)) + return false; - /* Mergeable pages can become unmergeable - * if ADI is enabled on them even if they - * have identical data on them. This can be - * because ADI enabled pages with identical - * data may still not have identical ADI - * tags on them. Disallow ADI on mergeable - * pages. - */ - if (vma->vm_flags & VM_MERGEABLE) - return 0; - } - } + /* Mergeable pages can become unmergeable + * if ADI is enabled on them even if they + * have identical data on them. This can be + * because ADI enabled pages with identical + * data may still not have identical ADI + * tags on them. Disallow ADI on mergeable + * pages. + */ + if (vm_flags & VM_MERGEABLE) + return false; } - return 1; + return true; } #endif /* CONFIG_SPARC64 */ |