diff options
Diffstat (limited to 'drivers/infiniband/hw')
| -rw-r--r-- | drivers/infiniband/hw/cxgb4/cm.c | 3 | ||||
| -rw-r--r-- | drivers/infiniband/hw/hfi1/affinity.c | 21 | ||||
| -rw-r--r-- | drivers/infiniband/hw/hfi1/hfi.h | 1 | ||||
| -rw-r--r-- | drivers/infiniband/hw/hfi1/init.c | 10 | ||||
| -rw-r--r-- | drivers/infiniband/hw/hfi1/netdev_rx.c | 3 | ||||
| -rw-r--r-- | drivers/infiniband/hw/qedr/verbs.c | 3 | 
6 files changed, 20 insertions, 21 deletions
| diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c index 81903749d241..e42c812e74c3 100644 --- a/drivers/infiniband/hw/cxgb4/cm.c +++ b/drivers/infiniband/hw/cxgb4/cm.c @@ -3616,7 +3616,8 @@ int c4iw_destroy_listen(struct iw_cm_id *cm_id)  		c4iw_init_wr_wait(ep->com.wr_waitp);  		err = cxgb4_remove_server(  				ep->com.dev->rdev.lldi.ports[0], ep->stid, -				ep->com.dev->rdev.lldi.rxq_ids[0], true); +				ep->com.dev->rdev.lldi.rxq_ids[0], +				ep->com.local_addr.ss_family == AF_INET6);  		if (err)  			goto done;  		err = c4iw_wait_for_reply(&ep->com.dev->rdev, ep->com.wr_waitp, diff --git a/drivers/infiniband/hw/hfi1/affinity.c b/drivers/infiniband/hw/hfi1/affinity.c index 2a91b8d95e12..04b1e8f021f6 100644 --- a/drivers/infiniband/hw/hfi1/affinity.c +++ b/drivers/infiniband/hw/hfi1/affinity.c @@ -632,22 +632,11 @@ static void _dev_comp_vect_cpu_mask_clean_up(struct hfi1_devdata *dd,   */  int hfi1_dev_affinity_init(struct hfi1_devdata *dd)  { -	int node = pcibus_to_node(dd->pcidev->bus);  	struct hfi1_affinity_node *entry;  	const struct cpumask *local_mask;  	int curr_cpu, possible, i, ret;  	bool new_entry = false; -	/* -	 * If the BIOS does not have the NUMA node information set, select -	 * NUMA 0 so we get consistent performance. -	 */ -	if (node < 0) { -		dd_dev_err(dd, "Invalid PCI NUMA node. Performance may be affected\n"); -		node = 0; -	} -	dd->node = node; -  	local_mask = cpumask_of_node(dd->node);  	if (cpumask_first(local_mask) >= nr_cpu_ids)  		local_mask = topology_core_cpumask(0); @@ -660,7 +649,7 @@ int hfi1_dev_affinity_init(struct hfi1_devdata *dd)  	 * create an entry in the global affinity structure and initialize it.  	 */  	if (!entry) { -		entry = node_affinity_allocate(node); +		entry = node_affinity_allocate(dd->node);  		if (!entry) {  			dd_dev_err(dd,  				   "Unable to allocate global affinity node\n"); @@ -751,6 +740,7 @@ int hfi1_dev_affinity_init(struct hfi1_devdata *dd)  	if (new_entry)  		node_affinity_add_tail(entry); +	dd->affinity_entry = entry;  	mutex_unlock(&node_affinity.lock);  	return 0; @@ -766,10 +756,9 @@ void hfi1_dev_affinity_clean_up(struct hfi1_devdata *dd)  {  	struct hfi1_affinity_node *entry; -	if (dd->node < 0) -		return; -  	mutex_lock(&node_affinity.lock); +	if (!dd->affinity_entry) +		goto unlock;  	entry = node_affinity_lookup(dd->node);  	if (!entry)  		goto unlock; @@ -780,8 +769,8 @@ void hfi1_dev_affinity_clean_up(struct hfi1_devdata *dd)  	 */  	_dev_comp_vect_cpu_mask_clean_up(dd, entry);  unlock: +	dd->affinity_entry = NULL;  	mutex_unlock(&node_affinity.lock); -	dd->node = NUMA_NO_NODE;  }  /* diff --git a/drivers/infiniband/hw/hfi1/hfi.h b/drivers/infiniband/hw/hfi1/hfi.h index e09e8244a94c..2a9a040569eb 100644 --- a/drivers/infiniband/hw/hfi1/hfi.h +++ b/drivers/infiniband/hw/hfi1/hfi.h @@ -1409,6 +1409,7 @@ struct hfi1_devdata {  	spinlock_t irq_src_lock;  	int vnic_num_vports;  	struct net_device *dummy_netdev; +	struct hfi1_affinity_node *affinity_entry;  	/* Keeps track of IPoIB RSM rule users */  	atomic_t ipoib_rsm_usr_num; diff --git a/drivers/infiniband/hw/hfi1/init.c b/drivers/infiniband/hw/hfi1/init.c index cb7ad1288821..786c6316273f 100644 --- a/drivers/infiniband/hw/hfi1/init.c +++ b/drivers/infiniband/hw/hfi1/init.c @@ -1277,7 +1277,6 @@ static struct hfi1_devdata *hfi1_alloc_devdata(struct pci_dev *pdev,  	dd->pport = (struct hfi1_pportdata *)(dd + 1);  	dd->pcidev = pdev;  	pci_set_drvdata(pdev, dd); -	dd->node = NUMA_NO_NODE;  	ret = xa_alloc_irq(&hfi1_dev_table, &dd->unit, dd, xa_limit_32b,  			GFP_KERNEL); @@ -1287,6 +1286,15 @@ static struct hfi1_devdata *hfi1_alloc_devdata(struct pci_dev *pdev,  		goto bail;  	}  	rvt_set_ibdev_name(&dd->verbs_dev.rdi, "%s_%d", class_name(), dd->unit); +	/* +	 * If the BIOS does not have the NUMA node information set, select +	 * NUMA 0 so we get consistent performance. +	 */ +	dd->node = pcibus_to_node(pdev->bus); +	if (dd->node == NUMA_NO_NODE) { +		dd_dev_err(dd, "Invalid PCI NUMA node. Performance may be affected\n"); +		dd->node = 0; +	}  	/*  	 * Initialize all locks for the device. This needs to be as early as diff --git a/drivers/infiniband/hw/hfi1/netdev_rx.c b/drivers/infiniband/hw/hfi1/netdev_rx.c index 1fb6e1a0e4e1..1bcab992ac26 100644 --- a/drivers/infiniband/hw/hfi1/netdev_rx.c +++ b/drivers/infiniband/hw/hfi1/netdev_rx.c @@ -173,8 +173,7 @@ u32 hfi1_num_netdev_contexts(struct hfi1_devdata *dd, u32 available_contexts,  		return 0;  	} -	cpumask_and(node_cpu_mask, cpu_mask, -		    cpumask_of_node(pcibus_to_node(dd->pcidev->bus))); +	cpumask_and(node_cpu_mask, cpu_mask, cpumask_of_node(dd->node));  	available_cpus = cpumask_weight(node_cpu_mask); diff --git a/drivers/infiniband/hw/qedr/verbs.c b/drivers/infiniband/hw/qedr/verbs.c index 0eb6a7a618e0..9ea542270ed4 100644 --- a/drivers/infiniband/hw/qedr/verbs.c +++ b/drivers/infiniband/hw/qedr/verbs.c @@ -1244,7 +1244,8 @@ static int qedr_check_qp_attrs(struct ib_pd *ibpd, struct qedr_dev *dev,  	 * TGT QP isn't associated with RQ/SQ  	 */  	if ((attrs->qp_type != IB_QPT_GSI) && (dev->gsi_qp_created) && -	    (attrs->qp_type != IB_QPT_XRC_TGT)) { +	    (attrs->qp_type != IB_QPT_XRC_TGT) && +	    (attrs->qp_type != IB_QPT_XRC_INI)) {  		struct qedr_cq *send_cq = get_qedr_cq(attrs->send_cq);  		struct qedr_cq *recv_cq = get_qedr_cq(attrs->recv_cq); |