csky: Optimize abiv2 copy_to_user_page with VM_EXEC
authorGuo Ren <guoren@linux.alibaba.com>
Mon, 27 Jan 2020 11:57:29 +0000 (19:57 +0800)
committerGuo Ren <guoren@linux.alibaba.com>
Fri, 21 Feb 2020 07:43:24 +0000 (15:43 +0800)
Only when vma is for VM_EXEC, we need sync dcache & icache. eg:
 - gdb ptrace modify user space instruction code area.

Add VM_EXEC condition to reduce unnecessary cache flush.

The abiv1 cpus' cache are all VIPT, so we still need to deal with
dcache aliasing problem. But there is optimized way to use cache
color, just like what's done in arch/csky/abiv1/inc/abi/page.h.

Signed-off-by: Guo Ren <guoren@linux.alibaba.com>
arch/csky/abiv2/inc/abi/cacheflush.h

index acd7c6c55d61532f42e55dcb4a240b4dd5c62c65..28b7c32331757e0352d1b4681ef8ef0e802538d2 100644 (file)
@@ -37,7 +37,9 @@ static inline void flush_dcache_page(struct page *page)
 #define copy_to_user_page(vma, page, vaddr, dst, src, len) \
 do { \
        memcpy(dst, src, len); \
-       cache_wbinv_range((unsigned long)dst, (unsigned long)dst + len); \
+       if (vma->vm_flags & VM_EXEC) \
+               cache_wbinv_range((unsigned long)dst, \
+                                 (unsigned long)dst + len); \
 } while (0)
 #define copy_from_user_page(vma, page, vaddr, dst, src, len) \
        memcpy(dst, src, len)