|
@@ -128,12 +128,12 @@ struct mthca_err_cqe {
|
|
__be32 my_qpn;
|
|
__be32 my_qpn;
|
|
u32 reserved1[3];
|
|
u32 reserved1[3];
|
|
u8 syndrome;
|
|
u8 syndrome;
|
|
- u8 reserved2;
|
|
|
|
|
|
+ u8 vendor_err;
|
|
__be16 db_cnt;
|
|
__be16 db_cnt;
|
|
- u32 reserved3;
|
|
|
|
|
|
+ u32 reserved2;
|
|
__be32 wqe;
|
|
__be32 wqe;
|
|
u8 opcode;
|
|
u8 opcode;
|
|
- u8 reserved4[2];
|
|
|
|
|
|
+ u8 reserved3[2];
|
|
u8 owner;
|
|
u8 owner;
|
|
};
|
|
};
|
|
|
|
|
|
@@ -342,8 +342,8 @@ static int handle_error_cqe(struct mthca_dev *dev, struct mthca_cq *cq,
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
- * For completions in error, only work request ID, status (and
|
|
|
|
- * freed resource count for RD) have to be set.
|
|
|
|
|
|
+ * For completions in error, only work request ID, status, vendor error
|
|
|
|
+ * (and freed resource count for RD) have to be set.
|
|
*/
|
|
*/
|
|
switch (cqe->syndrome) {
|
|
switch (cqe->syndrome) {
|
|
case SYNDROME_LOCAL_LENGTH_ERR:
|
|
case SYNDROME_LOCAL_LENGTH_ERR:
|
|
@@ -405,6 +405,8 @@ static int handle_error_cqe(struct mthca_dev *dev, struct mthca_cq *cq,
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ entry->vendor_err = cqe->vendor_err;
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Mem-free HCAs always generate one CQE per WQE, even in the
|
|
* Mem-free HCAs always generate one CQE per WQE, even in the
|
|
* error case, so we don't have to check the doorbell count, etc.
|
|
* error case, so we don't have to check the doorbell count, etc.
|