Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 747b254c authored by Anton Ivanov's avatar Anton Ivanov Committed by Richard Weinberger
Browse files

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: default avatarAnton Ivanov <anton.ivanov@cambridgegreys.com>
Signed-off-by: default avatarRichard Weinberger <richard@nod.at>
parent 50109b5a
Loading
Loading
Loading
Loading
+12 −11
Original line number Diff line number Diff line
@@ -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);

	current->thread.fault_catcher = &buf;

	faulted = UML_SETJMP(&buf);
	if (faulted == 0)
#endif
	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;
}