atl1: fix vlan tag regression
Subsystems (2)
PATCH 1/1 atl1: fix vlan tag regression
Commit 401c0aabec4b97320f962a0161a846d230a6f7aa introduced a regression in the atl1 driver by storing the VLAN tag in the wrong TX descriptor field.
This patch causes the VLAN tag to be stored in its proper location.
Tested-by Ramon Casellas <[email protected]>
Signed-off-by Jay Cliburn <[email protected]>
---
This patch also needs to be applied to 2.6.26.y and 2.6.27.y.
drivers/net/atlx/atl1.c | 7 ++++--- drivers/net/atlx/atl1.h | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-)
drivers/net/atlx/atl1.c +4 -3
@@ -2317,7 +2317,8 @@ static void atl1_tx_queue(struct atl1_adapter *adapter, u16 count,if (tpd != ptpd)memcpy (tpd, ptpd,sizeof (struct tx_packet_desc )); tpd->buffer_addr =cpu_to_le64 (buffer_info->dma); - tpd->word2 = (cpu_to_le16 (buffer_info->length) & + tpd->word2 &= ~(TPD_BUFLEN_MASK <<TPD_BUFLEN_SHIFT ); + tpd->word2 |= (cpu_to_le16 (buffer_info->length) &TPD_BUFLEN_MASK ) <<TPD_BUFLEN_SHIFT ;/*
@@ -2426,8 +2427,8 @@ static int atl1_xmit_frame(struct sk_buff *skb, struct net_device *netdev) vlan_tag = (vlan_tag <<4 ) | (vlan_tag >>13 ) | ((vlan_tag >>9 ) &0x8 ); ptpd->word3 |=1 <<TPD_INS_VL_TAG_SHIFT ; - ptpd->word3 |= (vlan_tag &TPD_VL_TAGGED_MASK ) << -TPD_VL_TAGGED_SHIFT ; + ptpd->word2 |= (vlan_tag &TPD_VLANTAG_MASK ) << +TPD_VLANTAG_SHIFT ; } tso =atl1_tso (adapter, skb, ptpd);
drivers/net/atlx/atl1.h +1 -1
@@ -504,7 +504,7 @@ struct rx_free_desc {#define TPD_PKTNT_MASK 0x0001#define TPD_PKTINT_SHIFT 15#define TPD_VLANTAG_MASK 0xFFFF -#define TPD_VLAN_SHIFT 16 +#define TPD_VLANTAG_SHIFT 16/* tpd word 3 bits 0:13 */ #define TPD_EOP_MASK 0x0001
Signature · 1 line
1.5.5.1
Jeff Garzik
AppliedQuoted 47 lines · Jay Cliburn
Commit
401c0aabec4b97320f962a0161a846d230a6f7aaintroduced a regression in the atl1 driver by storing the VLAN tag in the wrong TX descriptor field.This patch causes the VLAN tag to be stored in its proper location.
Tested-by Ramon Casellas <[email protected]>Signed-off-by Jay Cliburn <[email protected]>---
This patch also needs to be applied to 2.6.26.y and 2.6.27.y.
drivers/net/atlx/atl1.c | 7 ++++--- drivers/net/atlx/atl1.h | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-)drivers/net/atlx/atl1.c +4
-3@@ -2317,7 +2317,8 @@ static void atl1_tx_queue(struct atl1_adapter *adapter, u16 count,if (tpd != ptpd)memcpy (tpd, ptpd,sizeof (struct tx_packet_desc )); tpd->buffer_addr =cpu_to_le64 (buffer_info->dma); - tpd->word2 = (cpu_to_le16 (buffer_info->length) & + tpd->word2 &= ~(TPD_BUFLEN_MASK <<TPD_BUFLEN_SHIFT ); + tpd->word2 |= (cpu_to_le16 (buffer_info->length) &TPD_BUFLEN_MASK ) <<TPD_BUFLEN_SHIFT ;/* @@ -2426,8 +2427,8 @@ static int atl1_xmit_frame(struct sk_buff *skb, struct net_device *netdev) vlan_tag = (vlan_tag <<4 ) | (vlan_tag >>13 ) | ((vlan_tag >>9 ) &0x8 ); ptpd->word3 |=1 <<TPD_INS_VL_TAG_SHIFT ; - ptpd->word3 |= (vlan_tag &TPD_VL_TAGGED_MASK ) << -TPD_VL_TAGGED_SHIFT ; + ptpd->word2 |= (vlan_tag &TPD_VLANTAG_MASK ) << +TPD_VLANTAG_SHIFT ; } tso =atl1_tso (adapter, skb, ptpd);drivers/net/atlx/atl1.h +0
-0
drivers/net/atlx/atl1.h struct rx_free_desc { · line 508
Quoted 6 lines
drivers/net/atlx/atl1.h +1
-1@@ -504,7 +504,7 @@ struct rx_free_desc {#define TPD_PKTNT_MASK 0x0001#define TPD_PKTINT_SHIFT 15#define TPD_VLANTAG_MASK 0xFFFF -#define TPD_VLAN_SHIFT 16 +#define TPD_VLANTAG_SHIFT 16
applied