diff options
Diffstat (limited to 'drivers/net/ethernet')
| -rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 12 | ||||
| -rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 11 | ||||
| -rw-r--r-- | drivers/net/ethernet/cadence/at91_ether.c | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/freescale/gianfar_ethtool.c | 1 | ||||
| -rw-r--r-- | drivers/net/ethernet/freescale/gianfar_ptp.c | 4 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/e1000/e1000_main.c | 11 | ||||
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/icm.c | 30 | ||||
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/icm.h | 10 | ||||
| -rw-r--r-- | drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c | 4 | ||||
| -rw-r--r-- | drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 10 | ||||
| -rw-r--r-- | drivers/net/ethernet/stmicro/stmmac/stmmac_timer.c | 8 | 
11 files changed, 64 insertions, 39 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c index af20c6ee2cd..e8e97a7d1d0 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c @@ -662,14 +662,16 @@ void bnx2x_csum_validate(struct sk_buff *skb, union eth_rx_cqe *cqe,  				 struct bnx2x_fastpath *fp,  				 struct bnx2x_eth_q_stats *qstats)  { -	/* Do nothing if no IP/L4 csum validation was done */ - +	/* Do nothing if no L4 csum validation was done. +	 * We do not check whether IP csum was validated. For IPv4 we assume +	 * that if the card got as far as validating the L4 csum, it also +	 * validated the IP csum. IPv6 has no IP csum. +	 */  	if (cqe->fast_path_cqe.status_flags & -	    (ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG | -	     ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG)) +	    ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG)  		return; -	/* If both IP/L4 validation were done, check if an error was found. */ +	/* If L4 validation was done, check if an error was found. */  	if (cqe->fast_path_cqe.type_error_flags &  	    (ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG | diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c index 211753e01f8..0875ecfe337 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c @@ -9831,12 +9831,13 @@ static void __devinit bnx2x_get_igu_cam_info(struct bnx2x *bp)  	}  #ifdef CONFIG_PCI_MSI -	/* -	 * It's expected that number of CAM entries for this functions is equal -	 * to the number evaluated based on the MSI-X table size. We want a -	 * harsh warning if these values are different! +	/* Due to new PF resource allocation by MFW T7.4 and above, it's +	 * optional that number of CAM entries will not be equal to the value +	 * advertised in PCI. +	 * Driver should use the minimal value of both as the actual status +	 * block count  	 */ -	WARN_ON(bp->igu_sb_cnt != igu_sb_cnt); +	bp->igu_sb_cnt = min_t(int, bp->igu_sb_cnt, igu_sb_cnt);  #endif  	if (igu_sb_cnt == 0) diff --git a/drivers/net/ethernet/cadence/at91_ether.c b/drivers/net/ethernet/cadence/at91_ether.c index 77884191a8c..4e980a7886f 100644 --- a/drivers/net/ethernet/cadence/at91_ether.c +++ b/drivers/net/ethernet/cadence/at91_ether.c @@ -1086,7 +1086,7 @@ static int __init at91ether_probe(struct platform_device *pdev)  	/* Clock */  	lp->ether_clk = clk_get(&pdev->dev, "ether_clk");  	if (IS_ERR(lp->ether_clk)) { -		res = -ENODEV; +		res = PTR_ERR(lp->ether_clk);  		goto err_ioumap;  	}  	clk_enable(lp->ether_clk); diff --git a/drivers/net/ethernet/freescale/gianfar_ethtool.c b/drivers/net/ethernet/freescale/gianfar_ethtool.c index 8971921cc1c..ab6762caa95 100644 --- a/drivers/net/ethernet/freescale/gianfar_ethtool.c +++ b/drivers/net/ethernet/freescale/gianfar_ethtool.c @@ -1773,6 +1773,7 @@ static int gfar_get_nfc(struct net_device *dev, struct ethtool_rxnfc *cmd,  }  int gfar_phc_index = -1; +EXPORT_SYMBOL(gfar_phc_index);  static int gfar_get_ts_info(struct net_device *dev,  			    struct ethtool_ts_info *info) diff --git a/drivers/net/ethernet/freescale/gianfar_ptp.c b/drivers/net/ethernet/freescale/gianfar_ptp.c index c08e5d40fec..0daa66b8eca 100644 --- a/drivers/net/ethernet/freescale/gianfar_ptp.c +++ b/drivers/net/ethernet/freescale/gianfar_ptp.c @@ -515,7 +515,7 @@ static int gianfar_ptp_probe(struct platform_device *dev)  		err = PTR_ERR(etsects->clock);  		goto no_clock;  	} -	gfar_phc_clock = ptp_clock_index(etsects->clock); +	gfar_phc_index = ptp_clock_index(etsects->clock);  	dev_set_drvdata(&dev->dev, etsects); @@ -539,7 +539,7 @@ static int gianfar_ptp_remove(struct platform_device *dev)  	gfar_write(&etsects->regs->tmr_temask, 0);  	gfar_write(&etsects->regs->tmr_ctrl,   0); -	gfar_phc_clock = -1; +	gfar_phc_index = -1;  	ptp_clock_unregister(etsects->clock);  	iounmap(etsects->regs);  	release_resource(etsects->rsrc); diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c index 3bfbb8df898..bde337ee1a3 100644 --- a/drivers/net/ethernet/intel/e1000/e1000_main.c +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c @@ -3149,6 +3149,17 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,  		return NETDEV_TX_OK;  	} +	/* On PCI/PCI-X HW, if packet size is less than ETH_ZLEN, +	 * packets may get corrupted during padding by HW. +	 * To WA this issue, pad all small packets manually. +	 */ +	if (skb->len < ETH_ZLEN) { +		if (skb_pad(skb, ETH_ZLEN - skb->len)) +			return NETDEV_TX_OK; +		skb->len = ETH_ZLEN; +		skb_set_tail_pointer(skb, ETH_ZLEN); +	} +  	mss = skb_shinfo(skb)->gso_size;  	/* The controller does a simple calculation to  	 * make sure there is enough room in the FIFO before diff --git a/drivers/net/ethernet/mellanox/mlx4/icm.c b/drivers/net/ethernet/mellanox/mlx4/icm.c index daf41792366..31d02649be4 100644 --- a/drivers/net/ethernet/mellanox/mlx4/icm.c +++ b/drivers/net/ethernet/mellanox/mlx4/icm.c @@ -227,9 +227,10 @@ int mlx4_UNMAP_ICM_AUX(struct mlx4_dev *dev)  			MLX4_CMD_TIME_CLASS_B, MLX4_CMD_NATIVE);  } -int mlx4_table_get(struct mlx4_dev *dev, struct mlx4_icm_table *table, int obj) +int mlx4_table_get(struct mlx4_dev *dev, struct mlx4_icm_table *table, u32 obj)  { -	int i = (obj & (table->num_obj - 1)) / (MLX4_TABLE_CHUNK_SIZE / table->obj_size); +	u32 i = (obj & (table->num_obj - 1)) / +			(MLX4_TABLE_CHUNK_SIZE / table->obj_size);  	int ret = 0;  	mutex_lock(&table->mutex); @@ -262,16 +263,18 @@ out:  	return ret;  } -void mlx4_table_put(struct mlx4_dev *dev, struct mlx4_icm_table *table, int obj) +void mlx4_table_put(struct mlx4_dev *dev, struct mlx4_icm_table *table, u32 obj)  { -	int i; +	u32 i; +	u64 offset;  	i = (obj & (table->num_obj - 1)) / (MLX4_TABLE_CHUNK_SIZE / table->obj_size);  	mutex_lock(&table->mutex);  	if (--table->icm[i]->refcount == 0) { -		mlx4_UNMAP_ICM(dev, table->virt + i * MLX4_TABLE_CHUNK_SIZE, +		offset = (u64) i * MLX4_TABLE_CHUNK_SIZE; +		mlx4_UNMAP_ICM(dev, table->virt + offset,  			       MLX4_TABLE_CHUNK_SIZE / MLX4_ICM_PAGE_SIZE);  		mlx4_free_icm(dev, table->icm[i], table->coherent);  		table->icm[i] = NULL; @@ -280,9 +283,11 @@ void mlx4_table_put(struct mlx4_dev *dev, struct mlx4_icm_table *table, int obj)  	mutex_unlock(&table->mutex);  } -void *mlx4_table_find(struct mlx4_icm_table *table, int obj, dma_addr_t *dma_handle) +void *mlx4_table_find(struct mlx4_icm_table *table, u32 obj, +			dma_addr_t *dma_handle)  { -	int idx, offset, dma_offset, i; +	int offset, dma_offset, i; +	u64 idx;  	struct mlx4_icm_chunk *chunk;  	struct mlx4_icm *icm;  	struct page *page = NULL; @@ -292,7 +297,7 @@ void *mlx4_table_find(struct mlx4_icm_table *table, int obj, dma_addr_t *dma_han  	mutex_lock(&table->mutex); -	idx = (obj & (table->num_obj - 1)) * table->obj_size; +	idx = (u64) (obj & (table->num_obj - 1)) * table->obj_size;  	icm = table->icm[idx / MLX4_TABLE_CHUNK_SIZE];  	dma_offset = offset = idx % MLX4_TABLE_CHUNK_SIZE; @@ -326,10 +331,11 @@ out:  }  int mlx4_table_get_range(struct mlx4_dev *dev, struct mlx4_icm_table *table, -			 int start, int end) +			 u32 start, u32 end)  {  	int inc = MLX4_TABLE_CHUNK_SIZE / table->obj_size; -	int i, err; +	int err; +	u32 i;  	for (i = start; i <= end; i += inc) {  		err = mlx4_table_get(dev, table, i); @@ -349,9 +355,9 @@ fail:  }  void mlx4_table_put_range(struct mlx4_dev *dev, struct mlx4_icm_table *table, -			  int start, int end) +			  u32 start, u32 end)  { -	int i; +	u32 i;  	for (i = start; i <= end; i += MLX4_TABLE_CHUNK_SIZE / table->obj_size)  		mlx4_table_put(dev, table, i); diff --git a/drivers/net/ethernet/mellanox/mlx4/icm.h b/drivers/net/ethernet/mellanox/mlx4/icm.h index a67744f5350..dee67fa3910 100644 --- a/drivers/net/ethernet/mellanox/mlx4/icm.h +++ b/drivers/net/ethernet/mellanox/mlx4/icm.h @@ -71,17 +71,17 @@ struct mlx4_icm *mlx4_alloc_icm(struct mlx4_dev *dev, int npages,  				gfp_t gfp_mask, int coherent);  void mlx4_free_icm(struct mlx4_dev *dev, struct mlx4_icm *icm, int coherent); -int mlx4_table_get(struct mlx4_dev *dev, struct mlx4_icm_table *table, int obj); -void mlx4_table_put(struct mlx4_dev *dev, struct mlx4_icm_table *table, int obj); +int mlx4_table_get(struct mlx4_dev *dev, struct mlx4_icm_table *table, u32 obj); +void mlx4_table_put(struct mlx4_dev *dev, struct mlx4_icm_table *table, u32 obj);  int mlx4_table_get_range(struct mlx4_dev *dev, struct mlx4_icm_table *table, -			 int start, int end); +			 u32 start, u32 end);  void mlx4_table_put_range(struct mlx4_dev *dev, struct mlx4_icm_table *table, -			  int start, int end); +			  u32 start, u32 end);  int mlx4_init_icm_table(struct mlx4_dev *dev, struct mlx4_icm_table *table,  			u64 virt, int obj_size,	u32 nobj, int reserved,  			int use_lowmem, int use_coherent);  void mlx4_cleanup_icm_table(struct mlx4_dev *dev, struct mlx4_icm_table *table); -void *mlx4_table_find(struct mlx4_icm_table *table, int obj, dma_addr_t *dma_handle); +void *mlx4_table_find(struct mlx4_icm_table *table, u32 obj, dma_addr_t *dma_handle);  static inline void mlx4_icm_first(struct mlx4_icm *icm,  				  struct mlx4_icm_iter *iter) diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c index 342b3a79bd0..a77c558d8f4 100644 --- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c +++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c @@ -1378,6 +1378,10 @@ static void netxen_mask_aer_correctable(struct netxen_adapter *adapter)  	struct pci_dev *root = pdev->bus->self;  	u32 aer_pos; +	/* root bus? */ +	if (!root) +		return; +  	if (adapter->ahw.board_type != NETXEN_BRDTYPE_P3_4_GB_MM &&  		adapter->ahw.board_type != NETXEN_BRDTYPE_P3_10G_TP)  		return; diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index c136162e647..3be88331d17 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -1066,7 +1066,7 @@ static int stmmac_open(struct net_device *dev)  	} else  		priv->tm->enable = 1;  #endif -	clk_enable(priv->stmmac_clk); +	clk_prepare_enable(priv->stmmac_clk);  	stmmac_check_ether_addr(priv); @@ -1188,7 +1188,7 @@ open_error:  	if (priv->phydev)  		phy_disconnect(priv->phydev); -	clk_disable(priv->stmmac_clk); +	clk_disable_unprepare(priv->stmmac_clk);  	return ret;  } @@ -1246,7 +1246,7 @@ static int stmmac_release(struct net_device *dev)  #ifdef CONFIG_STMMAC_DEBUG_FS  	stmmac_exit_fs();  #endif -	clk_disable(priv->stmmac_clk); +	clk_disable_unprepare(priv->stmmac_clk);  	return 0;  } @@ -2178,7 +2178,7 @@ int stmmac_suspend(struct net_device *ndev)  	else {  		stmmac_set_mac(priv->ioaddr, false);  		/* Disable clock in case of PWM is off */ -		clk_disable(priv->stmmac_clk); +		clk_disable_unprepare(priv->stmmac_clk);  	}  	spin_unlock_irqrestore(&priv->lock, flags);  	return 0; @@ -2203,7 +2203,7 @@ int stmmac_resume(struct net_device *ndev)  		priv->hw->mac->pmt(priv->ioaddr, 0);  	else  		/* enable the clk prevously disabled */ -		clk_enable(priv->stmmac_clk); +		clk_prepare_enable(priv->stmmac_clk);  	netif_device_attach(ndev); diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_timer.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_timer.c index 2a0e1abde7e..4ccd4e2977b 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_timer.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_timer.c @@ -97,19 +97,19 @@ static struct clk *timer_clock;  static void stmmac_tmu_start(unsigned int new_freq)  {  	clk_set_rate(timer_clock, new_freq); -	clk_enable(timer_clock); +	clk_prepare_enable(timer_clock);  }  static void stmmac_tmu_stop(void)  { -	clk_disable(timer_clock); +	clk_disable_unprepare(timer_clock);  }  int stmmac_open_ext_timer(struct net_device *dev, struct stmmac_timer *tm)  {  	timer_clock = clk_get(NULL, TMU_CHANNEL); -	if (timer_clock == NULL) +	if (IS_ERR(timer_clock))  		return -1;  	if (tmu2_register_user(stmmac_timer_handler, (void *)dev) < 0) { @@ -126,7 +126,7 @@ int stmmac_open_ext_timer(struct net_device *dev, struct stmmac_timer *tm)  int stmmac_close_ext_timer(void)  { -	clk_disable(timer_clock); +	clk_disable_unprepare(timer_clock);  	tmu2_unregister_user();  	clk_put(timer_clock);  	return 0;  |