]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commit - lib/ioremap.c
x86, ioremap: Fix incorrect physical address handling in PAE mode
authorKenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Fri, 18 Jun 2010 03:22:40 +0000 (12:22 +0900)
committerH. Peter Anvin <hpa@linux.intel.com>
Fri, 9 Jul 2010 18:42:03 +0000 (11:42 -0700)
commitffa71f33a820d1ab3f2fc5723819ac60fb76080b
treefb7fb08c43a773f771a49ac765e9330e07d32eef
parentd7a0380dc3e6607d30ccdfc3cfc2ccee0d966716
x86, ioremap: Fix incorrect physical address handling in PAE mode

Current x86 ioremap() doesn't handle physical address higher than
32-bit properly in X86_32 PAE mode. When physical address higher than
32-bit is passed to ioremap(), higher 32-bits in physical address is
cleared wrongly. Due to this bug, ioremap() can map wrong address to
linear address space.

In my case, 64-bit MMIO region was assigned to a PCI device (ioat
device) on my system. Because of the ioremap()'s bug, wrong physical
address (instead of MMIO region) was mapped to linear address space.
Because of this, loading ioatdma driver caused unexpected behavior
(kernel panic, kernel hangup, ...).

Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
LKML-Reference: <4C1AE680.7090408@jp.fujitsu.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
arch/x86/mm/ioremap.c
include/linux/io.h
include/linux/vmalloc.h
lib/ioremap.c
mm/vmalloc.c