aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband
diff options
context:
space:
mode:
authorDon Wood <donald.e.wood@intel.com>2009-09-05 23:36:38 -0400
committerRoland Dreier <rolandd@cisco.com>2009-09-05 23:36:38 -0400
commit3c28b4457a4cf95e982ca13578a5613a11009394 (patch)
tree91684f41a0d2740b69f7a070f310e1b93238ef10 /drivers/infiniband
parent5ee21fe0eaf68fb840f442131ab7addced1a31c3 (diff)
RDMA/nes: Add CQ error handling
CQ errors are not being handled correctly. Put in the the upcall for CQ errors. Signed-off-by: Don Wood <donald.e.wood@intel.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r--drivers/infiniband/hw/nes/nes_hw.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c
index 4a84d02ece06..2a0c5a18e139 100644
--- a/drivers/infiniband/hw/nes/nes_hw.c
+++ b/drivers/infiniband/hw/nes/nes_hw.c
@@ -2913,6 +2913,8 @@ static void nes_process_iwarp_aeqe(struct nes_device *nesdev,
2913 u64 aeqe_context = 0; 2913 u64 aeqe_context = 0;
2914 unsigned long flags; 2914 unsigned long flags;
2915 struct nes_qp *nesqp; 2915 struct nes_qp *nesqp;
2916 struct nes_hw_cq *hw_cq;
2917 struct nes_cq *nescq;
2916 int resource_allocated; 2918 int resource_allocated;
2917 /* struct iw_cm_id *cm_id; */ 2919 /* struct iw_cm_id *cm_id; */
2918 struct nes_adapter *nesadapter = nesdev->nesadapter; 2920 struct nes_adapter *nesadapter = nesdev->nesadapter;
@@ -3153,6 +3155,16 @@ static void nes_process_iwarp_aeqe(struct nes_device *nesdev,
3153 if (resource_allocated) { 3155 if (resource_allocated) {
3154 printk(KERN_ERR PFX "%s: Processing an NES_AEQE_AEID_CQ_OPERATION_ERROR event on CQ%u\n", 3156 printk(KERN_ERR PFX "%s: Processing an NES_AEQE_AEID_CQ_OPERATION_ERROR event on CQ%u\n",
3155 __func__, le32_to_cpu(aeqe->aeqe_words[NES_AEQE_COMP_QP_CQ_ID_IDX])); 3157 __func__, le32_to_cpu(aeqe->aeqe_words[NES_AEQE_COMP_QP_CQ_ID_IDX]));
3158 hw_cq = (struct nes_hw_cq *)(unsigned long)context;
3159 if (hw_cq) {
3160 nescq = container_of(hw_cq, struct nes_cq, hw_cq);
3161 if (nescq->ibcq.event_handler) {
3162 ibevent.device = nescq->ibcq.device;
3163 ibevent.event = IB_EVENT_CQ_ERR;
3164 ibevent.element.cq = &nescq->ibcq;
3165 nescq->ibcq.event_handler(&ibevent, nescq->ibcq.cq_context);
3166 }
3167 }
3156 } 3168 }
3157 break; 3169 break;
3158 case NES_AEQE_AEID_DDP_UBE_DDP_MESSAGE_TOO_LONG_FOR_AVAILABLE_BUFFER: 3170 case NES_AEQE_AEID_DDP_UBE_DDP_MESSAGE_TOO_LONG_FOR_AVAILABLE_BUFFER: