diff options
| author | Arnd Bergmann <arnd@arndb.de> | 2012-07-11 12:50:20 +0200 | 
|---|---|---|
| committer | Arnd Bergmann <arnd@arndb.de> | 2012-07-11 12:50:20 +0200 | 
| commit | 0dc19510430b20b3b2d6d1b9b796fd42fa2af64a (patch) | |
| tree | a512cf400d74d72272ce6cf5c4d782538213d433 /drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | |
| parent | b52a2c472d7fcf215e31dffdd382651e1b99f138 (diff) | |
| parent | bd0a521e88aa7a06ae7aabaed7ae196ed4ad867a (diff) | |
| download | olio-linux-3.10-0dc19510430b20b3b2d6d1b9b796fd42fa2af64a.tar.xz olio-linux-3.10-0dc19510430b20b3b2d6d1b9b796fd42fa2af64a.zip  | |
Merge tag 'v3.5-rc6' into next/soc
Linux 3.5-rc6
Dependency for imx/soc changes
Diffstat (limited to 'drivers/net/ethernet/intel/ixgbe/ixgbe_main.c')
| -rw-r--r-- | drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 16 | 
1 files changed, 11 insertions, 5 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index 17ad6a3c1be..18ca3bcadf0 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -1058,17 +1058,17 @@ static inline void ixgbe_rx_hash(struct ixgbe_ring *ring,  #ifdef IXGBE_FCOE  /**   * ixgbe_rx_is_fcoe - check the rx desc for incoming pkt type - * @adapter: address of board private structure + * @ring: structure containing ring specific data   * @rx_desc: advanced rx descriptor   *   * Returns : true if it is FCoE pkt   */ -static inline bool ixgbe_rx_is_fcoe(struct ixgbe_adapter *adapter, +static inline bool ixgbe_rx_is_fcoe(struct ixgbe_ring *ring,  				    union ixgbe_adv_rx_desc *rx_desc)  {  	__le16 pkt_info = rx_desc->wb.lower.lo_dword.hs_rss.pkt_info; -	return (adapter->flags & IXGBE_FLAG_FCOE_ENABLED) && +	return test_bit(__IXGBE_RX_FCOE, &ring->state) &&  	       ((pkt_info & cpu_to_le16(IXGBE_RXDADV_PKTTYPE_ETQF_MASK)) ==  		(cpu_to_le16(IXGBE_ETQF_FILTER_FCOE <<  			     IXGBE_RXDADV_PKTTYPE_ETQF_SHIFT))); @@ -1148,7 +1148,7 @@ static bool ixgbe_alloc_mapped_page(struct ixgbe_ring *rx_ring,  	/* alloc new page for storage */  	if (likely(!page)) { -		page = alloc_pages(GFP_ATOMIC | __GFP_COLD, +		page = alloc_pages(GFP_ATOMIC | __GFP_COLD | __GFP_COMP,  				   ixgbe_rx_pg_order(rx_ring));  		if (unlikely(!page)) {  			rx_ring->rx_stats.alloc_rx_page_failed++; @@ -1549,6 +1549,12 @@ static bool ixgbe_cleanup_headers(struct ixgbe_ring *rx_ring,  		skb->truesize -= ixgbe_rx_bufsz(rx_ring);  	} +#ifdef IXGBE_FCOE +	/* do not attempt to pad FCoE Frames as this will disrupt DDP */ +	if (ixgbe_rx_is_fcoe(rx_ring, rx_desc)) +		return false; + +#endif  	/* if skb_pad returns an error the skb was freed */  	if (unlikely(skb->len < 60)) {  		int pad_len = 60 - skb->len; @@ -1775,7 +1781,7 @@ static bool ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,  #ifdef IXGBE_FCOE  		/* if ddp, not passing to ULD unless for FCP_RSP or error */ -		if (ixgbe_rx_is_fcoe(adapter, rx_desc)) { +		if (ixgbe_rx_is_fcoe(rx_ring, rx_desc)) {  			ddp_bytes = ixgbe_fcoe_ddp(adapter, rx_desc, skb);  			if (!ddp_bytes) {  				dev_kfree_skb_any(skb);  |