aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDevesh Sharma <devesh.sharma@avagotech.com>2015-05-19 02:02:33 -0400
committerDoug Ledford <dledford@redhat.com>2015-05-18 10:25:24 -0400
commit5e6f9237f8e676e8a9110b4dafed36b1dd0b5d84 (patch)
tree9244dc592e675de1066d9d41a5d35e25b5c5106f
parent314fdf4473bc05fa9a1f33b27b98eb0f0c836f71 (diff)
RDMA/ocrdma: Report EQ full fatal error
Detect when Event Queue (EQ) becomes full and print a warning message. Signed-off-by: Devesh Sharma <devesh.sharma@avagotech.com> Signed-off-by: Selvin Xavier <selvin.xavier@avagotech.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
-rw-r--r--drivers/infiniband/hw/ocrdma/ocrdma_hw.c6
-rw-r--r--drivers/infiniband/hw/ocrdma/ocrdma_sli.h7
2 files changed, 13 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_hw.c b/drivers/infiniband/hw/ocrdma/ocrdma_hw.c
index 3a5ea5afc2a2..65759acb12dc 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma_hw.c
+++ b/drivers/infiniband/hw/ocrdma/ocrdma_hw.c
@@ -933,12 +933,18 @@ static irqreturn_t ocrdma_irq_handler(int irq, void *handle)
933 struct ocrdma_eqe eqe; 933 struct ocrdma_eqe eqe;
934 struct ocrdma_eqe *ptr; 934 struct ocrdma_eqe *ptr;
935 u16 cq_id; 935 u16 cq_id;
936 u8 mcode;
936 int budget = eq->cq_cnt; 937 int budget = eq->cq_cnt;
937 938
938 do { 939 do {
939 ptr = ocrdma_get_eqe(eq); 940 ptr = ocrdma_get_eqe(eq);
940 eqe = *ptr; 941 eqe = *ptr;
941 ocrdma_le32_to_cpu(&eqe, sizeof(eqe)); 942 ocrdma_le32_to_cpu(&eqe, sizeof(eqe));
943 mcode = (eqe.id_valid & OCRDMA_EQE_MAJOR_CODE_MASK)
944 >> OCRDMA_EQE_MAJOR_CODE_SHIFT;
945 if (mcode == OCRDMA_MAJOR_CODE_SENTINAL)
946 pr_err("EQ full on eqid = 0x%x, eqe = 0x%x\n",
947 eq->q.id, eqe.id_valid);
942 if ((eqe.id_valid & OCRDMA_EQE_VALID_MASK) == 0) 948 if ((eqe.id_valid & OCRDMA_EQE_VALID_MASK) == 0)
943 break; 949 break;
944 950
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_sli.h b/drivers/infiniband/hw/ocrdma/ocrdma_sli.h
index 243c87c8bd65..baf9b8a0f278 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma_sli.h
+++ b/drivers/infiniband/hw/ocrdma/ocrdma_sli.h
@@ -1624,12 +1624,19 @@ struct ocrdma_delete_ah_tbl_rsp {
1624enum { 1624enum {
1625 OCRDMA_EQE_VALID_SHIFT = 0, 1625 OCRDMA_EQE_VALID_SHIFT = 0,
1626 OCRDMA_EQE_VALID_MASK = BIT(0), 1626 OCRDMA_EQE_VALID_MASK = BIT(0),
1627 OCRDMA_EQE_MAJOR_CODE_MASK = 0x0E,
1628 OCRDMA_EQE_MAJOR_CODE_SHIFT = 0x01,
1627 OCRDMA_EQE_FOR_CQE_MASK = 0xFFFE, 1629 OCRDMA_EQE_FOR_CQE_MASK = 0xFFFE,
1628 OCRDMA_EQE_RESOURCE_ID_SHIFT = 16, 1630 OCRDMA_EQE_RESOURCE_ID_SHIFT = 16,
1629 OCRDMA_EQE_RESOURCE_ID_MASK = 0xFFFF << 1631 OCRDMA_EQE_RESOURCE_ID_MASK = 0xFFFF <<
1630 OCRDMA_EQE_RESOURCE_ID_SHIFT, 1632 OCRDMA_EQE_RESOURCE_ID_SHIFT,
1631}; 1633};
1632 1634
1635enum major_code {
1636 OCRDMA_MAJOR_CODE_COMPLETION = 0x00,
1637 OCRDMA_MAJOR_CODE_SENTINAL = 0x01
1638};
1639
1633struct ocrdma_eqe { 1640struct ocrdma_eqe {
1634 u32 id_valid; 1641 u32 id_valid;
1635}; 1642};