else if (ib_cqn_flags & IB_CQ_SOLICITED)
                type = DBR_DBR_TYPE_CQ_ARMSE;
 
+       /* Poll to see if there are missed events */
+       if ((ib_cqn_flags & IB_CQ_REPORT_MISSED_EVENTS) &&
+           !(bnxt_qplib_is_cq_empty(&cq->qplib_cq)))
+               return 1;
+
        bnxt_qplib_req_notify_cq(&cq->qplib_cq, type);
 
        return 0;
 
        return rc;
 }
 
+bool bnxt_qplib_is_cq_empty(struct bnxt_qplib_cq *cq)
+{
+       struct cq_base *hw_cqe, **hw_cqe_ptr;
+       unsigned long flags;
+       u32 sw_cons, raw_cons;
+       bool rc = true;
+
+       spin_lock_irqsave(&cq->hwq.lock, flags);
+       raw_cons = cq->hwq.cons;
+       sw_cons = HWQ_CMP(raw_cons, &cq->hwq);
+       hw_cqe_ptr = (struct cq_base **)cq->hwq.pbl_ptr;
+       hw_cqe = &hw_cqe_ptr[CQE_PG(sw_cons)][CQE_IDX(sw_cons)];
+
+        /* Check for Valid bit. If the CQE is valid, return false */
+       rc = !CQE_CMP_VALID(hw_cqe, raw_cons, cq->hwq.max_elements);
+       spin_unlock_irqrestore(&cq->hwq.lock, flags);
+       return rc;
+}
+
 static int bnxt_qplib_cq_process_res_raweth_qp1(struct bnxt_qplib_cq *cq,
                                                struct cq_res_raweth_qp1 *hwcqe,
                                                struct bnxt_qplib_cqe **pcqe,
 
 int bnxt_qplib_destroy_cq(struct bnxt_qplib_res *res, struct bnxt_qplib_cq *cq);
 int bnxt_qplib_poll_cq(struct bnxt_qplib_cq *cq, struct bnxt_qplib_cqe *cqe,
                       int num, struct bnxt_qplib_qp **qp);
+bool bnxt_qplib_is_cq_empty(struct bnxt_qplib_cq *cq);
 void bnxt_qplib_req_notify_cq(struct bnxt_qplib_cq *cq, u32 arm_type);
 void bnxt_qplib_free_nq(struct bnxt_qplib_nq *nq);
 int bnxt_qplib_alloc_nq(struct pci_dev *pdev, struct bnxt_qplib_nq *nq);