diff options
author | Alexander Schmidt <alexs@linux.vnet.ibm.com> | 2008-09-20 20:05:21 -0700 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2008-09-20 20:05:21 -0700 |
commit | b9012e0a4255c93e1d81f1ccee591de6414b5955 (patch) | |
tree | f96df62a968eab98722256251914070fa7bb0c2c /drivers/infiniband/hw/ehca/ehca_cq.c | |
parent | 9824b8f11373b0df806c135a342da9319ef1d893 (diff) | |
download | linux-b9012e0a4255c93e1d81f1ccee591de6414b5955.tar.gz linux-b9012e0a4255c93e1d81f1ccee591de6414b5955.tar.bz2 linux-b9012e0a4255c93e1d81f1ccee591de6414b5955.zip |
IB/ehca: Generate flush status CQ entries
When a QP goes into error state, it is required that CQ entries with a
flush error status are delivered to the application for any
outstanding work requests. eHCA does not do this in hardware, so this
patch adds software flush CQE generation to the ehca driver.
Whenever a QP gets into error state, it is added to the QP error list
of its respective CQ. If the error QP list of a CQ is not empty,
poll_cq() generates flush CQEs before polling the actual CQ.
Signed-off-by: Alexander Schmidt <alexs@linux.vnet.ibm.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/hw/ehca/ehca_cq.c')
-rw-r--r-- | drivers/infiniband/hw/ehca/ehca_cq.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/ehca/ehca_cq.c b/drivers/infiniband/hw/ehca/ehca_cq.c index 5540b276a33c..33647a95eb9a 100644 --- a/drivers/infiniband/hw/ehca/ehca_cq.c +++ b/drivers/infiniband/hw/ehca/ehca_cq.c @@ -276,6 +276,9 @@ struct ib_cq *ehca_create_cq(struct ib_device *device, int cqe, int comp_vector, for (i = 0; i < QP_HASHTAB_LEN; i++) INIT_HLIST_HEAD(&my_cq->qp_hashtab[i]); + INIT_LIST_HEAD(&my_cq->sqp_err_list); + INIT_LIST_HEAD(&my_cq->rqp_err_list); + if (context) { struct ipz_queue *ipz_queue = &my_cq->ipz_queue; struct ehca_create_cq_resp resp; |