Re: Problems with sky2 driver.

Stephen Hemminger
2006-07-24T17:54:07Z

On Mon, 24 Jul 2006 13:38:29 -0400
Todd Showalter <tshowalter@silverbirchstudios.com> wrote:

> I've been having trouble with the sky2 driver. It appears to work
> most of the time, but it will quite often wedge during transfers. The
> 2.6.17.* kernels actually seem worse than 2.6.16.19, but none of them
> work perfectly.
>
> What typically happens is that after working perfectly for a while,
> existing net connections hang, and subsequent net connections don't
> seem to start at all. firefox gets stuck with a bunch of half-loaded
> pages, for instance, and I've watched an scp of a large file to a
> colleague's machine stall and remain stalled.
>
> Once the machine is behaving this way, a reboot is the only way I
> have found of recovering it.
>
> We have two identical machines here that are both behaving this
> way, so I'm assuming it's not a hardware problem per se. The machines
> are Intel Pentium D 940 (3GHz) processors. They have ASUS P5LD2
> motherboards, with builtin Marvell PCIe 88E8053 gigabit ethernet
> controllers.
>
> I'm not running any binary modules; it's an untainted kernel. I'm
> running a Gentoo system, but I'm using the vanilla-sources kernel (ie:
> a pure kernel.org release, not the Gentoo-specific patched version).
>
> What can I do to help solve this?

To find out where to report problems on a specific device, look in the
MAINTAINERS file. I developed and maintain that driver.
Also, the mailing list for network drivers is netdev@vger.kernel.org

There is a receive problem that shows up under load, that is fixed
in the latest version (2.6.18 git), the patch is queued for the stable
tree as well.

--- sky2.orig/drivers/net/sky2.c 2006-07-17 06:02:27.000000000 -0700
+++ sky2/drivers/net/sky2.c 2006-07-17 06:06:56.000000000 -0700
@@ -50,7 +50,7 @@
#include "sky2.h"

#define DRV_NAME "sky2"
-#define DRV_VERSION "1.4"
+#define DRV_VERSION "1.5"
#define PFX DRV_NAME " "

/*
@@ -2204,9 +2204,6 @@
int work_done = 0;
u32 status = sky2_read32(hw, B0_Y2_SP_EISR);

- if (!~status)
- goto out;
-
if (status & Y2_IS_HW_ERR)
sky2_hw_intr(hw);

@@ -2243,7 +2240,7 @@

if (sky2_more_work(hw))
return 1;
-out:
+
netif_rx_complete(dev0);

sky2_read32(hw, B0_Y2_SP_LISR);