提交 8dff66cc 编写于 作者: T Thomas Falcon 提交者: David S. Miller

ibmvnic: Account for VLAN header length in TX buffers

The extra four bytes of a VLAN packet was throwing off
TX buffer entry values used by the driver. Account for those
bytes when in buffer size and buffer entry calculations
Signed-off-by: NThomas Falcon <tlfalcon@linux.vnet.ibm.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 da75e3b6
...@@ -659,7 +659,7 @@ static int init_tx_pools(struct net_device *netdev) ...@@ -659,7 +659,7 @@ static int init_tx_pools(struct net_device *netdev)
if (alloc_long_term_buff(adapter, &tx_pool->long_term_buff, if (alloc_long_term_buff(adapter, &tx_pool->long_term_buff,
adapter->req_tx_entries_per_subcrq * adapter->req_tx_entries_per_subcrq *
adapter->req_mtu)) { (adapter->req_mtu + VLAN_HLEN))) {
release_tx_pools(adapter); release_tx_pools(adapter);
return -1; return -1;
} }
...@@ -1394,9 +1394,9 @@ static int ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev) ...@@ -1394,9 +1394,9 @@ static int ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
if (tx_pool->tso_index == IBMVNIC_TSO_BUFS) if (tx_pool->tso_index == IBMVNIC_TSO_BUFS)
tx_pool->tso_index = 0; tx_pool->tso_index = 0;
} else { } else {
offset = index * adapter->req_mtu; offset = index * (adapter->req_mtu + VLAN_HLEN);
dst = tx_pool->long_term_buff.buff + offset; dst = tx_pool->long_term_buff.buff + offset;
memset(dst, 0, adapter->req_mtu); memset(dst, 0, adapter->req_mtu + VLAN_HLEN);
data_dma_addr = tx_pool->long_term_buff.addr + offset; data_dma_addr = tx_pool->long_term_buff.addr + offset;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册