ibmvnic: Account for VLAN header length in TX buffers
authorThomas Falcon <tlfalcon@linux.vnet.ibm.com>
Mon, 12 Mar 2018 16:51:03 +0000 (11:51 -0500)
committerDavid S. Miller <davem@davemloft.net>
Tue, 13 Mar 2018 14:09:27 +0000 (10:09 -0400)
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: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/ibm/ibmvnic.c

index ea9f351eb3438c303d54819299cfe98e0ff5b1f3..14f00810db3346d29b39c4d8c9cff6c28832a0bf 100644 (file)
@@ -659,7 +659,7 @@ static int init_tx_pools(struct net_device *netdev)
 
                if (alloc_long_term_buff(adapter, &tx_pool->long_term_buff,
                                         adapter->req_tx_entries_per_subcrq *
-                                        adapter->req_mtu)) {
+                                        (adapter->req_mtu + VLAN_HLEN))) {
                        release_tx_pools(adapter);
                        return -1;
                }
@@ -1394,9 +1394,9 @@ static int ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
                if (tx_pool->tso_index == IBMVNIC_TSO_BUFS)
                        tx_pool->tso_index = 0;
        } else {
-               offset = index * adapter->req_mtu;
+               offset = index * (adapter->req_mtu + VLAN_HLEN);
                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;
        }