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 <mathieu.desnoy...@efficios.com> CC: "Paul E. McKenney" <paul...@linux.vnet.ibm.com> CC: Peter Zijlstra <pet...@infradead.org> CC: Paul Turner <p...@google.com> CC: Thomas Gleixner <t...@linutronix.de> CC: Andrew Hunter <a...@google.com> CC: Andy Lutomirski <l...@amacapital.net> CC: Andi Kleen <a...@firstfloor.org> CC: Dave Watson <davejwat...@fb.com> CC: Chris Lameter <c...@linux.com> CC: Ingo Molnar <mi...@redhat.com> CC: "H. Peter Anvin" <h...@zytor.com> CC: Ben Maurer <bmau...@fb.com> CC: Steven Rostedt <rost...@goodmis.org> CC: Josh Triplett <j...@joshtriplett.org> CC: Linus Torvalds <torva...@linux-foundation.org> CC: Andrew Morton <a...@linux-foundation.org> CC: Russell King <li...@arm.linux.org.uk> CC: Catalin Marinas <catalin.mari...@arm.com> CC: Will Deacon <will.dea...@arm.com> CC: Michael Kerrisk <mtk.manpa...@gmail.com> CC: Boqun Feng <boqun.f...@gmail.com> CC: linux...@kvack.org --- 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