All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: Justin Forbes <jmforbes@linuxtx.org>,
	Zwane Mwaikambo <zwane@arm.linux.org.uk>,
	"Theodore Ts'o" <tytso@mit.edu>,
	Randy Dunlap <rdunlap@xenotime.net>,
	Dave Jones <davej@redhat.com>,
	Chuck Wolber <chuckw@quantumlinux.com>,
	Chris Wedgwood <reviews@ml.cw.f00f.org>,
	Michael Krufky <mkrufky@linuxtv.org>,
	torvalds@osdl.org, akpm@osdl.org, alan@lxorguk.ukuu.org.uk,
	joerg@hydrops.han.de, Daniel Drake <dsd@gentoo.org>,
	Jeff Garzik <jeff@garzik.org>,
	Greg Kroah-Hartman <gregkh@suse.de>
Subject: [patch 15/19] xirc2ps_cs: Cannot reset card in atomic context
Date: Tue, 10 Oct 2006 10:15:31 -0700	[thread overview]
Message-ID: <20061010171531.GP6339@kroah.com> (raw)
In-Reply-To: <20061010171350.GA6339@kroah.com>

[-- Attachment #1: xirc2ps_cs-cannot-reset-card-in-atomic-context.patch --]
[-- Type: text/plain, Size: 2567 bytes --]

-stable review patch.  If anyone has any objections, please let us know.

------------------
From: Joerg Ahrens <joerg@hydrops.han.de>

I am using a Xircom CEM33 pcmcia NIC which has occasional hardware problems.
If the netdev watchdog detects a transmit timeout, do_reset is called which
msleeps - this is illegal in atomic context.

This patch schedules the timeout handling as a workqueue item.

Signed-off-by: Daniel Drake <dsd@gentoo.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 drivers/net/pcmcia/xirc2ps_cs.c |   18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

--- linux-2.6.17.13.orig/drivers/net/pcmcia/xirc2ps_cs.c
+++ linux-2.6.17.13/drivers/net/pcmcia/xirc2ps_cs.c
@@ -345,6 +345,7 @@ typedef struct local_info_t {
     void __iomem *dingo_ccr; /* only used for CEM56 cards */
     unsigned last_ptr_value; /* last packets transmitted value */
     const char *manf_str;
+    struct work_struct tx_timeout_task;
 } local_info_t;
 
 /****************
@@ -352,6 +353,7 @@ typedef struct local_info_t {
  */
 static int do_start_xmit(struct sk_buff *skb, struct net_device *dev);
 static void do_tx_timeout(struct net_device *dev);
+static void xirc2ps_tx_timeout_task(void *data);
 static struct net_device_stats *do_get_stats(struct net_device *dev);
 static void set_addresses(struct net_device *dev);
 static void set_multicast_list(struct net_device *dev);
@@ -589,6 +591,7 @@ xirc2ps_probe(struct pcmcia_device *link
 #ifdef HAVE_TX_TIMEOUT
     dev->tx_timeout = do_tx_timeout;
     dev->watchdog_timeo = TX_TIMEOUT;
+    INIT_WORK(&local->tx_timeout_task, xirc2ps_tx_timeout_task, dev);
 #endif
 
     return xirc2ps_config(link);
@@ -1341,17 +1344,24 @@ xirc2ps_interrupt(int irq, void *dev_id,
 /*====================================================================*/
 
 static void
-do_tx_timeout(struct net_device *dev)
+xirc2ps_tx_timeout_task(void *data)
 {
-    local_info_t *lp = netdev_priv(dev);
-    printk(KERN_NOTICE "%s: transmit timed out\n", dev->name);
-    lp->stats.tx_errors++;
+    struct net_device *dev = data;
     /* reset the card */
     do_reset(dev,1);
     dev->trans_start = jiffies;
     netif_wake_queue(dev);
 }
 
+static void
+do_tx_timeout(struct net_device *dev)
+{
+    local_info_t *lp = netdev_priv(dev);
+    lp->stats.tx_errors++;
+    printk(KERN_NOTICE "%s: transmit timed out\n", dev->name);
+    schedule_work(&lp->tx_timeout_task);
+}
+
 static int
 do_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {

--

  parent reply	other threads:[~2006-10-10 17:17 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20061010165621.394703368@quad.kroah.org>
2006-10-10 17:13 ` [patch 00/19] 2.6.17-stable review Greg KH
2006-10-10 17:14   ` [patch 01/19] dvb-core: Proper handling ULE SNDU length of 0 (CVE-2006-4623) Greg KH
2006-10-10 17:14   ` [patch 02/19] NFS: Fix a potential deadlock in nfs_release_page Greg KH
2006-10-10 17:14   ` [patch 03/19] SUNRPC: avoid choosing an IPMI port for RPC traffic Greg KH
2006-10-10 18:59     ` Jan Engelhardt
2006-10-11 23:45       ` Trond Myklebust
2006-10-12  1:12         ` Alan Cox
2006-10-12  1:35           ` Trond Myklebust
2006-10-12  1:53             ` Matt Domsch
2006-10-12  2:04               ` Trond Myklebust
2006-10-12 10:16                 ` Alan Cox
2006-10-12 10:15               ` Alan Cox
2006-10-12 15:15                 ` Trond Myklebust
2006-10-12  7:58             ` Jan Engelhardt
2006-10-12  8:35               ` Bernd Petrovitsch
2006-10-12 12:28                 ` Jan Engelhardt
2006-10-12 15:01               ` Trond Myklebust
2006-10-12 15:49                 ` Jan Engelhardt
2006-10-10 17:14   ` [patch 04/19] LOCKD: Fix a deadlock in nlm_traverse_files() Greg KH
2006-10-10 17:14   ` [patch 05/19] NFS: More page cache revalidation fixups Greg KH
2006-10-10 17:14   ` [patch 06/19] Backport: Old IDE, fix SATA detection for cabling Greg KH
2006-10-10 17:14   ` [patch 07/19] invalidate_complete_page() race fix Greg KH
2006-10-10 18:12     ` Hugh Dickins
2006-10-10 19:14       ` [stable] " Greg KH
2006-10-10 19:30         ` Andrew Morton
2006-10-10 17:14   ` [patch 08/19] ext3 sequential read regression fix Greg KH
2006-10-10 17:14   ` [patch 09/19] sysfs: remove duplicated dput in sysfs_update_file Greg KH
2006-10-10 17:15   ` [patch 10/19] Video: Fix msp343xG handling regression Greg KH
2006-10-10 17:15   ` [patch 11/19] Video: cx24123: fix PLL divisor setup Greg KH
2006-10-10 17:15   ` [patch 12/19] SPARC64: Fix serious bug in sched_clock() on sparc64 Greg KH
2006-10-10 17:15   ` [patch 13/19] Fix sparc64 ramdisk handling Greg KH
2006-10-10 17:15   ` [patch 14/19] PKT_SCHED: cls_basic: Use unsigned int when generating handle Greg KH
2006-10-10 17:15   ` Greg KH [this message]
2006-10-10 17:15   ` [patch 16/19] Add PIIX4 APCI quirk for the 440MX chipset too Greg KH
2006-10-10 17:15   ` [patch 17/19] MMC: Always use a sector size of 512 bytes Greg KH
2006-10-10 17:15   ` [patch 18/19] ahci: do not fail softreset if PHY reports no device Greg KH
2006-10-10 17:15   ` [patch 19/19] Input: logips2pp - fix button mapping for MX300 Greg KH
2006-10-10 17:59   ` [stable] [patch 00/19] 2.6.17-stable review Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20061010171531.GP6339@kroah.com \
    --to=gregkh@suse.de \
    --cc=akpm@osdl.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=chuckw@quantumlinux.com \
    --cc=davej@redhat.com \
    --cc=dsd@gentoo.org \
    --cc=jeff@garzik.org \
    --cc=jmforbes@linuxtx.org \
    --cc=joerg@hydrops.han.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mkrufky@linuxtv.org \
    --cc=rdunlap@xenotime.net \
    --cc=reviews@ml.cw.f00f.org \
    --cc=stable@kernel.org \
    --cc=torvalds@osdl.org \
    --cc=tytso@mit.edu \
    --cc=zwane@arm.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.