sky2: fix receive length error in mixed non-VLAN/VLAN traffic
authorstephen hemminger <shemminger@vyatta.com>
Mon, 30 Apr 2012 06:47:37 +0000 (06:47 +0000)
committerBen Hutchings <ben@decadent.org.uk>
Sun, 20 May 2012 21:56:36 +0000 (22:56 +0100)
commit2599c5942675bd800a9b97a15c30611cd2559a42
tree2bd19603df40d97c2b6acd8ebc4ea06d90a0ccee
parentd035ead85c6b765d5138a3a2cd8290e8966c74d5
sky2: fix receive length error in mixed non-VLAN/VLAN traffic

[ Upstream commit e072b3fad5f3915102c94628b4971f52ff99dd05 ]

Bug: The VLAN bit of the MAC RX Status Word is unreliable in several older
supported chips. Sometimes the VLAN bit is not set for valid VLAN packets
and also sometimes the VLAN bit is set for non-VLAN packets that came after
a VLAN packet. This results in a receive length error when VLAN hardware
tagging is enabled.

Fix: Variation on original fix proposed by Mirko.
The VLAN information is decoded in the status loop, and can be
applied to the received SKB there. This eliminates the need for the
separate tag field in the interface data structure. The tag has to
be copied and cleared if packet is copied. This version checked out
with vlan and normal traffic.

Note: vlan_tx_tag_present should be renamed vlan_tag_present, but that
is outside scope of this.

Reported-by: Mirko Lindner <mlindner@marvell.com>
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
drivers/net/ethernet/marvell/sky2.c
drivers/net/ethernet/marvell/sky2.h