Provide is_vma_noncached() static inline to allow generic code to check whether the given vma consists of noncached memory.
Signed-off-by: Mathieu Desnoyers <[email protected]> CC: "Paul E. McKenney" <[email protected]> CC: Peter Zijlstra <[email protected]> CC: Paul Turner <[email protected]> CC: Thomas Gleixner <[email protected]> CC: Andrew Hunter <[email protected]> CC: Andy Lutomirski <[email protected]> CC: Andi Kleen <[email protected]> CC: Dave Watson <[email protected]> CC: Chris Lameter <[email protected]> CC: Ingo Molnar <[email protected]> CC: "H. Peter Anvin" <[email protected]> CC: Ben Maurer <[email protected]> CC: Steven Rostedt <[email protected]> CC: Josh Triplett <[email protected]> CC: Linus Torvalds <[email protected]> CC: Andrew Morton <[email protected]> CC: Russell King <[email protected]> CC: Catalin Marinas <[email protected]> CC: Will Deacon <[email protected]> CC: Michael Kerrisk <[email protected]> CC: Boqun Feng <[email protected]> CC: [email protected] --- include/linux/mm.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/include/linux/mm.h b/include/linux/mm.h index ad06d42adb1a..1f93a061a43b 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -2425,6 +2425,30 @@ static inline struct page *follow_page(struct vm_area_struct *vma, return follow_page_mask(vma, address, foll_flags, &unused_page_mask); } +static inline bool pgprot_same(pgprot_t a, pgprot_t b) +{ + return pgprot_val(a) == pgprot_val(b); +} + +#ifdef pgprot_noncached +static inline bool is_vma_noncached(struct vm_area_struct *vma) +{ + pgprot_t pgprot = vma->vm_page_prot; + + /* Check whether architecture implements noncached pages. */ + if (pgprot_same(pgprot_noncached(PAGE_KERNEL), PAGE_KERNEL)) + return false; + if (!pgprot_same(pgprot, pgprot_noncached(pgprot))) + return false; + return true; +} +#else +static inline bool is_vma_noncached(struct vm_area_struct *vma) +{ + return false; +} +#endif + #define FOLL_WRITE 0x01 /* check pte is writable */ #define FOLL_TOUCH 0x02 /* mark page accessed */ #define FOLL_GET 0x04 /* do get_page on page */ -- 2.11.0

