diff options
Diffstat (limited to 'drivers/net')
| -rw-r--r-- | drivers/net/atlx/atl1.c | 10 | ||||
| -rw-r--r-- | drivers/net/cnic.c | 10 | ||||
| -rw-r--r-- | drivers/net/ehea/ehea_ethtool.c | 7 | ||||
| -rw-r--r-- | drivers/net/ppp_generic.c | 9 | ||||
| -rw-r--r-- | drivers/net/skfp/skfddi.c | 2 | ||||
| -rw-r--r-- | drivers/net/starfire.c | 2 | ||||
| -rw-r--r-- | drivers/net/tg3.c | 2 | 
7 files changed, 35 insertions, 7 deletions
| diff --git a/drivers/net/atlx/atl1.c b/drivers/net/atlx/atl1.c index def8df83359c..3b527687c28f 100644 --- a/drivers/net/atlx/atl1.c +++ b/drivers/net/atlx/atl1.c @@ -3504,6 +3504,8 @@ static int atl1_set_ringparam(struct net_device *netdev,  	struct atl1_rfd_ring rfd_old, rfd_new;  	struct atl1_rrd_ring rrd_old, rrd_new;  	struct atl1_ring_header rhdr_old, rhdr_new; +	struct atl1_smb smb; +	struct atl1_cmb cmb;  	int err;  	tpd_old = adapter->tpd_ring; @@ -3544,11 +3546,19 @@ static int atl1_set_ringparam(struct net_device *netdev,  		adapter->rrd_ring = rrd_old;  		adapter->tpd_ring = tpd_old;  		adapter->ring_header = rhdr_old; +		/* +		 * Save SMB and CMB, since atl1_free_ring_resources +		 * will clear them. +		 */ +		smb = adapter->smb; +		cmb = adapter->cmb;  		atl1_free_ring_resources(adapter);  		adapter->rfd_ring = rfd_new;  		adapter->rrd_ring = rrd_new;  		adapter->tpd_ring = tpd_new;  		adapter->ring_header = rhdr_new; +		adapter->smb = smb; +		adapter->cmb = cmb;  		err = atl1_up(adapter);  		if (err) diff --git a/drivers/net/cnic.c b/drivers/net/cnic.c index 6dfa56440ac0..aa5016ad9e19 100644 --- a/drivers/net/cnic.c +++ b/drivers/net/cnic.c @@ -951,7 +951,7 @@ static int cnic_alloc_uio_rings(struct cnic_dev *dev, int pages)  					   &udev->l2_ring_map,  					   GFP_KERNEL | __GFP_COMP);  	if (!udev->l2_ring) -		return -ENOMEM; +		goto err_udev;  	udev->l2_buf_size = (cp->l2_rx_ring_size + 1) * cp->l2_single_buf_size;  	udev->l2_buf_size = PAGE_ALIGN(udev->l2_buf_size); @@ -959,7 +959,7 @@ static int cnic_alloc_uio_rings(struct cnic_dev *dev, int pages)  					  &udev->l2_buf_map,  					  GFP_KERNEL | __GFP_COMP);  	if (!udev->l2_buf) -		return -ENOMEM; +		goto err_dma;  	write_lock(&cnic_dev_lock);  	list_add(&udev->list, &cnic_udev_list); @@ -970,6 +970,12 @@ static int cnic_alloc_uio_rings(struct cnic_dev *dev, int pages)  	cp->udev = udev;  	return 0; + err_dma: +	dma_free_coherent(&udev->pdev->dev, udev->l2_ring_size, +			  udev->l2_ring, udev->l2_ring_map); + err_udev: +	kfree(udev); +	return -ENOMEM;  }  static int cnic_init_uio(struct cnic_dev *dev) diff --git a/drivers/net/ehea/ehea_ethtool.c b/drivers/net/ehea/ehea_ethtool.c index afebf2075779..3e2e734fecb7 100644 --- a/drivers/net/ehea/ehea_ethtool.c +++ b/drivers/net/ehea/ehea_ethtool.c @@ -265,6 +265,13 @@ static void ehea_get_ethtool_stats(struct net_device *dev,  static int ehea_set_flags(struct net_device *dev, u32 data)  { +	/* Avoid changing the VLAN flags */ +	if ((data & (ETH_FLAG_RXVLAN | ETH_FLAG_TXVLAN)) != +	    (ethtool_op_get_flags(dev) & (ETH_FLAG_RXVLAN | +					  ETH_FLAG_TXVLAN))){ +		return -EINVAL; +	} +  	return ethtool_op_set_flags(dev, data, ETH_FLAG_LRO  					| ETH_FLAG_TXVLAN  					| ETH_FLAG_RXVLAN); diff --git a/drivers/net/ppp_generic.c b/drivers/net/ppp_generic.c index b708f68471a6..6456484c0299 100644 --- a/drivers/net/ppp_generic.c +++ b/drivers/net/ppp_generic.c @@ -1283,6 +1283,11 @@ ppp_push(struct ppp *ppp)  }  #ifdef CONFIG_PPP_MULTILINK +static bool mp_protocol_compress __read_mostly = true; +module_param(mp_protocol_compress, bool, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(mp_protocol_compress, +		 "compress protocol id in multilink fragments"); +  /*   * Divide a packet to be transmitted into fragments and   * send them out the individual links. @@ -1345,10 +1350,10 @@ static int ppp_mp_explode(struct ppp *ppp, struct sk_buff *skb)  	if (nfree == 0 || nfree < navail / 2)  		return 0; /* can't take now, leave it in xmit_pending */ -	/* Do protocol field compression (XXX this should be optional) */ +	/* Do protocol field compression */  	p = skb->data;  	len = skb->len; -	if (*p == 0) { +	if (*p == 0 && mp_protocol_compress) {  		++p;  		--len;  	} diff --git a/drivers/net/skfp/skfddi.c b/drivers/net/skfp/skfddi.c index 0a66fed52e8e..16c62659cdd9 100644 --- a/drivers/net/skfp/skfddi.c +++ b/drivers/net/skfp/skfddi.c @@ -412,7 +412,7 @@ static  int skfp_driver_init(struct net_device *dev)  		bp->SharedMemAddr = pci_alloc_consistent(&bp->pdev,  							 bp->SharedMemSize,  							 &bp->SharedMemDMA); -		if (!bp->SharedMemSize) { +		if (!bp->SharedMemAddr) {  			printk("could not allocate mem for ");  			printk("hardware module: %ld byte\n",  			       bp->SharedMemSize); diff --git a/drivers/net/starfire.c b/drivers/net/starfire.c index 4adf12422787..a4f2bd52e546 100644 --- a/drivers/net/starfire.c +++ b/drivers/net/starfire.c @@ -148,7 +148,7 @@ static int full_duplex[MAX_UNITS] = {0, };   * This SUCKS.   * We need a much better method to determine if dma_addr_t is 64-bit.   */ -#if (defined(__i386__) && defined(CONFIG_HIGHMEM64G)) || defined(__x86_64__) || defined (__ia64__) || defined(__alpha__) || defined(__mips64__) || (defined(__mips__) && defined(CONFIG_HIGHMEM) && defined(CONFIG_64BIT_PHYS_ADDR)) || (defined(__powerpc64__) || defined(CONFIG_PHYS_64BIT)) +#if (defined(__i386__) && defined(CONFIG_HIGHMEM64G)) || defined(__x86_64__) || defined (__ia64__) || defined(__alpha__) || (defined(CONFIG_MIPS) && ((defined(CONFIG_HIGHMEM) && defined(CONFIG_64BIT_PHYS_ADDR)) || defined(CONFIG_64BIT))) || (defined(__powerpc64__) || defined(CONFIG_PHYS_64BIT))  /* 64-bit dma_addr_t */  #define ADDR_64BITS	/* This chip uses 64 bit addresses. */  #define netdrv_addr_t __le64 diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index e3d80c9fb86f..7841a8f69998 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c @@ -12694,7 +12694,7 @@ static void __devinit tg3_read_vpd(struct tg3 *tp)  			cnt = pci_read_vpd(tp->pdev, pos,  					   TG3_NVM_VPD_LEN - pos,  					   &vpd_data[pos]); -			if (cnt == -ETIMEDOUT || -EINTR) +			if (cnt == -ETIMEDOUT || cnt == -EINTR)  				cnt = 0;  			else if (cnt < 0)  				goto out_not_found; | 
