mm, hwpoison: try to recover from copy-on write faults
[linux-2.6-block.git] / include / linux / highmem.h
index e9912da5441b49057a7efaefb3adf351a55ddb47..44242268f53bd00ab30f7009b76df6ef7bbb66b9 100644 (file)
@@ -319,6 +319,32 @@ static inline void copy_user_highpage(struct page *to, struct page *from,
 
 #endif
 
+#ifdef copy_mc_to_kernel
+static inline int copy_mc_user_highpage(struct page *to, struct page *from,
+                                       unsigned long vaddr, struct vm_area_struct *vma)
+{
+       unsigned long ret;
+       char *vfrom, *vto;
+
+       vfrom = kmap_local_page(from);
+       vto = kmap_local_page(to);
+       ret = copy_mc_to_kernel(vto, vfrom, PAGE_SIZE);
+       if (!ret)
+               kmsan_unpoison_memory(page_address(to), PAGE_SIZE);
+       kunmap_local(vto);
+       kunmap_local(vfrom);
+
+       return ret;
+}
+#else
+static inline int copy_mc_user_highpage(struct page *to, struct page *from,
+                                       unsigned long vaddr, struct vm_area_struct *vma)
+{
+       copy_user_highpage(to, from, vaddr, vma);
+       return 0;
+}
+#endif
+
 #ifndef __HAVE_ARCH_COPY_HIGHPAGE
 
 static inline void copy_highpage(struct page *to, struct page *from)