]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
.32 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Tue, 6 Apr 2010 23:45:55 +0000 (16:45 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 6 Apr 2010 23:45:55 +0000 (16:45 -0700)
queue-2.6.32/genirq-force-msi-irq-handlers-to-run-with-interrupts-disabled.patch [new file with mode: 0644]
queue-2.6.32/series
queue-2.6.32/watchdog-hpwdt-fix-lower-timeout-limit.patch [new file with mode: 0644]
queue-2.6.32/watchdog-itco_wdt-tco-watchdog-patch-for-additional-intel-cougar-point-deviceids.patch [new file with mode: 0644]

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 (file)
index 0000000..f301e5f
--- /dev/null
@@ -0,0 +1,60 @@
+From 753649dbc49345a73a2454c770a3f2d54d11aec6 Mon Sep 17 00:00:00 2001
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 31 Mar 2010 13:30:19 +0200
+Subject: genirq: Force MSI irq handlers to run with interrupts disabled
+
+From: Thomas Gleixner <tglx@linutronix.de>
+
+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 <tglx@linutronix.de>
+Cc: Andi Kleen <andi@firstfloor.org>
+Cc: Linus Torvalds <torvalds@osdl.org>
+Cc: Andrew Morton <akpm@linux-foundation.org>
+Cc: Ingo Molnar <mingo@elte.hu>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
+Cc: David Miller <davem@davemloft.net>
+Cc: Greg Kroah-Hartman <gregkh@suse.de>
+Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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;
index c2c18e53cd6aae9efadf9dc1517d19679c8180b1..07d0c8f901856129692cc056880c3c74e5729c72 100644 (file)
@@ -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 (file)
index 0000000..f7959b5
--- /dev/null
@@ -0,0 +1,31 @@
+From 8ba42bd88c6982fe224b09c33151c797b0fdf1a5 Mon Sep 17 00:00:00 2001
+From: Thomas Mingarelli <Thomas.Mingarelli@hp.com>
+Date: Wed, 17 Mar 2010 15:33:31 +0000
+Subject: WATCHDOG: hpwdt - fix lower timeout limit
+
+From: Thomas Mingarelli <Thomas.Mingarelli@hp.com>
+
+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 <Thomas.Mingarelli@hp.com>
+Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..4be4f2a
--- /dev/null
@@ -0,0 +1,141 @@
+From 4c7d849204341dea19be941a3c1eb4bdffac9cc4 Mon Sep 17 00:00:00 2001
+From: Seth Heasley <seth.heasley@intel.com>
+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 <seth.heasley@intel.com>
+
+commit 4c7d849204341dea19be941a3c1eb4bdffac9cc4 upstream.
+
+This patch adds the Intel Cougar Point PCH LPC Controller DeviceIDs for iTCO Watchdog.
+
+Signed-off-by: Seth Heasley <seth.heasley@intel.com>
+Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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);