RDMA/ocrdma: EQ full catastrophe avoidance
authorDevesh Sharma <devesh.sharma@emulex.com>
Tue, 4 Feb 2014 06:26:54 +0000 (11:56 +0530)
committerRoland Dreier <roland@purestorage.com>
Thu, 3 Apr 2014 15:29:34 +0000 (08:29 -0700)
commitea61762679cd4d409dcaa6f502f190f4c8156d09
tree5827d101e41788a4ff93c2368eaa4d3ec5ae337a
parentbc1b04ab34a1485339571242cb0fbad823835685
RDMA/ocrdma: EQ full catastrophe avoidance

Stale entries in the CQ being destroyed causes hardware to generate
EQEs indefinitely for a given CQ.  Thus causing uncontrolled execution
of irq_handler.  This patch fixes this using following sementics:

    * irq_handler will ring EQ doorbell atleast once and implement budgeting scheme.
    * cq_destroy will count number of valid entires during destroy and ring
      cq-db so that hardware does not generate uncontrolled EQE.
    * cq_destroy will synchronize with last running irq_handler instance.
    * arm_cq will always defer arming CQ till poll_cq, except for the first arm_cq call.
    * poll_cq will always ring cq-db with arm=SET if arm_cq was called prior to enter poll_cq.
    * poll_cq will always ring cq-db with arm=UNSET if arm_cq was not called prior to enter poll_cq.

Signed-off-by: Devesh Sharma <devesh.sharma@emulex.com>
Signed-off-by: Selvin Xavier <selvin.xavier@emulex.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
drivers/infiniband/hw/ocrdma/ocrdma.h
drivers/infiniband/hw/ocrdma/ocrdma_hw.c
drivers/infiniband/hw/ocrdma/ocrdma_hw.h
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c