Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F103036514
D41593.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
D41593.diff
View Options
diff --git a/contrib/ofed/libirdma/irdma_umain.h b/contrib/ofed/libirdma/irdma_umain.h
--- a/contrib/ofed/libirdma/irdma_umain.h
+++ b/contrib/ofed/libirdma/irdma_umain.h
@@ -109,11 +109,6 @@
};
};
-struct irdma_cmpl_gen {
- LIST_ENTRY(irdma_cmpl_gen) list;
- struct irdma_cq_poll_info cpi;
-};
-
struct irdma_ucq {
struct verbs_cq verbs_cq;
struct verbs_mr vmr;
@@ -130,7 +125,6 @@
struct list_head resize_list;
/* for extended CQ completion fields */
struct irdma_cq_poll_info cur_cqe;
- struct list_head_cmpl cmpl_generated;
};
struct irdma_uqp {
@@ -150,7 +144,6 @@
struct irdma_qp_uk qp;
enum ibv_qp_type qp_type;
struct irdma_sge *recv_sges;
- pthread_t flush_thread;
};
/* irdma_uverbs.c */
@@ -207,5 +200,4 @@
void irdma_set_hw_attrs(struct irdma_hw_attrs *attrs);
void *irdma_mmap(int fd, off_t offset);
void irdma_munmap(void *map);
-void *irdma_flush_thread(void *arg);
#endif /* IRDMA_UMAIN_H */
diff --git a/contrib/ofed/libirdma/irdma_uverbs.c b/contrib/ofed/libirdma/irdma_uverbs.c
--- a/contrib/ofed/libirdma/irdma_uverbs.c
+++ b/contrib/ofed/libirdma/irdma_uverbs.c
@@ -459,7 +459,6 @@
info.cq_size = get_cq_size(attr_ex->cqe, hw_rev, cqe_64byte_ena);
iwucq->comp_vector = attr_ex->comp_vector;
LIST_INIT(&iwucq->resize_list);
- LIST_INIT(&iwucq->cmpl_generated);
total_size = get_cq_total_bytes(info.cq_size, cqe_64byte_ena);
cq_pages = total_size >> IRDMA_HW_PAGE_SHIFT;
@@ -615,142 +614,6 @@
return cq_cnt;
}
-static void
-irdma_remove_cmpls_list(struct irdma_ucq *iwucq)
-{
- struct irdma_cmpl_gen *cmpl_node, *next;
-
- LIST_FOREACH_SAFE(cmpl_node, &iwucq->cmpl_generated, list, next) {
- LIST_REMOVE(cmpl_node, list);
- free(cmpl_node);
- }
-}
-
-static int
-irdma_generated_cmpls(struct irdma_ucq *iwucq, struct irdma_cq_poll_info *cq_poll_info)
-{
- struct irdma_cmpl_gen *cmpl;
-
- if (!iwucq || LIST_EMPTY(&iwucq->cmpl_generated))
- return ENOENT;
- cmpl = LIST_FIRST(&iwucq->cmpl_generated);
- LIST_REMOVE(cmpl, list);
- memcpy(cq_poll_info, &cmpl->cpi, sizeof(*cq_poll_info));
-
- free(cmpl);
-
- return 0;
-}
-
-/**
- * irdma_set_cpi_common_values - fill in values for polling info struct
- * @cpi: resulting structure of cq_poll_info type
- * @qp: QPair
- * @qp_num: id of the QP
- */
-static void
-irdma_set_cpi_common_values(struct irdma_cq_poll_info *cpi,
- struct irdma_qp_uk *qp, __u32 qp_num)
-{
- cpi->comp_status = IRDMA_COMPL_STATUS_FLUSHED;
- cpi->error = 1;
- cpi->major_err = IRDMA_FLUSH_MAJOR_ERR;
- cpi->minor_err = FLUSH_GENERAL_ERR;
- cpi->qp_handle = (irdma_qp_handle) (uintptr_t)qp;
- cpi->qp_id = qp_num;
-}
-
-static bool
-irdma_cq_empty(struct irdma_ucq *iwucq)
-{
- struct irdma_cq_uk *ukcq;
- __u64 qword3;
- __le64 *cqe;
- __u8 polarity;
-
- ukcq = &iwucq->cq;
- cqe = IRDMA_GET_CURRENT_CQ_ELEM(ukcq);
- get_64bit_val(cqe, 24, &qword3);
- polarity = (__u8) FIELD_GET(IRDMA_CQ_VALID, qword3);
-
- return polarity != ukcq->polarity;
-}
-
-/**
- * irdma_generate_flush_completions - generate completion from WRs
- * @iwuqp: pointer to QP
- */
-static void
-irdma_generate_flush_completions(struct irdma_uqp *iwuqp)
-{
- struct irdma_qp_uk *qp = &iwuqp->qp;
- struct irdma_ring *sq_ring = &qp->sq_ring;
- struct irdma_ring *rq_ring = &qp->rq_ring;
- struct irdma_cmpl_gen *cmpl;
- __le64 *sw_wqe;
- __u64 wqe_qword;
- __u32 wqe_idx;
-
- if (pthread_spin_lock(&iwuqp->send_cq->lock))
- return;
- if (irdma_cq_empty(iwuqp->send_cq)) {
- while (IRDMA_RING_MORE_WORK(*sq_ring)) {
- cmpl = malloc(sizeof(*cmpl));
- if (!cmpl) {
- pthread_spin_unlock(&iwuqp->send_cq->lock);
- return;
- }
-
- wqe_idx = sq_ring->tail;
- irdma_set_cpi_common_values(&cmpl->cpi, qp, qp->qp_id);
- cmpl->cpi.wr_id = qp->sq_wrtrk_array[wqe_idx].wrid;
- sw_wqe = qp->sq_base[wqe_idx].elem;
- get_64bit_val(sw_wqe, 24, &wqe_qword);
- cmpl->cpi.op_type = (__u8) FIELD_GET(IRDMAQPSQ_OPCODE, wqe_qword);
- /* remove the SQ WR by moving SQ tail */
- IRDMA_RING_SET_TAIL(*sq_ring, sq_ring->tail + qp->sq_wrtrk_array[sq_ring->tail].quanta);
- LIST_INSERT_HEAD(&iwuqp->send_cq->cmpl_generated, cmpl, list);
- }
- }
- pthread_spin_unlock(&iwuqp->send_cq->lock);
- if (pthread_spin_lock(&iwuqp->recv_cq->lock))
- return;
- if (irdma_cq_empty(iwuqp->recv_cq)) {
- while (IRDMA_RING_MORE_WORK(*rq_ring)) {
- cmpl = malloc(sizeof(*cmpl));
- if (!cmpl) {
- pthread_spin_unlock(&iwuqp->recv_cq->lock);
- return;
- }
-
- wqe_idx = rq_ring->tail;
- irdma_set_cpi_common_values(&cmpl->cpi, qp, qp->qp_id);
- cmpl->cpi.wr_id = qp->rq_wrid_array[wqe_idx];
- cmpl->cpi.op_type = IRDMA_OP_TYPE_REC;
- /* remove the RQ WR by moving RQ tail */
- IRDMA_RING_SET_TAIL(*rq_ring, rq_ring->tail + 1);
- LIST_INSERT_HEAD(&iwuqp->recv_cq->cmpl_generated, cmpl, list);
- }
- }
- pthread_spin_unlock(&iwuqp->recv_cq->lock);
-}
-
-void *
-irdma_flush_thread(void *arg)
-{
- __u8 i = 5;
- struct irdma_uqp *iwuqp = arg;
-
- while (--i) {
- if (pthread_spin_lock(&iwuqp->lock))
- break;
- irdma_generate_flush_completions(arg);
- pthread_spin_unlock(&iwuqp->lock);
- sleep(1);
- }
- pthread_exit(NULL);
-}
-
/**
* irdma_udestroy_cq - destroys cq
* @cq: ptr to cq to be destroyed
@@ -771,8 +634,6 @@
if (ret)
goto err;
- if (!LIST_EMPTY(&iwucq->cmpl_generated))
- irdma_remove_cmpls_list(iwucq);
irdma_process_resize_list(iwucq, NULL);
ret = ibv_cmd_destroy_cq(cq);
if (ret)
@@ -1016,15 +877,6 @@
while (npolled < num_entries) {
ret = irdma_poll_one(&iwucq->cq, cur_cqe,
entry ? entry + npolled : NULL);
- if (ret == ENOENT) {
- ret = irdma_generated_cmpls(iwucq, cur_cqe);
- if (!ret) {
- if (entry)
- irdma_process_cqe(entry + npolled, cur_cqe);
- else
- irdma_process_cqe_ext(cur_cqe);
- }
- }
if (!ret) {
++npolled;
cq_new_cqe = true;
@@ -1710,14 +1562,7 @@
return ret;
} else {
- int ret;
-
- ret = ibv_cmd_modify_qp(qp, attr, attr_mask, &cmd, sizeof(cmd));
- if (ret)
- return ret;
- if (attr_mask & IBV_QP_STATE && attr->qp_state == IBV_QPS_ERR)
- pthread_create(&iwuqp->flush_thread, NULL, irdma_flush_thread, iwuqp);
- return 0;
+ return ibv_cmd_modify_qp(qp, attr, attr_mask, &cmd, sizeof(cmd));
}
}
@@ -1770,10 +1615,6 @@
int ret;
iwuqp = container_of(qp, struct irdma_uqp, ibv_qp);
- if (iwuqp->flush_thread) {
- pthread_cancel(iwuqp->flush_thread);
- pthread_join(iwuqp->flush_thread, NULL);
- }
ret = pthread_spin_destroy(&iwuqp->lock);
if (ret)
goto err;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Nov 21, 2:53 AM (21 h, 9 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14724841
Default Alt Text
D41593.diff (6 KB)
Attached To
Mode
D41593: irdma(4): remove artificial completion generator
Attached
Detach File
Event Timeline
Log In to Comment