提交 7fabaddd 编写于 作者: W Wu Fengguang 提交者: Linus Torvalds

/dev/mem: make size_inside_page() logic straight

Also convert more size_inside_page() users.
Signed-off-by: NWu Fengguang <fengguang.wu@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Avi Kivity <avi@qumranet.com>
Cc: Greg Kroah-Hartman <gregkh@suse.de>
Cc: Johannes Berg <johannes@sipsolutions.net>
Cc: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 fa29e97b
......@@ -39,12 +39,9 @@ static inline unsigned long size_inside_page(unsigned long start,
{
unsigned long sz;
if (-start & (PAGE_SIZE - 1))
sz = -start & (PAGE_SIZE - 1);
else
sz = PAGE_SIZE;
sz = PAGE_SIZE - (start & (PAGE_SIZE - 1));
return min_t(unsigned long, sz, size);
return min(sz, size);
}
/*
......@@ -139,9 +136,7 @@ static ssize_t read_mem(struct file * file, char __user * buf,
#ifdef __ARCH_HAS_NO_PAGE_ZERO_MAPPED
/* we don't have page 0 mapped on sparc and m68k.. */
if (p < PAGE_SIZE) {
sz = PAGE_SIZE - p;
if (sz > count)
sz = count;
sz = size_inside_page(p, count);
if (sz > 0) {
if (clear_user(buf, sz))
return -EFAULT;
......@@ -201,9 +196,7 @@ static ssize_t write_mem(struct file * file, const char __user * buf,
#ifdef __ARCH_HAS_NO_PAGE_ZERO_MAPPED
/* we don't have page 0 mapped on sparc and m68k.. */
if (p < PAGE_SIZE) {
unsigned long sz = PAGE_SIZE - p;
if (sz > count)
sz = count;
sz = size_inside_page(p, count);
/* Hmm. Do something? */
buf += sz;
p += sz;
......@@ -412,15 +405,14 @@ static ssize_t read_kmem(struct file *file, char __user *buf,
#ifdef __ARCH_HAS_NO_PAGE_ZERO_MAPPED
/* we don't have page 0 mapped on sparc and m68k.. */
if (p < PAGE_SIZE && low_count > 0) {
size_t tmp = PAGE_SIZE - p;
if (tmp > low_count) tmp = low_count;
if (clear_user(buf, tmp))
sz = size_inside_page(p, low_count);
if (clear_user(buf, sz))
return -EFAULT;
buf += tmp;
p += tmp;
read += tmp;
low_count -= tmp;
count -= tmp;
buf += sz;
p += sz;
read += sz;
low_count -= sz;
count -= sz;
}
#endif
while (low_count > 0) {
......@@ -480,9 +472,7 @@ do_write_kmem(void *p, unsigned long realp, const char __user * buf,
#ifdef __ARCH_HAS_NO_PAGE_ZERO_MAPPED
/* we don't have page 0 mapped on sparc and m68k.. */
if (realp < PAGE_SIZE) {
unsigned long sz = PAGE_SIZE - realp;
if (sz > count)
sz = count;
sz = size_inside_page(realp, count);
/* Hmm. Do something? */
buf += sz;
p += sz;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册