Skip to content

Commit

Permalink
RDMA/cxgb3: Support for new abort logic
Browse files Browse the repository at this point in the history
The HW now posts 2 ABORT_RPL and/or PEER_ABORT_REQ messages.  We need
to handle them by silenty dropping the 1st but mark that we're ready
for the final message.  This plugs some close races between the uP and
HW.  Also update the minimum required firmware version.

Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
  • Loading branch information
Steve Wise authored and Roland Dreier committed May 7, 2007
1 parent 60be4b5 commit aff9e39
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 2 deletions.
18 changes: 18 additions & 0 deletions drivers/infiniband/hw/cxgb3/iwch_cm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1109,6 +1109,15 @@ static int abort_rpl(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)

PDBG("%s ep %p\n", __FUNCTION__, ep);

/*
* We get 2 abort replies from the HW. The first one must
* be ignored except for scribbling that we need one more.
*/
if (!(ep->flags & ABORT_REQ_IN_PROGRESS)) {
ep->flags |= ABORT_REQ_IN_PROGRESS;
return CPL_RET_BUF_DONE;
}

close_complete_upcall(ep);
state_set(&ep->com, DEAD);
release_ep_resources(ep);
Expand Down Expand Up @@ -1476,6 +1485,15 @@ static int peer_abort(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
int ret;
int state;

/*
* We get 2 peer aborts from the HW. The first one must
* be ignored except for scribbling that we need one more.
*/
if (!(ep->flags & PEER_ABORT_IN_PROGRESS)) {
ep->flags |= PEER_ABORT_IN_PROGRESS;
return CPL_RET_BUF_DONE;
}

if (is_neg_adv_abort(req->status)) {
PDBG("%s neg_adv_abort ep %p tid %d\n", __FUNCTION__, ep,
ep->hwtid);
Expand Down
6 changes: 6 additions & 0 deletions drivers/infiniband/hw/cxgb3/iwch_cm.h
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,11 @@ enum iwch_ep_state {
DEAD,
};

enum iwch_ep_flags {
PEER_ABORT_IN_PROGRESS = (1 << 0),
ABORT_REQ_IN_PROGRESS = (1 << 1),
};

struct iwch_ep_common {
struct iw_cm_id *cm_id;
struct iwch_qp *qp;
Expand Down Expand Up @@ -181,6 +186,7 @@ struct iwch_ep {
u16 plen;
u32 ird;
u32 ord;
u32 flags;
};

static inline struct iwch_ep *to_ep(struct iw_cm_id *cm_id)
Expand Down
4 changes: 2 additions & 2 deletions drivers/net/cxgb3/version.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
#define DRV_VERSION "1.0-ko"

/* Firmware version */
#define FW_VERSION_MAJOR 3
#define FW_VERSION_MINOR 3
#define FW_VERSION_MAJOR 4
#define FW_VERSION_MINOR 0
#define FW_VERSION_MICRO 0
#endif /* __CHELSIO_VERSION_H */

0 comments on commit aff9e39

Please sign in to comment.