s390/pci: remove pdev pointer from arch data
authorSebastian Ott <sebott@linux.vnet.ibm.com>
Fri, 29 Jan 2016 14:13:30 +0000 (15:13 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 23 Feb 2016 07:56:16 +0000 (08:56 +0100)
commit9a99649f2a89fdfc9dde5d5401675561567bf99a
treeb15f95ac2c6a81c3dd85b4ab815406c164979d5f
parent1b17cb796f5d40ffa239c6926385abd83a77a49b
s390/pci: remove pdev pointer from arch data

For each PCI function we need to maintain arch specific data in
struct zpci_dev which also contains a pointer to struct pci_dev.

When a function is registered or deregistered (which is triggered by PCI
common code) we need to adjust that pointer which could interfere with
the machine check handler (triggered by FW) using zpci_dev->pdev.

Since multiple instances of the same pdev could exist at a time this can't
be solved with locking.

Fix that by ditching the pdev pointer and use a bus walk to reach
struct pci_dev (only one instance of a pdev can be registered at the bus
at a time).

Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Reviewed-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/pci.h
arch/s390/pci/pci.c
arch/s390/pci/pci_debug.c
arch/s390/pci/pci_dma.c
arch/s390/pci/pci_event.c
drivers/pci/hotplug/s390_pci_hpc.c