linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [rft/update] r8169 changes in 2.6.x
@ 2005-02-22 23:48 Francois Romieu
  2005-02-23  1:29 ` Andrew Morton
  0 siblings, 1 reply; 7+ messages in thread
From: Francois Romieu @ 2005-02-22 23:48 UTC (permalink / raw)
  To: linux-kernel, netdev, Jon Mason, Richard Dawe, Jeff Garzik

An update of the r8169 driver is available for the 2.6.11-rc4 kernel.

Noticable changes:
- better handling of PHY as found on Acer Aspire 1524WLMi (Richard Dawe);
- fix a bug triggered when the device is brought down then up again;
- avoid a few lost/screaming interrupts;
- closed a race when a change of mtu is issued during network activity;
- fix VLAN on big-endian hosts (is someone using it apart from me ?);
- merge relevant changes from Realtek's 2.2 driver.

If it worked for you before, you should not notice anything.

Patch against 2.6.10-rc4:
- http://www.fr.zoreil.com/~romieu/misc/20050222-2.6.11-rc4-r8169.c-test.patch

Patch-script directory:
- http://www.fr.zoreil.com/linux/kernel/2.6.x/2.6.11-rc4/r8169/

Patch-script tarball:
- http://www.fr.zoreil.com/linux/kernel/2.6.x/2.6.11-rc4/r8169-blob.tar.bz2

The 2.4.x backport will be updated later this week.

As usual, success/regression reports will be welcome.

Thank you for your attention.

--
Ueimor

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [rft/update] r8169 changes in 2.6.x
  2005-02-23  1:29 ` Andrew Morton
@ 2005-02-23  1:26   ` Jeff Garzik
  2005-02-23  8:59   ` Francois Romieu
  1 sibling, 0 replies; 7+ messages in thread
From: Jeff Garzik @ 2005-02-23  1:26 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Francois Romieu, linux-kernel, netdev, jdmason, rich

On Tue, Feb 22, 2005 at 05:29:35PM -0800, Andrew Morton wrote:
> Francois Romieu <romieu@fr.zoreil.com> wrote:
> >
> > Patch against 2.6.10-rc4:
> > - http://www.fr.zoreil.com/~romieu/misc/20050222-2.6.11-rc4-r8169.c-test.patch
> 
> There are already a bunch of r8169 patches in Jeff's tree.  The combination
> isn't pretty:

And ~5 more once I run through the 80+ patches left in my
pending-patches folder.

	Jeff




^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [rft/update] r8169 changes in 2.6.x
  2005-02-22 23:48 [rft/update] r8169 changes in 2.6.x Francois Romieu
@ 2005-02-23  1:29 ` Andrew Morton
  2005-02-23  1:26   ` Jeff Garzik
  2005-02-23  8:59   ` Francois Romieu
  0 siblings, 2 replies; 7+ messages in thread
From: Andrew Morton @ 2005-02-23  1:29 UTC (permalink / raw)
  To: Francois Romieu; +Cc: linux-kernel, netdev, jdmason, rich, jgarzik

Francois Romieu <romieu@fr.zoreil.com> wrote:
>
> Patch against 2.6.10-rc4:
> - http://www.fr.zoreil.com/~romieu/misc/20050222-2.6.11-rc4-r8169.c-test.patch

There are already a bunch of r8169 patches in Jeff's tree.  The combination
isn't pretty:


patching file drivers/net/r8169.c
Hunk #1 FAILED at 41.
Hunk #2 FAILED at 69.
Hunk #3 FAILED at 79.
Hunk #4 succeeded at 114 (offset 7 lines).
Hunk #5 FAILED at 161.
Hunk #6 FAILED at 175.
Hunk #7 FAILED at 224.
Hunk #8 succeeded at 231 (offset 3 lines).
Hunk #9 succeeded at 248 (offset 7 lines).
Hunk #10 succeeded at 268 (offset 3 lines).
Hunk #11 succeeded at 294 (offset 7 lines).
Hunk #12 succeeded at 300 (offset 3 lines).
Hunk #13 succeeded at 391 (offset 7 lines).
Hunk #14 FAILED at 424.
Hunk #15 succeeded at 468 (offset 3 lines).
Hunk #16 succeeded at 487 (offset 7 lines).
Hunk #17 succeeded at 500 with fuzz 1 (offset 10 lines).
Hunk #18 FAILED at 732.
Hunk #19 FAILED at 767.
Hunk #20 FAILED at 1036.
Hunk #21 succeeded at 1053 with fuzz 2 (offset 19 lines).
Hunk #22 FAILED at 1093.
Hunk #23 FAILED at 1128.
Hunk #24 FAILED at 1140.
Hunk #25 succeeded at 1178 (offset 10 lines).
Hunk #26 succeeded at 1198 with fuzz 1 (offset 19 lines).
Hunk #27 succeeded at 1213 (offset 10 lines).
Hunk #28 succeeded at 1259 (offset 19 lines).
Hunk #29 succeeded at 1261 with fuzz 2 (offset 13 lines).
Hunk #30 succeeded at 1368 (offset 19 lines).
Hunk #31 FAILED at 1576.
Hunk #32 succeeded at 1600 (offset 13 lines).
Hunk #33 FAILED at 1615.
Hunk #34 succeeded at 1683 (offset 26 lines).
Hunk #35 succeeded at 1717 (offset 13 lines).
Hunk #36 FAILED at 1854.
Hunk #37 succeeded at 2042 (offset 24 lines).
Hunk #38 FAILED at 2152.
Hunk #39 succeeded at 2160 (offset 13 lines).
Hunk #40 succeeded at 2187 (offset 24 lines).
Hunk #41 succeeded at 2245 (offset 13 lines).
Hunk #42 FAILED at 2270.
Hunk #43 succeeded at 2293 with fuzz 2 (offset 24 lines).
Hunk #44 succeeded at 2314 (offset 13 lines).
Hunk #45 FAILED at 2349.
Hunk #46 succeeded at 2387 (offset 30 lines).
Hunk #47 succeeded at 2378 (offset 13 lines).
Hunk #48 FAILED at 2391.
Hunk #49 succeeded at 2445 with fuzz 2 (offset 31 lines).
20 out of 49 hunks FAILED -- saving rejects to file drivers/net/r8169.c.rej

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [rft/update] r8169 changes in 2.6.x
  2005-02-23  1:29 ` Andrew Morton
  2005-02-23  1:26   ` Jeff Garzik
@ 2005-02-23  8:59   ` Francois Romieu
  2005-02-23  9:09     ` Andrew Morton
  1 sibling, 1 reply; 7+ messages in thread
From: Francois Romieu @ 2005-02-23  8:59 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-kernel, netdev, jdmason, rich, jgarzik

Andrew Morton <akpm@osdl.org> :
> There are already a bunch of r8169 patches in Jeff's tree.  The combination
> isn't pretty:
[removed by parental advisory]

I sent r8169-4{0/1/2/3/4}0 on netdev + Jeff the 22/02/2005. Jeff's netdev
(thus your tree) already had the r8169-3xx changes.

Jeff has acked r8169-4{0/1/2/3}0 on 23/02/2005. r8169-440 (PCI-ID) won't
be applied (there should be no functionnal change nor merge side-effect).

r8169-4{5/6}0 have been published only here (so far).

So you can:
- apply r8169-4{0/1/2/3/5/6}0 if you have not updated to Jeff -netdev beyond
  what is currently available through plain old patch
- apply r8169-4{5/6}0 if you are bk-synced with Jeff -netdev (assuming that
  Jeff acked after he actually pushed to its bk repo)
- do something else until I verify the above and generate a dedicated
  patchsets for your tree.

--
Ueimor

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [rft/update] r8169 changes in 2.6.x
  2005-02-23  8:59   ` Francois Romieu
@ 2005-02-23  9:09     ` Andrew Morton
  2005-02-23 20:58       ` [patch 2.6.11-rc4-mm1 1/2] r8169: IRQ races during change of mtu Francois Romieu
  0 siblings, 1 reply; 7+ messages in thread
From: Andrew Morton @ 2005-02-23  9:09 UTC (permalink / raw)
  To: Francois Romieu; +Cc: linux-kernel, netdev, jdmason, rich, jgarzik

Francois Romieu <romieu@fr.zoreil.com> wrote:
>
> - do something else until I verify the above and generate a dedicated
>    patchsets for your tree.

That sounds great to me ;)

2.6.11-rc4-mm1 should be on kernel.org in an hour or so.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [patch 2.6.11-rc4-mm1 1/2] r8169: IRQ races during change of mtu
  2005-02-23  9:09     ` Andrew Morton
@ 2005-02-23 20:58       ` Francois Romieu
  2005-02-23 21:03         ` [patch 2.6.11-rc4-mm1 2/2] r8169: factor out some code Francois Romieu
  0 siblings, 1 reply; 7+ messages in thread
From: Francois Romieu @ 2005-02-23 20:58 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-kernel, netdev, jdmason, rich, jgarzik

IRQ races during change of mtu
- NAPI poll must be enabled prior to IRQ activation or the IRQ handler
  will not know what to do with an incoming packet;
- rtl8169_down() needs to try twice to sync with the IRQ handler when
  it is not issued under !netif_running() protection.

Both changes make it safe to request a change of mtu on a live device.

Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>

diff -puN drivers/net/r8169.c~r8169-450 drivers/net/r8169.c
--- a/drivers/net/r8169.c~r8169-450	2005-02-23 21:35:21.112521942 +0100
+++ b/drivers/net/r8169.c	2005-02-23 21:35:21.117521120 +0100
@@ -1648,10 +1648,10 @@ static int rtl8169_change_mtu(struct net
 	if (ret < 0)
 		goto out;
 
-	rtl8169_hw_start(dev);
-
 	netif_poll_enable(dev);
 
+	rtl8169_hw_start(dev);
+
 	rtl8169_request_timer(dev);
 
 out:
@@ -2352,6 +2352,7 @@ static void rtl8169_down(struct net_devi
 {
 	struct rtl8169_private *tp = netdev_priv(dev);
 	void __iomem *ioaddr = tp->mmio_addr;
+	unsigned int poll_locked = 0;
 
 	rtl8169_delete_timer(dev);
 
@@ -2359,6 +2360,7 @@ static void rtl8169_down(struct net_devi
 
 	flush_scheduled_work();
 
+core_down:
 	spin_lock_irq(&tp->lock);
 
 	/* Stop the chip's Tx and Rx DMA processes. */
@@ -2375,11 +2377,28 @@ static void rtl8169_down(struct net_devi
 
 	synchronize_irq(dev->irq);
 
-	netif_poll_disable(dev);
+	if (!poll_locked) {
+		netif_poll_disable(dev);
+		poll_locked++;
+	}
 
 	/* Give a racing hard_start_xmit a few cycles to complete. */
 	synchronize_kernel();
 
+	/*
+	 * And now for the 50k$ question: are IRQ disabled or not ?
+	 *
+	 * Two paths lead here:
+	 * 1) dev->close
+	 *    -> netif_running() is available to sync the current code and the
+	 *       IRQ handler. See rtl8169_interrupt for details.
+	 * 2) dev->change_mtu
+	 *    -> rtl8169_poll can not be issued again and re-enable the
+	 *       interruptions. Let's simply issue the IRQ down sequence again.
+	 */
+	if (RTL_R16(IntrMask))
+		goto core_down;
+
 	rtl8169_tx_clear(tp);
 
 	rtl8169_rx_clear(tp);

_

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [patch 2.6.11-rc4-mm1 2/2] r8169: factor out some code.
  2005-02-23 20:58       ` [patch 2.6.11-rc4-mm1 1/2] r8169: IRQ races during change of mtu Francois Romieu
@ 2005-02-23 21:03         ` Francois Romieu
  0 siblings, 0 replies; 7+ messages in thread
From: Francois Romieu @ 2005-02-23 21:03 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-kernel, netdev, jdmason, rich, jgarzik

Factor out some code

Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>

diff -puN drivers/net/r8169.c~r8169-460 drivers/net/r8169.c
--- a/drivers/net/r8169.c~r8169-460	2005-02-23 21:35:28.715271999 +0100
+++ b/drivers/net/r8169.c	2005-02-23 21:35:28.720271177 +0100
@@ -495,6 +495,13 @@ static void rtl8169_irq_mask_and_ack(voi
 	RTL_W16(IntrStatus, 0xffff);
 }
 
+static void rtl8169_asic_down(void __iomem *ioaddr)
+{
+	RTL_W8(ChipCmd, 0x00);
+	rtl8169_irq_mask_and_ack(ioaddr);
+	RTL_R16(CPlusCmd);
+}
+
 static unsigned int rtl8169_tbi_reset_pending(void __iomem *ioaddr)
 {
 	return RTL_R32(TBICSR) & TBIReset;
@@ -2260,8 +2267,10 @@ rtl8169_interrupt(int irq, void *dev_ins
 
 		handled = 1;
 
-		if (unlikely(!netif_running(dev)))
-			goto out_asic_stop;
+		if (unlikely(!netif_running(dev))) {
+			rtl8169_asic_down(ioaddr);
+			goto out;
+		}
 
 		status &= tp->intr_mask;
 		RTL_W16(IntrStatus,
@@ -2310,12 +2319,6 @@ rtl8169_interrupt(int irq, void *dev_ins
 	}
 out:
 	return IRQ_RETVAL(handled);
-
-out_asic_stop:
-	RTL_W8(ChipCmd, 0x00);
-	rtl8169_irq_mask_and_ack(ioaddr);
-	RTL_R16(CPlusCmd);
-	goto out;
 }
 
 #ifdef CONFIG_R8169_NAPI
@@ -2363,11 +2366,7 @@ static void rtl8169_down(struct net_devi
 core_down:
 	spin_lock_irq(&tp->lock);
 
-	/* Stop the chip's Tx and Rx DMA processes. */
-	RTL_W8(ChipCmd, 0x00);
-
-	/* Disable interrupts by clearing the interrupt mask. */
-	RTL_W16(IntrMask, 0x0000);
+	rtl8169_asic_down(ioaddr);
 
 	/* Update the error counts. */
 	tp->stats.rx_missed_errors += RTL_R32(RxMissed);

_

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2005-02-23 21:13 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-02-22 23:48 [rft/update] r8169 changes in 2.6.x Francois Romieu
2005-02-23  1:29 ` Andrew Morton
2005-02-23  1:26   ` Jeff Garzik
2005-02-23  8:59   ` Francois Romieu
2005-02-23  9:09     ` Andrew Morton
2005-02-23 20:58       ` [patch 2.6.11-rc4-mm1 1/2] r8169: IRQ races during change of mtu Francois Romieu
2005-02-23 21:03         ` [patch 2.6.11-rc4-mm1 2/2] r8169: factor out some code Francois Romieu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).