diff options
Diffstat (limited to 'drivers/net/gianfar.c')
| -rw-r--r-- | drivers/net/gianfar.c | 26 | 
1 files changed, 11 insertions, 15 deletions
diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c index 4f7c3f3ca23..4c4cc80ec0a 100644 --- a/drivers/net/gianfar.c +++ b/drivers/net/gianfar.c @@ -654,9 +654,8 @@ static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev)  	priv->node = ofdev->dev.of_node;  	priv->ndev = dev; -	dev->num_tx_queues = num_tx_qs; -	dev->real_num_tx_queues = num_tx_qs;  	priv->num_tx_queues = num_tx_qs; +	netif_set_real_num_rx_queues(dev, num_rx_qs);  	priv->num_rx_queues = num_rx_qs;  	priv->num_grps = 0x0; @@ -1859,7 +1858,7 @@ static int register_grp_irqs(struct gfar_priv_grp *grp)  				printk(KERN_ERR "%s: Can't get IRQ %d\n",  					dev->name, grp->interruptError); -				goto err_irq_fail; +			goto err_irq_fail;  		}  		if ((err = request_irq(grp->interruptTransmit, gfar_transmit, @@ -2048,7 +2047,6 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)  	u32 bufaddr;  	unsigned long flags;  	unsigned int nr_frags, nr_txbds, length; -	union skb_shared_tx *shtx;  	/*  	 * TOE=1 frames larger than 2500 bytes may see excess delays @@ -2069,15 +2067,15 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)  	txq = netdev_get_tx_queue(dev, rq);  	base = tx_queue->tx_bd_base;  	regs = tx_queue->grp->regs; -	shtx = skb_tx(skb);  	/* check if time stamp should be generated */ -	if (unlikely(shtx->hardware && priv->hwts_tx_en)) +	if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP && +		     priv->hwts_tx_en))  		do_tstamp = 1;  	/* make space for additional header when fcb is needed */  	if (((skb->ip_summed == CHECKSUM_PARTIAL) || -			(priv->vlgrp && vlan_tx_tag_present(skb)) || +			vlan_tx_tag_present(skb) ||  			unlikely(do_tstamp)) &&  			(skb_headroom(skb) < GMAC_FCB_LEN)) {  		struct sk_buff *skb_new; @@ -2163,7 +2161,7 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)  		gfar_tx_checksum(skb, fcb);  	} -	if (priv->vlgrp && vlan_tx_tag_present(skb)) { +	if (vlan_tx_tag_present(skb)) {  		if (unlikely(NULL == fcb)) {  			fcb = gfar_add_fcb(skb);  			lstatus |= BD_LFLAG(TXBD_TOE); @@ -2174,7 +2172,7 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)  	/* Setup tx hardware time stamping if requested */  	if (unlikely(do_tstamp)) { -		shtx->in_progress = 1; +		skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;  		if (fcb == NULL)  			fcb = gfar_add_fcb(skb);  		fcb->ptp = 1; @@ -2446,7 +2444,6 @@ static int gfar_clean_tx_ring(struct gfar_priv_tx_q *tx_queue)  	int howmany = 0;  	u32 lstatus;  	size_t buflen; -	union skb_shared_tx *shtx;  	rx_queue = priv->rx_queue[tx_queue->qindex];  	bdp = tx_queue->dirty_tx; @@ -2461,8 +2458,7 @@ static int gfar_clean_tx_ring(struct gfar_priv_tx_q *tx_queue)  		 * When time stamping, one additional TxBD must be freed.  		 * Also, we need to dma_unmap_single() the TxPAL.  		 */ -		shtx = skb_tx(skb); -		if (unlikely(shtx->in_progress)) +		if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS))  			nr_txbds = frags + 2;  		else  			nr_txbds = frags + 1; @@ -2476,7 +2472,7 @@ static int gfar_clean_tx_ring(struct gfar_priv_tx_q *tx_queue)  				(lstatus & BD_LENGTH_MASK))  			break; -		if (unlikely(shtx->in_progress)) { +		if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS)) {  			next = next_txbd(bdp, base, tx_ring_size);  			buflen = next->length + GMAC_FCB_LEN;  		} else @@ -2485,7 +2481,7 @@ static int gfar_clean_tx_ring(struct gfar_priv_tx_q *tx_queue)  		dma_unmap_single(&priv->ofdev->dev, bdp->bufPtr,  				buflen, DMA_TO_DEVICE); -		if (unlikely(shtx->in_progress)) { +		if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS)) {  			struct skb_shared_hwtstamps shhwtstamps;  			u64 *ns = (u64*) (((u32)skb->data + 0x10) & ~0x7);  			memset(&shhwtstamps, 0, sizeof(shhwtstamps)); @@ -2657,7 +2653,7 @@ static inline void gfar_rx_checksum(struct sk_buff *skb, struct rxfcb *fcb)  	if ((fcb->flags & RXFCB_CSUM_MASK) == (RXFCB_CIP | RXFCB_CTU))  		skb->ip_summed = CHECKSUM_UNNECESSARY;  	else -		skb->ip_summed = CHECKSUM_NONE; +		skb_checksum_none_assert(skb);  }  |