https://github.com/torvalds/linux
Revision 4dc2287c1805e7fe8a7cb90bbcd44abee8cdb914 authored by Bjorn Helgaas on 16 December 2010, 17:38:56 UTC, committed by Jesse Barnes on 17 December 2010, 18:01:24 UTC
When we allocate address space, e.g., to assign it to a PCI device, don't allocate anything mentioned in the BIOS E820 memory map. On recent machines (2008 and newer), we assign PCI resources from the windows described by the ACPI PCI host bridge _CRS. On many Dell machines, these windows overlap some E820 reserved areas, e.g., BIOS-e820: 00000000bfe4dc00 - 00000000c0000000 (reserved) pci_root PNP0A03:00: host bridge window [mem 0xbff00000-0xdfffffff] If we put devices at 0xbff00000, they don't work, probably because that's really RAM, not I/O memory. This patch prevents that by removing the 0xbfe4dc00-0xbfffffff area from the "available" resource. I'm not very happy with this solution because Windows solves the problem differently (it seems to ignore E820 reserved areas and it allocates top-down instead of bottom-up; details at comment 45 of the bugzilla below). That means we're vulnerable to BIOS defects that Windows would not trip over. For example, if BIOS described a device in ACPI but didn't mention it in E820, Windows would work fine but Linux would fail. Reference: https://bugzilla.kernel.org/show_bug.cgi?id=16228 Acked-by: H. Peter Anvin <hpa@zytor.com> Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
1 parent 30919b0
Tip revision: 4dc2287c1805e7fe8a7cb90bbcd44abee8cdb914 authored by Bjorn Helgaas on 16 December 2010, 17:38:56 UTC
x86: avoid E820 regions when allocating address space
x86: avoid E820 regions when allocating address space
Tip revision: 4dc2287
File | Mode | Size |
---|---|---|
basic | ||
coccinelle | ||
dtc | ||
genksyms | ||
kconfig | ||
ksymoops | ||
mod | ||
package | ||
rt-tester | ||
selinux | ||
tracing | ||
.gitignore | -rw-r--r-- | 75 bytes |
Kbuild.include | -rw-r--r-- | 9.5 KB |
Lindent | -rwxr-xr-x | 460 bytes |
Makefile | -rw-r--r-- | 984 bytes |
Makefile.build | -rw-r--r-- | 12.5 KB |
Makefile.clean | -rw-r--r-- | 3.2 KB |
Makefile.fwinst | -rw-r--r-- | 2.0 KB |
Makefile.headersinst | -rw-r--r-- | 3.2 KB |
Makefile.help | -rw-r--r-- | 68 bytes |
Makefile.host | -rw-r--r-- | 6.5 KB |
Makefile.lib | -rw-r--r-- | 9.0 KB |
Makefile.modbuiltin | -rw-r--r-- | 1.8 KB |
Makefile.modinst | -rw-r--r-- | 1.0 KB |
Makefile.modpost | -rw-r--r-- | 5.1 KB |
bin2c.c | -rw-r--r-- | 702 bytes |
bloat-o-meter | -rwxr-xr-x | 1.7 KB |
bootgraph.pl | -rw-r--r-- | 5.6 KB |
checkincludes.pl | -rwxr-xr-x | 1.8 KB |
checkkconfigsymbols.sh | -rwxr-xr-x | 1.8 KB |
checkpatch.pl | -rwxr-xr-x | 78.4 KB |
checkstack.pl | -rwxr-xr-x | 5.2 KB |
checksyscalls.sh | -rwxr-xr-x | 5.5 KB |
checkversion.pl | -rwxr-xr-x | 1.8 KB |
cleanfile | -rwxr-xr-x | 3.4 KB |
cleanpatch | -rwxr-xr-x | 5.0 KB |
coccicheck | -rwxr-xr-x | 2.9 KB |
config | -rwxr-xr-x | 2.6 KB |
conmakehash.c | -rw-r--r-- | 6.0 KB |
decodecode | -rwxr-xr-x | 1.9 KB |
diffconfig | -rwxr-xr-x | 3.6 KB |
export_report.pl | -rw-r--r-- | 4.2 KB |
extract-ikconfig | -rwxr-xr-x | 1.6 KB |
gcc-goto.sh | -rw-r--r-- | 223 bytes |
gcc-version.sh | -rw-r--r-- | 819 bytes |
gcc-x86_32-has-stack-protector.sh | -rw-r--r-- | 183 bytes |
gcc-x86_64-has-stack-protector.sh | -rw-r--r-- | 199 bytes |
gen_initramfs_list.sh | -rw-r--r-- | 7.1 KB |
get_maintainer.pl | -rwxr-xr-x | 52.8 KB |
gfp-translate | -rw-r--r-- | 1.7 KB |
headerdep.pl | -rwxr-xr-x | 3.5 KB |
headers.sh | -rwxr-xr-x | 512 bytes |
headers_check.pl | -rw-r--r-- | 2.7 KB |
headers_install.pl | -rw-r--r-- | 1.5 KB |
kallsyms.c | -rw-r--r-- | 15.2 KB |
kernel-doc | -rwxr-xr-x | 62.3 KB |
makelst | -rwxr-xr-x | 773 bytes |
markup_oops.pl | -rw-r--r-- | 8.1 KB |
mkcompile_h | -rwxr-xr-x | 2.5 KB |
mkmakefile | -rw-r--r-- | 1.1 KB |
mksysmap | -rw-r--r-- | 1.3 KB |
mkuboot.sh | -rwxr-xr-x | 379 bytes |
mkversion | -rw-r--r-- | 74 bytes |
module-common.lds | -rw-r--r-- | 210 bytes |
namespace.pl | -rwxr-xr-x | 13.0 KB |
patch-kernel | -rwxr-xr-x | 9.8 KB |
pnmtologo.c | -rw-r--r-- | 11.7 KB |
profile2linkerlist.pl | -rw-r--r-- | 375 bytes |
recordmcount.c | -rw-r--r-- | 10.7 KB |
recordmcount.h | -rw-r--r-- | 13.2 KB |
recordmcount.pl | -rwxr-xr-x | 17.3 KB |
setlocalversion | -rwxr-xr-x | 3.7 KB |
show_delta | -rwxr-xr-x | 3.0 KB |
tags.sh | -rwxr-xr-x | 4.6 KB |
unifdef.c | -rw-r--r-- | 31.6 KB |
ver_linux | -rwxr-xr-x | 3.1 KB |
Computing file changes ...