csky: optimize memcpy_{from,to}io() and memset_io()
Subsystems (2)
[email protected]
maintainerPATCH v2 1/1 csky: optimize memcpy_{from,to}io() and memset_io()
From: Guo Ren <[email protected]>
Optimize memcpy_{from,to}io() and memset_io() by transferring in 64 bit as much as possible with minimized barrier usage. This simplest optimization brings faster throughput compare to current byte-by-byte read and write with barrier in the loop. Code's skeleton is taken from the powerpc & arm64.
Signed-off-by Guo Ren <[email protected]>
Signed-off-by Guo Ren <[email protected]>
---
Changes in V2:
- Fixup compile error by Makefile missing io.o
--- arch/csky/include/asm/io.h | 11 +++++ arch/csky/kernel/Makefile | 2 +- arch/csky/kernel/io.c | 91 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 arch/csky/kernel/io.c
arch/csky/include/asm/io.h +11 -0
@@ -32,6 +32,17 @@#define writel (v,c) ({ wmb(); writel_relaxed((v),(c)); mb(); })#endif +/* +* String version of I/O memory access operations. +*/ +extern void __memcpy_fromio (void *,const volatile void __iomem *,size_t ); +extern void __memcpy_toio (volatile void __iomem *,const void *,size_t ); +extern void __memset_io (volatile void __iomem *,int ,size_t ); + +#define memset_io (c,v,l) __memset_io((c),(v),(l)) +#define memcpy_fromio (a,c,l) __memcpy_fromio((a),(c),(l)) +#define memcpy_toio (c,a,l) __memcpy_toio((c),(a),(l)) +/* * I/O memory mapping functions. */
arch/csky/kernel/Makefile +1 -1
@@ -2,7 +2,7 @@ extra-y := head.o vmlinux.lds obj-y += entry.o atomic.o signal.o traps.o irq.o time.o vdso.o vdso/ -obj-y += power.o syscall.o syscall_table.o setup.o +obj-y += power.o syscall.o syscall_table.o setup.o io.o obj-y += process.o cpu-probe.o ptrace.o stacktrace.o obj-y += probes/
arch/csky/kernel/io.c new file +91 -0
91 lines not on this page · raw message
Signature · 1 line
2.25.1