diff options
Diffstat (limited to 'drivers/infiniband/hw/irdma')
| -rw-r--r-- | drivers/infiniband/hw/irdma/uk.c | 4 | ||||
| -rw-r--r-- | drivers/infiniband/hw/irdma/verbs.c | 8 | ||||
| -rw-r--r-- | drivers/infiniband/hw/irdma/ws.c | 13 | 
3 files changed, 15 insertions, 10 deletions
| diff --git a/drivers/infiniband/hw/irdma/uk.c b/drivers/infiniband/hw/irdma/uk.c index 5fb92de1f015..9b544a3b1288 100644 --- a/drivers/infiniband/hw/irdma/uk.c +++ b/drivers/infiniband/hw/irdma/uk.c @@ -1092,12 +1092,12 @@ irdma_uk_cq_poll_cmpl(struct irdma_cq_uk *cq, struct irdma_cq_poll_info *info)  		if (cq->avoid_mem_cflct) {  			ext_cqe = (__le64 *)((u8 *)cqe + 32);  			get_64bit_val(ext_cqe, 24, &qword7); -			polarity = (u8)FIELD_GET(IRDMA_CQ_VALID, qword3); +			polarity = (u8)FIELD_GET(IRDMA_CQ_VALID, qword7);  		} else {  			peek_head = (cq->cq_ring.head + 1) % cq->cq_ring.size;  			ext_cqe = cq->cq_base[peek_head].buf;  			get_64bit_val(ext_cqe, 24, &qword7); -			polarity = (u8)FIELD_GET(IRDMA_CQ_VALID, qword3); +			polarity = (u8)FIELD_GET(IRDMA_CQ_VALID, qword7);  			if (!peek_head)  				polarity ^= 1;  		} diff --git a/drivers/infiniband/hw/irdma/verbs.c b/drivers/infiniband/hw/irdma/verbs.c index 7110ebf834f9..102dc9342f2a 100644 --- a/drivers/infiniband/hw/irdma/verbs.c +++ b/drivers/infiniband/hw/irdma/verbs.c @@ -3399,9 +3399,13 @@ static void irdma_process_cqe(struct ib_wc *entry,  		}  		if (cq_poll_info->ud_vlan_valid) { -			entry->vlan_id = cq_poll_info->ud_vlan & VLAN_VID_MASK; -			entry->wc_flags |= IB_WC_WITH_VLAN; +			u16 vlan = cq_poll_info->ud_vlan & VLAN_VID_MASK; +  			entry->sl = cq_poll_info->ud_vlan >> VLAN_PRIO_SHIFT; +			if (vlan) { +				entry->vlan_id = vlan; +				entry->wc_flags |= IB_WC_WITH_VLAN; +			}  		} else {  			entry->sl = 0;  		} diff --git a/drivers/infiniband/hw/irdma/ws.c b/drivers/infiniband/hw/irdma/ws.c index b68c575eb78e..b0d6ee0739f5 100644 --- a/drivers/infiniband/hw/irdma/ws.c +++ b/drivers/infiniband/hw/irdma/ws.c @@ -330,8 +330,10 @@ enum irdma_status_code irdma_ws_add(struct irdma_sc_vsi *vsi, u8 user_pri)  		tc_node->enable = true;  		ret = irdma_ws_cqp_cmd(vsi, tc_node, IRDMA_OP_WS_MODIFY_NODE); -		if (ret) +		if (ret) { +			vsi->unregister_qset(vsi, tc_node);  			goto reg_err; +		}  	}  	ibdev_dbg(to_ibdev(vsi->dev),  		  "WS: Using node %d which represents VSI %d TC %d\n", @@ -350,6 +352,10 @@ enum irdma_status_code irdma_ws_add(struct irdma_sc_vsi *vsi, u8 user_pri)  	}  	goto exit; +reg_err: +	irdma_ws_cqp_cmd(vsi, tc_node, IRDMA_OP_WS_DELETE_NODE); +	list_del(&tc_node->siblings); +	irdma_free_node(vsi, tc_node);  leaf_add_err:  	if (list_empty(&vsi_node->child_list_head)) {  		if (irdma_ws_cqp_cmd(vsi, vsi_node, IRDMA_OP_WS_DELETE_NODE)) @@ -369,11 +375,6 @@ vsi_add_err:  exit:  	mutex_unlock(&vsi->dev->ws_mutex);  	return ret; - -reg_err: -	mutex_unlock(&vsi->dev->ws_mutex); -	irdma_ws_remove(vsi, user_pri); -	return ret;  }  /** |