memcpy.c (e5451c8f8330e03ad3cfa16048b4daf961af434f) | memcpy.c (9e91db6b4abecd58647a5e984d538187f1c2ea09) |
---|---|
1/* 2 * Optimized memory copy routines. 3 * 4 * Copyright (C) 2004 Randolph Chung <tausq@debian.org> 5 * Copyright (C) 2013 Helge Deller <deller@gmx.de> 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by --- 475 unchanged lines hidden (view full) --- 484 485 if (fault_addr >= reference) 486 return len - (fault_addr - reference); 487 else 488 return len; 489} 490 491#ifdef __KERNEL__ | 1/* 2 * Optimized memory copy routines. 3 * 4 * Copyright (C) 2004 Randolph Chung <tausq@debian.org> 5 * Copyright (C) 2013 Helge Deller <deller@gmx.de> 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by --- 475 unchanged lines hidden (view full) --- 484 485 if (fault_addr >= reference) 486 return len - (fault_addr - reference); 487 else 488 return len; 489} 490 491#ifdef __KERNEL__ |
492unsigned long copy_to_user(void __user *dst, const void *src, unsigned long len) | 492unsigned long __copy_to_user(void __user *dst, const void *src, 493 unsigned long len) |
493{ 494 mtsp(get_kernel_space(), 1); 495 mtsp(get_user_space(), 2); 496 return pa_memcpy((void __force *)dst, src, len); 497} | 494{ 495 mtsp(get_kernel_space(), 1); 496 mtsp(get_user_space(), 2); 497 return pa_memcpy((void __force *)dst, src, len); 498} |
499EXPORT_SYMBOL(__copy_to_user); |
|
498 | 500 |
499EXPORT_SYMBOL(__copy_from_user); 500unsigned long __copy_from_user(void *dst, const void __user *src, unsigned long len) | 501unsigned long __copy_from_user(void *dst, const void __user *src, 502 unsigned long len) |
501{ 502 mtsp(get_user_space(), 1); 503 mtsp(get_kernel_space(), 2); 504 return pa_memcpy(dst, (void __force *)src, len); 505} | 503{ 504 mtsp(get_user_space(), 1); 505 mtsp(get_kernel_space(), 2); 506 return pa_memcpy(dst, (void __force *)src, len); 507} |
508EXPORT_SYMBOL(__copy_from_user); |
|
506 507unsigned long copy_in_user(void __user *dst, const void __user *src, unsigned long len) 508{ 509 mtsp(get_user_space(), 1); 510 mtsp(get_user_space(), 2); 511 return pa_memcpy((void __force *)dst, (void __force *)src, len); 512} 513 514 515void * memcpy(void * dst,const void *src, size_t count) 516{ 517 mtsp(get_kernel_space(), 1); 518 mtsp(get_kernel_space(), 2); 519 pa_memcpy(dst, src, count); 520 return dst; 521} 522 | 509 510unsigned long copy_in_user(void __user *dst, const void __user *src, unsigned long len) 511{ 512 mtsp(get_user_space(), 1); 513 mtsp(get_user_space(), 2); 514 return pa_memcpy((void __force *)dst, (void __force *)src, len); 515} 516 517 518void * memcpy(void * dst,const void *src, size_t count) 519{ 520 mtsp(get_kernel_space(), 1); 521 mtsp(get_kernel_space(), 2); 522 pa_memcpy(dst, src, count); 523 return dst; 524} 525 |
523EXPORT_SYMBOL(copy_to_user); 524EXPORT_SYMBOL(copy_from_user); | |
525EXPORT_SYMBOL(copy_in_user); 526EXPORT_SYMBOL(memcpy); 527 528long probe_kernel_read(void *dst, const void *src, size_t size) 529{ 530 unsigned long addr = (unsigned long)src; 531 532 if (addr < PAGE_SIZE) 533 return -EFAULT; 534 535 /* check for I/O space F_EXTEND(0xfff00000) access as well? */ 536 537 return __probe_kernel_read(dst, src, size); 538} 539 540#endif | 526EXPORT_SYMBOL(copy_in_user); 527EXPORT_SYMBOL(memcpy); 528 529long probe_kernel_read(void *dst, const void *src, size_t size) 530{ 531 unsigned long addr = (unsigned long)src; 532 533 if (addr < PAGE_SIZE) 534 return -EFAULT; 535 536 /* check for I/O space F_EXTEND(0xfff00000) access as well? */ 537 538 return __probe_kernel_read(dst, src, size); 539} 540 541#endif |