diff options
author | dann frazier <dannf@debian.org> | 2007-03-25 20:41:11 +0000 |
---|---|---|
committer | dann frazier <dannf@debian.org> | 2007-03-25 20:41:11 +0000 |
commit | dcd8ec06da16e558541b9b4d836d0ee6375eef73 (patch) | |
tree | 36c6c5266e66eb4c3c99da1b9ae66abb38575961 | |
parent | 87e76682df56cc94e3e065028ef78a7ef45d9e70 (diff) | |
download | kernel_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/changelog | 7 | ||||
-rw-r--r-- | debian/patches/bugfix/natsemi-napi-shared-irq.patch | 57 | ||||
-rw-r--r-- | debian/patches/series/12 | 1 |
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 |