diff options
Diffstat (limited to 'drivers/net/chelsio/sge.c')
| -rw-r--r-- | drivers/net/chelsio/sge.c | 59 | 
1 files changed, 30 insertions, 29 deletions
diff --git a/drivers/net/chelsio/sge.c b/drivers/net/chelsio/sge.c index 55d99ca82f8..f01cfdb995d 100644 --- a/drivers/net/chelsio/sge.c +++ b/drivers/net/chelsio/sge.c @@ -53,6 +53,7 @@  #include <linux/ip.h>  #include <linux/in.h>  #include <linux/if_arp.h> +#include <linux/slab.h>  #include "cpl5_cmd.h"  #include "sge.h" @@ -161,14 +162,14 @@ struct respQ_e {   */  struct cmdQ_ce {  	struct sk_buff *skb; -	DECLARE_PCI_UNMAP_ADDR(dma_addr); -	DECLARE_PCI_UNMAP_LEN(dma_len); +	DEFINE_DMA_UNMAP_ADDR(dma_addr); +	DEFINE_DMA_UNMAP_LEN(dma_len);  };  struct freelQ_ce {  	struct sk_buff *skb; -	DECLARE_PCI_UNMAP_ADDR(dma_addr); -	DECLARE_PCI_UNMAP_LEN(dma_len); +	DEFINE_DMA_UNMAP_ADDR(dma_addr); +	DEFINE_DMA_UNMAP_LEN(dma_len);  };  /* @@ -459,7 +460,7 @@ static struct sk_buff *sched_skb(struct sge *sge, struct sk_buff *skb,  again:  	for (i = 0; i < MAX_NPORTS; i++) { -		s->port = ++s->port & (MAX_NPORTS - 1); +		s->port = (s->port + 1) & (MAX_NPORTS - 1);  		skbq = &s->p[s->port].skbq;  		skb = skb_peek(skbq); @@ -517,8 +518,8 @@ static void free_freelQ_buffers(struct pci_dev *pdev, struct freelQ *q)  	while (q->credits--) {  		struct freelQ_ce *ce = &q->centries[cidx]; -		pci_unmap_single(pdev, pci_unmap_addr(ce, dma_addr), -				 pci_unmap_len(ce, dma_len), +		pci_unmap_single(pdev, dma_unmap_addr(ce, dma_addr), +				 dma_unmap_len(ce, dma_len),  				 PCI_DMA_FROMDEVICE);  		dev_kfree_skb(ce->skb);  		ce->skb = NULL; @@ -632,9 +633,9 @@ static void free_cmdQ_buffers(struct sge *sge, struct cmdQ *q, unsigned int n)  	q->in_use -= n;  	ce = &q->centries[cidx];  	while (n--) { -		if (likely(pci_unmap_len(ce, dma_len))) { -			pci_unmap_single(pdev, pci_unmap_addr(ce, dma_addr), -					 pci_unmap_len(ce, dma_len), +		if (likely(dma_unmap_len(ce, dma_len))) { +			pci_unmap_single(pdev, dma_unmap_addr(ce, dma_addr), +					 dma_unmap_len(ce, dma_len),  					 PCI_DMA_TODEVICE);  			if (q->sop)  				q->sop = 0; @@ -850,8 +851,8 @@ static void refill_free_list(struct sge *sge, struct freelQ *q)  		skb_reserve(skb, sge->rx_pkt_pad);  		ce->skb = skb; -		pci_unmap_addr_set(ce, dma_addr, mapping); -		pci_unmap_len_set(ce, dma_len, dma_len); +		dma_unmap_addr_set(ce, dma_addr, mapping); +		dma_unmap_len_set(ce, dma_len, dma_len);  		e->addr_lo = (u32)mapping;  		e->addr_hi = (u64)mapping >> 32;  		e->len_gen = V_CMD_LEN(dma_len) | V_CMD_GEN1(q->genbit); @@ -1058,13 +1059,13 @@ static inline struct sk_buff *get_packet(struct pci_dev *pdev,  		skb_reserve(skb, 2);	/* align IP header */  		skb_put(skb, len);  		pci_dma_sync_single_for_cpu(pdev, -					    pci_unmap_addr(ce, dma_addr), -					    pci_unmap_len(ce, dma_len), +					    dma_unmap_addr(ce, dma_addr), +					    dma_unmap_len(ce, dma_len),  					    PCI_DMA_FROMDEVICE);  		skb_copy_from_linear_data(ce->skb, skb->data, len);  		pci_dma_sync_single_for_device(pdev, -					       pci_unmap_addr(ce, dma_addr), -					       pci_unmap_len(ce, dma_len), +					       dma_unmap_addr(ce, dma_addr), +					       dma_unmap_len(ce, dma_len),  					       PCI_DMA_FROMDEVICE);  		recycle_fl_buf(fl, fl->cidx);  		return skb; @@ -1076,8 +1077,8 @@ use_orig_buf:  		return NULL;  	} -	pci_unmap_single(pdev, pci_unmap_addr(ce, dma_addr), -			 pci_unmap_len(ce, dma_len), PCI_DMA_FROMDEVICE); +	pci_unmap_single(pdev, dma_unmap_addr(ce, dma_addr), +			 dma_unmap_len(ce, dma_len), PCI_DMA_FROMDEVICE);  	skb = ce->skb;  	prefetch(skb->data); @@ -1099,8 +1100,8 @@ static void unexpected_offload(struct adapter *adapter, struct freelQ *fl)  	struct freelQ_ce *ce = &fl->centries[fl->cidx];  	struct sk_buff *skb = ce->skb; -	pci_dma_sync_single_for_cpu(adapter->pdev, pci_unmap_addr(ce, dma_addr), -			    pci_unmap_len(ce, dma_len), PCI_DMA_FROMDEVICE); +	pci_dma_sync_single_for_cpu(adapter->pdev, dma_unmap_addr(ce, dma_addr), +			    dma_unmap_len(ce, dma_len), PCI_DMA_FROMDEVICE);  	pr_err("%s: unexpected offload packet, cmd %u\n",  	       adapter->name, *skb->data);  	recycle_fl_buf(fl, fl->cidx); @@ -1122,7 +1123,7 @@ static inline unsigned int compute_large_page_tx_descs(struct sk_buff *skb)  	if (PAGE_SIZE > SGE_TX_DESC_MAX_PLEN) {  		unsigned int nfrags = skb_shinfo(skb)->nr_frags; -		unsigned int i, len = skb->len - skb->data_len; +		unsigned int i, len = skb_headlen(skb);  		while (len > SGE_TX_DESC_MAX_PLEN) {  			count++;  			len -= SGE_TX_DESC_MAX_PLEN; @@ -1181,7 +1182,7 @@ static inline unsigned int write_large_page_tx_descs(unsigned int pidx,  			write_tx_desc(e1, *desc_mapping, SGE_TX_DESC_MAX_PLEN,  				      *gen, nfrags == 0 && *desc_len == 0);  			ce1->skb = NULL; -			pci_unmap_len_set(ce1, dma_len, 0); +			dma_unmap_len_set(ce1, dma_len, 0);  			*desc_mapping += SGE_TX_DESC_MAX_PLEN;  			if (*desc_len) {  				ce1++; @@ -1218,10 +1219,10 @@ static inline void write_tx_descs(struct adapter *adapter, struct sk_buff *skb,  	ce = &q->centries[pidx];  	mapping = pci_map_single(adapter->pdev, skb->data, -				skb->len - skb->data_len, PCI_DMA_TODEVICE); +				 skb_headlen(skb), PCI_DMA_TODEVICE);  	desc_mapping = mapping; -	desc_len = skb->len - skb->data_len; +	desc_len = skb_headlen(skb);  	flags = F_CMD_DATAVALID | F_CMD_SOP |  	    V_CMD_EOP(nfrags == 0 && desc_len <= SGE_TX_DESC_MAX_PLEN) | @@ -1232,7 +1233,7 @@ static inline void write_tx_descs(struct adapter *adapter, struct sk_buff *skb,  	e->addr_hi = (u64)desc_mapping >> 32;  	e->len_gen = V_CMD_LEN(first_desc_len) | V_CMD_GEN1(gen);  	ce->skb = NULL; -	pci_unmap_len_set(ce, dma_len, 0); +	dma_unmap_len_set(ce, dma_len, 0);  	if (PAGE_SIZE > SGE_TX_DESC_MAX_PLEN &&  	    desc_len > SGE_TX_DESC_MAX_PLEN) { @@ -1256,8 +1257,8 @@ static inline void write_tx_descs(struct adapter *adapter, struct sk_buff *skb,  	}  	ce->skb = NULL; -	pci_unmap_addr_set(ce, dma_addr, mapping); -	pci_unmap_len_set(ce, dma_len, skb->len - skb->data_len); +	dma_unmap_addr_set(ce, dma_addr, mapping); +	dma_unmap_len_set(ce, dma_len, skb_headlen(skb));  	for (i = 0; nfrags--; i++) {  		skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; @@ -1283,8 +1284,8 @@ static inline void write_tx_descs(struct adapter *adapter, struct sk_buff *skb,  			write_tx_desc(e1, desc_mapping, desc_len, gen,  				      nfrags == 0);  		ce->skb = NULL; -		pci_unmap_addr_set(ce, dma_addr, mapping); -		pci_unmap_len_set(ce, dma_len, frag->size); +		dma_unmap_addr_set(ce, dma_addr, mapping); +		dma_unmap_len_set(ce, dma_len, frag->size);  	}  	ce->skb = skb;  	wmb();  |