1

I have a network card:

02:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8050 PCI-E ASF Gigabit Ethernet Controller (rev 18)

And it seems the card resets randomly. Here is a dmesg:

  
[751806.503694] sky2 eth1: hung mac 124:54 fifo 195 (128:123)
[751806.503702] sky2 eth1: receiver hang detected
[751806.504154] sky2 eth1: disabling interface
[751806.504440] sky2 eth1: enabling interface
[751809.712495] sky2 eth1: Link is up at 1000 Mbps, full duplex, flow control rx
[970196.706605] sky2 eth1: hung mac 0:2 fifo 195 (194:189)
[970196.706611] sky2 eth1: receiver hang detected
[970196.706913] sky2 eth1: disabling interface
[970196.707227] sky2 eth1: enabling interface
[970199.917018] sky2 eth1: Link is up at 1000 Mbps, full duplex, flow control rx

It seems there is a problem with the network driver, sky2; but I haven't yet found any answer in other forums. Do you have any suggestions? Can I use another driver for the card? Is it a known bug?

Thanks!

1
  • Does anybody know if this problem is still present in ubuntu 8.10 and/or 9.04??? I mean, migration to a newer version would correct the problem?
    – Matias
    Oct 15, 2009 at 14:36

2 Answers 2

1

The sky2 driver was unusably bad for many years.

I do believe it's mostly fine these days, the 9.10 version should work fine.

0

There is a workaround that works reliably for me on approx 10 boxes that have sky2 driver. All my boxes are Centos5 based with kernel 2.6.18 (yes ancient for 2017). I found that after these log messages ...

sky2 eth1: receiver hang detected
sky2 eth1: disabling interface
sky2 eth1: enabling interface

... the driver seems to break checksum offloading to hardware. In some experiments I was able to cause it to partially fail just by ifdown; ifup sequence which seemed to cause checksum offload to break only for some UDP traffic.

So I just disable the checksum offloading to hardware:

ethtool --offload eth1 tx off

WARNING: for me ethtool --show-offload eth1 lies and always claims it is off. I can see that setting this to on or off clearly changes behavior, but querying its state lies and always show as off.

Now just to make that apply automatically I put this in /sbin/ifup-local:

#!/bin/bash
DEVICE=$1
if [[ "$DEVICE" == "eth0" || "$DEVICE" == "eth1" ]] ; then
 ethtool --offload "$DEVICE" tx off
fi

but something similar can probably be put that in other places too, e.g. in something like /etc/network/if-up.d/eth on debian.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .