From b6b8706c825c8bda8ba2ef19b4ff6c42b4eca908 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 6 Apr 2010 16:45:55 -0700 Subject: [PATCH] .32 patches --- ...lers-to-run-with-interrupts-disabled.patch | 60 ++++++++ queue-2.6.32/series | 3 + ...tchdog-hpwdt-fix-lower-timeout-limit.patch | 31 ++++ ...itional-intel-cougar-point-deviceids.patch | 141 ++++++++++++++++++ 4 files changed, 235 insertions(+) create mode 100644 queue-2.6.32/genirq-force-msi-irq-handlers-to-run-with-interrupts-disabled.patch create mode 100644 queue-2.6.32/watchdog-hpwdt-fix-lower-timeout-limit.patch create mode 100644 queue-2.6.32/watchdog-itco_wdt-tco-watchdog-patch-for-additional-intel-cougar-point-deviceids.patch diff --git a/queue-2.6.32/genirq-force-msi-irq-handlers-to-run-with-interrupts-disabled.patch b/queue-2.6.32/genirq-force-msi-irq-handlers-to-run-with-interrupts-disabled.patch new file mode 100644 index 00000000000..f301e5f2e5b --- /dev/null +++ b/queue-2.6.32/genirq-force-msi-irq-handlers-to-run-with-interrupts-disabled.patch @@ -0,0 +1,60 @@ +From 753649dbc49345a73a2454c770a3f2d54d11aec6 Mon Sep 17 00:00:00 2001 +From: Thomas Gleixner +Date: Wed, 31 Mar 2010 13:30:19 +0200 +Subject: genirq: Force MSI irq handlers to run with interrupts disabled + +From: Thomas Gleixner + +commit 753649dbc49345a73a2454c770a3f2d54d11aec6 upstream. + +Network folks reported that directing all MSI-X vectors of their multi +queue NICs to a single core can cause interrupt stack overflows when +enough interrupts fire at the same time. + +This is caused by the fact that we run interrupt handlers by default +with interrupts enabled unless the driver reuqests the interrupt with +the IRQF_DISABLED set. The NIC handlers do not set this flag, so +simultaneous interrupts can nest unlimited and cause the stack +overflow. + +The only safe counter measure is to run the interrupt handlers with +interrupts disabled. We can't switch to this mode in general right +now, but it is safe to do so for MSI interrupts. + +Force IRQF_DISABLED for MSI interrupt handlers. + +Signed-off-by: Thomas Gleixner +Cc: Andi Kleen +Cc: Linus Torvalds +Cc: Andrew Morton +Cc: Ingo Molnar +Cc: Peter Zijlstra +Cc: Alan Cox +Cc: David Miller +Cc: Greg Kroah-Hartman +Cc: Arnaldo Carvalho de Melo +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/irq/manage.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +--- a/kernel/irq/manage.c ++++ b/kernel/irq/manage.c +@@ -735,6 +735,16 @@ __setup_irq(unsigned int irq, struct irq + if (new->flags & IRQF_ONESHOT) + desc->status |= IRQ_ONESHOT; + ++ /* ++ * Force MSI interrupts to run with interrupts ++ * disabled. The multi vector cards can cause stack ++ * overflows due to nested interrupts when enough of ++ * them are directed to a core and fire at the same ++ * time. ++ */ ++ if (desc->msi_desc) ++ new->flags |= IRQF_DISABLED; ++ + if (!(desc->status & IRQ_NOAUTOEN)) { + desc->depth = 0; + desc->status &= ~IRQ_DISABLED; diff --git a/queue-2.6.32/series b/queue-2.6.32/series index c2c18e53cd6..07d0c8f9018 100644 --- a/queue-2.6.32/series +++ b/queue-2.6.32/series @@ -35,3 +35,6 @@ iwlwifi-range-checking-issue.patch setup-correct-int-pipe-type-in-ar9170_usb_exec_cmd.patch mac80211-move-netdev-queue-enabling-to-correct-spot.patch mac80211-tear-down-all-agg-queues-when-restart-reconfig-hw.patch +watchdog-hpwdt-fix-lower-timeout-limit.patch +watchdog-itco_wdt-tco-watchdog-patch-for-additional-intel-cougar-point-deviceids.patch +genirq-force-msi-irq-handlers-to-run-with-interrupts-disabled.patch diff --git a/queue-2.6.32/watchdog-hpwdt-fix-lower-timeout-limit.patch b/queue-2.6.32/watchdog-hpwdt-fix-lower-timeout-limit.patch new file mode 100644 index 00000000000..f7959b5d287 --- /dev/null +++ b/queue-2.6.32/watchdog-hpwdt-fix-lower-timeout-limit.patch @@ -0,0 +1,31 @@ +From 8ba42bd88c6982fe224b09c33151c797b0fdf1a5 Mon Sep 17 00:00:00 2001 +From: Thomas Mingarelli +Date: Wed, 17 Mar 2010 15:33:31 +0000 +Subject: WATCHDOG: hpwdt - fix lower timeout limit + +From: Thomas Mingarelli + +commit 8ba42bd88c6982fe224b09c33151c797b0fdf1a5 upstream. + +[Novell Bug 581103] HP Watchdog driver has arbitrary (wrong) timeout limits. +Fix the lower timeout limit to a more appropriate value. + +Signed-off-by: Thomas Mingarelli +Signed-off-by: Wim Van Sebroeck +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/watchdog/hpwdt.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/watchdog/hpwdt.c ++++ b/drivers/watchdog/hpwdt.c +@@ -443,7 +443,7 @@ static void hpwdt_ping(void) + static int hpwdt_change_timer(int new_margin) + { + /* Arbitrary, can't find the card's limits */ +- if (new_margin < 30 || new_margin > 600) { ++ if (new_margin < 5 || new_margin > 600) { + printk(KERN_WARNING + "hpwdt: New value passed in is invalid: %d seconds.\n", + new_margin); diff --git a/queue-2.6.32/watchdog-itco_wdt-tco-watchdog-patch-for-additional-intel-cougar-point-deviceids.patch b/queue-2.6.32/watchdog-itco_wdt-tco-watchdog-patch-for-additional-intel-cougar-point-deviceids.patch new file mode 100644 index 00000000000..4be4f2ab1ef --- /dev/null +++ b/queue-2.6.32/watchdog-itco_wdt-tco-watchdog-patch-for-additional-intel-cougar-point-deviceids.patch @@ -0,0 +1,141 @@ +From 4c7d849204341dea19be941a3c1eb4bdffac9cc4 Mon Sep 17 00:00:00 2001 +From: Seth Heasley +Date: Thu, 25 Mar 2010 16:14:41 -0700 +Subject: WATCHDOG: iTCO_wdt: TCO Watchdog patch for additional Intel Cougar Point DeviceIDs + +From: Seth Heasley + +commit 4c7d849204341dea19be941a3c1eb4bdffac9cc4 upstream. + +This patch adds the Intel Cougar Point PCH LPC Controller DeviceIDs for iTCO Watchdog. + +Signed-off-by: Seth Heasley +Signed-off-by: Wim Van Sebroeck +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/watchdog/iTCO_wdt.c | 99 +++++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 93 insertions(+), 6 deletions(-) + +--- a/drivers/watchdog/iTCO_wdt.c ++++ b/drivers/watchdog/iTCO_wdt.c +@@ -115,8 +115,37 @@ enum iTCO_chipsets { + TCO_3420, /* 3420 */ + TCO_3450, /* 3450 */ + TCO_EP80579, /* EP80579 */ +- TCO_CPTD, /* CPT Desktop */ +- TCO_CPTM, /* CPT Mobile */ ++ TCO_CPT1, /* Cougar Point */ ++ TCO_CPT2, /* Cougar Point Desktop */ ++ TCO_CPT3, /* Cougar Point Mobile */ ++ TCO_CPT4, /* Cougar Point */ ++ TCO_CPT5, /* Cougar Point */ ++ TCO_CPT6, /* Cougar Point */ ++ TCO_CPT7, /* Cougar Point */ ++ TCO_CPT8, /* Cougar Point */ ++ TCO_CPT9, /* Cougar Point */ ++ TCO_CPT10, /* Cougar Point */ ++ TCO_CPT11, /* Cougar Point */ ++ TCO_CPT12, /* Cougar Point */ ++ TCO_CPT13, /* Cougar Point */ ++ TCO_CPT14, /* Cougar Point */ ++ TCO_CPT15, /* Cougar Point */ ++ TCO_CPT16, /* Cougar Point */ ++ TCO_CPT17, /* Cougar Point */ ++ TCO_CPT18, /* Cougar Point */ ++ TCO_CPT19, /* Cougar Point */ ++ TCO_CPT20, /* Cougar Point */ ++ TCO_CPT21, /* Cougar Point */ ++ TCO_CPT22, /* Cougar Point */ ++ TCO_CPT23, /* Cougar Point */ ++ TCO_CPT24, /* Cougar Point */ ++ TCO_CPT25, /* Cougar Point */ ++ TCO_CPT26, /* Cougar Point */ ++ TCO_CPT27, /* Cougar Point */ ++ TCO_CPT28, /* Cougar Point */ ++ TCO_CPT29, /* Cougar Point */ ++ TCO_CPT30, /* Cougar Point */ ++ TCO_CPT31, /* Cougar Point */ + }; + + static struct { +@@ -173,8 +202,37 @@ static struct { + {"3420", 2}, + {"3450", 2}, + {"EP80579", 2}, +- {"CPT Desktop", 2}, +- {"CPT Mobile", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, ++ {"Cougar Point", 2}, + {NULL, 0} + }; + +@@ -259,8 +317,37 @@ static struct pci_device_id iTCO_wdt_pci + { ITCO_PCI_DEVICE(0x3b14, TCO_3420)}, + { ITCO_PCI_DEVICE(0x3b16, TCO_3450)}, + { ITCO_PCI_DEVICE(0x5031, TCO_EP80579)}, +- { ITCO_PCI_DEVICE(0x1c42, TCO_CPTD)}, +- { ITCO_PCI_DEVICE(0x1c43, TCO_CPTM)}, ++ { ITCO_PCI_DEVICE(0x1c41, TCO_CPT1)}, ++ { ITCO_PCI_DEVICE(0x1c42, TCO_CPT2)}, ++ { ITCO_PCI_DEVICE(0x1c43, TCO_CPT3)}, ++ { ITCO_PCI_DEVICE(0x1c44, TCO_CPT4)}, ++ { ITCO_PCI_DEVICE(0x1c45, TCO_CPT5)}, ++ { ITCO_PCI_DEVICE(0x1c46, TCO_CPT6)}, ++ { ITCO_PCI_DEVICE(0x1c47, TCO_CPT7)}, ++ { ITCO_PCI_DEVICE(0x1c48, TCO_CPT8)}, ++ { ITCO_PCI_DEVICE(0x1c49, TCO_CPT9)}, ++ { ITCO_PCI_DEVICE(0x1c4a, TCO_CPT10)}, ++ { ITCO_PCI_DEVICE(0x1c4b, TCO_CPT11)}, ++ { ITCO_PCI_DEVICE(0x1c4c, TCO_CPT12)}, ++ { ITCO_PCI_DEVICE(0x1c4d, TCO_CPT13)}, ++ { ITCO_PCI_DEVICE(0x1c4e, TCO_CPT14)}, ++ { ITCO_PCI_DEVICE(0x1c4f, TCO_CPT15)}, ++ { ITCO_PCI_DEVICE(0x1c50, TCO_CPT16)}, ++ { ITCO_PCI_DEVICE(0x1c51, TCO_CPT17)}, ++ { ITCO_PCI_DEVICE(0x1c52, TCO_CPT18)}, ++ { ITCO_PCI_DEVICE(0x1c53, TCO_CPT19)}, ++ { ITCO_PCI_DEVICE(0x1c54, TCO_CPT20)}, ++ { ITCO_PCI_DEVICE(0x1c55, TCO_CPT21)}, ++ { ITCO_PCI_DEVICE(0x1c56, TCO_CPT22)}, ++ { ITCO_PCI_DEVICE(0x1c57, TCO_CPT23)}, ++ { ITCO_PCI_DEVICE(0x1c58, TCO_CPT24)}, ++ { ITCO_PCI_DEVICE(0x1c59, TCO_CPT25)}, ++ { ITCO_PCI_DEVICE(0x1c5a, TCO_CPT26)}, ++ { ITCO_PCI_DEVICE(0x1c5b, TCO_CPT27)}, ++ { ITCO_PCI_DEVICE(0x1c5c, TCO_CPT28)}, ++ { ITCO_PCI_DEVICE(0x1c5d, TCO_CPT29)}, ++ { ITCO_PCI_DEVICE(0x1c5e, TCO_CPT30)}, ++ { ITCO_PCI_DEVICE(0x1c5f, TCO_CPT31)}, + { 0, }, /* End of list */ + }; + MODULE_DEVICE_TABLE(pci, iTCO_wdt_pci_tbl); -- 2.47.3