projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
4b83bd4
)
powerpc/eeh: Fix unbalanced enable for IRQ
author
Gavin Shan
<
[email protected]
>
Wed, 24 Jul 2013 02:25:00 +0000
(10:25 +0800)
committer
Benjamin Herrenschmidt
<
[email protected]
>
Wed, 24 Jul 2013 04:18:49 +0000
(14:18 +1000)
The patch fixes following issue:
Unbalanced enable for IRQ 23
------------[ cut here ]------------
WARNING: at kernel/irq/manage.c:437
:
NIP [
c00000000016de8c
] .__enable_irq+0x11c/0x140
LR [
c00000000016de88
] .__enable_irq+0x118/0x140
Call Trace:
[
c000003ea1f23880
] [
c00000000016de88
] .__enable_irq+0x118/0x140 (unreliable)
[
c000003ea1f23910
] [
c00000000016df08
] .enable_irq+0x58/0xa0
[
c000003ea1f239a0
] [
c0000000000388b4
] .eeh_enable_irq+0xc4/0xe0
[
c000003ea1f23a30
] [
c000000000038a28
] .eeh_report_reset+0x78/0x130
[
c000003ea1f23ac0
] [
c000000000037508
] .eeh_pe_dev_traverse+0x98/0x170
[
c000003ea1f23b60
] [
c0000000000391ac
] .eeh_handle_normal_event+0x2fc/0x3d0
[
c000003ea1f23bf0
] [
c000000000039538
] .eeh_handle_event+0x2b8/0x2c0
[
c000003ea1f23c90
] [
c000000000039600
] .eeh_event_handler+0xc0/0x170
[
c000003ea1f23d30
] [
c0000000000da9a0
] .kthread+0xf0/0x100
[
c000003ea1f23e30
] [
c00000000000a1dc
] .ret_from_kernel_thread+0x5c/0x80
Signed-off-by: Gavin Shan <
[email protected]
>
Signed-off-by: Benjamin Herrenschmidt <
[email protected]
>
arch/powerpc/kernel/eeh_driver.c
patch
|
blob
|
history
diff --git
a/arch/powerpc/kernel/eeh_driver.c
b/arch/powerpc/kernel/eeh_driver.c
index 9fda75d1f5aa9425ed68c19d445fa30072ce7ab5..36bed5a12750b639e2c305153585869be536ddef 100644
(file)
--- a/
arch/powerpc/kernel/eeh_driver.c
+++ b/
arch/powerpc/kernel/eeh_driver.c
@@
-143,10
+143,14
@@
static void eeh_disable_irq(struct pci_dev *dev)
static void eeh_enable_irq(struct pci_dev *dev)
{
struct eeh_dev *edev = pci_dev_to_eeh_dev(dev);
+ struct irq_desc *desc;
if ((edev->mode) & EEH_DEV_IRQ_DISABLED) {
edev->mode &= ~EEH_DEV_IRQ_DISABLED;
- enable_irq(dev->irq);
+
+ desc = irq_to_desc(dev->irq);
+ if (desc && desc->depth > 0)
+ enable_irq(dev->irq);
}
}