summaryrefslogtreecommitdiff
path: root/arch/arm/mach-orion5x/common.h
diff options
context:
space:
mode:
authorRoland Dreier <roland@purestorage.com>2014-05-02 22:18:41 +0400
committerH. Peter Anvin <hpa@linux.intel.com>2014-05-02 22:52:26 +0400
commitc81c8a1eeede61e92a15103748c23d100880cc8a (patch)
treea7d9b726d541a287068225dbbb407612b26f8f12 /arch/arm/mach-orion5x/common.h
parent6e8a1d49a99ed43ab73a19b36ace14296d82c540 (diff)
downloadlinux-c81c8a1eeede61e92a15103748c23d100880cc8a.tar.xz
x86, ioremap: Speed up check for RAM pages
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>
Diffstat (limited to 'arch/arm/mach-orion5x/common.h')
0 files changed, 0 insertions, 0 deletions