mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-14 15:54:15 +08:00
um: Remove unnecessary faulted check in uaccess.c
It is not necessary to check if a fault has occured or not after disabling pagefaults. kmap_atomic does that in all cases and we can disable it for 64 bit where kmap is not needed and a simple page_address would suffice. dd if=/dev/zero of=/dev/null bs=1M count=1M Before: 3.1GB/s. After: 3.5GB/s There is a noticeable difference for file disk read and write as well as less noticeable difference for network IO. Signed-off-by: Anton Ivanov <anton.ivanov@cambridgegreys.com> Signed-off-by: Richard Weinberger <richard@nod.at>
This commit is contained in:
parent
50109b5a03
commit
747b254ca2
@ -62,27 +62,28 @@ static int do_op_one_page(unsigned long addr, int len, int is_write,
|
||||
jmp_buf buf;
|
||||
struct page *page;
|
||||
pte_t *pte;
|
||||
int n, faulted;
|
||||
int n;
|
||||
|
||||
pte = maybe_map(addr, is_write);
|
||||
if (pte == NULL)
|
||||
return -1;
|
||||
|
||||
page = pte_page(*pte);
|
||||
#ifdef CONFIG_64BIT
|
||||
pagefault_disable();
|
||||
addr = (unsigned long) page_address(page) +
|
||||
(addr & ~PAGE_MASK);
|
||||
#else
|
||||
addr = (unsigned long) kmap_atomic(page) +
|
||||
(addr & ~PAGE_MASK);
|
||||
#endif
|
||||
n = (*op)(addr, len, arg);
|
||||
|
||||
current->thread.fault_catcher = &buf;
|
||||
|
||||
faulted = UML_SETJMP(&buf);
|
||||
if (faulted == 0)
|
||||
n = (*op)(addr, len, arg);
|
||||
else
|
||||
n = -1;
|
||||
|
||||
current->thread.fault_catcher = NULL;
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
pagefault_enable();
|
||||
#else
|
||||
kunmap_atomic((void *)addr);
|
||||
#endif
|
||||
|
||||
return n;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user