Patchwork 8139cp: set intr mask after its handler is registered

login
register
mail settings
Submitter Jason Wang
Date April 12, 2012, 8:10 a.m.
Message ID <20120412081053.25774.41676.stgit@amd-6168-8-1.englab.nay.redhat.com>
Download mbox | patch
Permalink /patch/151999/
State Accepted
Delegated to: David Miller
Headers show

Comments

Jason Wang - April 12, 2012, 8:10 a.m.
We set intr mask before its handler is registered, this does not work well when
8139cp is sharing irq line with other devices. As the irq could be enabled by
the device before 8139cp's hander is registered which may lead unhandled
irq. Fix this by introducing an helper cp_irq_enable() and call it after
request_irq().

Signed-off-by: Jason Wang <jasowang@redhat.com>
---
 drivers/net/ethernet/realtek/8139cp.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Flavio Leitner - April 12, 2012, 1:45 p.m.
On Thu, 12 Apr 2012 16:10:54 +0800
Jason Wang <jasowang@redhat.com> wrote:

> We set intr mask before its handler is registered, this does not work well when
> 8139cp is sharing irq line with other devices. As the irq could be enabled by
> the device before 8139cp's hander is registered which may lead unhandled
> irq. Fix this by introducing an helper cp_irq_enable() and call it after
> request_irq().
> 
> Signed-off-by: Jason Wang <jasowang@redhat.com>

Reviewed-by: Flavio Leitner <fbl@redhat.com>

fbl
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller - April 13, 2012, 5:42 p.m.
From: Flavio Leitner <fbl@redhat.com>
Date: Thu, 12 Apr 2012 10:45:29 -0300

> On Thu, 12 Apr 2012 16:10:54 +0800
> Jason Wang <jasowang@redhat.com> wrote:
> 
>> We set intr mask before its handler is registered, this does not work well when
>> 8139cp is sharing irq line with other devices. As the irq could be enabled by
>> the device before 8139cp's hander is registered which may lead unhandled
>> irq. Fix this by introducing an helper cp_irq_enable() and call it after
>> request_irq().
>> 
>> Signed-off-by: Jason Wang <jasowang@redhat.com>
> 
> Reviewed-by: Flavio Leitner <fbl@redhat.com>

Applied, and queued up for -stable, thanks.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/net/ethernet/realtek/8139cp.c b/drivers/net/ethernet/realtek/8139cp.c
index abc7907..b3287c0 100644
--- a/drivers/net/ethernet/realtek/8139cp.c
+++ b/drivers/net/ethernet/realtek/8139cp.c
@@ -958,6 +958,11 @@  static inline void cp_start_hw (struct cp_private *cp)
 	cpw8(Cmd, RxOn | TxOn);
 }
 
+static void cp_enable_irq(struct cp_private *cp)
+{
+	cpw16_f(IntrMask, cp_intr_mask);
+}
+
 static void cp_init_hw (struct cp_private *cp)
 {
 	struct net_device *dev = cp->dev;
@@ -997,8 +1002,6 @@  static void cp_init_hw (struct cp_private *cp)
 
 	cpw16(MultiIntr, 0);
 
-	cpw16_f(IntrMask, cp_intr_mask);
-
 	cpw8_f(Cfg9346, Cfg9346_Lock);
 }
 
@@ -1130,6 +1133,8 @@  static int cp_open (struct net_device *dev)
 	if (rc)
 		goto err_out_hw;
 
+	cp_enable_irq(cp);
+
 	netif_carrier_off(dev);
 	mii_check_media(&cp->mii_if, netif_msg_link(cp), true);
 	netif_start_queue(dev);
@@ -2031,6 +2036,7 @@  static int cp_resume (struct pci_dev *pdev)
 	/* FIXME: sh*t may happen if the Rx ring buffer is depleted */
 	cp_init_rings_index (cp);
 	cp_init_hw (cp);
+	cp_enable_irq(cp);
 	netif_start_queue (dev);
 
 	spin_lock_irqsave (&cp->lock, flags);