drivers/char/mem.c: cleanups
- fix switch statement layout - fix whitespace stuff - fix comment layout - remove unneeded inlining - use __weak - remove trailing whitespace - move uncached_access() inside `#ifndef __HAVE_PHYS_MEM_ACCESS_PROT' - it is otherwise unused. Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> Cc: Wu Fengguang <fengguang.wu@intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
dcefafb6ac
commit
d7d4d849b4
@@ -44,36 +44,6 @@ static inline unsigned long size_inside_page(unsigned long start,
|
||||
return min(sz, size);
|
||||
}
|
||||
|
||||
/*
|
||||
* Architectures vary in how they handle caching for addresses
|
||||
* outside of main memory.
|
||||
*
|
||||
*/
|
||||
static inline int uncached_access(struct file *file, unsigned long addr)
|
||||
{
|
||||
#if defined(CONFIG_IA64)
|
||||
/*
|
||||
* On ia64, we ignore O_DSYNC because we cannot tolerate memory attribute aliases.
|
||||
*/
|
||||
return !(efi_mem_attributes(addr) & EFI_MEMORY_WB);
|
||||
#elif defined(CONFIG_MIPS)
|
||||
{
|
||||
extern int __uncached_access(struct file *file,
|
||||
unsigned long addr);
|
||||
|
||||
return __uncached_access(file, addr);
|
||||
}
|
||||
#else
|
||||
/*
|
||||
* Accessing memory above the top the kernel knows about or through a file pointer
|
||||
* that was marked O_DSYNC will be done non-cached.
|
||||
*/
|
||||
if (file->f_flags & O_DSYNC)
|
||||
return 1;
|
||||
return addr >= __pa(high_memory);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef ARCH_HAS_VALID_PHYS_ADDR_RANGE
|
||||
static inline int valid_phys_addr_range(unsigned long addr, size_t count)
|
||||
{
|
||||
@@ -115,7 +85,7 @@ static inline int range_is_allowed(unsigned long pfn, unsigned long size)
|
||||
}
|
||||
#endif
|
||||
|
||||
void __attribute__((weak)) unxlate_dev_mem_ptr(unsigned long phys, void *addr)
|
||||
void __weak unxlate_dev_mem_ptr(unsigned long phys, void *addr)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -157,9 +127,9 @@ static ssize_t read_mem(struct file * file, char __user * buf,
|
||||
return -EPERM;
|
||||
|
||||
/*
|
||||
* On ia64 if a page has been mapped somewhere as
|
||||
* uncached, then it must also be accessed uncached
|
||||
* by the kernel or data corruption may occur
|
||||
* On ia64 if a page has been mapped somewhere as uncached, then
|
||||
* it must also be accessed uncached by the kernel or data
|
||||
* corruption may occur.
|
||||
*/
|
||||
ptr = xlate_dev_mem_ptr(p);
|
||||
if (!ptr)
|
||||
@@ -212,9 +182,9 @@ static ssize_t write_mem(struct file * file, const char __user * buf,
|
||||
return -EPERM;
|
||||
|
||||
/*
|
||||
* On ia64 if a page has been mapped somewhere as
|
||||
* uncached, then it must also be accessed uncached
|
||||
* by the kernel or data corruption may occur
|
||||
* On ia64 if a page has been mapped somewhere as uncached, then
|
||||
* it must also be accessed uncached by the kernel or data
|
||||
* corruption may occur.
|
||||
*/
|
||||
ptr = xlate_dev_mem_ptr(p);
|
||||
if (!ptr) {
|
||||
@@ -242,13 +212,46 @@ static ssize_t write_mem(struct file * file, const char __user * buf,
|
||||
return written;
|
||||
}
|
||||
|
||||
int __attribute__((weak)) phys_mem_access_prot_allowed(struct file *file,
|
||||
int __weak phys_mem_access_prot_allowed(struct file *file,
|
||||
unsigned long pfn, unsigned long size, pgprot_t *vma_prot)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifndef __HAVE_PHYS_MEM_ACCESS_PROT
|
||||
|
||||
/*
|
||||
* Architectures vary in how they handle caching for addresses
|
||||
* outside of main memory.
|
||||
*
|
||||
*/
|
||||
static int uncached_access(struct file *file, unsigned long addr)
|
||||
{
|
||||
#if defined(CONFIG_IA64)
|
||||
/*
|
||||
* On ia64, we ignore O_DSYNC because we cannot tolerate memory
|
||||
* attribute aliases.
|
||||
*/
|
||||
return !(efi_mem_attributes(addr) & EFI_MEMORY_WB);
|
||||
#elif defined(CONFIG_MIPS)
|
||||
{
|
||||
extern int __uncached_access(struct file *file,
|
||||
unsigned long addr);
|
||||
|
||||
return __uncached_access(file, addr);
|
||||
}
|
||||
#else
|
||||
/*
|
||||
* Accessing memory above the top the kernel knows about or through a
|
||||
* file pointer
|
||||
* that was marked O_DSYNC will be done non-cached.
|
||||
*/
|
||||
if (file->f_flags & O_DSYNC)
|
||||
return 1;
|
||||
return addr >= __pa(high_memory);
|
||||
#endif
|
||||
}
|
||||
|
||||
static pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
|
||||
unsigned long size, pgprot_t vma_prot)
|
||||
{
|
||||
@@ -337,9 +340,9 @@ static int mmap_kmem(struct file * file, struct vm_area_struct * vma)
|
||||
pfn = __pa((u64)vma->vm_pgoff << PAGE_SHIFT) >> PAGE_SHIFT;
|
||||
|
||||
/*
|
||||
* RED-PEN: on some architectures there is more mapped memory
|
||||
* than available in mem_map which pfn_valid checks
|
||||
* for. Perhaps should add a new macro here.
|
||||
* RED-PEN: on some architectures there is more mapped memory than
|
||||
* available in mem_map which pfn_valid checks for. Perhaps should add a
|
||||
* new macro here.
|
||||
*
|
||||
* RED-PEN: vmalloc is not supported right now.
|
||||
*/
|
||||
@@ -465,8 +468,7 @@ static ssize_t read_kmem(struct file *file, char __user *buf,
|
||||
}
|
||||
|
||||
|
||||
static inline ssize_t
|
||||
do_write_kmem(unsigned long p, const char __user *buf,
|
||||
static ssize_t do_write_kmem(unsigned long p, const char __user *buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
ssize_t written, sz;
|
||||
@@ -491,9 +493,9 @@ do_write_kmem(unsigned long p, const char __user *buf,
|
||||
sz = size_inside_page(p, count);
|
||||
|
||||
/*
|
||||
* On ia64 if a page has been mapped somewhere as
|
||||
* uncached, then it must also be accessed uncached
|
||||
* by the kernel or data corruption may occur
|
||||
* On ia64 if a page has been mapped somewhere as uncached, then
|
||||
* it must also be accessed uncached by the kernel or data
|
||||
* corruption may occur.
|
||||
*/
|
||||
ptr = xlate_dev_kmem_ptr((char *)p);
|
||||
|
||||
@@ -514,7 +516,6 @@ do_write_kmem(unsigned long p, const char __user *buf,
|
||||
return written;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* This function writes to the *virtual* memory as seen by the kernel.
|
||||
*/
|
||||
@@ -688,7 +689,6 @@ static ssize_t write_full(struct file * file, const char __user * buf,
|
||||
* can fopen() both devices with "a" now. This was previously impossible.
|
||||
* -- SRB.
|
||||
*/
|
||||
|
||||
static loff_t null_lseek(struct file *file, loff_t offset, int orig)
|
||||
{
|
||||
return file->f_pos = 0;
|
||||
|
Reference in New Issue
Block a user