aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordann frazier <dannf@debian.org>2007-03-25 20:41:11 +0000
committerdann frazier <dannf@debian.org>2007-03-25 20:41:11 +0000
commitdcd8ec06da16e558541b9b4d836d0ee6375eef73 (patch)
tree36c6c5266e66eb4c3c99da1b9ae66abb38575961
parent87e76682df56cc94e3e065028ef78a7ef45d9e70 (diff)
downloadkernel_replicant_linux-dcd8ec06da16e558541b9b4d836d0ee6375eef73.tar.gz
kernel_replicant_linux-dcd8ec06da16e558541b9b4d836d0ee6375eef73.tar.bz2
kernel_replicant_linux-dcd8ec06da16e558541b9b4d836d0ee6375eef73.zip
* natsemi-napi-shared-irq.patch
Fix hang in natsemi driver when sharing interrupts. (closes: #415476) Thanks to Mark Brown for the backport. svn path=/dists/etch/linux-2.6/; revision=8394
-rw-r--r--debian/changelog7
-rw-r--r--debian/patches/bugfix/natsemi-napi-shared-irq.patch57
-rw-r--r--debian/patches/series/121
3 files changed, 63 insertions, 2 deletions
diff --git a/debian/changelog b/debian/changelog
index db745f27dcd2..e8957fe3323f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -48,7 +48,10 @@ linux-2.6 (2.6.18.dfsg.1-12) UNRELEASED; urgency=low
[SECURITY] Fix a vulnerability that permits renicing processes in
other contexts. (closes: #412143)
See CVE-2007-0241
-
+ * natsemi-napi-shared-irq.patch
+ Fix hang in natsemi driver when sharing interrupts. (closes: #415476)
+ Thanks to Mark Brown for the backport.
+
[ Bastian Blank ]
* xen: Fix highmem dma copy code. (closes: #415805)
@@ -56,7 +59,7 @@ linux-2.6 (2.6.18.dfsg.1-12) UNRELEASED; urgency=low
* mips: Implement flush_anon_page() to fix data corruption issues
(Ralf Baechle).
- -- Bastian Blank <waldi@debian.org> Sat, 24 Mar 2007 08:06:27 +0100
+ -- dann frazier <dannf@debian.org> Sun, 25 Mar 2007 14:35:43 -0600
linux-2.6 (2.6.18.dfsg.1-11) unstable; urgency=low
diff --git a/debian/patches/bugfix/natsemi-napi-shared-irq.patch b/debian/patches/bugfix/natsemi-napi-shared-irq.patch
new file mode 100644
index 000000000000..7f3f44156ee9
--- /dev/null
+++ b/debian/patches/bugfix/natsemi-napi-shared-irq.patch
@@ -0,0 +1,57 @@
+--- build-i386-none-486/drivers/net/natsemi.c.orig 2006-09-19 21:42:06.000000000 -0600
++++ build-i386-none-486/drivers/net/natsemi.c 2007-03-25 13:46:49.000000000 -0600
+@@ -2094,28 +2094,35 @@
+ struct netdev_private *np = netdev_priv(dev);
+ void __iomem * ioaddr = ns_ioaddr(dev);
+
+- if (np->hands_off)
++ /* Reading IntrStatus automatically acknowledges so don't do
++ * that while interrupts are disabled, (for example, while a
++ * poll is scheduled). */
++ if (np->hands_off || !readl(ioaddr + IntrEnable))
+ return IRQ_NONE;
+
+- /* Reading automatically acknowledges. */
+ np->intr_status = readl(ioaddr + IntrStatus);
+
++ if (!np->intr_status)
++ return IRQ_NONE;
++
+ if (netif_msg_intr(np))
+ printk(KERN_DEBUG
+ "%s: Interrupt, status %#08x, mask %#08x.\n",
+ dev->name, np->intr_status,
+ readl(ioaddr + IntrMask));
+
+- if (!np->intr_status)
+- return IRQ_NONE;
+-
+ prefetch(&np->rx_skbuff[np->cur_rx % RX_RING_SIZE]);
+
+ if (netif_rx_schedule_prep(dev)) {
+ /* Disable interrupts and register for poll */
+ natsemi_irq_disable(dev);
+ __netif_rx_schedule(dev);
+- }
++ } else
++ printk(KERN_WARNING
++ "%s: Ignoring interrupt, status %#08x, mask %#08x.\n",
++ dev->name, np->intr_status,
++ readl(ioaddr + IntrMask));
++
+ return IRQ_HANDLED;
+ }
+
+@@ -2131,6 +2138,12 @@
+ int work_done = 0;
+
+ do {
++ if (netif_msg_intr(np))
++ printk(KERN_DEBUG
++ "%s: Poll, status %#08x, mask %#08x.\n",
++ dev->name, np->intr_status,
++ readl(ioaddr + IntrMask));
++
+ if (np->intr_status &
+ (IntrTxDone | IntrTxIntr | IntrTxIdle | IntrTxErr)) {
+ spin_lock(&np->lock);
diff --git a/debian/patches/series/12 b/debian/patches/series/12
index 5aac36599f34..0af5311b48fc 100644
--- a/debian/patches/series/12
+++ b/debian/patches/series/12
@@ -8,3 +8,4 @@
+ bugfix/sparc/tcp-sendmsg-t12k-oops-fix.patch
+ bugfix/bnx2_tx_avail-off-by-1-fix.patch
+ bugfix/mips/flush_anon_page.patch
++ bugfix/natsemi-napi-shared-irq.patch