--- /dev/null
+--- compat-rdma/drivers/net/ethernet/chelsio/cxgb4/sge.c 2014-09-02 11:34:02.000000000 -0500
++++ compat-rdma.new/drivers/net/ethernet/chelsio/cxgb4/sge.c 2014-09-02 11:33:13.000000000 -0500
+@@ -1718,19 +1718,26 @@ static void do_gro(struct sge_eth_rxq *r
+
+ if (unlikely(pkt->vlan_ex)) {
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)
+ __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), ntohs(pkt->vlan));
+ #else
++ __vlan_hwaccel_put_tag(skb, ntohs(pkt->vlan));
++#endif
++ rxq->stats.vlan_ex++;
++#else
+ struct port_info *pi = netdev_priv(rxq->rspq.netdev);
+ struct vlan_group *grp = pi->vlan_grp;
+
+- if (likely(grp))
++ rxq->stats.vlan_ex++;
++ if (likely(grp)) {
+ ret = vlan_gro_frags(&rxq->rspq.napi, grp,
+ be16_to_cpu(pkt->vlan));
++ goto stats;
++ }
+ #endif
+- rxq->stats.vlan_ex++;
+ }
+ ret = napi_gro_frags(&rxq->rspq.napi);
+- if (ret == GRO_HELD)
++stats: if (ret == GRO_HELD)
+ rxq->stats.lro_pkts++;
+ else if (ret == GRO_MERGED || ret == GRO_MERGED_FREE)
+ rxq->stats.lro_merged++;