1013de2d6SGuo Ren /* SPDX-License-Identifier: GPL-2.0 */
2013de2d6SGuo Ren
3*be819aa6SGuo Ren #include <asm/shmparam.h>
4*be819aa6SGuo Ren
5013de2d6SGuo Ren extern void flush_dcache_page(struct page *page);
6013de2d6SGuo Ren
pages_do_alias(unsigned long addr1,unsigned long addr2)7013de2d6SGuo Ren static inline unsigned long pages_do_alias(unsigned long addr1,
8013de2d6SGuo Ren unsigned long addr2)
9013de2d6SGuo Ren {
10*be819aa6SGuo Ren return (addr1 ^ addr2) & (SHMLBA-1);
11013de2d6SGuo Ren }
12013de2d6SGuo Ren
clear_user_page(void * addr,unsigned long vaddr,struct page * page)13013de2d6SGuo Ren static inline void clear_user_page(void *addr, unsigned long vaddr,
14013de2d6SGuo Ren struct page *page)
15013de2d6SGuo Ren {
16013de2d6SGuo Ren clear_page(addr);
17013de2d6SGuo Ren if (pages_do_alias((unsigned long) addr, vaddr & PAGE_MASK))
18013de2d6SGuo Ren flush_dcache_page(page);
19013de2d6SGuo Ren }
20013de2d6SGuo Ren
copy_user_page(void * to,void * from,unsigned long vaddr,struct page * page)21013de2d6SGuo Ren static inline void copy_user_page(void *to, void *from, unsigned long vaddr,
22013de2d6SGuo Ren struct page *page)
23013de2d6SGuo Ren {
24013de2d6SGuo Ren copy_page(to, from);
25013de2d6SGuo Ren if (pages_do_alias((unsigned long) to, vaddr & PAGE_MASK))
26013de2d6SGuo Ren flush_dcache_page(page);
27013de2d6SGuo Ren }
28