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
History
File Mode Size
9p
bluetooth
caif
irda
iucv
netfilter
netns
phonet
sctp
tc_act
tipc
act_api.h -rw-r--r-- 4.2 KB
addrconf.h -rw-r--r-- 7.8 KB
af_ieee802154.h -rw-r--r-- 1.6 KB
af_rxrpc.h -rw-r--r-- 2.0 KB
af_unix.h -rw-r--r-- 1.9 KB
ah.h -rw-r--r-- 435 bytes
arp.h -rw-r--r-- 987 bytes
atmclip.h -rw-r--r-- 1.6 KB
ax25.h -rw-r--r-- 15.0 KB
ax88796.h -rw-r--r-- 998 bytes
cfg80211.h -rw-r--r-- 89.2 KB
checksum.h -rw-r--r-- 3.1 KB
cipso_ipv4.h -rw-r--r-- 7.4 KB
cls_cgroup.h -rw-r--r-- 1.4 KB
compat.h -rw-r--r-- 1.9 KB
datalink.h -rw-r--r-- 482 bytes
dcbnl.h -rw-r--r-- 2.2 KB
dn.h -rw-r--r-- 7.0 KB
dn_dev.h -rw-r--r-- 5.2 KB
dn_fib.h -rw-r--r-- 4.6 KB
dn_neigh.h -rw-r--r-- 824 bytes
dn_nsp.h -rw-r--r-- 6.0 KB
dn_route.h -rw-r--r-- 4.1 KB
dsa.h -rw-r--r-- 1.6 KB
dsfield.h -rw-r--r-- 1.1 KB
dst.h -rw-r--r-- 8.2 KB
dst_ops.h -rw-r--r-- 1.5 KB
esp.h -rw-r--r-- 434 bytes
ethoc.h -rw-r--r-- 502 bytes
fib_rules.h -rw-r--r-- 3.0 KB
flow.h -rw-r--r-- 2.3 KB
garp.h -rw-r--r-- 2.6 KB
gen_stats.h -rw-r--r-- 1.7 KB
genetlink.h -rw-r--r-- 8.8 KB
gre.h -rw-r--r-- 410 bytes
icmp.h -rw-r--r-- 1.6 KB
ieee80211_radiotap.h -rw-r--r-- 9.5 KB
ieee802154.h -rw-r--r-- 5.4 KB
ieee802154_netdev.h -rw-r--r-- 3.4 KB
if_inet6.h -rw-r--r-- 6.5 KB
inet6_connection_sock.h -rw-r--r-- 1.2 KB
inet6_hashtables.h -rw-r--r-- 3.5 KB
inet_common.h -rw-r--r-- 1.5 KB
inet_connection_sock.h -rw-r--r-- 10.4 KB
inet_ecn.h -rw-r--r-- 2.8 KB
inet_frag.h -rw-r--r-- 2.0 KB
inet_hashtables.h -rw-r--r-- 13.3 KB
inet_sock.h -rw-r--r-- 5.7 KB
inet_timewait_sock.h -rw-r--r-- 7.0 KB
inetpeer.h -rw-r--r-- 1.8 KB
ip.h -rw-r--r-- 13.0 KB
ip6_checksum.h -rw-r--r-- 2.3 KB
ip6_fib.h -rw-r--r-- 5.1 KB
ip6_route.h -rw-r--r-- 4.3 KB
ip6_tunnel.h -rw-r--r-- 879 bytes
ip_fib.h -rw-r--r-- 6.8 KB
ip_vs.h -rw-r--r-- 31.1 KB
ipcomp.h -rw-r--r-- 620 bytes
ipconfig.h -rw-r--r-- 772 bytes
ipip.h -rw-r--r-- 1.6 KB
ipv6.h -rw-r--r-- 18.1 KB
ipx.h -rw-r--r-- 3.7 KB
iw_handler.h -rw-r--r-- 21.6 KB
lapb.h -rw-r--r-- 4.7 KB
lib80211.h -rw-r--r-- 4.3 KB
llc.h -rw-r--r-- 4.5 KB
llc_c_ac.h -rw-r--r-- 10.1 KB
llc_c_ev.h -rw-r--r-- 11.6 KB
llc_c_st.h -rw-r--r-- 1.7 KB
llc_conn.h -rw-r--r-- 4.1 KB
llc_if.h -rw-r--r-- 3.0 KB
llc_pdu.h -rw-r--r-- 14.4 KB
llc_s_ac.h -rw-r--r-- 1.6 KB
llc_s_ev.h -rw-r--r-- 2.3 KB
llc_s_st.h -rw-r--r-- 941 bytes
llc_sap.h -rw-r--r-- 1.2 KB
mac80211.h -rw-r--r-- 106.2 KB
mip6.h -rw-r--r-- 1.6 KB
mld.h -rw-r--r-- 1.9 KB
ndisc.h -rw-r--r-- 3.7 KB
neighbour.h -rw-r--r-- 10.4 KB
net_namespace.h -rw-r--r-- 6.5 KB
netdma.h -rw-r--r-- 1.2 KB
netevent.h -rw-r--r-- 781 bytes
netlabel.h -rw-r--r-- 17.2 KB
netlink.h -rw-r--r-- 30.6 KB
netrom.h -rw-r--r-- 8.0 KB
nexthop.h -rw-r--r-- 821 bytes
nl802154.h -rw-r--r-- 4.5 KB
p8022.h -rw-r--r-- 441 bytes
pkt_cls.h -rw-r--r-- 9.1 KB
pkt_sched.h -rw-r--r-- 3.3 KB
protocol.h -rw-r--r-- 3.7 KB
psnap.h -rw-r--r-- 326 bytes
raw.h -rw-r--r-- 1.9 KB
rawv6.h -rw-r--r-- 585 bytes
red.h -rw-r--r-- 7.5 KB
regulatory.h -rw-r--r-- 3.1 KB
request_sock.h -rw-r--r-- 6.6 KB
rose.h -rw-r--r-- 7.7 KB
route.h -rw-r--r-- 6.3 KB
rtnetlink.h -rw-r--r-- 3.3 KB
sch_generic.h -rw-r--r-- 15.3 KB
scm.h -rw-r--r-- 3.1 KB
slhc_vj.h -rw-r--r-- 6.6 KB
snmp.h -rw-r--r-- 6.5 KB
sock.h -rw-r--r-- 49.8 KB
stp.h -rw-r--r-- 358 bytes
tcp.h -rw-r--r-- 45.9 KB
tcp_states.h -rw-r--r-- 1.2 KB
timewait_sock.h -rw-r--r-- 1.2 KB
transp_v6.h -rw-r--r-- 1.4 KB
udp.h -rw-r--r-- 7.5 KB
udplite.h -rw-r--r-- 3.4 KB
wext.h -rw-r--r-- 1.5 KB
wimax.h -rw-r--r-- 20.3 KB
wpan-phy.h -rw-r--r-- 2.2 KB
x25.h -rw-r--r-- 9.7 KB
x25device.h -rw-r--r-- 348 bytes
xfrm.h -rw-r--r-- 43.8 KB

back to top