Commit 204a65ca authored by Matthew Wilcox's avatar Matthew Wilcox Committed by Linus Torvalds

[PATCH] parisc: new memcpy routines

 - new memcpy routine, replaces memcpy, bcopy, copy_{from,to,in}_user
   implementations
 - workaround gcc-3.0 limitations for asm()
 - Pip and Rufus pointed out the flaw in the current misaligned memcopy
   routines.  Randolph now owes lots of Milk bones.
 - updates to work with testsuite
 - sparse annotations
 - Improve copy performance for small and unaligned copies
 - Enable merge optimization for non-PA20 builds too
Committed-by: default avatarRandolph Chung <tausq@parisc-linux.org>
Committed-by: default avatarJames Bottomley <jejb@parisc-linux.org>
parent 786fe61b
......@@ -37,8 +37,10 @@ cflags-y := -pipe
# are not in gcc 3.2.
cflags-y += -mno-space-regs -mfast-indirect-calls
# No fixed-point multiply
cflags-y += -mdisable-fpregs
# Currently we save and restore fpregs on all kernel entry/interruption paths.
# If that gets optimized, we might need to disable the use of fpregs in the
# kernel.
#cflags-y += -mdisable-fpregs
# Without this, "ld -r" results in .text sections that are too big
# (> 0x40000) for branches to reach stubs.
......
......@@ -2,6 +2,6 @@
# Makefile for parisc-specific library files
#
lib-y := lusercopy.o bitops.o checksum.o io.o memset.o
lib-y := lusercopy.o bitops.o checksum.o io.o memset.o fixup.o memcpy.o
lib-$(CONFIG_SMP) += debuglocks.o
This diff is collapsed.
#ifndef _PA_STRING_H_
#define _PA_STRING_H_
#define __HAVE_ARCH_MEMSET
extern void * memset(void *, int, size_t);
#define __HAVE_ARCH_MEMCPY
void * memcpy(void * dest,const void *src,size_t count);
#define __HAVE_ARCH_BCOPY
void bcopy(const void * srcp, void * destp, size_t count);
#endif
......@@ -267,12 +267,12 @@ extern long lstrnlen_user(const char __user *,long);
#define clear_user lclear_user
#define __clear_user lclear_user
#define copy_from_user lcopy_from_user
#define __copy_from_user lcopy_from_user
#define copy_to_user lcopy_to_user
#define __copy_to_user lcopy_to_user
#define copy_in_user lcopy_in_user
#define __copy_in_user lcopy_in_user
unsigned long copy_to_user(void __user *dst, const void *src, unsigned long len);
#define __copy_to_user copy_to_user
unsigned long copy_from_user(void *dst, const void __user *src, unsigned long len);
#define __copy_from_user copy_from_user
unsigned long copy_in_user(void __user *dst, const void __user *src, unsigned long len);
#define __copy_in_user copy_in_user
#define __copy_to_user_inatomic __copy_to_user
#define __copy_from_user_inatomic __copy_from_user
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment