diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2013-05-10 02:59:18 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2013-05-10 02:59:18 -0400 |
commit | 73ed148aea9dc0508be7e30e7a447f55c1b2f378 (patch) | |
tree | 2571b5d1851a9f2bef62e92def3608f738748251 /arch/powerpc/platforms/powernv/pci.c | |
parent | 1de1455f33709a8afd8d41d26d09739a1148105b (diff) |
powerpc/powernv: Improve kexec reliability
We add a machine_shutdown hook that frees the OPAL interrupts
(so they get masked at the source and don't fire while kexec'ing)
and which triggers an IODA reset on all the PCIe host bridges
which will have the effect of blocking all DMAs and subsequent
PCIs interrupts.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/platforms/powernv/pci.c')
-rw-r--r-- | arch/powerpc/platforms/powernv/pci.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c index 55dfca844ddf..163bd7422f1c 100644 --- a/arch/powerpc/platforms/powernv/pci.c +++ b/arch/powerpc/platforms/powernv/pci.c | |||
@@ -450,6 +450,18 @@ static void pnv_pci_dma_dev_setup(struct pci_dev *pdev) | |||
450 | pnv_pci_dma_fallback_setup(hose, pdev); | 450 | pnv_pci_dma_fallback_setup(hose, pdev); |
451 | } | 451 | } |
452 | 452 | ||
453 | void pnv_pci_shutdown(void) | ||
454 | { | ||
455 | struct pci_controller *hose; | ||
456 | |||
457 | list_for_each_entry(hose, &hose_list, list_node) { | ||
458 | struct pnv_phb *phb = hose->private_data; | ||
459 | |||
460 | if (phb && phb->shutdown) | ||
461 | phb->shutdown(phb); | ||
462 | } | ||
463 | } | ||
464 | |||
453 | /* Fixup wrong class code in p7ioc and p8 root complex */ | 465 | /* Fixup wrong class code in p7ioc and p8 root complex */ |
454 | static void pnv_p7ioc_rc_quirk(struct pci_dev *dev) | 466 | static void pnv_p7ioc_rc_quirk(struct pci_dev *dev) |
455 | { | 467 | { |