diff options
Diffstat (limited to 'drivers/net/ethernet/emulex/benet/be_main.c')
| -rw-r--r-- | drivers/net/ethernet/emulex/benet/be_main.c | 7 | 
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c index ca2967b0f18..32a6927ca97 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c @@ -1599,6 +1599,8 @@ static void be_parse_rx_compl_v0(struct be_eth_rx_compl *compl,  					       compl);  	}  	rxcp->port = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, port, compl); +	rxcp->ip_frag = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, +				      ip_frag, compl);  }  static struct be_rx_compl_info *be_rx_compl_get(struct be_rx_obj *rxo) @@ -1620,6 +1622,9 @@ static struct be_rx_compl_info *be_rx_compl_get(struct be_rx_obj *rxo)  	else  		be_parse_rx_compl_v0(compl, rxcp); +	if (rxcp->ip_frag) +		rxcp->l4_csum = 0; +  	if (rxcp->vlanf) {  		/* vlanf could be wrongly set in some cards.  		 * ignore if vtm is not set */ @@ -2168,7 +2173,7 @@ static irqreturn_t be_msix(int irq, void *dev)  static inline bool do_gro(struct be_rx_compl_info *rxcp)  { -	return (rxcp->tcpf && !rxcp->err) ? true : false; +	return (rxcp->tcpf && !rxcp->err && rxcp->l4_csum) ? true : false;  }  static int be_process_rx(struct be_rx_obj *rxo, struct napi_struct *napi,  |