IB/mthca: Fix PRM compliance problem in atomic-send completions
According to the Tavor and Arbel programmer's reference manuals, the number of bytes transferred is not provided in the byte_cnt field of the CQ entry for atomic operation completions. For atomic operations, the number of bytes transferred is always 8 (when the status is "success"), and this constant value should always be used by the driver in the ib_wc entry returned, rather than using the CQE. Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
committed by
Roland Dreier
parent
0cefcf0bbc
commit
98714cb161
@@ -54,6 +54,10 @@ enum {
|
|||||||
MTHCA_CQ_ENTRY_SIZE = 0x20
|
MTHCA_CQ_ENTRY_SIZE = 0x20
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
MTHCA_ATOMIC_BYTE_LEN = 8
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Must be packed because start is 64 bits but only aligned to 32 bits.
|
* Must be packed because start is 64 bits but only aligned to 32 bits.
|
||||||
*/
|
*/
|
||||||
@@ -599,11 +603,11 @@ static inline int mthca_poll_one(struct mthca_dev *dev,
|
|||||||
break;
|
break;
|
||||||
case MTHCA_OPCODE_ATOMIC_CS:
|
case MTHCA_OPCODE_ATOMIC_CS:
|
||||||
entry->opcode = IB_WC_COMP_SWAP;
|
entry->opcode = IB_WC_COMP_SWAP;
|
||||||
entry->byte_len = be32_to_cpu(cqe->byte_cnt);
|
entry->byte_len = MTHCA_ATOMIC_BYTE_LEN;
|
||||||
break;
|
break;
|
||||||
case MTHCA_OPCODE_ATOMIC_FA:
|
case MTHCA_OPCODE_ATOMIC_FA:
|
||||||
entry->opcode = IB_WC_FETCH_ADD;
|
entry->opcode = IB_WC_FETCH_ADD;
|
||||||
entry->byte_len = be32_to_cpu(cqe->byte_cnt);
|
entry->byte_len = MTHCA_ATOMIC_BYTE_LEN;
|
||||||
break;
|
break;
|
||||||
case MTHCA_OPCODE_BIND_MW:
|
case MTHCA_OPCODE_BIND_MW:
|
||||||
entry->opcode = IB_WC_BIND_MW;
|
entry->opcode = IB_WC_BIND_MW;
|
||||||
|
Reference in New Issue
Block a user