Revision db047f8a931275e50563dd79c3d62d977074959a authored by Lorenzo Pieralisi on 15 August 2016, 16:50:41 UTC, committed by Bjorn Helgaas on 06 September 2016, 17:37:55 UTC
On ARM/ARM64 architectures, PCI IO ports are emulated through memory mapped
IO, by reserving a chunk of virtual address space starting at PCI_IOBASE
and by mapping the PCI host bridge's memory address space driving PCI IO
cycles to it.

PCI host bridge drivers that enable downstream PCI IO cycles map the host
bridge memory address responding to PCI IO cycles to the fixed virtual
address space through the pci_remap_iospace() API.

This means that if the pci_remap_iospace() function fails, the
corresponding host bridge PCI IO resource must be considered invalid, in
that there is no way for the kernel to actually drive PCI IO transactions
if the memory addresses responding to PCI IO cycles cannot be mapped into
the CPU virtual address space.

The PCI aardvark host bridge driver does not remove the PCI IO resource
from the host bridge resource windows if the pci_remap_iospace() call
fails; this is an actual bug in that the PCI host bridge would consider the
PCI IO resource valid (and possibly assign it to downstream devices) even
if the kernel was not able to map the PCI host bridge memory address
driving IO cycle to the CPU virtual address space (ie pci_remap_iospace()
failures).

Fix the PCI host bridge driver pci_remap_iospace() failure path, by
destroying the PCI host bridge PCI IO resources retrieved through firmware
when the pci_remap_iospace() function call fails, therefore preventing the
kernel from adding the respective PCI IO resource to the list of PCI host
bridge valid resources, fixing the issue.

Fixes: 8c39d710363c ("PCI: aardvark: Add Aardvark PCI host controller driver")
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
CC: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
1 parent 29b4817
History
File Mode Size
ABI
DocBook
EDID
PCI
RCU
accounting
acpi
aoe
arm
arm64
auxdisplay
backlight
blackfin
block
blockdev
bus-devices
cdrom
cgroup-v1
cma
connector
console
cpu-freq
cpuidle
cris
crypto
development-process
device-mapper
devicetree
dmaengine
driver-model
early-userspace
extcon
fault-injection
fb
features
filesystems
firmware_class
fmc
fpga
frv
gpio
gpu
hid
hwmon
i2c
ia64
ide
iio
infiniband
input
ioctl
isdn
ja_JP
kbuild
kdump
ko_KR
laptops
leds
livepatch
locking
m68k
media
memory-devices
metag
mic
mips
misc-devices
mmc
mn10300
mtd
namespaces
netlabel
networking
nfc
nios2
nvdimm
nvmem
parisc
pcmcia
phy
platform
power
powerpc
pps
prctl
pti
ptp
rapidio
s390
scheduler
scsi
security
serial
sh
sound
sphinx
sphinx-static
spi
sysctl
target
thermal
timers
tpm
trace
usb
vDSO
virtual
vm
w1
watchdog
wimax
x86
xtensa
zh_CN
.gitignore -rw-r--r-- 13 bytes
00-INDEX -rw-r--r-- 16.8 KB
BUG-HUNTING -rw-r--r-- 8.1 KB
Changes -rw-r--r-- 11.6 KB
CodeOfConflict -rw-r--r-- 1.4 KB
CodingStyle -rw-r--r-- 34.0 KB
DMA-API-HOWTO.txt -rw-r--r-- 34.7 KB
DMA-API.txt -rw-r--r-- 27.3 KB
DMA-ISA-LPC.txt -rw-r--r-- 5.2 KB
DMA-attributes.txt -rw-r--r-- 5.8 KB
HOWTO -rw-r--r-- 26.8 KB
IPMI.txt -rw-r--r-- 29.4 KB
IRQ-affinity.txt -rw-r--r-- 2.5 KB
IRQ-domain.txt -rw-r--r-- 10.6 KB
IRQ.txt -rw-r--r-- 962 bytes
Intel-IOMMU.txt -rw-r--r-- 3.8 KB
Makefile -rw-r--r-- 152 bytes
Makefile.sphinx -rw-r--r-- 2.4 KB
ManagementStyle -rw-r--r-- 12.9 KB
SAK.txt -rw-r--r-- 2.8 KB
SM501.txt -rw-r--r-- 2.8 KB
SecurityBugs -rw-r--r-- 1.8 KB
SubmitChecklist -rw-r--r-- 4.4 KB
SubmittingDrivers -rw-r--r-- 6.2 KB
SubmittingPatches -rw-r--r-- 35.7 KB
VGA-softcursor.txt -rw-r--r-- 2.0 KB
adding-syscalls.txt -rw-r--r-- 23.8 KB
applying-patches.txt -rw-r--r-- 19.5 KB
assoc_array.txt -rw-r--r-- 20.0 KB
atomic_ops.txt -rw-r--r-- 22.0 KB
bad_memory.txt -rw-r--r-- 1.1 KB
basic_profiling.txt -rw-r--r-- 1.7 KB
bcache.txt -rw-r--r-- 23.4 KB
binfmt_misc.txt -rw-r--r-- 7.0 KB
braille-console.txt -rw-r--r-- 1.4 KB
bt8xxgpio.txt -rw-r--r-- 4.3 KB
btmrvl.txt -rw-r--r-- 2.9 KB
bus-virt-phys-mapping.txt -rw-r--r-- 7.9 KB
cachetlb.txt -rw-r--r-- 17.1 KB
cec.txt -rw-r--r-- 10.4 KB
cgroup-v2.txt -rw-r--r-- 56.7 KB
circular-buffers.txt -rw-r--r-- 8.4 KB
clk.txt -rw-r--r-- 10.3 KB
coccinelle.txt -rw-r--r-- 14.9 KB
conf.py -rw-r--r-- 13.4 KB
cpu-hotplug.txt -rw-r--r-- 16.8 KB
cpu-load.txt -rw-r--r-- 3.0 KB
cputopology.txt -rw-r--r-- 5.3 KB
crc32.txt -rw-r--r-- 8.5 KB
dcdbas.txt -rw-r--r-- 3.6 KB
debugging-modules.txt -rw-r--r-- 954 bytes
debugging-via-ohci1394.txt -rw-r--r-- 7.4 KB
dell_rbu.txt -rw-r--r-- 4.9 KB
devices.txt -rw-r--r-- 115.1 KB
digsig.txt -rw-r--r-- 2.8 KB
dma-buf-sharing.txt -rw-r--r-- 22.0 KB
dontdiff -rw-r--r-- 2.5 KB
dynamic-debug-howto.txt -rw-r--r-- 12.6 KB
edac.txt -rw-r--r-- 24.7 KB
efi-stub.txt -rw-r--r-- 3.2 KB
eisa.txt -rw-r--r-- 7.1 KB
email-clients.txt -rw-r--r-- 10.9 KB
flexible-arrays.txt -rw-r--r-- 5.5 KB
futex-requeue-pi.txt -rw-r--r-- 5.0 KB
gcc-plugins.txt -rw-r--r-- 2.9 KB
gcov.txt -rw-r--r-- 7.6 KB
gdb-kernel-debugging.txt -rw-r--r-- 5.9 KB
highuid.txt -rw-r--r-- 2.4 KB
hsi.txt -rw-r--r-- 2.9 KB
hw_random.txt -rw-r--r-- 3.5 KB
hwspinlock.txt -rw-r--r-- 12.7 KB
index.rst -rw-r--r-- 619 bytes
init.txt -rw-r--r-- 2.5 KB
initrd.txt -rw-r--r-- 14.1 KB
intel_txt.txt -rw-r--r-- 10.2 KB
io-mapping.txt -rw-r--r-- 3.2 KB
io_ordering.txt -rw-r--r-- 1.9 KB
iostats.txt -rw-r--r-- 8.0 KB
irqflags-tracing.txt -rw-r--r-- 2.3 KB
isa.txt -rw-r--r-- 5.2 KB
isapnp.txt -rw-r--r-- 433 bytes
java.txt -rw-r--r-- 10.9 KB
kasan.txt -rw-r--r-- 8.1 KB
kcov.txt -rw-r--r-- 3.4 KB
kernel-doc-nano-HOWTO.txt -rw-r--r-- 11.8 KB
kernel-docs.txt -rw-r--r-- 33.2 KB
kernel-documentation.rst -rw-r--r-- 22.3 KB
kernel-parameters.txt -rw-r--r-- 157.3 KB
kernel-per-CPU-kthreads.txt -rw-r--r-- 13.2 KB
kmemcheck.txt -rw-r--r-- 29.9 KB
kmemleak.txt -rw-r--r-- 8.5 KB
kobject.txt -rw-r--r-- 18.0 KB
kprobes.txt -rw-r--r-- 30.3 KB
kref.txt -rw-r--r-- 8.4 KB
kselftest.txt -rw-r--r-- 2.4 KB
ldm.txt -rw-r--r-- 3.8 KB
local_ops.txt -rw-r--r-- 6.5 KB
lockup-watchdogs.txt -rw-r--r-- 4.1 KB
logo.gif -rw-r--r-- 16.0 KB
logo.txt -rw-r--r-- 563 bytes
lzo.txt -rw-r--r-- 7.8 KB
magic-number.txt -rw-r--r-- 8.7 KB
mailbox.txt -rw-r--r-- 4.1 KB
md-cluster.txt -rw-r--r-- 12.4 KB
md.txt -rw-r--r-- 25.3 KB
memory-barriers.txt -rw-r--r-- 115.5 KB
memory-hotplug.txt -rw-r--r-- 18.0 KB
men-chameleon-bus.txt -rw-r--r-- 6.1 KB
module-signing.txt -rw-r--r-- 10.6 KB
mono.txt -rw-r--r-- 2.5 KB
nommu-mmap.txt -rw-r--r-- 12.7 KB
ntb.txt -rw-r--r-- 6.3 KB
numastat.txt -rw-r--r-- 836 bytes
oops-tracing.txt -rw-r--r-- 12.8 KB
padata.txt -rw-r--r-- 7.3 KB
parport-lowlevel.txt -rw-r--r-- 32.2 KB
parport.txt -rw-r--r-- 8.8 KB
percpu-rw-semaphore.txt -rw-r--r-- 1.1 KB
phy.txt -rw-r--r-- 7.5 KB
pi-futex.txt -rw-r--r-- 5.7 KB
pinctrl.txt -rw-r--r-- 50.4 KB
pnp.txt -rw-r--r-- 6.8 KB
preempt-locking.txt -rw-r--r-- 5.2 KB
printk-formats.txt -rw-r--r-- 10.3 KB
pwm.txt -rw-r--r-- 6.1 KB
ramoops.txt -rw-r--r-- 5.6 KB
rbtree.txt -rw-r--r-- 13.3 KB
remoteproc.txt -rw-r--r-- 12.7 KB
rfkill.txt -rw-r--r-- 5.0 KB
robust-futex-ABI.txt -rw-r--r-- 8.7 KB
robust-futexes.txt -rw-r--r-- 9.4 KB
rpmsg.txt -rw-r--r-- 13.3 KB
rtc.txt -rw-r--r-- 10.3 KB
serial-console.txt -rw-r--r-- 4.0 KB
sgi-ioc4.txt -rw-r--r-- 2.0 KB
smsc_ece1099.txt -rw-r--r-- 2.4 KB
sparse.txt -rw-r--r-- 3.8 KB
stable_api_nonsense.txt -rw-r--r-- 9.2 KB
stable_kernel_rules.txt -rw-r--r-- 6.0 KB
static-keys.txt -rw-r--r-- 11.5 KB
svga.txt -rw-r--r-- 14.1 KB
sync_file.txt -rw-r--r-- 2.6 KB
sysfs-rules.txt -rw-r--r-- 9.0 KB
sysrq.txt -rw-r--r-- 11.8 KB
this_cpu_ops.txt -rw-r--r-- 11.1 KB
ubsan.txt -rw-r--r-- 3.1 KB
unaligned-memory-access.txt -rw-r--r-- 10.4 KB
unicode.txt -rw-r--r-- 6.5 KB
unshare.txt -rw-r--r-- 13.1 KB
vfio.txt -rw-r--r-- 21.3 KB
vgaarbiter.txt -rw-r--r-- 8.1 KB
video-output.txt -rw-r--r-- 1.1 KB
vme_api.txt -rw-r--r-- 13.4 KB
volatile-considered-harmful.txt -rw-r--r-- 5.6 KB
workqueue.txt -rw-r--r-- 14.7 KB
xillybus.txt -rw-r--r-- 17.7 KB
xz.txt -rw-r--r-- 5.7 KB
zorro.txt -rw-r--r-- 2.9 KB

back to top