android_kernel_google_msm/arch
Roland Dreier d824be9bc8 x86, ioremap: Speed up check for RAM pages
commit c81c8a1eee upstream.

In __ioremap_caller() (the guts of ioremap), we loop over the range of
pfns being remapped and checks each one individually with page_is_ram().
For large ioremaps, this can be very slow.  For example, we have a
device with a 256 GiB PCI BAR, and ioremapping this BAR can take 20+
seconds -- sometimes long enough to trigger the soft lockup detector!

Internally, page_is_ram() calls walk_system_ram_range() on a single
page.  Instead, we can make a single call to walk_system_ram_range()
from __ioremap_caller(), and do our further checks only for any RAM
pages that we find.  For the common case of MMIO, this saves an enormous
amount of work, since the range being ioremapped doesn't intersect
system RAM at all.

With this change, ioremap on our 256 GiB BAR takes less than 1 second.

Signed-off-by: Roland Dreier <roland@purestorage.com>
Link: http://lkml.kernel.org/r/1399054721-1331-1-git-send-email-roland@kernel.org
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2014-07-17 15:39:50 -07:00
..
alpha alpha: makefile: don't enforce small data model for kernel builds 2013-08-20 08:26:28 -07:00
arm ARM: OMAP2+: Fix parser-bug in platform muxing code 2014-07-09 10:51:20 -07:00
avr32 avr32: Makefile: add '-D__linux__' flag for gcc-4.4.7 use 2014-03-11 16:09:57 -07:00
blackfin
c6x
cris cris: media platform drivers: fix build 2013-11-29 10:50:37 -08:00
frv frv: Use core allocator for task_struct 2013-08-20 08:26:28 -07:00
h8300
hexagon
ia64 exec/ptrace: fix get_dumpable() incorrect tests 2013-11-29 10:50:34 -08:00
m32r m32r: make memset() global for CONFIG_KERNEL_BZIP2=y 2013-09-14 06:02:11 -07:00
m68k m68k/atari: ARAnyM - Fix NatFeat module support 2013-08-20 08:26:29 -07:00
microblaze microblaze: Update microblaze defconfigs 2013-08-20 08:26:27 -07:00
mips MIPS: MSC: Prevent out-of-bounds writes to MIPS SC ioremap'd region 2014-07-06 18:49:19 -07:00
mn10300
openrisc
parisc parisc: fix epoll_pwait syscall on compat kernel 2014-06-07 16:01:57 -07:00
powerpc powerpc/perf: Never program book3s PMCs with values >= 0x80000000 2014-07-17 15:39:50 -07:00
s390 s390/lowcore: reserve 96 bytes for IRB in lowcore 2014-06-30 20:01:31 -07:00
score
sh sh: fix format string bug in stack tracer 2014-05-06 07:51:45 -07:00
sparc sparc64: don't treat 64-bit syscall return codes as 32-bit 2014-04-26 17:13:19 -07:00
tile tile: use a more conservative __my_cpu_offset in CONFIG_PREEMPT 2013-10-13 15:42:50 -07:00
um um: add missing declaration of 'getrlimit()' and friends 2013-12-11 22:34:11 -08:00
unicore32 mm, show_mem: suppress page counts in non-blockable contexts 2013-10-13 15:42:49 -07:00
x86 x86, ioremap: Speed up check for RAM pages 2014-07-17 15:39:50 -07:00
xtensa xtensa: don't use alternate signal stack on threads 2013-11-13 12:01:49 +09:00
.gitignore
Kconfig