@@ -627,6 +627,7 @@
int lso_header_size;
void *fragptr;
bool bounce = false;
+ bool is_arp = false;
if (!priv->port_up)
goto tx_drop;
@@ -698,10 +699,11 @@
priv->port_stats.tx_chksum_offload++;
}
+ skb_reset_mac_header(skb);
+ ethh = eth_hdr(skb);
+ is_arp = ethh && ethh->h_proto == ETH_P_ARP;
if (unlikely(priv->validate_loopback)) {
/* Copy dst mac address to wqe */
- skb_reset_mac_header(skb);
- ethh = eth_hdr(skb);
if (ethh && ethh->h_dest) {
mac = mlx4_en_mac_to_u64(ethh->h_dest);
mac_h = (u32) ((mac & 0xffff00000000ULL) >> 16);
@@ -790,7 +792,7 @@
if (likely(!skb_shared(skb)))
skb_orphan(skb);
- if (ring->bf_enabled && desc_size <= MAX_BF && !bounce && !vlan_tag) {
+ if (ring->bf_enabled && desc_size <= MAX_BF && !bounce && !vlan_tag && !is_arp) {
*(u32 *) (&tx_desc->ctrl.vlan_tag) |= ring->doorbell_qpn;
op_own |= htonl((bf_index & 0xffff) << 8);
/* Ensure new descirptor hits memory