Skip to contentSkip to conversation

csky: optimize memcpy_{from,to}io() and memset_io()

PATCH New [email protected] 1 participant 1 message Apr 6, 2022

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer
#0 lore raw

PATCH 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.

---
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
index f82654053dc0..adb64e26194f 100644
@@ -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
index 6c0f36010ed0..4eb41421ca5b 100644
@@ -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