diff options
Diffstat (limited to 'drivers/net/ethernet/chelsio')
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c | 6 | ||||
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c | 30 | ||||
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb3/l2t.c | 6 | ||||
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb3/l2t.h | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb3/sge.c | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb3/t3_hw.c | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 4 | ||||
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/sge.c | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4vf/sge.c | 5 | 
11 files changed, 33 insertions, 30 deletions
diff --git a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c index abb6ce7c1b7..6505070abcf 100644 --- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c +++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c @@ -3050,7 +3050,7 @@ static struct pci_error_handlers t3_err_handler = {  static void set_nqsets(struct adapter *adap)  {  	int i, j = 0; -	int num_cpus = num_online_cpus(); +	int num_cpus = netif_get_num_default_rss_queues();  	int hwports = adap->params.nports;  	int nqsets = adap->msix_nvectors - 1; @@ -3173,6 +3173,9 @@ static void __devinit cxgb3_init_iscsi_mac(struct net_device *dev)  	pi->iscsic.mac_addr[3] |= 0x80;  } +#define TSO_FLAGS (NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_TSO_ECN) +#define VLAN_FEAT (NETIF_F_SG | NETIF_F_IP_CSUM | TSO_FLAGS | \ +			NETIF_F_IPV6_CSUM | NETIF_F_HIGHDMA)  static int __devinit init_one(struct pci_dev *pdev,  			      const struct pci_device_id *ent)  { @@ -3293,6 +3296,7 @@ static int __devinit init_one(struct pci_dev *pdev,  		netdev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM |  			NETIF_F_TSO | NETIF_F_RXCSUM | NETIF_F_HW_VLAN_RX;  		netdev->features |= netdev->hw_features | NETIF_F_HW_VLAN_TX; +		netdev->vlan_features |= netdev->features & VLAN_FEAT;  		if (pci_using_dac)  			netdev->features |= NETIF_F_HIGHDMA; diff --git a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c index 65e4b280619..2dbbcbb450d 100644 --- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c +++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c @@ -62,7 +62,9 @@ static const unsigned int MAX_ATIDS = 64 * 1024;  static const unsigned int ATID_BASE = 0x10000;  static void cxgb_neigh_update(struct neighbour *neigh); -static void cxgb_redirect(struct dst_entry *old, struct dst_entry *new); +static void cxgb_redirect(struct dst_entry *old, struct neighbour *old_neigh, +			  struct dst_entry *new, struct neighbour *new_neigh, +			  const void *daddr);  static inline int offload_activated(struct t3cdev *tdev)  { @@ -575,7 +577,7 @@ static void t3_process_tid_release_list(struct work_struct *work)  		if (!skb) {  			spin_lock_bh(&td->tid_release_lock);  			p->ctx = (void *)td->tid_release_list; -			td->tid_release_list = (struct t3c_tid_entry *)p; +			td->tid_release_list = p;  			break;  		}  		mk_tid_release(skb, p - td->tid_maps.tid_tab); @@ -968,8 +970,10 @@ static int nb_callback(struct notifier_block *self, unsigned long event,  	}  	case (NETEVENT_REDIRECT):{  		struct netevent_redirect *nr = ctx; -		cxgb_redirect(nr->old, nr->new); -		cxgb_neigh_update(dst_get_neighbour_noref(nr->new)); +		cxgb_redirect(nr->old, nr->old_neigh, +			      nr->new, nr->new_neigh, +			      nr->daddr); +		cxgb_neigh_update(nr->new_neigh);  		break;  	}  	default: @@ -1107,10 +1111,11 @@ static void set_l2t_ix(struct t3cdev *tdev, u32 tid, struct l2t_entry *e)  	tdev->send(tdev, skb);  } -static void cxgb_redirect(struct dst_entry *old, struct dst_entry *new) +static void cxgb_redirect(struct dst_entry *old, struct neighbour *old_neigh, +			  struct dst_entry *new, struct neighbour *new_neigh, +			  const void *daddr)  {  	struct net_device *olddev, *newdev; -	struct neighbour *n;  	struct tid_info *ti;  	struct t3cdev *tdev;  	u32 tid; @@ -1118,15 +1123,8 @@ static void cxgb_redirect(struct dst_entry *old, struct dst_entry *new)  	struct l2t_entry *e;  	struct t3c_tid_entry *te; -	n = dst_get_neighbour_noref(old); -	if (!n) -		return; -	olddev = n->dev; - -	n = dst_get_neighbour_noref(new); -	if (!n) -		return; -	newdev = n->dev; +	olddev = old_neigh->dev; +	newdev = new_neigh->dev;  	if (!is_offloading(olddev))  		return; @@ -1144,7 +1142,7 @@ static void cxgb_redirect(struct dst_entry *old, struct dst_entry *new)  	}  	/* Add new L2T entry */ -	e = t3_l2t_get(tdev, new, newdev); +	e = t3_l2t_get(tdev, new, newdev, daddr);  	if (!e) {  		printk(KERN_ERR "%s: couldn't allocate new l2t entry!\n",  		       __func__); diff --git a/drivers/net/ethernet/chelsio/cxgb3/l2t.c b/drivers/net/ethernet/chelsio/cxgb3/l2t.c index 3fa3c8833ed..8d53438638b 100644 --- a/drivers/net/ethernet/chelsio/cxgb3/l2t.c +++ b/drivers/net/ethernet/chelsio/cxgb3/l2t.c @@ -299,7 +299,7 @@ static inline void reuse_entry(struct l2t_entry *e, struct neighbour *neigh)  }  struct l2t_entry *t3_l2t_get(struct t3cdev *cdev, struct dst_entry *dst, -			     struct net_device *dev) +			     struct net_device *dev, const void *daddr)  {  	struct l2t_entry *e = NULL;  	struct neighbour *neigh; @@ -311,7 +311,7 @@ struct l2t_entry *t3_l2t_get(struct t3cdev *cdev, struct dst_entry *dst,  	int smt_idx;  	rcu_read_lock(); -	neigh = dst_get_neighbour_noref(dst); +	neigh = dst_neigh_lookup(dst, daddr);  	if (!neigh)  		goto done_rcu; @@ -360,6 +360,8 @@ struct l2t_entry *t3_l2t_get(struct t3cdev *cdev, struct dst_entry *dst,  done_unlock:  	write_unlock_bh(&d->lock);  done_rcu: +	if (neigh) +		neigh_release(neigh);  	rcu_read_unlock();  	return e;  } diff --git a/drivers/net/ethernet/chelsio/cxgb3/l2t.h b/drivers/net/ethernet/chelsio/cxgb3/l2t.h index c4e86436975..8cffcdfd567 100644 --- a/drivers/net/ethernet/chelsio/cxgb3/l2t.h +++ b/drivers/net/ethernet/chelsio/cxgb3/l2t.h @@ -110,7 +110,7 @@ static inline void set_arp_failure_handler(struct sk_buff *skb,  void t3_l2e_free(struct l2t_data *d, struct l2t_entry *e);  void t3_l2t_update(struct t3cdev *dev, struct neighbour *neigh);  struct l2t_entry *t3_l2t_get(struct t3cdev *cdev, struct dst_entry *dst, -			     struct net_device *dev); +			     struct net_device *dev, const void *daddr);  int t3_l2t_send_slow(struct t3cdev *dev, struct sk_buff *skb,  		     struct l2t_entry *e);  void t3_l2t_send_event(struct t3cdev *dev, struct l2t_entry *e); diff --git a/drivers/net/ethernet/chelsio/cxgb3/sge.c b/drivers/net/ethernet/chelsio/cxgb3/sge.c index cfb60e1f51d..dd901c5061b 100644 --- a/drivers/net/ethernet/chelsio/cxgb3/sge.c +++ b/drivers/net/ethernet/chelsio/cxgb3/sge.c @@ -2877,7 +2877,7 @@ static void sge_timer_tx(unsigned long data)  	mod_timer(&qs->tx_reclaim_timer, jiffies + next_period);  } -/* +/**   *	sge_timer_rx - perform periodic maintenance of an SGE qset   *	@data: the SGE queue set to maintain   * diff --git a/drivers/net/ethernet/chelsio/cxgb3/t3_hw.c b/drivers/net/ethernet/chelsio/cxgb3/t3_hw.c index 44ac2f40b64..bff8a3cdd3d 100644 --- a/drivers/net/ethernet/chelsio/cxgb3/t3_hw.c +++ b/drivers/net/ethernet/chelsio/cxgb3/t3_hw.c @@ -1076,7 +1076,7 @@ static int t3_flash_erase_sectors(struct adapter *adapter, int start, int end)  	return 0;  } -/* +/**   *	t3_load_fw - download firmware   *	@adapter: the adapter   *	@fw_data: the firmware image to write diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c index e1f96fbb48c..5ed49af23d6 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c @@ -3493,8 +3493,8 @@ static void __devinit cfg_queues(struct adapter *adap)  	 */  	if (n10g)  		q10g = (MAX_ETH_QSETS - (adap->params.nports - n10g)) / n10g; -	if (q10g > num_online_cpus()) -		q10g = num_online_cpus(); +	if (q10g > netif_get_num_default_rss_queues()) +		q10g = netif_get_num_default_rss_queues();  	for_each_port(adap, i) {  		struct port_info *pi = adap2pinfo(adap, i); diff --git a/drivers/net/ethernet/chelsio/cxgb4/sge.c b/drivers/net/ethernet/chelsio/cxgb4/sge.c index e111d974afd..8596acaa402 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/sge.c +++ b/drivers/net/ethernet/chelsio/cxgb4/sge.c @@ -753,7 +753,7 @@ static void write_sgl(const struct sk_buff *skb, struct sge_txq *q,  		end = (void *)q->desc + part1;  	}  	if ((uintptr_t)end & 8)           /* 0-pad to multiple of 16 */ -		*(u64 *)end = 0; +		*end = 0;  }  /** diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c index 32e1dd566a1..fa947dfa4c3 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c +++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c @@ -2010,7 +2010,7 @@ int t4_fwaddrspace_write(struct adapter *adap, unsigned int mbox,  	return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);  } -/* +/**   *     t4_mem_win_read_len - read memory through PCIE memory window   *     @adap: the adapter   *     @addr: address of first byte requested aligned on 32b. diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c b/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c index 25e3308fc9d..9dad56101e2 100644 --- a/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c +++ b/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c @@ -418,7 +418,7 @@ static int fwevtq_handler(struct sge_rspq *rspq, const __be64 *rsp,  		 * restart a TX Ethernet Queue which was stopped for lack of  		 * free TX Queue Descriptors ...  		 */ -		const struct cpl_sge_egr_update *p = (void *)cpl; +		const struct cpl_sge_egr_update *p = cpl;  		unsigned int qid = EGR_QID(be32_to_cpu(p->opcode_qid));  		struct sge *s = &adapter->sge;  		struct sge_txq *tq; diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/sge.c b/drivers/net/ethernet/chelsio/cxgb4vf/sge.c index 0bd585bba39..f2d1ecdcaf9 100644 --- a/drivers/net/ethernet/chelsio/cxgb4vf/sge.c +++ b/drivers/net/ethernet/chelsio/cxgb4vf/sge.c @@ -934,7 +934,7 @@ static void write_sgl(const struct sk_buff *skb, struct sge_txq *tq,  		end = (void *)tq->desc + part1;  	}  	if ((uintptr_t)end & 8)           /* 0-pad to multiple of 16 */ -		*(u64 *)end = 0; +		*end = 0;  }  /** @@ -1323,8 +1323,7 @@ int t4vf_eth_xmit(struct sk_buff *skb, struct net_device *dev)  		 */  		if (unlikely((void *)sgl == (void *)tq->stat)) {  			sgl = (void *)tq->desc; -			end = (void *)((void *)tq->desc + -				       ((void *)end - (void *)tq->stat)); +			end = ((void *)tq->desc + ((void *)end - (void *)tq->stat));  		}  		write_sgl(skb, tq, sgl, end, 0, addr);  |