mirror of
https://git.yoctoproject.org/meta-ti
synced 2026-07-16 22:38:04 +00:00
189ce92b4c
Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> Signed-off-by: Denys Dmytriyenko <denys@ti.com>
54 lines
1.8 KiB
Diff
54 lines
1.8 KiB
Diff
From 948a5d9ea80dfda0b40581e02217f30ffefd8e60 Mon Sep 17 00:00:00 2001
|
|
From: "Eric W. Biederman" <ebiederm@xmission.com>
|
|
Date: Mon, 17 Oct 2011 11:46:06 -0700
|
|
Subject: [PATCH 032/129] PCI: msi: Disable msi interrupts when we initialize
|
|
a pci device
|
|
|
|
commit a776c491ca5e38c26d9f66923ff574d041e747f4 upstream.
|
|
|
|
I traced a nasty kexec on panic boot failure to the fact that we had
|
|
screaming msi interrupts and we were not disabling the msi messages at
|
|
kernel startup. The booting kernel had not enabled those interupts so
|
|
was not prepared to handle them.
|
|
|
|
I can see no reason why we would ever want to leave the msi interrupts
|
|
enabled at boot if something else has enabled those interrupts. The pci
|
|
spec specifies that msi interrupts should be off by default. Drivers
|
|
are expected to enable the msi interrupts if they want to use them. Our
|
|
interrupt handling code reprograms the interrupt handlers at boot and
|
|
will not be be able to do anything useful with an unexpected interrupt.
|
|
|
|
This patch applies cleanly all of the way back to 2.6.32 where I noticed
|
|
the problem.
|
|
|
|
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
|
|
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
---
|
|
drivers/pci/msi.c | 10 ++++++++++
|
|
1 file changed, 10 insertions(+)
|
|
|
|
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
|
|
index 0e6d04d..e3efb43 100644
|
|
--- a/drivers/pci/msi.c
|
|
+++ b/drivers/pci/msi.c
|
|
@@ -870,5 +870,15 @@ EXPORT_SYMBOL(pci_msi_enabled);
|
|
|
|
void pci_msi_init_pci_dev(struct pci_dev *dev)
|
|
{
|
|
+ int pos;
|
|
INIT_LIST_HEAD(&dev->msi_list);
|
|
+
|
|
+ /* Disable the msi hardware to avoid screaming interrupts
|
|
+ * during boot. This is the power on reset default so
|
|
+ * usually this should be a noop.
|
|
+ */
|
|
+ pos = pci_find_capability(dev, PCI_CAP_ID_MSI);
|
|
+ if (pos)
|
|
+ msi_set_enable(dev, pos, 0);
|
|
+ msix_set_enable(dev, 0);
|
|
}
|
|
--
|
|
1.7.9.5
|
|
|