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!

  • 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 '09 at 14:36
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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.