diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-12-09 20:25:00 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-12-09 20:25:00 -0500 |
commit | a0e4467726cd26bacb16f13d207ffcfa82ffc07d (patch) | |
tree | 98b5fcbda0cd787b07d09da90d25c87b3883c567 /drivers/char | |
parent | ed8efd2de75479a175bd21df073d9e97df65a820 (diff) | |
parent | cb61f6769b8836081940ba26249f1b756400c7df (diff) |
Merge tag 'asm-generic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic
Pull asm-generic asm/io.h rewrite from Arnd Bergmann:
"While there normally is no reason to have a pull request for
asm-generic but have all changes get merged through whichever tree
needs them, I do have a series for 3.19.
There are two sets of patches that change significant portions of
asm/io.h, and this branch contains both in order to resolve the
conflicts:
- Will Deacon has done a set of patches to ensure that all
architectures define {read,write}{b,w,l,q}_relaxed() functions or
get them by including asm-generic/io.h.
These functions are commonly used on ARM specific drivers to avoid
expensive L2 cache synchronization implied by the normal
{read,write}{b,w,l,q}, but we need to define them on all
architectures in order to share the drivers across architectures
and to enable CONFIG_COMPILE_TEST configurations for them
- Thierry Reding has done an unrelated set of patches that extends
the asm-generic/io.h file to the degree necessary to make it useful
on ARM64 and potentially other architectures"
* tag 'asm-generic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic: (29 commits)
ARM64: use GENERIC_PCI_IOMAP
sparc: io: remove duplicate relaxed accessors on sparc32
ARM: sa11x0: Use void __iomem * in MMIO accessors
arm64: Use include/asm-generic/io.h
ARM: Use include/asm-generic/io.h
asm-generic/io.h: Implement generic {read,write}s*()
asm-generic/io.h: Reconcile I/O accessor overrides
/dev/mem: Use more consistent data types
Change xlate_dev_{kmem,mem}_ptr() prototypes
ARM: ixp4xx: Properly override I/O accessors
ARM: ixp4xx: Fix build with IXP4XX_INDIRECT_PCI
ARM: ebsa110: Properly override I/O accessors
ARC: Remove redundant PCI_IOBASE declaration
documentation: memory-barriers: clarify relaxed io accessor semantics
x86: io: implement dummy relaxed accessor macros for writes
tile: io: implement dummy relaxed accessor macros for writes
sparc: io: implement dummy relaxed accessor macros for writes
powerpc: io: implement dummy relaxed accessor macros for writes
parisc: io: implement dummy relaxed accessor macros for writes
mn10300: io: implement dummy relaxed accessor macros for writes
...
Diffstat (limited to 'drivers/char')
-rw-r--r-- | drivers/char/mem.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/char/mem.c b/drivers/char/mem.c index 524b707894ef..4c58333b4257 100644 --- a/drivers/char/mem.c +++ b/drivers/char/mem.c | |||
@@ -84,9 +84,12 @@ static inline int range_is_allowed(unsigned long pfn, unsigned long size) | |||
84 | } | 84 | } |
85 | #endif | 85 | #endif |
86 | 86 | ||
87 | void __weak unxlate_dev_mem_ptr(unsigned long phys, void *addr) | 87 | #ifndef unxlate_dev_mem_ptr |
88 | #define unxlate_dev_mem_ptr unxlate_dev_mem_ptr | ||
89 | void __weak unxlate_dev_mem_ptr(phys_addr_t phys, void *addr) | ||
88 | { | 90 | { |
89 | } | 91 | } |
92 | #endif | ||
90 | 93 | ||
91 | /* | 94 | /* |
92 | * This funcion reads the *physical* memory. The f_pos points directly to the | 95 | * This funcion reads the *physical* memory. The f_pos points directly to the |
@@ -97,7 +100,7 @@ static ssize_t read_mem(struct file *file, char __user *buf, | |||
97 | { | 100 | { |
98 | phys_addr_t p = *ppos; | 101 | phys_addr_t p = *ppos; |
99 | ssize_t read, sz; | 102 | ssize_t read, sz; |
100 | char *ptr; | 103 | void *ptr; |
101 | 104 | ||
102 | if (p != *ppos) | 105 | if (p != *ppos) |
103 | return 0; | 106 | return 0; |
@@ -400,7 +403,7 @@ static ssize_t read_kmem(struct file *file, char __user *buf, | |||
400 | * uncached, then it must also be accessed uncached | 403 | * uncached, then it must also be accessed uncached |
401 | * by the kernel or data corruption may occur | 404 | * by the kernel or data corruption may occur |
402 | */ | 405 | */ |
403 | kbuf = xlate_dev_kmem_ptr((char *)p); | 406 | kbuf = xlate_dev_kmem_ptr((void *)p); |
404 | 407 | ||
405 | if (copy_to_user(buf, kbuf, sz)) | 408 | if (copy_to_user(buf, kbuf, sz)) |
406 | return -EFAULT; | 409 | return -EFAULT; |
@@ -461,7 +464,7 @@ static ssize_t do_write_kmem(unsigned long p, const char __user *buf, | |||
461 | #endif | 464 | #endif |
462 | 465 | ||
463 | while (count > 0) { | 466 | while (count > 0) { |
464 | char *ptr; | 467 | void *ptr; |
465 | 468 | ||
466 | sz = size_inside_page(p, count); | 469 | sz = size_inside_page(p, count); |
467 | 470 | ||
@@ -470,7 +473,7 @@ static ssize_t do_write_kmem(unsigned long p, const char __user *buf, | |||
470 | * it must also be accessed uncached by the kernel or data | 473 | * it must also be accessed uncached by the kernel or data |
471 | * corruption may occur. | 474 | * corruption may occur. |
472 | */ | 475 | */ |
473 | ptr = xlate_dev_kmem_ptr((char *)p); | 476 | ptr = xlate_dev_kmem_ptr((void *)p); |
474 | 477 | ||
475 | copied = copy_from_user(ptr, buf, sz); | 478 | copied = copy_from_user(ptr, buf, sz); |
476 | if (copied) { | 479 | if (copied) { |